blob: 2849efbe01c1271969433a22157515b8f5dcc43e [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{
Chia-I Wub21a51a2015-10-26 20:33:12 +0800450 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600451 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;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600472 if(enumerator & VK_QUEUE_DMA_BIT)
473 {
474 strings.push_back("VK_QUEUE_DMA_BIT");
475 }
476 if(enumerator & VK_QUEUE_COMPUTE_BIT)
477 {
478 strings.push_back("VK_QUEUE_COMPUTE_BIT");
479 }
480 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
481 {
482 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
483 }
484 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
485 {
486 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
487 }
488
489 std::string enumeratorString;
490 for(auto const& string : strings)
491 {
492 enumeratorString += string;
493
494 if(string != strings.back())
495 {
496 enumeratorString += '|';
497 }
498 }
499
500 return enumeratorString;
501}
502
503static
504bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
505{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600506 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600507 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
508 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
509 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
510 VK_MEMORY_PROPERTY_DEVICE_ONLY);
511 if(enumerator & (~allFlags))
512 {
513 return false;
514 }
515
516 return true;
517}
518
519static
520std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
521{
522 if(!ValidateEnumerator(enumerator))
523 {
524 return "unrecognized enumerator";
525 }
526
527 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600528 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
529 {
530 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
531 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600532 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
533 {
534 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
535 }
536 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
539 }
540 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
541 {
542 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
543 }
544 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
547 }
548
549 std::string enumeratorString;
550 for(auto const& string : strings)
551 {
552 enumeratorString += string;
553
554 if(string != strings.back())
555 {
556 enumeratorString += '|';
557 }
558 }
559
560 return enumeratorString;
561}
562
563static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600564bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600565{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600566 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600567 if(enumerator & (~allFlags))
568 {
569 return false;
570 }
571
572 return true;
573}
574
575static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600576std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600577{
578 if(!ValidateEnumerator(enumerator))
579 {
580 return "unrecognized enumerator";
581 }
582
583 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600584 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600585 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600586 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600587 }
588
589 std::string enumeratorString;
590 for(auto const& string : strings)
591 {
592 enumeratorString += string;
593
594 if(string != strings.back())
595 {
596 enumeratorString += '|';
597 }
598 }
599
600 return enumeratorString;
601}
602
603static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600604bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
605{
606 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
607 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
608 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
609 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600610 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600611 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600612 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600613
614 return true;
615}
616
617static
618std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
619{
620 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600621 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600622 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600623 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600624
625 std::vector<std::string> strings;
626 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600627 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600628 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600629 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600630 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_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_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600634 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600635 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600637 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600638
639 std::string enumeratorString;
640 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600641 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600642 enumeratorString += string;
643
644 if(string != strings.back())
645 {
646 enumeratorString += '|';
647 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600648 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600649
650 return enumeratorString;
651}
652
653static
654bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
655{
Chia-I Wuacf253f2015-10-26 19:26:04 +0800656 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600657 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600658 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600659 return false;
660 }
661
662 return true;
663}
664
665static
666std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
667{
668 if(!ValidateEnumerator(enumerator))
669 {
670 return "unrecognized enumerator";
671 }
672
673 std::vector<std::string> strings;
Chia-I Wuacf253f2015-10-26 19:26:04 +0800674 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600675 {
Chia-I Wuacf253f2015-10-26 19:26:04 +0800676 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600677 }
678
679 std::string enumeratorString;
680 for(auto const& string : strings)
681 {
682 enumeratorString += string;
683
684 if(string != strings.back())
685 {
686 enumeratorString += '|';
687 }
688 }
689
690 return enumeratorString;
691}
692
693static
694bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
695{
696 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
697 if(enumerator & (~allFlags))
698 {
699 return false;
700 }
701
702 return true;
703}
704
705static
706std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
707{
708 if(!ValidateEnumerator(enumerator))
709 {
710 return "unrecognized enumerator";
711 }
712
713 std::vector<std::string> strings;
714 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
715 {
716 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
717 }
718
719 std::string enumeratorString;
720 for(auto const& string : strings)
721 {
722 enumeratorString += string;
723
724 if(string != strings.back())
725 {
726 enumeratorString += '|';
727 }
728 }
729
730 return enumeratorString;
731}
732
733static
734bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
735{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600736 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
737 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
738 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
739 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
740 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600747 if(enumerator & (~allFlags))
748 {
749 return false;
750 }
751
752 return true;
753}
754
755static
756std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
757{
758 if(!ValidateEnumerator(enumerator))
759 {
760 return "unrecognized enumerator";
761 }
762
763 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600764 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600765 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600766 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600767 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_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_PRIMITIVES_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_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600777 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_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_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600783 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600787 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600789 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600791 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600793 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600797 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600799 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600801 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600803 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_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_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600807 }
808
809 std::string enumeratorString;
810 for(auto const& string : strings)
811 {
812 enumeratorString += string;
813
814 if(string != strings.back())
815 {
816 enumeratorString += '|';
817 }
818 }
819
820 return enumeratorString;
821}
822
823static
824bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
825{
826 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
827 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
828 VK_QUERY_RESULT_WAIT_BIT |
829 VK_QUERY_RESULT_64_BIT |
830 VK_QUERY_RESULT_DEFAULT);
831 if(enumerator & (~allFlags))
832 {
833 return false;
834 }
835
836 return true;
837}
838
839static
840std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
841{
842 if(!ValidateEnumerator(enumerator))
843 {
844 return "unrecognized enumerator";
845 }
846
847 std::vector<std::string> strings;
848 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
849 {
850 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
851 }
852 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
853 {
854 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
855 }
856 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
857 {
858 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
859 }
860 if(enumerator & VK_QUERY_RESULT_64_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_64_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_DEFAULT)
865 {
866 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600867 }
868
869 std::string enumeratorString;
870 for(auto const& string : strings)
871 {
872 enumeratorString += string;
873
874 if(string != strings.back())
875 {
876 enumeratorString += '|';
877 }
878 }
879
880 return enumeratorString;
881}
882
883static
884bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
885{
886 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
887 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
888 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
889 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
890 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
891 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
892 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
893 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600894 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600895 if(enumerator & (~allFlags))
896 {
897 return false;
898 }
899
900 return true;
901}
902
903static
904std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
905{
906 if(!ValidateEnumerator(enumerator))
907 {
908 return "unrecognized enumerator";
909 }
910
911 std::vector<std::string> strings;
912 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
913 {
914 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
915 }
916 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
917 {
918 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
919 }
920 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
939 }
940 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
947 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600948
949 std::string enumeratorString;
950 for(auto const& string : strings)
951 {
952 enumeratorString += string;
953
954 if(string != strings.back())
955 {
956 enumeratorString += '|';
957 }
958 }
959
960 return enumeratorString;
961}
962
963static
964bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
965{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600966 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
967 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600968 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600969 if(enumerator & (~allFlags))
970 {
971 return false;
972 }
973
974 return true;
975}
976
977static
978std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
979{
980 if(!ValidateEnumerator(enumerator))
981 {
982 return "unrecognized enumerator";
983 }
984
985 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600986 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
987 {
988 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
989 }
990 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
991 {
992 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
993 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600994 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600995 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600996 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600997 }
998
999 std::string enumeratorString;
1000 for(auto const& string : strings)
1001 {
1002 enumeratorString += string;
1003
1004 if(string != strings.back())
1005 {
1006 enumeratorString += '|';
1007 }
1008 }
1009
1010 return enumeratorString;
1011}
1012
1013static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001014bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1015{
1016 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001017 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1018 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001019 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001020 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001021 if(enumerator & (~allFlags))
1022 {
1023 return false;
1024 }
1025
1026 return true;
1027}
1028
1029static
1030std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1031{
1032 if(!ValidateEnumerator(enumerator))
1033 {
1034 return "unrecognized enumerator";
1035 }
1036
1037 std::vector<std::string> strings;
1038 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1039 {
1040 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1041 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001042 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1043 {
1044 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1045 }
1046 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1049 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001050 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1053 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001054 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001055 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001056 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001057 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001058
1059 std::string enumeratorString;
1060 for(auto const& string : strings)
1061 {
1062 enumeratorString += string;
1063
1064 if(string != strings.back())
1065 {
1066 enumeratorString += '|';
1067 }
1068 }
1069
1070 return enumeratorString;
1071}
1072
1073static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001074bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001075{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001076 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1077 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001078 if(enumerator & (~allFlags))
1079 {
1080 return false;
1081 }
1082
1083 return true;
1084}
1085
1086static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001087std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001088{
1089 if(!ValidateEnumerator(enumerator))
1090 {
1091 return "unrecognized enumerator";
1092 }
1093
1094 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001095 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001096 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001097 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001098 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001099 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_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_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001102 }
1103
1104 std::string enumeratorString;
1105 for(auto const& string : strings)
1106 {
1107 enumeratorString += string;
1108
1109 if(string != strings.back())
1110 {
1111 enumeratorString += '|';
1112 }
1113 }
1114
1115 return enumeratorString;
1116}
1117
1118static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001119bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1120{
1121 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1122 VK_CHANNEL_B_BIT |
1123 VK_CHANNEL_G_BIT |
1124 VK_CHANNEL_R_BIT);
1125 if(enumerator & (~allFlags))
1126 {
1127 return false;
1128 }
1129
1130 return true;
1131}
1132
1133static
1134std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1135{
1136 if(!ValidateEnumerator(enumerator))
1137 {
1138 return "unrecognized enumerator";
1139 }
1140
1141 std::vector<std::string> strings;
1142 if(enumerator & VK_CHANNEL_A_BIT)
1143 {
1144 strings.push_back("VK_CHANNEL_A_BIT");
1145 }
1146 if(enumerator & VK_CHANNEL_B_BIT)
1147 {
1148 strings.push_back("VK_CHANNEL_B_BIT");
1149 }
1150 if(enumerator & VK_CHANNEL_G_BIT)
1151 {
1152 strings.push_back("VK_CHANNEL_G_BIT");
1153 }
1154 if(enumerator & VK_CHANNEL_R_BIT)
1155 {
1156 strings.push_back("VK_CHANNEL_R_BIT");
1157 }
1158
1159 std::string enumeratorString;
1160 for(auto const& string : strings)
1161 {
1162 enumeratorString += string;
1163
1164 if(string != strings.back())
1165 {
1166 enumeratorString += '|';
1167 }
1168 }
1169
1170 return enumeratorString;
1171}
1172
1173static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001174bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001175{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001176 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1177 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1178 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001179 if(enumerator & (~allFlags))
1180 {
1181 return false;
1182 }
1183
1184 return true;
1185}
1186
1187static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001188std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001189{
1190 if(!ValidateEnumerator(enumerator))
1191 {
1192 return "unrecognized enumerator";
1193 }
1194
1195 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001196 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001197 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001198 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1199 }
1200 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1201 {
1202 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1203 }
1204 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1205 {
1206 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001207 }
1208
1209 std::string enumeratorString;
1210 for(auto const& string : strings)
1211 {
1212 enumeratorString += string;
1213
1214 if(string != strings.back())
1215 {
1216 enumeratorString += '|';
1217 }
1218 }
1219
1220 return enumeratorString;
1221}
1222
1223static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001224bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001225{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001226 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1227 VK_SHADER_STAGE_FRAGMENT_BIT |
1228 VK_SHADER_STAGE_GEOMETRY_BIT |
1229 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001230 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1231 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001232 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001233 if(enumerator & (~allFlags))
1234 {
1235 return false;
1236 }
1237
1238 return true;
1239}
1240
1241static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001242std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001243{
1244 if(!ValidateEnumerator(enumerator))
1245 {
1246 return "unrecognized enumerator";
1247 }
1248
1249 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001250 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001251 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001252 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001253 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001254 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001255 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001256 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001257 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001258 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001259 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001260 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1261 }
1262 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1263 {
1264 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1265 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001266 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001267 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001268 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001269 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001270 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001271 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001272 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001273 }
1274 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1275 {
1276 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001277 }
1278
1279 std::string enumeratorString;
1280 for(auto const& string : strings)
1281 {
1282 enumeratorString += string;
1283
1284 if(string != strings.back())
1285 {
1286 enumeratorString += '|';
1287 }
1288 }
1289
1290 return enumeratorString;
1291}
1292
1293static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001294bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001295{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001296 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1297 VK_PIPELINE_STAGE_HOST_BIT |
1298 VK_PIPELINE_STAGE_TRANSFER_BIT |
1299 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1300 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1301 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001302 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001303 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001304 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1305 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1306 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001307 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001308 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1309 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1310 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1311 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001312 if(enumerator & (~allFlags))
1313 {
1314 return false;
1315 }
1316
1317 return true;
1318}
1319
1320static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001321std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001322{
1323 if(!ValidateEnumerator(enumerator))
1324 {
1325 return "unrecognized enumerator";
1326 }
1327
1328 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001329 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001330 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001331 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001332 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001333 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001334 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001335 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001336 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001337 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001338 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001339 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001340 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001341 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001342 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001344 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001345 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001346 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001347 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001349 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001350 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001352 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001354 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001355 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001356 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001357 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001358 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001359 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001360 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001361 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001362 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001363 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001364 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001365 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001366 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001367 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1368 }
1369 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1370 {
1371 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1372 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001373 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001374 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001375 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001376 }
1377 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1378 {
1379 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1380 }
1381 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1382 {
1383 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1384 }
1385 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1386 {
1387 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1388 }
1389 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1390 {
1391 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001392 }
1393
1394 std::string enumeratorString;
1395 for(auto const& string : strings)
1396 {
1397 enumeratorString += string;
1398
1399 if(string != strings.back())
1400 {
1401 enumeratorString += '|';
1402 }
1403 }
1404
1405 return enumeratorString;
1406}
1407
1408static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001409bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001410{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001411 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1412 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1413 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1414 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1415 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001416 if(enumerator & (~allFlags))
1417 {
1418 return false;
1419 }
1420
1421 return true;
1422}
1423
1424static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001426{
1427 if(!ValidateEnumerator(enumerator))
1428 {
1429 return "unrecognized enumerator";
1430 }
1431
1432 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001434 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001436 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001438 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001440 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001442 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1444 }
1445 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1446 {
1447 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1448 }
1449 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1450 {
1451 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001452 }
1453
1454 std::string enumeratorString;
1455 for(auto const& string : strings)
1456 {
1457 enumeratorString += string;
1458
1459 if(string != strings.back())
1460 {
1461 enumeratorString += '|';
1462 }
1463 }
1464
1465 return enumeratorString;
1466}
1467
1468static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001469bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001470{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001471 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1472 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1473 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1474 VK_MEMORY_INPUT_SHADER_READ_BIT |
1475 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1476 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1477 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1478 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1479 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1480 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001481 if(enumerator & (~allFlags))
1482 {
1483 return false;
1484 }
1485
1486 return true;
1487}
1488
1489static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001490std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001491{
1492 if(!ValidateEnumerator(enumerator))
1493 {
1494 return "unrecognized enumerator";
1495 }
1496
1497 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001498 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001499 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001500 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1501 }
1502 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1503 {
1504 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1505 }
1506 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1507 {
1508 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1509 }
1510 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1511 {
1512 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1513 }
1514 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1515 {
1516 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1517 }
1518 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1519 {
1520 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1521 }
1522 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1523 {
1524 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1525 }
1526 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1527 {
1528 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1529 }
1530 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1531 {
1532 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1533 }
1534 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1535 {
1536 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001537 }
1538
1539 std::string enumeratorString;
1540 for(auto const& string : strings)
1541 {
1542 enumeratorString += string;
1543
1544 if(string != strings.back())
1545 {
1546 enumeratorString += '|';
1547 }
1548 }
1549
1550 return enumeratorString;
1551}
1552
1553static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001554bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001555{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001556 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1557 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001558 if(enumerator & (~allFlags))
1559 {
1560 return false;
1561 }
1562
1563 return true;
1564}
1565
1566static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001567std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001568{
1569 if(!ValidateEnumerator(enumerator))
1570 {
1571 return "unrecognized enumerator";
1572 }
1573
1574 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001575 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001576 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001577 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001578 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001579 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001580 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001581 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001582 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001583
1584 std::string enumeratorString;
1585 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001586 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001587 enumeratorString += string;
1588
1589 if(string != strings.back())
1590 {
1591 enumeratorString += '|';
1592 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001593 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001594
1595 return enumeratorString;
1596}
1597
1598static
1599bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1600{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001601 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001602 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001603 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001604 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001605 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001606
1607 return true;
1608}
1609
1610static
1611std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1612{
1613 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001614 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001615 return "unrecognized enumerator";
1616 }
1617
1618 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001619 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001620 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001621 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001622 }
1623
1624 std::string enumeratorString;
1625 for(auto const& string : strings)
1626 {
1627 enumeratorString += string;
1628
1629 if(string != strings.back())
1630 {
1631 enumeratorString += '|';
1632 }
1633 }
1634
1635 return enumeratorString;
1636}
1637
1638static
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001639bool ValidateEnumerator(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001640{
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001641 VkCmdBufferUsageFlags allFlags = (VkCmdBufferUsageFlags)(VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1642 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1643 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001644 if(enumerator & (~allFlags))
1645 {
1646 return false;
1647 }
1648
1649 return true;
1650}
1651
1652static
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001653std::string EnumeratorString(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001654{
1655 if(!ValidateEnumerator(enumerator))
1656 {
1657 return "unrecognized enumerator";
1658 }
1659
1660 std::vector<std::string> strings;
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001661 if(enumerator & VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001662 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001663 strings.push_back("VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001664 }
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001665 if(enumerator & VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001666 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001667 strings.push_back("VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001668 }
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001669 if(enumerator & VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001670 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001671 strings.push_back("VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001672 }
1673
1674 std::string enumeratorString;
1675 for(auto const& string : strings)
1676 {
1677 enumeratorString += string;
1678
1679 if(string != strings.back())
1680 {
1681 enumeratorString += '|';
1682 }
1683 }
1684
1685 return enumeratorString;
1686}
1687
1688static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001689bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001690{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001691 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001692 if(enumerator & (~allFlags))
1693 {
1694 return false;
1695 }
1696
1697 return true;
1698}
1699
1700static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001701std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001702{
1703 if(!ValidateEnumerator(enumerator))
1704 {
1705 return "unrecognized enumerator";
1706 }
1707
1708 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001709 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001710 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001711 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001712 }
1713
1714 std::string enumeratorString;
1715 for(auto const& string : strings)
1716 {
1717 enumeratorString += string;
1718
1719 if(string != strings.back())
1720 {
1721 enumeratorString += '|';
1722 }
1723 }
1724
1725 return enumeratorString;
1726}
1727
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001728static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001729bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001730{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001731 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1732 VK_IMAGE_ASPECT_STENCIL_BIT |
1733 VK_IMAGE_ASPECT_DEPTH_BIT |
1734 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001735 if(enumerator & (~allFlags))
1736 {
1737 return false;
1738 }
1739
1740 return true;
1741}
1742
1743static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001744std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001745{
1746 if(!ValidateEnumerator(enumerator))
1747 {
1748 return "unrecognized enumerator";
1749 }
1750
1751 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001752 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001753 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001754 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1755 }
1756 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1757 {
1758 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1759 }
1760 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1761 {
1762 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1763 }
1764 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1765 {
1766 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1767 }
1768
1769 std::string enumeratorString;
1770 for(auto const& string : strings)
1771 {
1772 enumeratorString += string;
1773
1774 if(string != strings.back())
1775 {
1776 enumeratorString += '|';
1777 }
1778 }
1779
1780 return enumeratorString;
1781}
1782
1783static
1784bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1785{
1786 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1787 if(enumerator & (~allFlags))
1788 {
1789 return false;
1790 }
1791
1792 return true;
1793}
1794
1795static
1796std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1797{
1798 if(!ValidateEnumerator(enumerator))
1799 {
1800 return "unrecognized enumerator";
1801 }
1802
1803 std::vector<std::string> strings;
1804 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1805 {
1806 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001807 }
1808
1809 std::string enumeratorString;
1810 for(auto const& string : strings)
1811 {
1812 enumeratorString += string;
1813
1814 if(string != strings.back())
1815 {
1816 enumeratorString += '|';
1817 }
1818 }
1819
1820 return enumeratorString;
1821}
1822
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001823VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1824 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08001825 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001826 VkInstance* pInstance)
1827{
1828 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wu69f40122015-10-26 21:10:41 +08001829 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001830
1831 if (result == VK_SUCCESS) {
1832 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wu763a7492015-10-26 20:48:51 +08001833 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001834 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001835
1836 InitParamChecker(data);
1837 }
1838
1839 return result;
1840}
1841
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001842VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wu69f40122015-10-26 21:10:41 +08001843 VkInstance instance,
1844 const VkAllocCallbacks* pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001845{
1846 // Grab the key before the instance is destroyed.
1847 dispatch_key key = get_dispatch_key(instance);
1848 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wu69f40122015-10-26 21:10:41 +08001849 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001850
1851 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001852 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1853 while (my_data->logging_callback.size() > 0) {
1854 VkDbgMsgCallback callback = my_data->logging_callback.back();
1855 layer_destroy_msg_callback(my_data->report_data, callback);
1856 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001857 }
1858
1859 layer_debug_report_destroy_instance(mid(instance));
1860 layer_data_map.erase(pTable);
1861
1862 pc_instance_table_map.erase(key);
1863 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001864}
1865
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001866bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001867 VkInstance instance,
1868 uint32_t* pPhysicalDeviceCount,
1869 VkPhysicalDevice* pPhysicalDevices,
1870 VkResult result)
1871{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001872
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001873 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001874 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001875 }
1876
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001877 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001878 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001879 }
1880
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001881 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001882 {
1883 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001884 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1885 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001886 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001887
1888 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001889}
1890
1891VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1892 VkInstance instance,
1893 uint32_t* pPhysicalDeviceCount,
1894 VkPhysicalDevice* pPhysicalDevices)
1895{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001896 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1897
1898 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1899
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001900 return result;
1901}
1902
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001903bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001904 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001905 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001907
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001908 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001909 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001910 }
1911
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001912 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001913}
1914
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001915VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001916 VkPhysicalDevice physicalDevice,
1917 VkPhysicalDeviceFeatures* pFeatures)
1918{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001919 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001920
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001921 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001922}
1923
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001924bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001925 VkPhysicalDevice physicalDevice,
1926 VkFormat format,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001927 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001928{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001929
1930 if(format < VK_FORMAT_BEGIN_RANGE ||
1931 format > VK_FORMAT_END_RANGE)
1932 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001933 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001934 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001936 }
1937
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001938 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001939 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001940 }
1941
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001942 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001943}
1944
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001945VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001946 VkPhysicalDevice physicalDevice,
1947 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001948 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001949{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001950 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001951
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001952 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001953}
1954
1955bool PostGetPhysicalDeviceImageFormatProperties(
1956 VkPhysicalDevice physicalDevice,
1957 VkFormat format,
1958 VkImageType type,
1959 VkImageTiling tiling,
1960 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001961 VkImageCreateFlags flags,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001962 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001963{
1964
1965 if(format < VK_FORMAT_BEGIN_RANGE ||
1966 format > VK_FORMAT_END_RANGE)
1967 {
1968 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1969 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1970 return false;
1971 }
1972
1973 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1974 type > VK_IMAGE_TYPE_END_RANGE)
1975 {
1976 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1977 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1978 return false;
1979 }
1980
1981 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1982 tiling > VK_IMAGE_TILING_END_RANGE)
1983 {
1984 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1985 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1986 return false;
1987 }
1988
1989
1990 if(pImageFormatProperties != nullptr)
1991 {
1992 }
1993
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001994 return true;
1995}
1996
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001997VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001998 VkPhysicalDevice physicalDevice,
1999 VkFormat format,
2000 VkImageType type,
2001 VkImageTiling tiling,
2002 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002003 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002004 VkImageFormatProperties* pImageFormatProperties)
2005{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002006 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002007
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002008 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002009}
2010
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002011bool PostGetPhysicalDeviceProperties(
2012 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002013 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002014{
2015
2016 if(pProperties != nullptr)
2017 {
2018 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2019 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2020 {
2021 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2022 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2023 return false;
2024 }
2025 }
2026
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002027 return true;
2028}
2029
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002030VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002031 VkPhysicalDevice physicalDevice,
2032 VkPhysicalDeviceProperties* pProperties)
2033{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002034 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002035
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002036 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002037}
2038
Cody Northropef72e2a2015-08-03 17:04:53 -06002039bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002040 VkPhysicalDevice physicalDevice,
2041 uint32_t* pCount,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002042 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002043{
2044
Cody Northropef72e2a2015-08-03 17:04:53 -06002045 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002046 {
2047 }
2048
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002049 if(pQueueProperties != nullptr)
2050 {
2051 }
2052
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002053 return true;
2054}
2055
Courtney Goeltzenleuchter8148af02015-10-27 11:19:02 -06002056VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002057 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002058 uint32_t* pCount,
2059 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002060{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002061 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002062
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002063 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002064}
2065
2066bool PostGetPhysicalDeviceMemoryProperties(
2067 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002068 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002069{
2070
2071 if(pMemoryProperties != nullptr)
2072 {
2073 }
2074
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002075 return true;
2076}
2077
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002078VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002079 VkPhysicalDevice physicalDevice,
2080 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2081{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002082 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002083
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002084 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002085}
2086
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002087VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2088 VkPhysicalDevice physicalDevice,
2089 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08002090 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002091 VkDevice* pDevice)
2092{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002093 /*
2094 * NOTE: The loader fills in the ICD's device object in *pDevice.
2095 * Use that object to get the dispatch table.
2096 *
2097 * NOTE: We do not validate physicalDevice or any dispatchable
2098 * object as the first parameter. We couldn't get here if it was wrong!
2099 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002100 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wu69f40122015-10-26 21:10:41 +08002101 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002102 if(result == VK_SUCCESS)
2103 {
2104 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2105 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2106 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2107 }
2108
2109 return result;
2110}
2111
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002112VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wu69f40122015-10-26 21:10:41 +08002113 VkDevice device,
2114 const VkAllocCallbacks* pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002115{
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
Chia-I Wu69f40122015-10-26 21:10:41 +08002123 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
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,
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002157 const VkSubmitInfo* submit)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002158{
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002159 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2160 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2161 "vkQueueSubmit parameter, VkStructureType pSubmitInfo->sType, is an invalid enumerator");
2162 return false;
2163 }
2164
2165 if(submit->pCommandBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002166 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002167 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002168
2169 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002170}
2171
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002172bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002173 VkQueue queue,
Chia-I Wu763a7492015-10-26 20:48:51 +08002174 uint32_t commandBufferCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002175 VkFence fence,
2176 VkResult result)
2177{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002178
2179
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002180
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002181 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002182 {
2183 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002184 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2185 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002186 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002187
2188 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189}
2190
2191VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2192 VkQueue queue,
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002193 uint32_t submitCount,
2194 const VkSubmitInfo* pSubmitInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002195 VkFence fence)
2196{
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002197 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002198 PreQueueSubmit(queue, &pSubmitInfo[i]);
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002199 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002200
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002201 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002202
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002203 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002204
2205 return result;
2206}
2207
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002208bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002209 VkQueue queue,
2210 VkResult result)
2211{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002212
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002213 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002214 {
2215 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002216 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2217 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002218 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002219
2220 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002221}
2222
2223VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2224 VkQueue queue)
2225{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002226 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2227
2228 PostQueueWaitIdle(queue, result);
2229
2230 return result;
2231}
2232
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002233bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002234 VkDevice device,
2235 VkResult result)
2236{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002237
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002238 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002239 {
2240 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002241 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2242 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002243 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002244
2245 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002246}
2247
2248VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2249 VkDevice device)
2250{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002251 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2252
2253 PostDeviceWaitIdle(device, result);
2254
2255 return result;
2256}
2257
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002258bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 VkDevice device,
2260 const VkMemoryAllocInfo* pAllocInfo)
2261{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002262 if(pAllocInfo != nullptr)
2263 {
2264 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002265 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002266 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002267 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002268 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002269 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002271
2272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002273}
2274
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002275bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002276 VkDevice device,
2277 VkDeviceMemory* pMem,
2278 VkResult result)
2279{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002281 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002282 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002283 }
2284
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002285 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002286 {
2287 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002288 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002290 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002291
2292 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002293}
2294
2295VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2296 VkDevice device,
2297 const VkMemoryAllocInfo* pAllocInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08002298 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002299 VkDeviceMemory* pMem)
2300{
2301 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002302
Chia-I Wu69f40122015-10-26 21:10:41 +08002303 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pAllocator, pMem);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002304
2305 PostAllocMemory(device, pMem, result);
2306
2307 return result;
2308}
2309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002310bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002311 VkDevice device,
2312 VkDeviceMemory mem,
2313 VkDeviceSize offset,
2314 VkDeviceSize size,
2315 VkMemoryMapFlags flags,
2316 void** ppData,
2317 VkResult result)
2318{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002320
2321
2322
2323
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002324 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002325 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002326 }
2327
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002328 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002329 {
2330 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2332 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002333 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002334
2335 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002336}
2337
2338VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2339 VkDevice device,
2340 VkDeviceMemory mem,
2341 VkDeviceSize offset,
2342 VkDeviceSize size,
2343 VkMemoryMapFlags flags,
2344 void** ppData)
2345{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002346 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2347
2348 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2349
2350 return result;
2351}
2352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002353bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002354 VkDevice device,
2355 const VkMappedMemoryRange* pMemRanges)
2356{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002357 if(pMemRanges != nullptr)
2358 {
2359 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002360 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002361 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002362 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002364 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002365 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002366
2367 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002368}
2369
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002370bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371 VkDevice device,
2372 uint32_t memRangeCount,
2373 VkResult result)
2374{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002375
2376
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002377 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002378 {
2379 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002380 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2381 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002382 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002383
2384 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002385}
2386
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002387VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002388 VkDevice device,
2389 uint32_t memRangeCount,
2390 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002391{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002392 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002393
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002394 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002395
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002396 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2397
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002398 return result;
2399}
2400
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002401bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002402 VkDevice device,
2403 const VkMappedMemoryRange* pMemRanges)
2404{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002405 if(pMemRanges != nullptr)
2406 {
2407 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002408 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002409 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002410 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002411 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002413 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002414
2415 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416}
2417
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002418bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002419 VkDevice device,
2420 uint32_t memRangeCount,
2421 VkResult result)
2422{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002423
2424
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002425 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426 {
2427 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2429 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002431
2432 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433}
2434
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002435VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002436 VkDevice device,
2437 uint32_t memRangeCount,
2438 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002439{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002440 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002441
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002442 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002443
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002444 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2445
Tony Barbour859ceab2015-04-16 19:23:13 -06002446 return result;
2447}
2448
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002449bool PostGetDeviceMemoryCommitment(
2450 VkDevice device,
2451 VkDeviceMemory memory,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002452 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002453{
2454
2455
2456 if(pCommittedMemoryInBytes != nullptr)
2457 {
2458 }
2459
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002460 return true;
2461}
2462
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002463VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002464 VkDevice device,
2465 VkDeviceMemory memory,
2466 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002467{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002468 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002469
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002470 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002471}
2472
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002473bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002474 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002475 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002476 VkDeviceMemory mem,
2477 VkDeviceSize memOffset,
2478 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002479{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002480
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002481
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002482
2483
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002484 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002485 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002486 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2487 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2488 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002490
2491 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492}
2493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002494VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002495 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002496 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497 VkDeviceMemory mem,
2498 VkDeviceSize memOffset)
2499{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002500 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002501
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002502 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002503
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002504 return result;
2505}
2506
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002507bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002508 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002509 VkImage image,
2510 VkDeviceMemory mem,
2511 VkDeviceSize memOffset,
2512 VkResult result)
2513{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002514
2515
2516
2517
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002518 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002519 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002520 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2521 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2522 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002523 }
2524
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002525 return true;
2526}
2527
2528VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2529 VkDevice device,
2530 VkImage image,
2531 VkDeviceMemory mem,
2532 VkDeviceSize memOffset)
2533{
2534 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2535
2536 PostBindImageMemory(device, image, mem, memOffset, result);
2537
2538 return result;
2539}
2540
2541bool PostGetBufferMemoryRequirements(
2542 VkDevice device,
2543 VkBuffer buffer,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002544 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002545{
2546
2547
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002548 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002549 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002550 }
2551
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002552 return true;
2553}
2554
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002555VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002556 VkDevice device,
2557 VkBuffer buffer,
2558 VkMemoryRequirements* pMemoryRequirements)
2559{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002560 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002561
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002562 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002563}
2564
2565bool PostGetImageMemoryRequirements(
2566 VkDevice device,
2567 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002568 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002569{
2570
2571
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002572 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002573 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002574 }
2575
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002576 return true;
2577}
2578
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002579VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580 VkDevice device,
2581 VkImage image,
2582 VkMemoryRequirements* pMemoryRequirements)
2583{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002584 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002585
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002586 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002587}
2588
2589bool PostGetImageSparseMemoryRequirements(
2590 VkDevice device,
2591 VkImage image,
2592 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002593 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002594{
2595
2596
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002597 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002599 }
2600
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002601 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002602 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002603 if ((pSparseMemoryRequirements->formatProps.aspect &
2604 (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 -06002605 {
2606 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002607 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002608 return false;
2609 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002610 }
2611
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002612 return true;
2613}
2614
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002615VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002616 VkDevice device,
2617 VkImage image,
2618 uint32_t* pNumRequirements,
2619 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2620{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002621 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002622
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002623 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002624}
2625
2626bool PostGetPhysicalDeviceSparseImageFormatProperties(
2627 VkPhysicalDevice physicalDevice,
2628 VkFormat format,
2629 VkImageType type,
2630 uint32_t samples,
2631 VkImageUsageFlags usage,
2632 VkImageTiling tiling,
2633 uint32_t* pNumProperties,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002634 VkSparseImageFormatProperties* pProperties)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002635{
2636
2637 if(format < VK_FORMAT_BEGIN_RANGE ||
2638 format > VK_FORMAT_END_RANGE)
2639 {
2640 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002641 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002642 return false;
2643 }
2644
2645 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2646 type > VK_IMAGE_TYPE_END_RANGE)
2647 {
2648 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002649 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002650 return false;
2651 }
2652
2653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002654
2655 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2656 tiling > VK_IMAGE_TILING_END_RANGE)
2657 {
2658 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002659 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002660 return false;
2661 }
2662
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002663 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002664 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002665 }
2666
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002667 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002668 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002669 if ((pProperties->aspect &
2670 (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 -06002671 {
2672 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002673 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002674 return false;
2675 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002676 }
2677
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002678 return true;
2679}
2680
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002681VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002682 VkPhysicalDevice physicalDevice,
2683 VkFormat format,
2684 VkImageType type,
2685 uint32_t samples,
2686 VkImageUsageFlags usage,
2687 VkImageTiling tiling,
2688 uint32_t* pNumProperties,
2689 VkSparseImageFormatProperties* pProperties)
2690{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002691 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002692
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002693 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002694}
2695
Chia-I Wu06809d52015-10-26 16:55:27 +08002696bool PreQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002697 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002698 uint32_t bindInfoCount,
2699 const VkBindSparseInfo* pBindInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002700{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002701 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002702 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002703 }
2704
2705 return true;
2706}
2707
Chia-I Wu06809d52015-10-26 16:55:27 +08002708bool PostQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002709 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002710 uint32_t bindInfoCount,
2711 const VkBindSparseInfo* pBindInfo,
2712 VkFence fence,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002713 VkResult result)
2714{
2715
2716
2717
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002718 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002719 {
Chia-I Wu06809d52015-10-26 16:55:27 +08002720 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002721 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2722 return false;
2723 }
2724
2725 return true;
2726}
2727
Chia-I Wu06809d52015-10-26 16:55:27 +08002728VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002729 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002730 uint32_t bindInfoCount,
2731 const VkBindSparseInfo* pBindInfo,
2732 VkFence fence)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002733{
Chia-I Wu06809d52015-10-26 16:55:27 +08002734 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002735
Chia-I Wu06809d52015-10-26 16:55:27 +08002736 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002737
Chia-I Wu06809d52015-10-26 16:55:27 +08002738 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002739
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002740 return result;
2741}
2742
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002743bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002744 VkDevice device,
2745 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002746{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002747 if(pCreateInfo != nullptr)
2748 {
2749 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002750 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002751 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002752 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002753 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002754 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002755 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002756
2757 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002758}
2759
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002760bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002761 VkDevice device,
2762 VkFence* pFence,
2763 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002764{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002765
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002766 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002768 }
2769
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002770 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002771 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002772 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002773 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2774 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002775 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002776
2777 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002778}
2779
2780VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2781 VkDevice device,
2782 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08002783 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002784 VkFence* pFence)
2785{
2786 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002787
Chia-I Wu69f40122015-10-26 21:10:41 +08002788 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002789
2790 PostCreateFence(device, pFence, result);
2791
2792 return result;
2793}
2794
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002795bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002796 VkDevice device,
2797 const VkFence* pFences)
2798{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002799 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002800 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002801 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002802
2803 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002804}
2805
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002806bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002807 VkDevice device,
2808 uint32_t fenceCount,
2809 VkResult result)
2810{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002811
2812
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002813 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002814 {
2815 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002816 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2817 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002818 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002819
2820 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002821}
2822
2823VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2824 VkDevice device,
2825 uint32_t fenceCount,
2826 const VkFence* pFences)
2827{
2828 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002829
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002830 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2831
2832 PostResetFences(device, fenceCount, result);
2833
2834 return result;
2835}
2836
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002837bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002838 VkDevice device,
2839 VkFence fence,
2840 VkResult result)
2841{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002842
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002843
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002844 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002845 {
2846 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2848 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002849 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002850
2851 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002852}
2853
2854VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2855 VkDevice device,
2856 VkFence fence)
2857{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002858 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2859
2860 PostGetFenceStatus(device, fence, result);
2861
2862 return result;
2863}
2864
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002865bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002866 VkDevice device,
2867 const VkFence* pFences)
2868{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002869 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002870 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002871 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002872
2873 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002874}
2875
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002876bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002877 VkDevice device,
2878 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002879 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002880 uint64_t timeout,
2881 VkResult result)
2882{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002883
2884
2885
2886
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002887 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002888 {
2889 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002890 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2891 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002892 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002893
2894 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002895}
2896
2897VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2898 VkDevice device,
2899 uint32_t fenceCount,
2900 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002901 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002902 uint64_t timeout)
2903{
2904 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002905
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002906 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2907
2908 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2909
2910 return result;
2911}
2912
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002913bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002914 VkDevice device,
2915 const VkSemaphoreCreateInfo* pCreateInfo)
2916{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002917 if(pCreateInfo != nullptr)
2918 {
2919 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002920 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002922 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002923 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002924 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002925 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002926
2927 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002928}
2929
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002930bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002931 VkDevice device,
2932 VkSemaphore* pSemaphore,
2933 VkResult result)
2934{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002935
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002936 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002937 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002938 }
2939
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002940 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002941 {
2942 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002945 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002946
2947 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002948}
2949
2950VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2951 VkDevice device,
2952 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08002953 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002954 VkSemaphore* pSemaphore)
2955{
2956 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002957
Chia-I Wu69f40122015-10-26 21:10:41 +08002958 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002959
2960 PostCreateSemaphore(device, pSemaphore, result);
2961
2962 return result;
2963}
2964
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002965bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002966 VkDevice device,
2967 const VkEventCreateInfo* pCreateInfo)
2968{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002969 if(pCreateInfo != nullptr)
2970 {
2971 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002972 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002974 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002975 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002976 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002978
2979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002980}
2981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002982bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002983 VkDevice device,
2984 VkEvent* pEvent,
2985 VkResult result)
2986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002988 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002990 }
2991
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002992 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 {
2994 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002995 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2996 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002997 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002998
2999 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003000}
3001
3002VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3003 VkDevice device,
3004 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003005 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003006 VkEvent* pEvent)
3007{
3008 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003009
Chia-I Wu69f40122015-10-26 21:10:41 +08003010 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003011
3012 PostCreateEvent(device, pEvent, result);
3013
3014 return result;
3015}
3016
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003017bool PostGetEventStatus(
3018 VkDevice device,
3019 VkEvent event,
3020 VkResult result)
3021{
3022
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003023
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003024 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025 {
3026 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003027 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3028 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003029 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003030
3031 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003032}
3033
3034VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3035 VkDevice device,
3036 VkEvent event)
3037{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3039
3040 PostGetEventStatus(device, event, result);
3041
3042 return result;
3043}
3044
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003045bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003046 VkDevice device,
3047 VkEvent event,
3048 VkResult result)
3049{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003050
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003051
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003052 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003053 {
3054 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3056 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003057 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003058
3059 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003060}
3061
3062VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3063 VkDevice device,
3064 VkEvent event)
3065{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003066 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3067
3068 PostSetEvent(device, event, result);
3069
3070 return result;
3071}
3072
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003073bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003074 VkDevice device,
3075 VkEvent event,
3076 VkResult result)
3077{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003078
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003079
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003080 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003081 {
3082 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3084 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003085 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003086
3087 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003088}
3089
3090VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3091 VkDevice device,
3092 VkEvent event)
3093{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003094 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3095
3096 PostResetEvent(device, event, result);
3097
3098 return result;
3099}
3100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003101bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003102 VkDevice device,
3103 const VkQueryPoolCreateInfo* pCreateInfo)
3104{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003105 if(pCreateInfo != nullptr)
3106 {
3107 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003109 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003110 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003111 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003112 }
3113 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3114 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3115 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003117 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003118 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003119 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003120 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003121
3122 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003123}
3124
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003126 VkDevice device,
3127 VkQueryPool* pQueryPool,
3128 VkResult result)
3129{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003130
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003131 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003132 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003133 }
3134
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003135 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003136 {
3137 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003138 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3139 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003140 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003141
3142 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003143}
3144
3145VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3146 VkDevice device,
3147 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003148 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003149 VkQueryPool* pQueryPool)
3150{
3151 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003152
Chia-I Wu69f40122015-10-26 21:10:41 +08003153 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003154
3155 PostCreateQueryPool(device, pQueryPool, result);
3156
3157 return result;
3158}
3159
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003160bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003161 VkDevice device,
3162 VkQueryPool queryPool,
3163 uint32_t startQuery,
3164 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003165 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003166 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003167 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003168 VkQueryResultFlags flags,
3169 VkResult result)
3170{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003171
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003172
3173
3174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003175 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003176 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003177 }
3178
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003179
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003180 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003181 {
3182 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3184 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003186
3187 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003188}
3189
3190VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3191 VkDevice device,
3192 VkQueryPool queryPool,
3193 uint32_t startQuery,
3194 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003195 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003197 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003198 VkQueryResultFlags flags)
3199{
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003200 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003202 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003203
3204 return result;
3205}
3206
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003207bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003208 VkDevice device,
3209 const VkBufferCreateInfo* pCreateInfo)
3210{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003211 if(pCreateInfo != nullptr)
3212 {
3213 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003214 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003216 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003217 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003219 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3220 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003221 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003222 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003223 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003224 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003225 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003226 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003227 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003228 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003230
3231 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003232}
3233
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003234bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003235 VkDevice device,
3236 VkBuffer* pBuffer,
3237 VkResult result)
3238{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003239
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003240 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003242 }
3243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003244 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003245 {
3246 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003249 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250
3251 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252}
3253
3254VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3255 VkDevice device,
3256 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003257 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003258 VkBuffer* pBuffer)
3259{
3260 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003261
Chia-I Wu69f40122015-10-26 21:10:41 +08003262 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003263
3264 PostCreateBuffer(device, pBuffer, result);
3265
3266 return result;
3267}
3268
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003269bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003270 VkDevice device,
3271 const VkBufferViewCreateInfo* pCreateInfo)
3272{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003273 if(pCreateInfo != nullptr)
3274 {
3275 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003276 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003277 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003278 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003279 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003280 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003281 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3282 pCreateInfo->format > VK_FORMAT_END_RANGE)
3283 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003284 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003285 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003286 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003287 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003288 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003289
3290 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003291}
3292
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003293bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003294 VkDevice device,
3295 VkBufferView* pView,
3296 VkResult result)
3297{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003298
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003299 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003300 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003301 }
3302
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003303 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003304 {
3305 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003306 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3307 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003308 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003309
3310 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311}
3312
3313VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3314 VkDevice device,
3315 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003316 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317 VkBufferView* pView)
3318{
3319 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003320
Chia-I Wu69f40122015-10-26 21:10:41 +08003321 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003322
3323 PostCreateBufferView(device, pView, result);
3324
3325 return result;
3326}
3327
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003328bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003329 VkDevice device,
3330 const VkImageCreateInfo* pCreateInfo)
3331{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003332 if(pCreateInfo != nullptr)
3333 {
3334 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003335 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003337 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003338 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003339 }
3340 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3341 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3342 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003344 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003345 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003346 }
3347 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3348 pCreateInfo->format > VK_FORMAT_END_RANGE)
3349 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003350 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003351 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003352 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353 }
3354 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3355 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3356 {
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 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized 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 Hayese841fdc2015-07-29 11:23:46 -06003364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3365 "vkCreateImage 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 Hayese841fdc2015-07-29 11:23:46 -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 PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 VkDevice device,
3378 VkImage* pImage,
3379 VkResult result)
3380{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003381
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003382 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -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 = "vkCreateImage 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 Hayesc6cfa572015-04-06 13:46:11 -06003391 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003392
3393 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003394}
3395
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003396VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3397 VkDevice device,
3398 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003399 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003400 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003401{
3402 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003403
Chia-I Wu69f40122015-10-26 21:10:41 +08003404 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003405
3406 PostCreateImage(device, pImage, result);
3407
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003408 return result;
3409}
3410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003411bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 VkDevice device,
3413 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003414{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003415 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003416 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003417 if ((pSubresource->aspect &
3418 (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 -06003419 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003421 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003422 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003423 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003424 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003425
3426 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003427}
3428
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003429bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003430 VkDevice device,
3431 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003432 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003433{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003435
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003436 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003437 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438 }
3439
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003440 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441}
3442
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003443VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444 VkDevice device,
3445 VkImage image,
3446 const VkImageSubresource* pSubresource,
3447 VkSubresourceLayout* pLayout)
3448{
3449 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003450
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003451 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003453 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454}
3455
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003456bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 VkDevice device,
3458 const VkImageViewCreateInfo* pCreateInfo)
3459{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003460 if(pCreateInfo != nullptr)
3461 {
3462 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003463 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003464 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003465 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003467 }
3468 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3469 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3470 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003472 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003473 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003474 }
3475 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3476 pCreateInfo->format > VK_FORMAT_END_RANGE)
3477 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003478 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003479 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003480 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003481 }
3482 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3483 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3484 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003486 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003487 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003488 }
3489 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3490 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3491 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003492 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003493 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003494 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003495 }
3496 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3497 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3498 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003499 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003500 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003501 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003502 }
3503 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3504 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3505 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003507 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003508 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003510 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003511
3512 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003513}
3514
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003515bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003516 VkDevice device,
3517 VkImageView* pView,
3518 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003519{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003520
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003521 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003522 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003523 }
3524
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003525 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003526 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003528 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3529 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003530 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003531
3532 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003533}
3534
3535VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3536 VkDevice device,
3537 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003538 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003539 VkImageView* pView)
3540{
3541 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003542
Chia-I Wu69f40122015-10-26 21:10:41 +08003543 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003544
3545 PostCreateImageView(device, pView, result);
3546
3547 return result;
3548}
3549
Michael Lentine6715e522015-09-15 14:59:14 -05003550bool PreCreateShaderModule(
3551 VkDevice device,
3552 const VkShaderModuleCreateInfo* pCreateInfo)
3553{
3554 if(pCreateInfo) {
3555 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3557 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3558 return false;
3559 }
3560 if(!pCreateInfo->pCode) {
3561 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3562 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3563 return false;
3564 }
3565 } else {
3566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3567 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3568 return false;
3569 }
3570
3571 return true;
3572}
3573
3574bool PostCreateShaderModule(
3575 VkDevice device,
3576 VkShaderModule* pShaderModule,
3577 VkResult result)
3578{
3579 if(result < VK_SUCCESS) {
3580 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3581 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3582 return false;
3583 }
3584
3585 return true;
3586}
3587
3588VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3589 VkDevice device,
3590 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003591 const VkAllocCallbacks* pAllocator,
Michael Lentine6715e522015-09-15 14:59:14 -05003592 VkShaderModule* pShaderModule)
3593{
3594 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wu69f40122015-10-26 21:10:41 +08003595 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine6715e522015-09-15 14:59:14 -05003596 PostCreateShaderModule(device, pShaderModule, result);
3597 return result;
3598}
3599
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003600bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003601 VkDevice device,
3602 const VkShaderCreateInfo* pCreateInfo)
3603{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003604 if(pCreateInfo != nullptr)
3605 {
3606 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003607 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003609 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003611 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003612 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003614 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003615 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003616
3617 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003618}
3619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003620bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003621 VkDevice device,
3622 VkShader* pShader,
3623 VkResult result)
3624{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003625
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003626 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003627 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003628 }
3629
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003630 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003631 {
3632 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3634 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003635 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003636
3637 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003638}
3639
3640VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3641 VkDevice device,
3642 const VkShaderCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003643 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644 VkShader* pShader)
3645{
3646 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003647
Chia-I Wu69f40122015-10-26 21:10:41 +08003648 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pAllocator, pShader);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003649
3650 PostCreateShader(device, pShader, result);
3651
3652 return result;
3653}
3654
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003655bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003656 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003657 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003658{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003659 if(pCreateInfo != nullptr)
3660 {
3661 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003663 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003664 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003667 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003668 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003670 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003671
3672 return true;
3673}
3674
3675bool PostCreatePipelineCache(
3676 VkDevice device,
3677 VkPipelineCache* pPipelineCache,
3678 VkResult result)
3679{
3680
3681 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003682 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003683 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003684
3685 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003686 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003687 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3689 return false;
3690 }
3691
3692 return true;
3693}
3694
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003695VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003696 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003697 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08003698 const VkAllocCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003699 VkPipelineCache* pPipelineCache)
3700{
3701 PreCreatePipelineCache(device, pCreateInfo);
3702
Chia-I Wu69f40122015-10-26 21:10:41 +08003703 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003704
3705 PostCreatePipelineCache(device, pPipelineCache, result);
3706
3707 return result;
3708}
3709
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003710bool PostGetPipelineCacheData(
3711 VkDevice device,
3712 VkPipelineCache pipelineCache,
Chia-I Wu28c3c432015-10-26 19:17:06 +08003713 size_t* pDataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003714 void* pData,
3715 VkResult result)
3716{
3717
3718
Chia-I Wu28c3c432015-10-26 19:17:06 +08003719 if(pDataSize != nullptr)
3720 {
3721 }
3722
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003723 if(pData != nullptr)
3724 {
3725 }
3726
3727 if(result < VK_SUCCESS)
3728 {
3729 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3731 return false;
3732 }
3733
3734 return true;
3735}
3736
3737VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3738 VkDevice device,
3739 VkPipelineCache pipelineCache,
Chia-I Wu28c3c432015-10-26 19:17:06 +08003740 size_t* pDataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003741 void* pData)
3742{
Chia-I Wu28c3c432015-10-26 19:17:06 +08003743 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003744
Chia-I Wu28c3c432015-10-26 19:17:06 +08003745 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003746
3747 return result;
3748}
3749
3750bool PreMergePipelineCaches(
3751 VkDevice device,
3752 const VkPipelineCache* pSrcCaches)
3753{
3754 if(pSrcCaches != nullptr)
3755 {
3756 }
3757
3758 return true;
3759}
3760
3761bool PostMergePipelineCaches(
3762 VkDevice device,
3763 VkPipelineCache destCache,
3764 uint32_t srcCacheCount,
3765 VkResult result)
3766{
3767
3768
3769
3770 if(result < VK_SUCCESS)
3771 {
3772 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3773 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3774 return false;
3775 }
3776
3777 return true;
3778}
3779
3780VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3781 VkDevice device,
3782 VkPipelineCache destCache,
3783 uint32_t srcCacheCount,
3784 const VkPipelineCache* pSrcCaches)
3785{
3786 PreMergePipelineCaches(device, pSrcCaches);
3787
3788 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3789
3790 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3791
3792 return result;
3793}
3794
3795bool PreCreateGraphicsPipelines(
3796 VkDevice device,
3797 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3798{
3799 if(pCreateInfos != nullptr)
3800 {
3801 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3802 {
3803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3804 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3805 return false;
3806 }
3807 if(pCreateInfos->pStages != nullptr)
3808 {
3809 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3810 {
3811 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3812 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3813 return false;
3814 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003815 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3816 {
3817 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3818 {
3819 }
3820 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3821 {
3822 }
3823 }
3824 }
3825 if(pCreateInfos->pVertexInputState != nullptr)
3826 {
3827 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3828 {
3829 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3830 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3831 return false;
3832 }
3833 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3834 {
3835 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3836 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3837 {
3838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3839 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
3840 return false;
3841 }
3842 }
3843 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3844 {
3845 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3846 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3847 {
3848 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3849 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3850 return false;
3851 }
3852 }
3853 }
3854 if(pCreateInfos->pInputAssemblyState != nullptr)
3855 {
3856 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3857 {
3858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3859 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3860 return false;
3861 }
3862 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3863 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3864 {
3865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3866 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3867 return false;
3868 }
3869 }
3870 if(pCreateInfos->pTessellationState != nullptr)
3871 {
3872 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3873 {
3874 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3875 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3876 return false;
3877 }
3878 }
3879 if(pCreateInfos->pViewportState != nullptr)
3880 {
3881 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3882 {
3883 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3884 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3885 return false;
3886 }
3887 }
3888 if(pCreateInfos->pRasterState != nullptr)
3889 {
3890 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
3891 {
3892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3893 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
3894 return false;
3895 }
3896 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
3897 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
3898 {
3899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3900 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
3901 return false;
3902 }
3903 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
3904 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
3905 {
3906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3907 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
3908 return false;
3909 }
3910 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3911 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
3912 {
3913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3914 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
3915 return false;
3916 }
3917 }
3918 if(pCreateInfos->pMultisampleState != nullptr)
3919 {
3920 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3921 {
3922 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3923 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3924 return false;
3925 }
3926 }
3927 if(pCreateInfos->pDepthStencilState != nullptr)
3928 {
3929 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3930 {
3931 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3932 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3933 return false;
3934 }
3935 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3936 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3937 {
3938 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3939 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3940 return false;
3941 }
3942 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3943 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
3944 {
3945 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3946 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
3947 return false;
3948 }
3949 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
3950 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
3951 {
3952 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3953 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
3954 return false;
3955 }
3956 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3957 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
3958 {
3959 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3960 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
3961 return false;
3962 }
3963 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3964 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
3965 {
3966 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3967 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
3968 return false;
3969 }
3970 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3971 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
3972 {
3973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3974 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
3975 return false;
3976 }
3977 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
3978 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
3979 {
3980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3981 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
3982 return false;
3983 }
3984 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3985 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
3986 {
3987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3988 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
3989 return false;
3990 }
3991 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3992 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
3993 {
3994 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3995 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
3996 return false;
3997 }
3998 }
3999 if(pCreateInfos->pColorBlendState != nullptr)
4000 {
4001 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4002 {
4003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4004 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4005 return false;
4006 }
Michael Lentine6d033602015-10-06 14:55:54 -07004007 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4008 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004009 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4010 {
4011 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4012 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4013 return false;
4014 }
Michael Lentined833b882015-09-15 14:59:56 -05004015 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004016 {
4017 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4018 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4019 {
4020 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4021 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4022 return false;
4023 }
4024 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4025 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4026 {
4027 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4028 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4029 return false;
4030 }
4031 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4032 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4033 {
4034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4035 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4036 return false;
4037 }
4038 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4039 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4040 {
4041 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4042 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4043 return false;
4044 }
4045 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4046 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4047 {
4048 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4049 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4050 return false;
4051 }
4052 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4053 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4054 {
4055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4056 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4057 return false;
4058 }
4059 }
4060 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004061 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4062 {
4063 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4064 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4065 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004066 }
4067
4068 return true;
4069}
4070
4071bool PostCreateGraphicsPipelines(
4072 VkDevice device,
4073 VkPipelineCache pipelineCache,
4074 uint32_t count,
4075 VkPipeline* pPipelines,
4076 VkResult result)
4077{
4078
4079
4080
4081 if(pPipelines != nullptr)
4082 {
4083 }
4084
4085 if(result < VK_SUCCESS)
4086 {
4087 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4088 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4089 return false;
4090 }
4091
4092 return true;
4093}
4094
4095VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4096 VkDevice device,
4097 VkPipelineCache pipelineCache,
4098 uint32_t count,
4099 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu69f40122015-10-26 21:10:41 +08004100 const VkAllocCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004101 VkPipeline* pPipelines)
4102{
4103 PreCreateGraphicsPipelines(device, pCreateInfos);
4104
Chia-I Wu69f40122015-10-26 21:10:41 +08004105 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004106
4107 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4108
4109 return result;
4110}
4111
4112bool PreCreateComputePipelines(
4113 VkDevice device,
4114 const VkComputePipelineCreateInfo* pCreateInfos)
4115{
4116 if(pCreateInfos != nullptr)
4117 {
4118 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4119 {
4120 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4121 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4122 return false;
4123 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004124 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004125 {
4126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4127 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4128 return false;
4129 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004130 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004131 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004132 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004133 {
4134 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004135 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004136 {
4137 }
4138 }
4139 }
4140
4141 return true;
4142}
4143
4144bool PostCreateComputePipelines(
4145 VkDevice device,
4146 VkPipelineCache pipelineCache,
4147 uint32_t count,
4148 VkPipeline* pPipelines,
4149 VkResult result)
4150{
4151
4152
4153
4154 if(pPipelines != nullptr)
4155 {
4156 }
4157
4158 if(result < VK_SUCCESS)
4159 {
4160 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4161 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4162 return false;
4163 }
4164
4165 return true;
4166}
4167
4168VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4169 VkDevice device,
4170 VkPipelineCache pipelineCache,
4171 uint32_t count,
4172 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu69f40122015-10-26 21:10:41 +08004173 const VkAllocCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004174 VkPipeline* pPipelines)
4175{
4176 PreCreateComputePipelines(device, pCreateInfos);
4177
Chia-I Wu69f40122015-10-26 21:10:41 +08004178 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004179
4180 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4181
4182 return result;
4183}
4184
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004185bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004186 VkDevice device,
4187 const VkPipelineLayoutCreateInfo* pCreateInfo)
4188{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004189 if(pCreateInfo != nullptr)
4190 {
4191 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004192 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004193 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004194 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4195 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004196 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004197 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004198 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004199 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004200 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004201 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004202 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004203 }
4204
4205 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004206}
4207
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004208bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004209 VkDevice device,
4210 VkPipelineLayout* pPipelineLayout,
4211 VkResult result)
4212{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004213
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004214 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004215 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004216 }
4217
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004218 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004219 {
4220 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4222 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004223 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004224
4225 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004226}
4227
4228VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4229 VkDevice device,
4230 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004231 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004232 VkPipelineLayout* pPipelineLayout)
4233{
4234 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004235
Chia-I Wu69f40122015-10-26 21:10:41 +08004236 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004237
4238 PostCreatePipelineLayout(device, pPipelineLayout, result);
4239
4240 return result;
4241}
4242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004243bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004244 VkDevice device,
4245 const VkSamplerCreateInfo* pCreateInfo)
4246{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004247 if(pCreateInfo != nullptr)
4248 {
4249 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004250 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004251 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004252 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004253 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004254 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004255 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4256 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004257 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004259 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004260 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004261 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004262 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4263 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004264 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004266 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004267 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004268 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004269 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4270 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004271 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004273 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004274 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004275 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004276 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4277 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004278 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004280 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004281 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004282 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004283 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4284 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004285 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004287 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004288 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004289 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004290 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4291 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004292 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004293 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004294 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004295 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004296 }
4297 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4298 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4299 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004300 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004301 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004302 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004303 }
4304 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4305 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4306 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004307 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004308 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004309 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004310 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004312
4313 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004314}
4315
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004316bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004317 VkDevice device,
4318 VkSampler* pSampler,
4319 VkResult result)
4320{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004321
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004322 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004323 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004324 }
4325
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004326 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004327 {
4328 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4330 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004331 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004332
4333 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004334}
4335
4336VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4337 VkDevice device,
4338 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004339 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004340 VkSampler* pSampler)
4341{
4342 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004343
Chia-I Wu69f40122015-10-26 21:10:41 +08004344 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004345
4346 PostCreateSampler(device, pSampler, result);
4347
4348 return result;
4349}
4350
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004351bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004352 VkDevice device,
4353 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4354{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004355 if(pCreateInfo != nullptr)
4356 {
4357 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004358 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004359 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004360 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004361 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004362 }
Chia-I Wu763a7492015-10-26 20:48:51 +08004363 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004364 {
Chia-I Wu763a7492015-10-26 20:48:51 +08004365 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4366 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004367 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004368 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004369 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004370 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004371 }
Chia-I Wu763a7492015-10-26 20:48:51 +08004372 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004374 }
4375 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004377
4378 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004379}
4380
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004381bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004382 VkDevice device,
4383 VkDescriptorSetLayout* pSetLayout,
4384 VkResult result)
4385{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004387 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004388 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004389 }
4390
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004391 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004392 {
4393 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004394 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4395 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004396 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004397
4398 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004399}
4400
4401VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4402 VkDevice device,
4403 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004404 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004405 VkDescriptorSetLayout* pSetLayout)
4406{
4407 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004408
Chia-I Wu69f40122015-10-26 21:10:41 +08004409 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004410
4411 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4412
4413 return result;
4414}
4415
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004416bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004417 VkDevice device,
4418 const VkDescriptorPoolCreateInfo* pCreateInfo)
4419{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004420 if(pCreateInfo != nullptr)
4421 {
4422 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004423 {
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 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004426 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004427 }
Chia-I Wu763a7492015-10-26 20:48:51 +08004428 if(pCreateInfo->pTypeCounts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004429 {
Chia-I Wu763a7492015-10-26 20:48:51 +08004430 if(pCreateInfo->pTypeCounts->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4431 pCreateInfo->pTypeCounts->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004432 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004434 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004435 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004436 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004437 }
4438 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004439
4440 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004441}
4442
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004443bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004444 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004445 uint32_t maxSets,
4446 VkDescriptorPool* pDescriptorPool,
4447 VkResult result)
4448{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004449
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004450 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004452 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004453 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004454 }
4455
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004456 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004457 {
4458 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4460 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004461 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004462
4463 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004464}
4465
4466VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4467 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004468 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004469 const VkAllocCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004470 VkDescriptorPool* pDescriptorPool)
4471{
4472 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004473
Chia-I Wu69f40122015-10-26 21:10:41 +08004474 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004475
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004476 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004477
4478 return result;
4479}
4480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004481bool PostResetDescriptorPool(
4482 VkDevice device,
4483 VkDescriptorPool descriptorPool,
4484 VkResult result)
4485{
4486
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004487
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004488 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004489 {
4490 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4492 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004493 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004494
4495 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004496}
4497
4498VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4499 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004500 VkDescriptorPool descriptorPool,
4501 VkDescriptorPoolResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004502{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004503 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004504
4505 PostResetDescriptorPool(device, descriptorPool, result);
4506
4507 return result;
4508}
4509
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004510bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004511 VkDevice device,
4512 const VkDescriptorSetLayout* pSetLayouts)
4513{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004514 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004515 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004516 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004517
4518 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004519}
4520
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004521bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004522 VkDevice device,
4523 VkDescriptorPool descriptorPool,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004524 uint32_t count,
4525 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004526 VkResult result)
4527{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004528
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004529
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004530 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004531 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004532 }
4533
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004534 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004535 {
4536 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004537 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4538 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004539 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004540
4541 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004542}
4543
4544VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4545 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004546 const VkDescriptorSetAllocInfo* pAllocInfo,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004547 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004548{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004549 PreAllocDescriptorSets(device, pAllocInfo->pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004550
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004551 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004552
Chia-I Wu763a7492015-10-26 20:48:51 +08004553 PostAllocDescriptorSets(device, pAllocInfo->descriptorPool, pAllocInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004554
4555 return result;
4556}
4557
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004558bool PreFreeDescriptorSets(
4559 VkDevice device,
4560 const VkDescriptorSet* pDescriptorSets)
4561{
4562 if(pDescriptorSets != nullptr)
4563 {
4564 }
4565
4566 return true;
4567}
4568
4569bool PostFreeDescriptorSets(
4570 VkDevice device,
4571 VkDescriptorPool descriptorPool,
4572 uint32_t count,
4573 VkResult result)
4574{
4575
4576
4577
4578 if(result < VK_SUCCESS)
4579 {
4580 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4581 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4582 return false;
4583 }
4584
4585 return true;
4586}
4587
4588VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4589 VkDevice device,
4590 VkDescriptorPool descriptorPool,
4591 uint32_t count,
4592 const VkDescriptorSet* pDescriptorSets)
4593{
4594 PreFreeDescriptorSets(device, pDescriptorSets);
4595
4596 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4597
4598 PostFreeDescriptorSets(device, descriptorPool, count, result);
4599
4600 return result;
4601}
4602
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004603bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004604 VkDevice device,
4605 const VkWriteDescriptorSet* pDescriptorWrites,
4606 const VkCopyDescriptorSet* pDescriptorCopies)
4607{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004608 if(pDescriptorWrites != nullptr)
4609 {
4610 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004611 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004612 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004613 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004614 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004615 }
4616 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4617 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4618 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004619 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004620 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004621 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004622 }
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004623 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4624 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4625 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004626 {
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004627 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4628 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004631 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004634 }
4635 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004636
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004637 if(pDescriptorCopies != nullptr)
4638 {
4639 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004640 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004641 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004642 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004644 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004645 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004646
4647 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004648}
4649
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004650VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004651 VkDevice device,
4652 uint32_t writeCount,
4653 const VkWriteDescriptorSet* pDescriptorWrites,
4654 uint32_t copyCount,
4655 const VkCopyDescriptorSet* pDescriptorCopies)
4656{
4657 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004658
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004659 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004660}
4661
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004662bool PreCreateFramebuffer(
4663 VkDevice device,
4664 const VkFramebufferCreateInfo* pCreateInfo)
4665{
4666 if(pCreateInfo != nullptr)
4667 {
4668 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4669 {
4670 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4671 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4672 return false;
4673 }
4674 if(pCreateInfo->pAttachments != nullptr)
4675 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004676 }
4677 }
4678
4679 return true;
4680}
4681
4682bool PostCreateFramebuffer(
4683 VkDevice device,
4684 VkFramebuffer* pFramebuffer,
4685 VkResult result)
4686{
4687
4688 if(pFramebuffer != nullptr)
4689 {
4690 }
4691
4692 if(result < VK_SUCCESS)
4693 {
4694 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4696 return false;
4697 }
4698
4699 return true;
4700}
4701
4702VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4703 VkDevice device,
4704 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004705 const VkAllocCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004706 VkFramebuffer* pFramebuffer)
4707{
4708 PreCreateFramebuffer(device, pCreateInfo);
4709
Chia-I Wu69f40122015-10-26 21:10:41 +08004710 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004711
4712 PostCreateFramebuffer(device, pFramebuffer, result);
4713
4714 return result;
4715}
4716
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004717bool PreCreateRenderPass(
4718 VkDevice device,
4719 const VkRenderPassCreateInfo* pCreateInfo)
4720{
4721 if(pCreateInfo != nullptr)
4722 {
4723 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4724 {
4725 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4726 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4727 return false;
4728 }
4729 if(pCreateInfo->pAttachments != nullptr)
4730 {
4731 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4732 {
4733 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4734 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4735 return false;
4736 }
4737 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4738 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4739 {
4740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4741 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4742 return false;
4743 }
4744 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4745 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4746 {
4747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4748 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4749 return false;
4750 }
4751 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4752 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4753 {
4754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4755 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4756 return false;
4757 }
4758 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4759 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4760 {
4761 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4762 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4763 return false;
4764 }
4765 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4766 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4767 {
4768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4769 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4770 return false;
4771 }
4772 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4773 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4774 {
4775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4776 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4777 return false;
4778 }
4779 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4780 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4781 {
4782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4783 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4784 return false;
4785 }
4786 }
4787 if(pCreateInfo->pSubpasses != nullptr)
4788 {
4789 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4790 {
4791 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4792 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4793 return false;
4794 }
4795 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4796 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4797 {
4798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4799 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4800 return false;
4801 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004802 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004803 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004804 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4805 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004806 {
4807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004808 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004809 return false;
4810 }
4811 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004812 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004813 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004814 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4815 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004816 {
4817 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004818 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004819 return false;
4820 }
4821 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004822 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004823 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004824 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4825 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004826 {
4827 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004828 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004829 return false;
4830 }
4831 }
4832 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4833 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
4834 {
4835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4836 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
4837 return false;
4838 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004839 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004840 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004841 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4842 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004843 {
4844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004845 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004846 return false;
4847 }
4848 }
4849 }
4850 if(pCreateInfo->pDependencies != nullptr)
4851 {
4852 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
4853 {
4854 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4855 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
4856 return false;
4857 }
4858 }
4859 }
4860
4861 return true;
4862}
4863
4864bool PostCreateRenderPass(
4865 VkDevice device,
4866 VkRenderPass* pRenderPass,
4867 VkResult result)
4868{
4869
4870 if(pRenderPass != nullptr)
4871 {
4872 }
4873
4874 if(result < VK_SUCCESS)
4875 {
4876 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4878 return false;
4879 }
4880
4881 return true;
4882}
4883
4884VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4885 VkDevice device,
4886 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004887 const VkAllocCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004888 VkRenderPass* pRenderPass)
4889{
4890 PreCreateRenderPass(device, pCreateInfo);
4891
Chia-I Wu69f40122015-10-26 21:10:41 +08004892 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004893
4894 PostCreateRenderPass(device, pRenderPass, result);
4895
4896 return result;
4897}
4898
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004899bool PostGetRenderAreaGranularity(
4900 VkDevice device,
4901 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004902 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004903{
4904
4905
4906 if(pGranularity != nullptr)
4907 {
4908 }
4909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004910 return true;
4911}
4912
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004913VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004914 VkDevice device,
4915 VkRenderPass renderPass,
4916 VkExtent2D* pGranularity)
4917{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004918 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004919
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004920 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004921}
4922
4923bool PreCreateCommandPool(
4924 VkDevice device,
4925 const VkCmdPoolCreateInfo* pCreateInfo)
4926{
4927 if(pCreateInfo != nullptr)
4928 {
4929 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
4930 {
4931 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4932 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4933 return false;
4934 }
4935 }
4936
4937 return true;
4938}
4939
4940bool PostCreateCommandPool(
4941 VkDevice device,
4942 VkCmdPool* pCmdPool,
4943 VkResult result)
4944{
4945
4946 if(pCmdPool != nullptr)
4947 {
4948 }
4949
4950 if(result < VK_SUCCESS)
4951 {
4952 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4953 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4954 return false;
4955 }
4956
4957 return true;
4958}
4959
4960VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4961 VkDevice device,
4962 const VkCmdPoolCreateInfo* pCreateInfo,
Chia-I Wu69f40122015-10-26 21:10:41 +08004963 const VkAllocCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004964 VkCmdPool* pCmdPool)
4965{
4966 PreCreateCommandPool(device, pCreateInfo);
4967
Chia-I Wu69f40122015-10-26 21:10:41 +08004968 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCmdPool);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004969
4970 PostCreateCommandPool(device, pCmdPool, result);
4971
4972 return result;
4973}
4974
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004975bool PostResetCommandPool(
4976 VkDevice device,
4977 VkCmdPool cmdPool,
4978 VkCmdPoolResetFlags flags,
4979 VkResult result)
4980{
4981
4982
4983
4984 if(result < VK_SUCCESS)
4985 {
4986 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4988 return false;
4989 }
4990
4991 return true;
4992}
4993
4994VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4995 VkDevice device,
4996 VkCmdPool cmdPool,
4997 VkCmdPoolResetFlags flags)
4998{
4999 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5000
5001 PostResetCommandPool(device, cmdPool, flags, result);
5002
5003 return result;
5004}
5005
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005006bool PreCreateCommandBuffer(
5007 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005008 const VkCmdBufferAllocInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005009{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005010 if(pCreateInfo != nullptr)
5011 {
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005012 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005013 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005014 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005015 "vkAllocCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005016 return false;
5017 }
5018 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5019 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5020 {
5021 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005022 "vkAllocCommandBuffers parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005023 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005024 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005025 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005026
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005027 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005028}
5029
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005030bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005031 VkDevice device,
5032 VkCmdBuffer* pCmdBuffer,
5033 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005034{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005035
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005036 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005037 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005038 }
5039
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005040 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005041 {
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005042 std::string reason = "vkAllocCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5044 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005045 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005046
5047 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005048}
5049
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005050VK_LAYER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005051 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005052 const VkCmdBufferAllocInfo* pCreateInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005053 VkCmdBuffer* pCmdBuffer)
5054{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005055 PreCreateCommandBuffer(device, pCreateInfo);
5056
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005057 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocCommandBuffers(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005058
5059 PostCreateCommandBuffer(device, pCmdBuffer, result);
5060
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005061 return result;
5062}
5063
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005064bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005065 VkCmdBuffer cmdBuffer,
5066 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005067{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005068 if(pBeginInfo != nullptr)
5069 {
5070 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005071 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005072 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005073 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005074 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005075 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005076 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005077
5078 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005079}
5080
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005081bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005082 VkCmdBuffer cmdBuffer,
5083 VkResult result)
5084{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005085
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005086 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005087 {
5088 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005089 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5090 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005091 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005092
5093 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005094}
5095
5096VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5097 VkCmdBuffer cmdBuffer,
5098 const VkCmdBufferBeginInfo* pBeginInfo)
5099{
5100 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005101
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005102 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5103
5104 PostBeginCommandBuffer(cmdBuffer, result);
5105
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005106 return result;
5107}
5108
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005109bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005110 VkCmdBuffer cmdBuffer,
5111 VkResult result)
5112{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005113
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005114 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005115 {
5116 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005117 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5118 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005119 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005120
5121 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005122}
5123
5124VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5125 VkCmdBuffer cmdBuffer)
5126{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005127 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5128
5129 PostEndCommandBuffer(cmdBuffer, result);
5130
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005131 return result;
5132}
5133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005134bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005135 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005136 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005137 VkResult result)
5138{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005139
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005140
5141 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005142 {
5143 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005144 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5145 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005146 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005147
5148 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005149}
5150
5151VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005152 VkCmdBuffer cmdBuffer,
5153 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005154{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005155 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005156
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005157 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005158
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005159 return result;
5160}
5161
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005162bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005163 VkCmdBuffer cmdBuffer,
5164 VkPipelineBindPoint pipelineBindPoint,
5165 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005166{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167
5168 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5169 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5170 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005171 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005172 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005173 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174 }
5175
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005176
5177 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005178}
5179
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005180VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5181 VkCmdBuffer cmdBuffer,
5182 VkPipelineBindPoint pipelineBindPoint,
5183 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005184{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005185 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5186
5187 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5188}
5189
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005190VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005191{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005192 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5193}
5194
5195VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5196{
5197 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005198}
5199
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005200VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005201{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005202 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005203}
5204
Chia-I Wufa950c52015-10-26 19:08:09 +08005205VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005206{
Chia-I Wufa950c52015-10-26 19:08:09 +08005207 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005208}
5209
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005210VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005211{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005212 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005213}
5214
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005215VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005216{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005217 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005218}
5219
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005220VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005221{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005222 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005223}
5224
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005225VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005226{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005227 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005228}
5229
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005230VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005231{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005232 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005233}
5234
5235bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005236 VkCmdBuffer cmdBuffer,
5237 const VkDescriptorSet* pDescriptorSets,
5238 const uint32_t* pDynamicOffsets)
5239{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005240 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005241 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005242 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005244 if(pDynamicOffsets != nullptr)
5245 {
5246 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005247
5248 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005249}
5250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005251bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005252 VkCmdBuffer cmdBuffer,
5253 VkPipelineBindPoint pipelineBindPoint,
5254 VkPipelineLayout layout,
5255 uint32_t firstSet,
5256 uint32_t setCount,
5257 uint32_t dynamicOffsetCount)
5258{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005259
5260 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5261 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5262 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005263 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005264 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005265 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005266 }
5267
5268
5269
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005270
5271
5272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273}
5274
5275VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5276 VkCmdBuffer cmdBuffer,
5277 VkPipelineBindPoint pipelineBindPoint,
5278 VkPipelineLayout layout,
5279 uint32_t firstSet,
5280 uint32_t setCount,
5281 const VkDescriptorSet* pDescriptorSets,
5282 uint32_t dynamicOffsetCount,
5283 const uint32_t* pDynamicOffsets)
5284{
5285 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005286
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005287 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5288
5289 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5290}
5291
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005292bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005293 VkCmdBuffer cmdBuffer,
5294 VkBuffer buffer,
5295 VkDeviceSize offset,
5296 VkIndexType indexType)
5297{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005298
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299
5300
5301 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5302 indexType > VK_INDEX_TYPE_END_RANGE)
5303 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005304 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005305 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005306 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005307 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005308
5309 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005310}
5311
5312VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5313 VkCmdBuffer cmdBuffer,
5314 VkBuffer buffer,
5315 VkDeviceSize offset,
5316 VkIndexType indexType)
5317{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5319
5320 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5321}
5322
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005323bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005324 VkCmdBuffer cmdBuffer,
5325 const VkBuffer* pBuffers,
5326 const VkDeviceSize* pOffsets)
5327{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005328 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005329 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005330 }
5331
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005332 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005333 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005334 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005335
5336 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005337}
5338
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005339bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005340 VkCmdBuffer cmdBuffer,
5341 uint32_t startBinding,
5342 uint32_t bindingCount)
5343{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005344
5345
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005346
5347 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005348}
5349
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005350VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005351 VkCmdBuffer cmdBuffer,
5352 uint32_t startBinding,
5353 uint32_t bindingCount,
5354 const VkBuffer* pBuffers,
5355 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005357 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005358
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5360
5361 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005362}
5363
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005364bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005365 VkCmdBuffer cmdBuffer,
5366 uint32_t firstVertex,
5367 uint32_t vertexCount,
5368 uint32_t firstInstance,
5369 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005370{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005371
5372
5373
5374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005375
5376 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005377}
5378
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005379VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5380 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005382 uint32_t instanceCount,
5383 uint32_t firstVertex,
5384 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005385{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005387
5388 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005389}
5390
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005391bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005392 VkCmdBuffer cmdBuffer,
5393 uint32_t firstIndex,
5394 uint32_t indexCount,
5395 int32_t vertexOffset,
5396 uint32_t firstInstance,
5397 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005398{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005399
5400
5401
5402
5403
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005404
5405 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005406}
5407
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005408VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5409 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005411 uint32_t instanceCount,
5412 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005414 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005415{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005416 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005417
5418 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5419}
5420
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005421bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005422 VkCmdBuffer cmdBuffer,
5423 VkBuffer buffer,
5424 VkDeviceSize offset,
5425 uint32_t count,
5426 uint32_t stride)
5427{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005428
5429
5430
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005431
5432
5433 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005434}
5435
5436VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5437 VkCmdBuffer cmdBuffer,
5438 VkBuffer buffer,
5439 VkDeviceSize offset,
5440 uint32_t count,
5441 uint32_t stride)
5442{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005443 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5444
5445 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5446}
5447
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005448bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005449 VkCmdBuffer cmdBuffer,
5450 VkBuffer buffer,
5451 VkDeviceSize offset,
5452 uint32_t count,
5453 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005454{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005455
5456
5457
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005458
5459
5460 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005461}
5462
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005463VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5464 VkCmdBuffer cmdBuffer,
5465 VkBuffer buffer,
5466 VkDeviceSize offset,
5467 uint32_t count,
5468 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005469{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005470 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5471
5472 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5473}
5474
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005475bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005476 VkCmdBuffer cmdBuffer,
5477 uint32_t x,
5478 uint32_t y,
5479 uint32_t z)
5480{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005481
5482
5483
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005484
5485 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005486}
5487
5488VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5489 VkCmdBuffer cmdBuffer,
5490 uint32_t x,
5491 uint32_t y,
5492 uint32_t z)
5493{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5495
5496 PostCmdDispatch(cmdBuffer, x, y, z);
5497}
5498
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005499bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 VkCmdBuffer cmdBuffer,
5501 VkBuffer buffer,
5502 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005503{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005504
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005505
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005506
5507 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005508}
5509
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005510VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5511 VkCmdBuffer cmdBuffer,
5512 VkBuffer buffer,
5513 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005514{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005515 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5516
5517 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005518}
5519
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005520bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005521 VkCmdBuffer cmdBuffer,
5522 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005523{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005524 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005525 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005527
5528 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529}
5530
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005531bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005532 VkCmdBuffer cmdBuffer,
5533 VkBuffer srcBuffer,
5534 VkBuffer destBuffer,
5535 uint32_t regionCount)
5536{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005537
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005538
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005539
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005540
5541 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005542}
5543
5544VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5545 VkCmdBuffer cmdBuffer,
5546 VkBuffer srcBuffer,
5547 VkBuffer destBuffer,
5548 uint32_t regionCount,
5549 const VkBufferCopy* pRegions)
5550{
5551 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005552
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5554
5555 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5556}
5557
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005558bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005559 VkCmdBuffer cmdBuffer,
5560 const VkImageCopy* pRegions)
5561{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005562 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005563 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005564 if ((pRegions->srcSubresource.aspect &
5565 (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 -06005566 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005567 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005568 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005569 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005570 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005571 if ((pRegions->destSubresource.aspect &
5572 (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 -06005573 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005574 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005575 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005576 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005578 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005579
5580 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581}
5582
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005583bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005584 VkCmdBuffer cmdBuffer,
5585 VkImage srcImage,
5586 VkImageLayout srcImageLayout,
5587 VkImage destImage,
5588 VkImageLayout destImageLayout,
5589 uint32_t regionCount)
5590{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005591
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592
5593 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5594 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5595 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005597 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005598 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005599 }
5600
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601
5602 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5603 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5604 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005605 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005606 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005607 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005608 }
5609
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005610
5611 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005612}
5613
5614VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5615 VkCmdBuffer cmdBuffer,
5616 VkImage srcImage,
5617 VkImageLayout srcImageLayout,
5618 VkImage destImage,
5619 VkImageLayout destImageLayout,
5620 uint32_t regionCount,
5621 const VkImageCopy* pRegions)
5622{
5623 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005624
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005625 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5626
5627 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5628}
5629
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005630bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005631 VkCmdBuffer cmdBuffer,
5632 const VkImageBlit* pRegions)
5633{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005634 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005636 if ((pRegions->srcSubresource.aspect &
5637 (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 -06005638 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005639 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005640 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005641 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005642 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005643 if ((pRegions->destSubresource.aspect &
5644 (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 -06005645 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005646 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005647 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005648 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005649 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005650 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005651
5652 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005653}
5654
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005655bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005656 VkCmdBuffer cmdBuffer,
5657 VkImage srcImage,
5658 VkImageLayout srcImageLayout,
5659 VkImage destImage,
5660 VkImageLayout destImageLayout,
5661 uint32_t regionCount,
Chia-I Wu3603b082015-10-26 16:49:32 +08005662 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665
5666 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5667 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5668 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005669 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005670 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005671 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672 }
5673
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005674
5675 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5676 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5677 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005678 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005679 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005680 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005681 }
5682
5683
Chia-I Wu3603b082015-10-26 16:49:32 +08005684 if(filter < VK_FILTER_BEGIN_RANGE ||
5685 filter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005686 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005687 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08005688 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005689 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005690 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005691
5692 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005693}
5694
5695VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5696 VkCmdBuffer cmdBuffer,
5697 VkImage srcImage,
5698 VkImageLayout srcImageLayout,
5699 VkImage destImage,
5700 VkImageLayout destImageLayout,
5701 uint32_t regionCount,
5702 const VkImageBlit* pRegions,
Chia-I Wu3603b082015-10-26 16:49:32 +08005703 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005704{
5705 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005706
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005707 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5708
5709 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5710}
5711
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005712bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005713 VkCmdBuffer cmdBuffer,
5714 const VkBufferImageCopy* pRegions)
5715{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005716 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005717 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005718 if ((pRegions->imageSubresource.aspect &
5719 (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 -06005720 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005721 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005722 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005723 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005724 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005725 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005726
5727 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005728}
5729
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005730bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005731 VkCmdBuffer cmdBuffer,
5732 VkBuffer srcBuffer,
5733 VkImage destImage,
5734 VkImageLayout destImageLayout,
5735 uint32_t regionCount)
5736{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005737
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005738
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005739
5740 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5741 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5742 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005743 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005744 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005745 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005746 }
5747
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005748
5749 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005750}
5751
5752VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5753 VkCmdBuffer cmdBuffer,
5754 VkBuffer srcBuffer,
5755 VkImage destImage,
5756 VkImageLayout destImageLayout,
5757 uint32_t regionCount,
5758 const VkBufferImageCopy* pRegions)
5759{
5760 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005761
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005762 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5763
5764 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5765}
5766
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005767bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005768 VkCmdBuffer cmdBuffer,
5769 const VkBufferImageCopy* pRegions)
5770{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005771 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005773 if ((pRegions->imageSubresource.aspect &
5774 (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 -06005775 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005776 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005777 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005778 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005779 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005780 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005781
5782 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783}
5784
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005785bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005786 VkCmdBuffer cmdBuffer,
5787 VkImage srcImage,
5788 VkImageLayout srcImageLayout,
5789 VkBuffer destBuffer,
5790 uint32_t regionCount)
5791{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005792
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005793
5794 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5795 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5796 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005797 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005798 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005799 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005800 }
5801
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005803
5804 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805}
5806
5807VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5808 VkCmdBuffer cmdBuffer,
5809 VkImage srcImage,
5810 VkImageLayout srcImageLayout,
5811 VkBuffer destBuffer,
5812 uint32_t regionCount,
5813 const VkBufferImageCopy* pRegions)
5814{
5815 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005816
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005817 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5818
5819 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5820}
5821
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005822bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005823 VkCmdBuffer cmdBuffer,
5824 const uint32_t* pData)
5825{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005826 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005827 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829
5830 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831}
5832
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005833bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005834 VkCmdBuffer cmdBuffer,
5835 VkBuffer destBuffer,
5836 VkDeviceSize destOffset,
5837 VkDeviceSize dataSize)
5838{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005839
5840
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005841
5842
5843 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005844}
5845
5846VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
5847 VkCmdBuffer cmdBuffer,
5848 VkBuffer destBuffer,
5849 VkDeviceSize destOffset,
5850 VkDeviceSize dataSize,
5851 const uint32_t* pData)
5852{
5853 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005854
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005855 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
5856
5857 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
5858}
5859
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005860bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005861 VkCmdBuffer cmdBuffer,
5862 VkBuffer destBuffer,
5863 VkDeviceSize destOffset,
5864 VkDeviceSize fillSize,
5865 uint32_t data)
5866{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005867
5868
5869
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005870
5871
5872 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005873}
5874
5875VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
5876 VkCmdBuffer cmdBuffer,
5877 VkBuffer destBuffer,
5878 VkDeviceSize destOffset,
5879 VkDeviceSize fillSize,
5880 uint32_t data)
5881{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005882 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
5883
5884 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
5885}
5886
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005887bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005888 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12005889 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005890 const VkImageSubresourceRange* pRanges)
5891{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005892 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005893 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005894 }
5895
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005896 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005898 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005899 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005900
5901 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005902}
5903
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005904bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005905 VkCmdBuffer cmdBuffer,
5906 VkImage image,
5907 VkImageLayout imageLayout,
5908 uint32_t rangeCount)
5909{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005911
5912 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5913 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5914 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005915 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005916 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005917 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005918 }
5919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005920
5921 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922}
5923
5924VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
5925 VkCmdBuffer cmdBuffer,
5926 VkImage image,
5927 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12005928 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929 uint32_t rangeCount,
5930 const VkImageSubresourceRange* pRanges)
5931{
5932 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005933
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005934 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
5935
5936 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
5937}
5938
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005939bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005940 VkCmdBuffer cmdBuffer,
5941 const VkImageSubresourceRange* pRanges)
5942{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005943 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005944 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005945 /*
5946 * TODO: How do we validation pRanges->aspectMask?
5947 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5948 * VK_IMAGE_ASPECT_STENCIL_BIT.
5949 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005950 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005951
5952 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953}
5954
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005955bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005956 VkCmdBuffer cmdBuffer,
5957 VkImage image,
5958 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005959 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005960 uint32_t rangeCount)
5961{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005962
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005963
5964 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5965 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5966 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005967 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005968 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005969 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005970 }
5971
5972
5973
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974
5975 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005976}
5977
Chris Forbes2951d7d2015-06-22 17:21:59 +12005978VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005979 VkCmdBuffer cmdBuffer,
5980 VkImage image,
5981 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005982 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005983 uint32_t rangeCount,
5984 const VkImageSubresourceRange* pRanges)
5985{
Chris Forbes2951d7d2015-06-22 17:21:59 +12005986 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005987
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005988 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005989
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005990 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005991}
5992
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005993bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005994 VkCmdBuffer cmdBuffer,
5995 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005996 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005997{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005998 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005999 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006000 }
6001
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006002 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006003 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006004 }
6005
6006 return true;
6007}
6008
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006009VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6010 VkCmdBuffer cmdBuffer,
6011 uint32_t attachmentCount,
6012 const VkClearAttachment* pAttachments,
6013 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006014 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006015{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006016 for (uint32_t i = 0; i < attachmentCount; i++) {
6017 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006018 }
6019
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006020 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006021}
6022
6023bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006024 VkCmdBuffer cmdBuffer,
6025 const VkImageResolve* pRegions)
6026{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006027 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006028 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006029 if ((pRegions->srcSubresource.aspect &
6030 (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 -06006031 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006032 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006033 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006034 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006036 if ((pRegions->destSubresource.aspect &
6037 (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 -06006038 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006039 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006040 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006041 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006043 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006044
6045 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046}
6047
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006048bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049 VkCmdBuffer cmdBuffer,
6050 VkImage srcImage,
6051 VkImageLayout srcImageLayout,
6052 VkImage destImage,
6053 VkImageLayout destImageLayout,
6054 uint32_t regionCount)
6055{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006057
6058 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6059 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6060 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006061 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006062 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006063 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006064 }
6065
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006066
6067 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6068 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6069 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006070 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006071 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006072 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073 }
6074
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006075
6076 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077}
6078
6079VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6080 VkCmdBuffer cmdBuffer,
6081 VkImage srcImage,
6082 VkImageLayout srcImageLayout,
6083 VkImage destImage,
6084 VkImageLayout destImageLayout,
6085 uint32_t regionCount,
6086 const VkImageResolve* pRegions)
6087{
6088 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006089
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6091
6092 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6093}
6094
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006095bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006096 VkCmdBuffer cmdBuffer,
6097 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006098 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006100
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006102
6103 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006104}
6105
6106VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6107 VkCmdBuffer cmdBuffer,
6108 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006109 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006110{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006111 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006112
Tony Barbourc2e987e2015-06-29 16:20:35 -06006113 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006114}
6115
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006116bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006117 VkCmdBuffer cmdBuffer,
6118 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006119 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006120{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006121
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006122
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006123
6124 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006125}
6126
6127VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6128 VkCmdBuffer cmdBuffer,
6129 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006130 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006131{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006132 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006133
Tony Barbourc2e987e2015-06-29 16:20:35 -06006134 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006135}
6136
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006137bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138 VkCmdBuffer cmdBuffer,
6139 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006140 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006141{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006142 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006143 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006144 }
6145
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006146 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006147 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006148 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006149
6150 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006151}
6152
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006153bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006154 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006155 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006156 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006157 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006158 uint32_t memBarrierCount)
6159{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006160
Tony Barbourc2e987e2015-06-29 16:20:35 -06006161
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006162
6163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006164
6165 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006166}
6167
6168VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6169 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006170 uint32_t eventCount,
6171 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006172 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006173 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006174 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006175 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006176{
6177 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006178
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006179 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006180
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006181 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006182}
6183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006184bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006185 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006186 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006187{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006188 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006189 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006190 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006191
6192 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006193}
6194
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006195bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006196 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006197 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006198 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006199 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006200 uint32_t memBarrierCount)
6201{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006202
Tony Barbourc2e987e2015-06-29 16:20:35 -06006203
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006204
6205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006206
6207 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006208}
6209
6210VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6211 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006212 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006213 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006214 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006215 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006216 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006217{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006218 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006219
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006220 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006221
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006222 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006223}
6224
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006225bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006226 VkCmdBuffer cmdBuffer,
6227 VkQueryPool queryPool,
6228 uint32_t slot,
6229 VkQueryControlFlags flags)
6230{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006232
6233
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006234
6235 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006236}
6237
6238VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6239 VkCmdBuffer cmdBuffer,
6240 VkQueryPool queryPool,
6241 uint32_t slot,
6242 VkQueryControlFlags flags)
6243{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006244 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6245
6246 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6247}
6248
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006249bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006250 VkCmdBuffer cmdBuffer,
6251 VkQueryPool queryPool,
6252 uint32_t slot)
6253{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006254
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006255
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006256
6257 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006258}
6259
6260VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6261 VkCmdBuffer cmdBuffer,
6262 VkQueryPool queryPool,
6263 uint32_t slot)
6264{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006265 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6266
6267 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6268}
6269
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006270bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006271 VkCmdBuffer cmdBuffer,
6272 VkQueryPool queryPool,
6273 uint32_t startQuery,
6274 uint32_t queryCount)
6275{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006276
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006277
6278
6279
6280 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006281}
6282
6283VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6284 VkCmdBuffer cmdBuffer,
6285 VkQueryPool queryPool,
6286 uint32_t startQuery,
6287 uint32_t queryCount)
6288{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006289 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6290
6291 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6292}
6293
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006294bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006295 VkCmdBuffer cmdBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006296 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006297 VkQueryPool queryPool,
6298 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006299{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006300
Chia-I Wu59c215d2015-10-26 19:40:27 +08006301 ValidateEnumerator(pipelineStage);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006302
6303 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006304}
6305
6306VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6307 VkCmdBuffer cmdBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006308 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006309 VkQueryPool queryPool,
6310 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006311{
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006312 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006313
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006314 PostCmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006315}
6316
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006317bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006318 VkCmdBuffer cmdBuffer,
6319 VkQueryPool queryPool,
6320 uint32_t startQuery,
6321 uint32_t queryCount,
6322 VkBuffer destBuffer,
6323 VkDeviceSize destOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006324 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006325 VkQueryResultFlags flags)
6326{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006327
6328
6329
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006330
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006331
6332
6333
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006334
6335 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006336}
6337
Jeremy Hayescf469132015-04-17 10:36:53 -06006338VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006339 VkCmdBuffer cmdBuffer,
6340 VkQueryPool queryPool,
6341 uint32_t startQuery,
6342 uint32_t queryCount,
6343 VkBuffer destBuffer,
6344 VkDeviceSize destOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006345 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006346 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006347{
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006348 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006349
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006350 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006351}
6352
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006353bool PreCmdPushConstants(
6354 VkCmdBuffer cmdBuffer,
6355 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006356{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006357 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006358 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006359 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006360
6361 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006362}
6363
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006364bool PostCmdPushConstants(
6365 VkCmdBuffer cmdBuffer,
6366 VkPipelineLayout layout,
6367 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006368 uint32_t offset,
6369 uint32_t size)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006370{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006371
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006372
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006373
6374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006375
6376 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006377}
6378
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006379VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6380 VkCmdBuffer cmdBuffer,
6381 VkPipelineLayout layout,
6382 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006383 uint32_t offset,
6384 uint32_t size,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006385 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006386{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006387 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006388
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006389 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006390
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006391 PostCmdPushConstants(cmdBuffer, layout, stageFlags, offset, size);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006392}
6393
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006394bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006395 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006396 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006397{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006398 if(pRenderPassBegin != nullptr)
6399 {
6400 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006401 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006402 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006403 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006404 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006405 }
Cody Northropc332eef2015-08-04 11:51:03 -06006406 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006407 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006408 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006409 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006410
6411 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006412}
6413
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006414bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006415 VkCmdBuffer cmdBuffer,
6416 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006417{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006418
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006419 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6420 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6421 {
6422 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6423 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6424 return false;
6425 }
6426
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006427 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006428}
6429
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006430VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6431 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006432 const VkRenderPassBeginInfo* pRenderPassBegin,
6433 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006434{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006435 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6436
Chia-I Wuc278df82015-07-07 11:50:03 +08006437 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006438
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006439 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006440}
6441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006442bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006443 VkCmdBuffer cmdBuffer,
6444 VkRenderPassContents contents)
6445{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006446
6447 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006448 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006449 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006450 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006451 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6452 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006453 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006454
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006455 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006456}
6457
6458VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6459 VkCmdBuffer cmdBuffer,
6460 VkRenderPassContents contents)
6461{
Chia-I Wuc278df82015-07-07 11:50:03 +08006462 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6463
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006464 PostCmdNextSubpass(cmdBuffer, contents);
6465}
6466
6467bool PostCmdEndRenderPass(
6468 VkCmdBuffer cmdBuffer)
6469{
6470
6471 return true;
6472}
6473
6474VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6475 VkCmdBuffer cmdBuffer)
6476{
6477 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6478
6479 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006480}
6481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006482bool PreCmdExecuteCommands(
6483 VkCmdBuffer cmdBuffer,
6484 const VkCmdBuffer* pCmdBuffers)
6485{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006486 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006487 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006488 }
6489
6490 return true;
6491}
6492
6493bool PostCmdExecuteCommands(
6494 VkCmdBuffer cmdBuffer,
6495 uint32_t cmdBuffersCount)
6496{
6497
6498
6499 return true;
6500}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006501
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006502VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006503 VkCmdBuffer cmdBuffer,
6504 uint32_t cmdBuffersCount,
6505 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006506{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006507 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6508
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006509 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6510
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006511 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006512}
6513
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006514VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006515{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006516 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006517 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006518 }
6519
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006520 /* loader uses this to force layer initialization; device object is wrapped */
6521 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006523 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006524 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006525
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006526 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006571 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006573 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006577 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006580 if (!strcmp(funcName, "vkCreateShaderModule"))
6581 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006582 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006584 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006598 if (!strcmp(funcName, "vkCmdSetViewport"))
6599 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006600 if (!strcmp(funcName, "vkCmdSetScissor"))
6601 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006602 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6603 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6604 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6605 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6606 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6607 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6608 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6609 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6610 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6611 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6612 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6613 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6614 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6615 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06006616 if (!strcmp(funcName, "vkAllocCommandBuffers"))
6617 return (PFN_vkVoidFunction) vkAllocCommandBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006618 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006619 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006620 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006621 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006622 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006623 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006624 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006625 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006626 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006627 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006628 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006629 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006630 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006631 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006632 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006633 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006634 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006635 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006636 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006637 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006638 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006639 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006640 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006641 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006642 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006643 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006644 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006645 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006646 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006647 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006648 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006649 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006650 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006651 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006652 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006653 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006654 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006655 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006656 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006657 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006658 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006659 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006660 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006661 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006662 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006663 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006664 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006665 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006666 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006667 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006668 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006669 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006670 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006671 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006672 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006673 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006674 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006675 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006676 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006677 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006678 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006679 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006680 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006681 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006682 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006683 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006684 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006685 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006686 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006687 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006688
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006689 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006691 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006692 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006693 }
6694}
6695
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006696VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006697{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006698 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006699 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006700 }
6701
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006702 /* loader uses this to force layer initialization; instance object is wrapped */
6703 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006704 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006705 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006706 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006707
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006709 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006710 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006711 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006712 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006713 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006714 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006715 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006717 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006718 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006719 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006720 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6721 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6722 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6723 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6724 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6725 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6726 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6727 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006728
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006730 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006732 return fptr;
6733
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734 {
6735 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6736 return NULL;
6737 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6738 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006739}