blob: 30d345de98f486248454532217076f3046f51286 [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
Michael Lentine03d8e572015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-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 Lobodzinski2eed1eb2015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060035
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060041
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060046
Cody Northrop55443ef2015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050055
Jeremy Hayes99a96322015-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 Hayesa8b1a8d2015-04-06 13:46:11 -060059
Jeremy Hayes99a96322015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060062{
Jeremy Hayes99a96322015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-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 Goeltzenleuchter876a4f52015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-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 Goeltzenleuchter876a4f52015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayes99a96322015-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 Ehlisb1df55e2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterd29f4f02015-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 Hayes99a96322015-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 Goeltzenleuchterf13293f2015-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 Barbour59a47322015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700173 if (pLayerName == NULL) {
174 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
175 physicalDevice,
176 NULL,
177 pCount,
178 pProperties);
179 } else {
180 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
181 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600182}
183
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600184VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600185 VkPhysicalDevice physicalDevice,
186 uint32_t* pCount,
187 VkLayerProperties* pProperties)
188{
189 /* ParamChecker's physical device layers are the same as global */
190 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
191 pCount, pProperties);
192}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600193
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600194// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600195
Jeremy Hayes99a96322015-06-26 12:48:09 -0600196static
197std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600198{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600199 switch(enumerator)
200 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600201 case VK_RESULT_MAX_ENUM:
202 {
203 return "VK_RESULT_MAX_ENUM";
204 break;
205 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600206 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600207 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600208 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600209 break;
210 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600211 case VK_ERROR_INCOMPATIBLE_DRIVER:
212 {
213 return "VK_ERROR_INCOMPATIBLE_DRIVER";
214 break;
215 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600216 case VK_ERROR_MEMORY_MAP_FAILED:
217 {
218 return "VK_ERROR_MEMORY_MAP_FAILED";
219 break;
220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600221 case VK_INCOMPLETE:
222 {
223 return "VK_INCOMPLETE";
224 break;
225 }
226 case VK_ERROR_OUT_OF_HOST_MEMORY:
227 {
228 return "VK_ERROR_OUT_OF_HOST_MEMORY";
229 break;
230 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600231 case VK_ERROR_INITIALIZATION_FAILED:
232 {
233 return "VK_ERROR_INITIALIZATION_FAILED";
234 break;
235 }
236 case VK_NOT_READY:
237 {
238 return "VK_NOT_READY";
239 break;
240 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600241 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
242 {
243 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
244 break;
245 }
246 case VK_EVENT_SET:
247 {
248 return "VK_EVENT_SET";
249 break;
250 }
251 case VK_TIMEOUT:
252 {
253 return "VK_TIMEOUT";
254 break;
255 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600256 case VK_EVENT_RESET:
257 {
258 return "VK_EVENT_RESET";
259 break;
260 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600261 case VK_SUCCESS:
262 {
263 return "VK_SUCCESS";
264 break;
265 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600266 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600267 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600268 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600269 break;
270 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600271 case VK_ERROR_DEVICE_LOST:
272 {
273 return "VK_ERROR_DEVICE_LOST";
274 break;
275 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600276 default:
277 {
278 return "unrecognized enumerator";
279 break;
280 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600281 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600282}
283
284static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600285bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
286{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600287 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600288 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
289 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
290 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
291 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
292 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
293 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
294 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
295 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
296 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600297 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800298 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
299 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600300 if(enumerator & (~allFlags))
301 {
302 return false;
303 }
304
305 return true;
306}
307
308static
309std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
310{
311 if(!ValidateEnumerator(enumerator))
312 {
313 return "unrecognized enumerator";
314 }
315
316 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600317 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
318 {
319 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
320 }
321 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
322 {
323 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
324 }
325 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
326 {
327 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
328 }
329 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
330 {
331 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
332 }
333 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
334 {
335 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
336 }
337 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
338 {
339 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
340 }
341 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
342 {
343 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
344 }
345 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
346 {
347 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
348 }
349 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
350 {
351 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
352 }
353 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
354 {
355 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
356 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800357 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600358 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800359 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600360 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800361 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600362 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800363 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600364 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600365
366 std::string enumeratorString;
367 for(auto const& string : strings)
368 {
369 enumeratorString += string;
370
371 if(string != strings.back())
372 {
373 enumeratorString += '|';
374 }
375 }
376
377 return enumeratorString;
378}
379
380static
381bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
382{
383 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600384 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600385 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
386 VK_IMAGE_USAGE_STORAGE_BIT |
387 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800388 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600389 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800390 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600391 if(enumerator & (~allFlags))
392 {
393 return false;
394 }
395
396 return true;
397}
398
399static
400std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
401{
402 if(!ValidateEnumerator(enumerator))
403 {
404 return "unrecognized enumerator";
405 }
406
407 std::vector<std::string> strings;
408 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
409 {
410 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
411 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600412 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600413 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600414 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600415 }
416 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
417 {
418 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
419 }
420 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
421 {
422 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
423 }
424 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
425 {
426 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
427 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800428 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600429 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800430 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600431 }
432 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
433 {
434 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
435 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800436 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600437 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800438 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600439 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600440
441 std::string enumeratorString;
442 for(auto const& string : strings)
443 {
444 enumeratorString += string;
445
446 if(string != strings.back())
447 {
448 enumeratorString += '|';
449 }
450 }
451
452 return enumeratorString;
453}
454
455static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600456bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
457{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800458 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800459 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600460 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800461 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600462 VK_QUEUE_GRAPHICS_BIT);
463 if(enumerator & (~allFlags))
464 {
465 return false;
466 }
467
468 return true;
469}
470
471static
472std::string EnumeratorString(VkQueueFlagBits const& enumerator)
473{
474 if(!ValidateEnumerator(enumerator))
475 {
476 return "unrecognized enumerator";
477 }
478
479 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800480 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600481 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800482 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600483 }
484 if(enumerator & VK_QUEUE_COMPUTE_BIT)
485 {
486 strings.push_back("VK_QUEUE_COMPUTE_BIT");
487 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800488 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600489 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800490 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600491 }
492 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
493 {
494 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
495 }
496
497 std::string enumeratorString;
498 for(auto const& string : strings)
499 {
500 enumeratorString += string;
501
502 if(string != strings.back())
503 {
504 enumeratorString += '|';
505 }
506 }
507
508 return enumeratorString;
509}
510
511static
512bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
513{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600514 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800515 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600516 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800517 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
518 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600519 if(enumerator & (~allFlags))
520 {
521 return false;
522 }
523
524 return true;
525}
526
527static
528std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
529{
530 if(!ValidateEnumerator(enumerator))
531 {
532 return "unrecognized enumerator";
533 }
534
535 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600536 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
539 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800540 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600541 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800542 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600543 }
544 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
547 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800548 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600549 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800550 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600551 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800552 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600553 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800554 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600555 }
556
557 std::string enumeratorString;
558 for(auto const& string : strings)
559 {
560 enumeratorString += string;
561
562 if(string != strings.back())
563 {
564 enumeratorString += '|';
565 }
566 }
567
568 return enumeratorString;
569}
570
571static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600572bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600573{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800574 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600575 if(enumerator & (~allFlags))
576 {
577 return false;
578 }
579
580 return true;
581}
582
583static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600584std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585{
586 if(!ValidateEnumerator(enumerator))
587 {
588 return "unrecognized enumerator";
589 }
590
591 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800592 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600593 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800594 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600595 }
596
597 std::string enumeratorString;
598 for(auto const& string : strings)
599 {
600 enumeratorString += string;
601
602 if(string != strings.back())
603 {
604 enumeratorString += '|';
605 }
606 }
607
608 return enumeratorString;
609}
610
611static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600612bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
613{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800614 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
615 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
616 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600617 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600618 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600619 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600620 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600621
622 return true;
623}
624
625static
626std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
627{
628 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600629 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600630 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600631 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600632
633 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800634 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800636 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600637 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800638 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600639 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800640 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600641 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800642 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600643 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800644 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600645 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646
647 std::string enumeratorString;
648 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600649 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600650 enumeratorString += string;
651
652 if(string != strings.back())
653 {
654 enumeratorString += '|';
655 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600656 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600657
658 return enumeratorString;
659}
660
661static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600662bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
663{
664 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
665 if(enumerator & (~allFlags))
666 {
667 return false;
668 }
669
670 return true;
671}
672
673static
674std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
675{
676 if(!ValidateEnumerator(enumerator))
677 {
678 return "unrecognized enumerator";
679 }
680
681 std::vector<std::string> strings;
682 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
683 {
684 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
685 }
686
687 std::string enumeratorString;
688 for(auto const& string : strings)
689 {
690 enumeratorString += string;
691
692 if(string != strings.back())
693 {
694 enumeratorString += '|';
695 }
696 }
697
698 return enumeratorString;
699}
700
701static
702bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
703{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600704 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
705 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
706 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
707 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
708 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
709 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
710 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
711 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
712 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
713 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
714 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600715 if(enumerator & (~allFlags))
716 {
717 return false;
718 }
719
720 return true;
721}
722
723static
724std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
725{
726 if(!ValidateEnumerator(enumerator))
727 {
728 return "unrecognized enumerator";
729 }
730
731 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600732 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600733 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600734 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600735 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600736 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600737 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600738 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600739 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600740 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600741 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600742 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600743 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600744 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600745 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600746 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600747 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600748 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600749 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600750 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600751 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600752 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600753 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600754 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600755 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600756 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600757 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600758 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600759 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600760 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600761 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600762 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600763 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600764 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600765 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600766 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600771 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600773 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600774 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 }
776
777 std::string enumeratorString;
778 for(auto const& string : strings)
779 {
780 enumeratorString += string;
781
782 if(string != strings.back())
783 {
784 enumeratorString += '|';
785 }
786 }
787
788 return enumeratorString;
789}
790
791static
792bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
793{
794 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
795 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
796 VK_QUERY_RESULT_WAIT_BIT |
797 VK_QUERY_RESULT_64_BIT |
798 VK_QUERY_RESULT_DEFAULT);
799 if(enumerator & (~allFlags))
800 {
801 return false;
802 }
803
804 return true;
805}
806
807static
808std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
809{
810 if(!ValidateEnumerator(enumerator))
811 {
812 return "unrecognized enumerator";
813 }
814
815 std::vector<std::string> strings;
816 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
817 {
818 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
819 }
820 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
821 {
822 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
823 }
824 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
825 {
826 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
827 }
828 if(enumerator & VK_QUERY_RESULT_64_BIT)
829 {
830 strings.push_back("VK_QUERY_RESULT_64_BIT");
831 }
832 if(enumerator & VK_QUERY_RESULT_DEFAULT)
833 {
834 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600835 }
836
837 std::string enumeratorString;
838 for(auto const& string : strings)
839 {
840 enumeratorString += string;
841
842 if(string != strings.back())
843 {
844 enumeratorString += '|';
845 }
846 }
847
848 return enumeratorString;
849}
850
851static
852bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
853{
854 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
855 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
856 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
857 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
858 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800859 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600860 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800861 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600862 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600863 if(enumerator & (~allFlags))
864 {
865 return false;
866 }
867
868 return true;
869}
870
871static
872std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
873{
874 if(!ValidateEnumerator(enumerator))
875 {
876 return "unrecognized enumerator";
877 }
878
879 std::vector<std::string> strings;
880 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
881 {
882 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
883 }
884 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
885 {
886 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
887 }
888 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
889 {
890 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
891 }
892 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
893 {
894 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
895 }
896 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
897 {
898 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
899 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800900 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600901 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800902 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600903 }
904 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
905 {
906 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
907 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800908 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600909 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800910 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600911 }
912 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
913 {
914 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
915 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600916
917 std::string enumeratorString;
918 for(auto const& string : strings)
919 {
920 enumeratorString += string;
921
922 if(string != strings.back())
923 {
924 enumeratorString += '|';
925 }
926 }
927
928 return enumeratorString;
929}
930
931static
932bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
933{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600934 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
935 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600936 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600937 if(enumerator & (~allFlags))
938 {
939 return false;
940 }
941
942 return true;
943}
944
945static
946std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
947{
948 if(!ValidateEnumerator(enumerator))
949 {
950 return "unrecognized enumerator";
951 }
952
953 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600954 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
955 {
956 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
957 }
958 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
959 {
960 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
961 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600962 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600963 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600964 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600965 }
966
967 std::string enumeratorString;
968 for(auto const& string : strings)
969 {
970 enumeratorString += string;
971
972 if(string != strings.back())
973 {
974 enumeratorString += '|';
975 }
976 }
977
978 return enumeratorString;
979}
980
981static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600982bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
983{
984 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600985 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
986 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600987 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600988 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600989 if(enumerator & (~allFlags))
990 {
991 return false;
992 }
993
994 return true;
995}
996
997static
998std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
999{
1000 if(!ValidateEnumerator(enumerator))
1001 {
1002 return "unrecognized enumerator";
1003 }
1004
1005 std::vector<std::string> strings;
1006 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1007 {
1008 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1009 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001010 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1011 {
1012 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1013 }
1014 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1015 {
1016 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1017 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1019 {
1020 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1021 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001022 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001024 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001025 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001026
1027 std::string enumeratorString;
1028 for(auto const& string : strings)
1029 {
1030 enumeratorString += string;
1031
1032 if(string != strings.back())
1033 {
1034 enumeratorString += '|';
1035 }
1036 }
1037
1038 return enumeratorString;
1039}
1040
1041static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001042bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001043{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001044 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1045 VK_COLOR_COMPONENT_B_BIT |
1046 VK_COLOR_COMPONENT_G_BIT |
1047 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001048 if(enumerator & (~allFlags))
1049 {
1050 return false;
1051 }
1052
1053 return true;
1054}
1055
1056static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001057std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001058{
1059 if(!ValidateEnumerator(enumerator))
1060 {
1061 return "unrecognized enumerator";
1062 }
1063
1064 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001065 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001066 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001067 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001068 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001069 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001070 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001071 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001072 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001073 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001074 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001075 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001076 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001077 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001078 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001079 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001080 }
1081
1082 std::string enumeratorString;
1083 for(auto const& string : strings)
1084 {
1085 enumeratorString += string;
1086
1087 if(string != strings.back())
1088 {
1089 enumeratorString += '|';
1090 }
1091 }
1092
1093 return enumeratorString;
1094}
1095
1096static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001097bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001098{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001099 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1100 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1101 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001102 if(enumerator & (~allFlags))
1103 {
1104 return false;
1105 }
1106
1107 return true;
1108}
1109
1110static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001111std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001112{
1113 if(!ValidateEnumerator(enumerator))
1114 {
1115 return "unrecognized enumerator";
1116 }
1117
1118 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001119 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001120 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001121 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1122 }
1123 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1124 {
1125 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1126 }
1127 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1128 {
1129 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001130 }
1131
1132 std::string enumeratorString;
1133 for(auto const& string : strings)
1134 {
1135 enumeratorString += string;
1136
1137 if(string != strings.back())
1138 {
1139 enumeratorString += '|';
1140 }
1141 }
1142
1143 return enumeratorString;
1144}
1145
1146static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001147bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001148{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001149 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1150 VK_SHADER_STAGE_FRAGMENT_BIT |
1151 VK_SHADER_STAGE_GEOMETRY_BIT |
1152 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001153 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1154 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001155 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001156 if(enumerator & (~allFlags))
1157 {
1158 return false;
1159 }
1160
1161 return true;
1162}
1163
1164static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001165std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001166{
1167 if(!ValidateEnumerator(enumerator))
1168 {
1169 return "unrecognized enumerator";
1170 }
1171
1172 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001173 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001174 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001175 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001176 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001177 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001178 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001179 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001180 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001181 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001182 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001183 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1184 }
1185 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1186 {
1187 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1188 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001189 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001190 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001191 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001192 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001193 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001194 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001195 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001196 }
1197 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1198 {
1199 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001200 }
1201
1202 std::string enumeratorString;
1203 for(auto const& string : strings)
1204 {
1205 enumeratorString += string;
1206
1207 if(string != strings.back())
1208 {
1209 enumeratorString += '|';
1210 }
1211 }
1212
1213 return enumeratorString;
1214}
1215
1216static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001217bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001218{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1220 VK_PIPELINE_STAGE_HOST_BIT |
1221 VK_PIPELINE_STAGE_TRANSFER_BIT |
1222 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1223 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1224 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001225 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001226 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001227 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1228 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1229 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001230 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001231 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1232 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1233 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1234 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001235 if(enumerator & (~allFlags))
1236 {
1237 return false;
1238 }
1239
1240 return true;
1241}
1242
1243static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001244std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001245{
1246 if(!ValidateEnumerator(enumerator))
1247 {
1248 return "unrecognized enumerator";
1249 }
1250
1251 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001252 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001253 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001255 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001257 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001258 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001259 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001261 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001263 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001264 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001265 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001266 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001267 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001268 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001269 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001270 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001271 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001272 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001273 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001274 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001275 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001276 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001277 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001278 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001279 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001280 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001281 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001282 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001283 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001284 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001285 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001286 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001287 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001288 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001289 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001290 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1291 }
1292 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1293 {
1294 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1295 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001296 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001297 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001298 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001299 }
1300 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1301 {
1302 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1303 }
1304 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1305 {
1306 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1307 }
1308 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1309 {
1310 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1311 }
1312 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1313 {
1314 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001315 }
1316
1317 std::string enumeratorString;
1318 for(auto const& string : strings)
1319 {
1320 enumeratorString += string;
1321
1322 if(string != strings.back())
1323 {
1324 enumeratorString += '|';
1325 }
1326 }
1327
1328 return enumeratorString;
1329}
1330
1331static
Chia-I Wua4594202015-10-27 19:54:37 +08001332bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001333{
Chia-I Wua4594202015-10-27 19:54:37 +08001334 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1335 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1336 VK_ACCESS_INDEX_READ_BIT |
1337 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1338 VK_ACCESS_UNIFORM_READ_BIT |
1339 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1340 VK_ACCESS_SHADER_READ_BIT |
1341 VK_ACCESS_SHADER_WRITE_BIT |
1342 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1343 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1344 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1345 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1346 VK_ACCESS_TRANSFER_READ_BIT |
1347 VK_ACCESS_TRANSFER_WRITE_BIT |
1348 VK_ACCESS_HOST_READ_BIT |
1349 VK_ACCESS_HOST_WRITE_BIT |
1350 VK_ACCESS_MEMORY_READ_BIT |
1351 VK_ACCESS_MEMORY_WRITE_BIT);
1352
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001353 if(enumerator & (~allFlags))
1354 {
1355 return false;
1356 }
1357
1358 return true;
1359}
1360
1361static
Chia-I Wua4594202015-10-27 19:54:37 +08001362std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001363{
1364 if(!ValidateEnumerator(enumerator))
1365 {
1366 return "unrecognized enumerator";
1367 }
1368
1369 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001370 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001371 {
Chia-I Wua4594202015-10-27 19:54:37 +08001372 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001373 }
Chia-I Wua4594202015-10-27 19:54:37 +08001374 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001375 {
Chia-I Wua4594202015-10-27 19:54:37 +08001376 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001377 }
Chia-I Wua4594202015-10-27 19:54:37 +08001378 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001379 {
Chia-I Wua4594202015-10-27 19:54:37 +08001380 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001381 }
Chia-I Wua4594202015-10-27 19:54:37 +08001382 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001383 {
Chia-I Wua4594202015-10-27 19:54:37 +08001384 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001385 }
Chia-I Wua4594202015-10-27 19:54:37 +08001386 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001387 {
Chia-I Wua4594202015-10-27 19:54:37 +08001388 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001389 }
Chia-I Wua4594202015-10-27 19:54:37 +08001390 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001391 {
Chia-I Wua4594202015-10-27 19:54:37 +08001392 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001393 }
Chia-I Wua4594202015-10-27 19:54:37 +08001394 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001395 {
Chia-I Wua4594202015-10-27 19:54:37 +08001396 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001397 }
Chia-I Wua4594202015-10-27 19:54:37 +08001398 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001399 {
Chia-I Wua4594202015-10-27 19:54:37 +08001400 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001401 }
Chia-I Wua4594202015-10-27 19:54:37 +08001402 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001403 {
Chia-I Wua4594202015-10-27 19:54:37 +08001404 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001405 }
Chia-I Wua4594202015-10-27 19:54:37 +08001406 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001407 {
Chia-I Wua4594202015-10-27 19:54:37 +08001408 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001409 }
Chia-I Wua4594202015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001411 {
Chia-I Wua4594202015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001413 }
Chia-I Wua4594202015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001415 {
Chia-I Wua4594202015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001417 }
Chia-I Wua4594202015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001419 {
Chia-I Wua4594202015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001421 }
Chia-I Wua4594202015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001423 {
Chia-I Wua4594202015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001425 }
Chia-I Wua4594202015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001427 {
Chia-I Wua4594202015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001429 }
Chia-I Wua4594202015-10-27 19:54:37 +08001430 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001431 {
Chia-I Wua4594202015-10-27 19:54:37 +08001432 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001433 }
Chia-I Wua4594202015-10-27 19:54:37 +08001434 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001435 {
Chia-I Wua4594202015-10-27 19:54:37 +08001436 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001437 }
1438
1439 std::string enumeratorString;
1440 for(auto const& string : strings)
1441 {
1442 enumeratorString += string;
1443
1444 if(string != strings.back())
1445 {
1446 enumeratorString += '|';
1447 }
1448 }
1449
1450 return enumeratorString;
1451}
1452
1453static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001454bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001455{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001456 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1457 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001458 if(enumerator & (~allFlags))
1459 {
1460 return false;
1461 }
1462
1463 return true;
1464}
1465
1466static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001467std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001468{
1469 if(!ValidateEnumerator(enumerator))
1470 {
1471 return "unrecognized enumerator";
1472 }
1473
1474 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001475 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001476 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001477 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001478 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001479 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001480 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001481 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001482 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001483
1484 std::string enumeratorString;
1485 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001486 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001487 enumeratorString += string;
1488
1489 if(string != strings.back())
1490 {
1491 enumeratorString += '|';
1492 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001494
1495 return enumeratorString;
1496}
1497
1498static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001499bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001500{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001501 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001502 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001503 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001505 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001506
1507 return true;
1508}
1509
1510static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001511std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001512{
1513 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001514 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001515 return "unrecognized enumerator";
1516 }
1517
1518 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001519 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001520 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001521 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001522 }
1523
1524 std::string enumeratorString;
1525 for(auto const& string : strings)
1526 {
1527 enumeratorString += string;
1528
1529 if(string != strings.back())
1530 {
1531 enumeratorString += '|';
1532 }
1533 }
1534
1535 return enumeratorString;
1536}
1537
1538static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001539bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001540{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001541 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1542 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1543 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001544 if(enumerator & (~allFlags))
1545 {
1546 return false;
1547 }
1548
1549 return true;
1550}
1551
1552static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001553std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001554{
1555 if(!ValidateEnumerator(enumerator))
1556 {
1557 return "unrecognized enumerator";
1558 }
1559
1560 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001561 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001562 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001563 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001564 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001565 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001566 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001567 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001568 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001569 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001570 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001571 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001572 }
1573
1574 std::string enumeratorString;
1575 for(auto const& string : strings)
1576 {
1577 enumeratorString += string;
1578
1579 if(string != strings.back())
1580 {
1581 enumeratorString += '|';
1582 }
1583 }
1584
1585 return enumeratorString;
1586}
1587
1588static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001589bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001590{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001591 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001592 if(enumerator & (~allFlags))
1593 {
1594 return false;
1595 }
1596
1597 return true;
1598}
1599
1600static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001601std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001602{
1603 if(!ValidateEnumerator(enumerator))
1604 {
1605 return "unrecognized enumerator";
1606 }
1607
1608 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001609 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001610 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001611 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612 }
1613
1614 std::string enumeratorString;
1615 for(auto const& string : strings)
1616 {
1617 enumeratorString += string;
1618
1619 if(string != strings.back())
1620 {
1621 enumeratorString += '|';
1622 }
1623 }
1624
1625 return enumeratorString;
1626}
1627
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001628static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001629bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001630{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001631 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1632 VK_IMAGE_ASPECT_STENCIL_BIT |
1633 VK_IMAGE_ASPECT_DEPTH_BIT |
1634 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001635 if(enumerator & (~allFlags))
1636 {
1637 return false;
1638 }
1639
1640 return true;
1641}
1642
1643static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001644std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001645{
1646 if(!ValidateEnumerator(enumerator))
1647 {
1648 return "unrecognized enumerator";
1649 }
1650
1651 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001652 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001653 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001654 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1655 }
1656 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1657 {
1658 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1659 }
1660 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1661 {
1662 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1663 }
1664 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1665 {
1666 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1667 }
1668
1669 std::string enumeratorString;
1670 for(auto const& string : strings)
1671 {
1672 enumeratorString += string;
1673
1674 if(string != strings.back())
1675 {
1676 enumeratorString += '|';
1677 }
1678 }
1679
1680 return enumeratorString;
1681}
1682
1683static
1684bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1685{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001686 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001687 if(enumerator & (~allFlags))
1688 {
1689 return false;
1690 }
1691
1692 return true;
1693}
1694
1695static
1696std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1697{
1698 if(!ValidateEnumerator(enumerator))
1699 {
1700 return "unrecognized enumerator";
1701 }
1702
1703 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001704 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001705 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001706 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001707 }
1708
1709 std::string enumeratorString;
1710 for(auto const& string : strings)
1711 {
1712 enumeratorString += string;
1713
1714 if(string != strings.back())
1715 {
1716 enumeratorString += '|';
1717 }
1718 }
1719
1720 return enumeratorString;
1721}
1722
Jeremy Hayes99a96322015-06-26 12:48:09 -06001723VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1724 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001725 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001726 VkInstance* pInstance)
1727{
1728 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001729 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001730
1731 if (result == VK_SUCCESS) {
1732 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001733 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001734 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001735
1736 InitParamChecker(data);
1737 }
1738
1739 return result;
1740}
1741
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001742VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001743 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001744 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001745{
1746 // Grab the key before the instance is destroyed.
1747 dispatch_key key = get_dispatch_key(instance);
1748 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001749 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001750
1751 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001752 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1753 while (my_data->logging_callback.size() > 0) {
1754 VkDbgMsgCallback callback = my_data->logging_callback.back();
1755 layer_destroy_msg_callback(my_data->report_data, callback);
1756 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001757 }
1758
1759 layer_debug_report_destroy_instance(mid(instance));
1760 layer_data_map.erase(pTable);
1761
1762 pc_instance_table_map.erase(key);
1763 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001764}
1765
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001766bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001767 VkInstance instance,
1768 uint32_t* pPhysicalDeviceCount,
1769 VkPhysicalDevice* pPhysicalDevices,
1770 VkResult result)
1771{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001772
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001773 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001774 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775 }
1776
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001777 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001778 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001779 }
1780
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001781 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001782 {
1783 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001784 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1785 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001786 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001787
1788 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001789}
1790
1791VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1792 VkInstance instance,
1793 uint32_t* pPhysicalDeviceCount,
1794 VkPhysicalDevice* pPhysicalDevices)
1795{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001796 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1797
1798 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1799
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001800 return result;
1801}
1802
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001803bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001804 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001805 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001806{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001808 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001809 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001810 }
1811
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001812 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813}
1814
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001815VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001816 VkPhysicalDevice physicalDevice,
1817 VkPhysicalDeviceFeatures* pFeatures)
1818{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001819 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001820
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001821 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001822}
1823
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001824bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001825 VkPhysicalDevice physicalDevice,
1826 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001827 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829
1830 if(format < VK_FORMAT_BEGIN_RANGE ||
1831 format > VK_FORMAT_END_RANGE)
1832 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001833 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001834 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001835 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001836 }
1837
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001838 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001839 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001840 }
1841
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001842 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001843}
1844
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001845VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001846 VkPhysicalDevice physicalDevice,
1847 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001848 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001849{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001850 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001852 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001853}
1854
1855bool PostGetPhysicalDeviceImageFormatProperties(
1856 VkPhysicalDevice physicalDevice,
1857 VkFormat format,
1858 VkImageType type,
1859 VkImageTiling tiling,
1860 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001861 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001862 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001863{
1864
1865 if(format < VK_FORMAT_BEGIN_RANGE ||
1866 format > VK_FORMAT_END_RANGE)
1867 {
1868 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1869 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1870 return false;
1871 }
1872
1873 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1874 type > VK_IMAGE_TYPE_END_RANGE)
1875 {
1876 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1877 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1878 return false;
1879 }
1880
1881 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1882 tiling > VK_IMAGE_TILING_END_RANGE)
1883 {
1884 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1885 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1886 return false;
1887 }
1888
1889
1890 if(pImageFormatProperties != nullptr)
1891 {
1892 }
1893
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001894 return true;
1895}
1896
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001897VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001898 VkPhysicalDevice physicalDevice,
1899 VkFormat format,
1900 VkImageType type,
1901 VkImageTiling tiling,
1902 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001903 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001904 VkImageFormatProperties* pImageFormatProperties)
1905{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001906 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001907
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001908 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001909}
1910
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001911bool PostGetPhysicalDeviceProperties(
1912 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001913 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001914{
1915
1916 if(pProperties != nullptr)
1917 {
1918 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1919 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1920 {
1921 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1922 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1923 return false;
1924 }
1925 }
1926
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001927 return true;
1928}
1929
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001930VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001931 VkPhysicalDevice physicalDevice,
1932 VkPhysicalDeviceProperties* pProperties)
1933{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001934 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001935
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001936 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001937}
1938
Cody Northropd0802882015-08-03 17:04:53 -06001939bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001940 VkPhysicalDevice physicalDevice,
1941 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001942 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001943{
1944
Cody Northropd0802882015-08-03 17:04:53 -06001945 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001946 {
1947 }
1948
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001949 if(pQueueProperties != nullptr)
1950 {
1951 }
1952
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001953 return true;
1954}
1955
Courtney Goeltzenleuchter9a63f442015-10-27 11:19:02 -06001956VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001957 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06001958 uint32_t* pCount,
1959 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001960{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001961 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001962
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001963 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001964}
1965
1966bool PostGetPhysicalDeviceMemoryProperties(
1967 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001968 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001969{
1970
1971 if(pMemoryProperties != nullptr)
1972 {
1973 }
1974
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001975 return true;
1976}
1977
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001978VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001979 VkPhysicalDevice physicalDevice,
1980 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
1981{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001982 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001983
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001984 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001985}
1986
Jeremy Hayes99a96322015-06-26 12:48:09 -06001987VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
1988 VkPhysicalDevice physicalDevice,
1989 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001990 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001991 VkDevice* pDevice)
1992{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06001993 /*
1994 * NOTE: The loader fills in the ICD's device object in *pDevice.
1995 * Use that object to get the dispatch table.
1996 *
1997 * NOTE: We do not validate physicalDevice or any dispatchable
1998 * object as the first parameter. We couldn't get here if it was wrong!
1999 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002000 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002001 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002002 if(result == VK_SUCCESS)
2003 {
2004 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2005 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2006 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2007 }
2008
2009 return result;
2010}
2011
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002012VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002013 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002014 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002015{
2016 layer_debug_report_destroy_device(device);
2017
2018 dispatch_key key = get_dispatch_key(device);
2019#if DISPATCH_MAP_DEBUG
2020 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2021#endif
2022
Chia-I Wuf7458c52015-10-26 21:10:41 +08002023 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002024 pc_device_table_map.erase(key);
2025 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002026}
2027
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002028bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002029 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002030 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002031 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002032 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002033{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002034
2035
2036
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002037 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002038 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002039 }
2040
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002041 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002042}
2043
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002044VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002045 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002046 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002047 uint32_t queueIndex,
2048 VkQueue* pQueue)
2049{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002050 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002051
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002052 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002053}
2054
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002055bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002056 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002057 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002058{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002059 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2060 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002061 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002062 return false;
2063 }
2064
2065 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002066 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002067 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002068
2069 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002070}
2071
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002072bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002073 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002074 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002075 VkFence fence,
2076 VkResult result)
2077{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002078
2079
Jeremy Hayes99a96322015-06-26 12:48:09 -06002080
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002081 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002082 {
2083 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002084 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2085 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002086 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002087
2088 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002089}
2090
2091VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2092 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002093 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002094 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002095 VkFence fence)
2096{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002097 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002098 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002099 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002100
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002101 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002102
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002103 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104
2105 return result;
2106}
2107
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002108bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002109 VkQueue queue,
2110 VkResult result)
2111{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002112
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002113 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002114 {
2115 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002116 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2117 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002119
2120 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002121}
2122
2123VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2124 VkQueue queue)
2125{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2127
2128 PostQueueWaitIdle(queue, result);
2129
2130 return result;
2131}
2132
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002133bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002134 VkDevice device,
2135 VkResult result)
2136{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002138 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002139 {
2140 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2142 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002143 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002144
2145 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002146}
2147
2148VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2149 VkDevice device)
2150{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002151 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2152
2153 PostDeviceWaitIdle(device, result);
2154
2155 return result;
2156}
2157
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002158bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002160 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002162 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002163 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002164 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002165 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002166 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002167 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002168 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002169 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002170 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002171
2172 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002173}
2174
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002175bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002177 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002178 VkResult result)
2179{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002181 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002183 }
2184
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002185 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002186 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002187 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002188 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2189 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002190 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002191
2192 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193}
2194
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002195VK_LAYER_EXPORT VkResult VKAPI vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002197 const VkMemoryAllocateInfo* pAllocateInfo,
2198 const VkAllocationCallbacks* pAllocator,
2199 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002200{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002201 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002202
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002203 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002205 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206
2207 return result;
2208}
2209
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002210bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211 VkDevice device,
2212 VkDeviceMemory mem,
2213 VkDeviceSize offset,
2214 VkDeviceSize size,
2215 VkMemoryMapFlags flags,
2216 void** ppData,
2217 VkResult result)
2218{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220
2221
2222
2223
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002224 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 }
2227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002228 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002229 {
2230 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002231 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2232 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002234
2235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002236}
2237
2238VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2239 VkDevice device,
2240 VkDeviceMemory mem,
2241 VkDeviceSize offset,
2242 VkDeviceSize size,
2243 VkMemoryMapFlags flags,
2244 void** ppData)
2245{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2247
2248 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2249
2250 return result;
2251}
2252
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002254 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002255 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002257 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002258 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002259 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002262 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002263 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002266
2267 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268}
2269
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002270bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002272 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002273 VkResult result)
2274{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275
2276
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002277 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002278 {
2279 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002280 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2281 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002282 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002283
2284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002285}
2286
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002287VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002288 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002289 uint32_t memoryRangeCount,
2290 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002291{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002292 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002293
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002294 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002295
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002296 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002297
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002298 return result;
2299}
2300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002301bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002302 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002303 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002305 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002306 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002307 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002308 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002309 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002310 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002311 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002314
2315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316}
2317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002318bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002320 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321 VkResult result)
2322{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323
2324
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002325 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326 {
2327 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002328 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2329 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002331
2332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333}
2334
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002335VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002336 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002337 uint32_t memoryRangeCount,
2338 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002339{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002340 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002341
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002342 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002343
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002344 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345
Tony Barbourb1250542015-04-16 19:23:13 -06002346 return result;
2347}
2348
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002349bool PostGetDeviceMemoryCommitment(
2350 VkDevice device,
2351 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002352 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002353{
2354
2355
2356 if(pCommittedMemoryInBytes != nullptr)
2357 {
2358 }
2359
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002360 return true;
2361}
2362
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002363VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002364 VkDevice device,
2365 VkDeviceMemory memory,
2366 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002367{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002368 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002369
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002370 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002371}
2372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002373bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002375 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002376 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002377 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002379{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002380
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002381
Jeremy Hayes99a96322015-06-26 12:48:09 -06002382
2383
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002384 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002385 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2387 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2388 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002390
2391 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002392}
2393
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002394VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002396 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002397 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002398 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002399{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002400 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002401
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002402 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002403
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002404 return result;
2405}
2406
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002407bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002408 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409 VkImage image,
2410 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002411 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002412 VkResult result)
2413{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002414
2415
2416
2417
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002418 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002420 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2422 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 }
2424
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002425 return true;
2426}
2427
2428VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2429 VkDevice device,
2430 VkImage image,
2431 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002432 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002433{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002434 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002435
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002436 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002437
2438 return result;
2439}
2440
2441bool PostGetBufferMemoryRequirements(
2442 VkDevice device,
2443 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002444 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002445{
2446
2447
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002448 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002449 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450 }
2451
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002452 return true;
2453}
2454
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002455VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002456 VkDevice device,
2457 VkBuffer buffer,
2458 VkMemoryRequirements* pMemoryRequirements)
2459{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002460 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002461
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002462 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002463}
2464
2465bool PostGetImageMemoryRequirements(
2466 VkDevice device,
2467 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002468 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002469{
2470
2471
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002472 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002473 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002474 }
2475
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002476 return true;
2477}
2478
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002479VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480 VkDevice device,
2481 VkImage image,
2482 VkMemoryRequirements* pMemoryRequirements)
2483{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002484 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002485
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002486 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002487}
2488
2489bool PostGetImageSparseMemoryRequirements(
2490 VkDevice device,
2491 VkImage image,
2492 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002493 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002494{
2495
2496
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002497 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002498 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002499 }
2500
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002501 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002503 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002504 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002505 {
2506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002507 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508 return false;
2509 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002510 }
2511
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002512 return true;
2513}
2514
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002515VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002516 VkDevice device,
2517 VkImage image,
2518 uint32_t* pNumRequirements,
2519 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2520{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002521 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002522
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002523 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002524}
2525
2526bool PostGetPhysicalDeviceSparseImageFormatProperties(
2527 VkPhysicalDevice physicalDevice,
2528 VkFormat format,
2529 VkImageType type,
2530 uint32_t samples,
2531 VkImageUsageFlags usage,
2532 VkImageTiling tiling,
2533 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002534 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002535{
2536
2537 if(format < VK_FORMAT_BEGIN_RANGE ||
2538 format > VK_FORMAT_END_RANGE)
2539 {
2540 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002541 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002542 return false;
2543 }
2544
2545 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2546 type > VK_IMAGE_TYPE_END_RANGE)
2547 {
2548 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002549 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002550 return false;
2551 }
2552
2553
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002554
2555 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2556 tiling > VK_IMAGE_TILING_END_RANGE)
2557 {
2558 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002559 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560 return false;
2561 }
2562
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002563 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002564 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002565 }
2566
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002567 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002568 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002569 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002570 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002571 {
2572 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002573 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002574 return false;
2575 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002576 }
2577
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578 return true;
2579}
2580
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002581VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002582 VkPhysicalDevice physicalDevice,
2583 VkFormat format,
2584 VkImageType type,
2585 uint32_t samples,
2586 VkImageUsageFlags usage,
2587 VkImageTiling tiling,
2588 uint32_t* pNumProperties,
2589 VkSparseImageFormatProperties* pProperties)
2590{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002591 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002593 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002594}
2595
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002596bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002597 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002598 uint32_t bindInfoCount,
2599 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002600{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002601 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002602 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002603 }
2604
2605 return true;
2606}
2607
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002608bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002610 uint32_t bindInfoCount,
2611 const VkBindSparseInfo* pBindInfo,
2612 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002613 VkResult result)
2614{
2615
2616
2617
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002618 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002619 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002620 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2622 return false;
2623 }
2624
2625 return true;
2626}
2627
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002628VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002630 uint32_t bindInfoCount,
2631 const VkBindSparseInfo* pBindInfo,
2632 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002633{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002634 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002636 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002637
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002638 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002639
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002640 return result;
2641}
2642
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002644 VkDevice device,
2645 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002646{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002647 if(pCreateInfo != nullptr)
2648 {
2649 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002650 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002651 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002652 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002653 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002654 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002655 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002656
2657 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002658}
2659
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002660bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002661 VkDevice device,
2662 VkFence* pFence,
2663 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002664{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002665
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002666 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002667 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002668 }
2669
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002670 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002671 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002672 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002673 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2674 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002675 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002676
2677 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002678}
2679
2680VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2681 VkDevice device,
2682 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002683 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002684 VkFence* pFence)
2685{
2686 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002687
Chia-I Wuf7458c52015-10-26 21:10:41 +08002688 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002689
2690 PostCreateFence(device, pFence, result);
2691
2692 return result;
2693}
2694
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002695bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002696 VkDevice device,
2697 const VkFence* pFences)
2698{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002699 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002700 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002701 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002702
2703 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002704}
2705
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002706bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002707 VkDevice device,
2708 uint32_t fenceCount,
2709 VkResult result)
2710{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002711
2712
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002713 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002714 {
2715 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2717 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002718 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002719
2720 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002721}
2722
2723VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2724 VkDevice device,
2725 uint32_t fenceCount,
2726 const VkFence* pFences)
2727{
2728 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002729
Jeremy Hayes99a96322015-06-26 12:48:09 -06002730 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2731
2732 PostResetFences(device, fenceCount, result);
2733
2734 return result;
2735}
2736
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002737bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002738 VkDevice device,
2739 VkFence fence,
2740 VkResult result)
2741{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002742
Jeremy Hayes99a96322015-06-26 12:48:09 -06002743
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002744 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002745 {
2746 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2748 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002749 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002750
2751 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002752}
2753
2754VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2755 VkDevice device,
2756 VkFence fence)
2757{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002758 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2759
2760 PostGetFenceStatus(device, fence, result);
2761
2762 return result;
2763}
2764
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002765bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766 VkDevice device,
2767 const VkFence* pFences)
2768{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002769 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002770 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002771 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002772
2773 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002774}
2775
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002776bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002777 VkDevice device,
2778 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002779 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002780 uint64_t timeout,
2781 VkResult result)
2782{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002783
2784
2785
2786
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002787 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788 {
2789 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002790 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2791 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002793
2794 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002795}
2796
2797VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2798 VkDevice device,
2799 uint32_t fenceCount,
2800 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002801 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002802 uint64_t timeout)
2803{
2804 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805
Jeremy Hayes99a96322015-06-26 12:48:09 -06002806 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2807
2808 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2809
2810 return result;
2811}
2812
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002813bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002814 VkDevice device,
2815 const VkSemaphoreCreateInfo* pCreateInfo)
2816{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002817 if(pCreateInfo != nullptr)
2818 {
2819 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002822 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002823 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002824 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002826
2827 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828}
2829
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002830bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002831 VkDevice device,
2832 VkSemaphore* pSemaphore,
2833 VkResult result)
2834{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002835
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002836 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002838 }
2839
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002840 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002841 {
2842 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002843 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2844 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002845 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002846
2847 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002848}
2849
2850VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2851 VkDevice device,
2852 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002853 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002854 VkSemaphore* pSemaphore)
2855{
2856 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002857
Chia-I Wuf7458c52015-10-26 21:10:41 +08002858 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002859
2860 PostCreateSemaphore(device, pSemaphore, result);
2861
2862 return result;
2863}
2864
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002865bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002866 VkDevice device,
2867 const VkEventCreateInfo* pCreateInfo)
2868{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002869 if(pCreateInfo != nullptr)
2870 {
2871 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002872 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002874 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002875 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002876 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002877 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002878
2879 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880}
2881
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002882bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883 VkDevice device,
2884 VkEvent* pEvent,
2885 VkResult result)
2886{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002887
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002888 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002889 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890 }
2891
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002892 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893 {
2894 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002895 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2896 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002897 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002898
2899 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002900}
2901
2902VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
2903 VkDevice device,
2904 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002905 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002906 VkEvent* pEvent)
2907{
2908 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002909
Chia-I Wuf7458c52015-10-26 21:10:41 +08002910 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002911
2912 PostCreateEvent(device, pEvent, result);
2913
2914 return result;
2915}
2916
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002917bool PostGetEventStatus(
2918 VkDevice device,
2919 VkEvent event,
2920 VkResult result)
2921{
2922
Jeremy Hayes99a96322015-06-26 12:48:09 -06002923
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002924 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925 {
2926 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2928 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002929 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002930
2931 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932}
2933
2934VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
2935 VkDevice device,
2936 VkEvent event)
2937{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2939
2940 PostGetEventStatus(device, event, result);
2941
2942 return result;
2943}
2944
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002945bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002946 VkDevice device,
2947 VkEvent event,
2948 VkResult result)
2949{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002950
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002952 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002953 {
2954 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2956 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002957 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002958
2959 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002960}
2961
2962VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
2963 VkDevice device,
2964 VkEvent event)
2965{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
2967
2968 PostSetEvent(device, event, result);
2969
2970 return result;
2971}
2972
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002973bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002974 VkDevice device,
2975 VkEvent event,
2976 VkResult result)
2977{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002980 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981 {
2982 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002983 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2984 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002985 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002986
2987 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002988}
2989
2990VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
2991 VkDevice device,
2992 VkEvent event)
2993{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
2995
2996 PostResetEvent(device, event, result);
2997
2998 return result;
2999}
3000
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003001bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003002 VkDevice device,
3003 const VkQueryPoolCreateInfo* pCreateInfo)
3004{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003005 if(pCreateInfo != nullptr)
3006 {
3007 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003009 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003010 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003011 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003012 }
3013 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3014 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3015 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003017 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003019 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003020 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003021
3022 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023}
3024
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003025bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003026 VkDevice device,
3027 VkQueryPool* pQueryPool,
3028 VkResult result)
3029{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003031 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003032 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033 }
3034
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003035 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 {
3037 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003038 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3039 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003041
3042 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043}
3044
3045VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3046 VkDevice device,
3047 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003048 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003049 VkQueryPool* pQueryPool)
3050{
3051 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003052
Chia-I Wuf7458c52015-10-26 21:10:41 +08003053 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003054
3055 PostCreateQueryPool(device, pQueryPool, result);
3056
3057 return result;
3058}
3059
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003060bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003061 VkDevice device,
3062 VkQueryPool queryPool,
3063 uint32_t startQuery,
3064 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003065 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003066 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003067 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068 VkQueryResultFlags flags,
3069 VkResult result)
3070{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071
Jeremy Hayes99a96322015-06-26 12:48:09 -06003072
3073
3074
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003075 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 }
3078
Jeremy Hayes99a96322015-06-26 12:48:09 -06003079
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003080 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 {
3082 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06003085 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003086
3087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088}
3089
3090VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3091 VkDevice device,
3092 VkQueryPool queryPool,
3093 uint32_t startQuery,
3094 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003095 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003096 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003097 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003098 VkQueryResultFlags flags)
3099{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003100 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003101
Chia-I Wuccc93a72015-10-26 18:36:20 +08003102 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103
3104 return result;
3105}
3106
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003107bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003108 VkDevice device,
3109 const VkBufferCreateInfo* pCreateInfo)
3110{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003111 if(pCreateInfo != nullptr)
3112 {
3113 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003116 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003117 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003118 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003119 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3120 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003123 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003124 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003125 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003126 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003128 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130
3131 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003132}
3133
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003134bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003135 VkDevice device,
3136 VkBuffer* pBuffer,
3137 VkResult result)
3138{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003140 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142 }
3143
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003144 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003145 {
3146 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3148 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003149 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003150
3151 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003152}
3153
3154VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3155 VkDevice device,
3156 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003157 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158 VkBuffer* pBuffer)
3159{
3160 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003161
Chia-I Wuf7458c52015-10-26 21:10:41 +08003162 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163
3164 PostCreateBuffer(device, pBuffer, result);
3165
3166 return result;
3167}
3168
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003169bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170 VkDevice device,
3171 const VkBufferViewCreateInfo* pCreateInfo)
3172{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003173 if(pCreateInfo != nullptr)
3174 {
3175 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003176 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003178 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003179 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003180 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003181 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3182 pCreateInfo->format > VK_FORMAT_END_RANGE)
3183 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003185 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003186 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003188 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003189
3190 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191}
3192
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003193bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 VkDevice device,
3195 VkBufferView* pView,
3196 VkResult result)
3197{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003198
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003199 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003201 }
3202
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003203 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 {
3205 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3207 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003209
3210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211}
3212
3213VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3214 VkDevice device,
3215 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003216 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 VkBufferView* pView)
3218{
3219 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003220
Chia-I Wuf7458c52015-10-26 21:10:41 +08003221 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003222
3223 PostCreateBufferView(device, pView, result);
3224
3225 return result;
3226}
3227
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003228bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003229 VkDevice device,
3230 const VkImageCreateInfo* pCreateInfo)
3231{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003232 if(pCreateInfo != nullptr)
3233 {
3234 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003235 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003236 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003237 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 }
3240 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3241 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3242 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003244 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003245 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246 }
3247 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3248 pCreateInfo->format > VK_FORMAT_END_RANGE)
3249 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003251 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253 }
3254 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3255 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3256 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003258 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003260 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003261 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3262 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003263 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003264 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3265 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003266 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003268 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003269 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003270 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003271 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003272
3273 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274}
3275
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003276bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003277 VkDevice device,
3278 VkImage* pImage,
3279 VkResult result)
3280{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003281
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003282 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003283 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 }
3285
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003286 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003287 {
3288 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3290 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003291 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003292
3293 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003294}
3295
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3297 VkDevice device,
3298 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003299 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003300 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003301{
3302 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303
Chia-I Wuf7458c52015-10-26 21:10:41 +08003304 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305
3306 PostCreateImage(device, pImage, result);
3307
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003308 return result;
3309}
3310
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003311bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312 VkDevice device,
3313 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003314{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003315 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003317 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003318 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003321 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003322 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003323 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003324 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003325
3326 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327}
3328
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003329bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003330 VkDevice device,
3331 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003332 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003334
Jeremy Hayes99a96322015-06-26 12:48:09 -06003335
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003336 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003338 }
3339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003340 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003341}
3342
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003343VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344 VkDevice device,
3345 VkImage image,
3346 const VkImageSubresource* pSubresource,
3347 VkSubresourceLayout* pLayout)
3348{
3349 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003350
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003351 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003352
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003353 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354}
3355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003356bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 VkDevice device,
3358 const VkImageViewCreateInfo* pCreateInfo)
3359{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003360 if(pCreateInfo != nullptr)
3361 {
3362 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003363 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003365 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003366 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 }
3368 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3369 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3370 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003372 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003373 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003374 }
3375 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3376 pCreateInfo->format > VK_FORMAT_END_RANGE)
3377 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003379 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003380 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003381 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003382 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3383 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003384 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003385 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003386 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003387 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003388 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003389 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3390 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003391 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003393 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003394 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003395 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003396 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3397 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003398 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003400 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003401 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003403 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3404 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003405 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003407 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003408 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003409 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003410 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003411
3412 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003413}
3414
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003415bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003416 VkDevice device,
3417 VkImageView* pView,
3418 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003419{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003420
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003421 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003423 }
3424
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003425 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003426 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3429 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003430 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003431
3432 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003433}
3434
3435VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3436 VkDevice device,
3437 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003438 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003439 VkImageView* pView)
3440{
3441 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003442
Chia-I Wuf7458c52015-10-26 21:10:41 +08003443 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003444
3445 PostCreateImageView(device, pView, result);
3446
3447 return result;
3448}
3449
Michael Lentine03d8e572015-09-15 14:59:14 -05003450bool PreCreateShaderModule(
3451 VkDevice device,
3452 const VkShaderModuleCreateInfo* pCreateInfo)
3453{
3454 if(pCreateInfo) {
3455 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3457 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3458 return false;
3459 }
3460 if(!pCreateInfo->pCode) {
3461 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3462 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3463 return false;
3464 }
3465 } else {
3466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3467 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3468 return false;
3469 }
3470
3471 return true;
3472}
3473
3474bool PostCreateShaderModule(
3475 VkDevice device,
3476 VkShaderModule* pShaderModule,
3477 VkResult result)
3478{
3479 if(result < VK_SUCCESS) {
3480 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3482 return false;
3483 }
3484
3485 return true;
3486}
3487
3488VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3489 VkDevice device,
3490 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003491 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003492 VkShaderModule* pShaderModule)
3493{
3494 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003495 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003496 PostCreateShaderModule(device, pShaderModule, result);
3497 return result;
3498}
3499
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003500bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003501 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003502 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003503{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003504 if(pCreateInfo != nullptr)
3505 {
3506 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003508 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003509 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003510 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003511 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003512 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003513 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003514 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003516
3517 return true;
3518}
3519
3520bool PostCreatePipelineCache(
3521 VkDevice device,
3522 VkPipelineCache* pPipelineCache,
3523 VkResult result)
3524{
3525
3526 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003527 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003528 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003529
3530 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003531 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003532 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3534 return false;
3535 }
3536
3537 return true;
3538}
3539
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003540VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003541 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003542 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003543 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003544 VkPipelineCache* pPipelineCache)
3545{
3546 PreCreatePipelineCache(device, pCreateInfo);
3547
Chia-I Wuf7458c52015-10-26 21:10:41 +08003548 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003549
3550 PostCreatePipelineCache(device, pPipelineCache, result);
3551
3552 return result;
3553}
3554
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003555bool PostGetPipelineCacheData(
3556 VkDevice device,
3557 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003558 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003559 void* pData,
3560 VkResult result)
3561{
3562
3563
Chia-I Wub16facd2015-10-26 19:17:06 +08003564 if(pDataSize != nullptr)
3565 {
3566 }
3567
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003568 if(pData != nullptr)
3569 {
3570 }
3571
3572 if(result < VK_SUCCESS)
3573 {
3574 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3575 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3576 return false;
3577 }
3578
3579 return true;
3580}
3581
3582VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3583 VkDevice device,
3584 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003585 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003586 void* pData)
3587{
Chia-I Wub16facd2015-10-26 19:17:06 +08003588 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003589
Chia-I Wub16facd2015-10-26 19:17:06 +08003590 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003591
3592 return result;
3593}
3594
3595bool PreMergePipelineCaches(
3596 VkDevice device,
3597 const VkPipelineCache* pSrcCaches)
3598{
3599 if(pSrcCaches != nullptr)
3600 {
3601 }
3602
3603 return true;
3604}
3605
3606bool PostMergePipelineCaches(
3607 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003608 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003609 uint32_t srcCacheCount,
3610 VkResult result)
3611{
3612
3613
3614
3615 if(result < VK_SUCCESS)
3616 {
3617 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3618 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3619 return false;
3620 }
3621
3622 return true;
3623}
3624
3625VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3626 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003627 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003628 uint32_t srcCacheCount,
3629 const VkPipelineCache* pSrcCaches)
3630{
3631 PreMergePipelineCaches(device, pSrcCaches);
3632
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003633 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003634
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003635 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003636
3637 return result;
3638}
3639
3640bool PreCreateGraphicsPipelines(
3641 VkDevice device,
3642 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3643{
3644 if(pCreateInfos != nullptr)
3645 {
3646 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3647 {
3648 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3649 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3650 return false;
3651 }
3652 if(pCreateInfos->pStages != nullptr)
3653 {
3654 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3655 {
3656 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3657 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3658 return false;
3659 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003660 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3661 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003662 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003663 {
3664 }
3665 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3666 {
3667 }
3668 }
3669 }
3670 if(pCreateInfos->pVertexInputState != nullptr)
3671 {
3672 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3673 {
3674 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3675 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3676 return false;
3677 }
3678 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3679 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003680 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3681 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003682 {
3683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003684 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003685 return false;
3686 }
3687 }
3688 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3689 {
3690 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3691 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3692 {
3693 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3694 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3695 return false;
3696 }
3697 }
3698 }
3699 if(pCreateInfos->pInputAssemblyState != nullptr)
3700 {
3701 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3702 {
3703 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3704 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3705 return false;
3706 }
3707 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3708 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3709 {
3710 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3711 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3712 return false;
3713 }
3714 }
3715 if(pCreateInfos->pTessellationState != nullptr)
3716 {
3717 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3718 {
3719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3720 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3721 return false;
3722 }
3723 }
3724 if(pCreateInfos->pViewportState != nullptr)
3725 {
3726 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3727 {
3728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3729 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3730 return false;
3731 }
3732 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003733 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003734 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003735 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003736 {
3737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003738 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739 return false;
3740 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003741 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3742 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003743 {
3744 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003745 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003746 return false;
3747 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003748 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003749 {
3750 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003751 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003752 return false;
3753 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003754 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3755 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003756 {
3757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003758 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003759 return false;
3760 }
3761 }
3762 if(pCreateInfos->pMultisampleState != nullptr)
3763 {
3764 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3765 {
3766 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3767 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3768 return false;
3769 }
3770 }
3771 if(pCreateInfos->pDepthStencilState != nullptr)
3772 {
3773 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3774 {
3775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3776 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3777 return false;
3778 }
3779 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3780 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3781 {
3782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3783 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3784 return false;
3785 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003786 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3787 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003788 {
3789 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003790 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003791 return false;
3792 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003793 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3794 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003795 {
3796 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003797 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003798 return false;
3799 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003800 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3801 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003802 {
3803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003804 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003805 return false;
3806 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003807 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3808 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003809 {
3810 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003811 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003812 return false;
3813 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003814 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3815 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003816 {
3817 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003818 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003819 return false;
3820 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003821 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3822 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003823 {
3824 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003825 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 return false;
3827 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003828 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3829 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003830 {
3831 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003832 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003833 return false;
3834 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003835 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3836 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003837 {
3838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003839 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003840 return false;
3841 }
3842 }
3843 if(pCreateInfos->pColorBlendState != nullptr)
3844 {
3845 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3846 {
3847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3848 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3849 return false;
3850 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003851 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3852 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003853 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3854 {
3855 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3856 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3857 return false;
3858 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003859 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003860 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003861 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3862 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003863 {
3864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003865 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003866 return false;
3867 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003868 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3869 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003870 {
3871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003872 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 return false;
3874 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003875 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3876 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877 {
3878 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003879 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003880 return false;
3881 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003882 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3883 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003884 {
3885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003886 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003887 return false;
3888 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003889 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3890 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003891 {
3892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003893 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003894 return false;
3895 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003896 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3897 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003898 {
3899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003900 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003901 return false;
3902 }
3903 }
3904 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003905 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3906 {
3907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3908 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3909 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003910 }
3911
3912 return true;
3913}
3914
3915bool PostCreateGraphicsPipelines(
3916 VkDevice device,
3917 VkPipelineCache pipelineCache,
3918 uint32_t count,
3919 VkPipeline* pPipelines,
3920 VkResult result)
3921{
3922
3923
3924
3925 if(pPipelines != nullptr)
3926 {
3927 }
3928
3929 if(result < VK_SUCCESS)
3930 {
3931 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
3932 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3933 return false;
3934 }
3935
3936 return true;
3937}
3938
3939VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
3940 VkDevice device,
3941 VkPipelineCache pipelineCache,
3942 uint32_t count,
3943 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003944 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003945 VkPipeline* pPipelines)
3946{
3947 PreCreateGraphicsPipelines(device, pCreateInfos);
3948
Chia-I Wuf7458c52015-10-26 21:10:41 +08003949 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003950
3951 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3952
3953 return result;
3954}
3955
3956bool PreCreateComputePipelines(
3957 VkDevice device,
3958 const VkComputePipelineCreateInfo* pCreateInfos)
3959{
3960 if(pCreateInfos != nullptr)
3961 {
3962 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
3963 {
3964 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3965 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3966 return false;
3967 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06003968 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003969 {
3970 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3971 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
3972 return false;
3973 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06003974 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003975 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003976 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003977 {
3978 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06003979 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003980 {
3981 }
3982 }
3983 }
3984
3985 return true;
3986}
3987
3988bool PostCreateComputePipelines(
3989 VkDevice device,
3990 VkPipelineCache pipelineCache,
3991 uint32_t count,
3992 VkPipeline* pPipelines,
3993 VkResult result)
3994{
3995
3996
3997
3998 if(pPipelines != nullptr)
3999 {
4000 }
4001
4002 if(result < VK_SUCCESS)
4003 {
4004 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4005 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4006 return false;
4007 }
4008
4009 return true;
4010}
4011
4012VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4013 VkDevice device,
4014 VkPipelineCache pipelineCache,
4015 uint32_t count,
4016 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004017 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004018 VkPipeline* pPipelines)
4019{
4020 PreCreateComputePipelines(device, pCreateInfos);
4021
Chia-I Wuf7458c52015-10-26 21:10:41 +08004022 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004023
4024 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4025
4026 return result;
4027}
4028
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004029bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004030 VkDevice device,
4031 const VkPipelineLayoutCreateInfo* pCreateInfo)
4032{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004033 if(pCreateInfo != nullptr)
4034 {
4035 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004036 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004037 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004038 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4039 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004040 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004041 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004042 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004043 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004044 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004045 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004046 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004047 }
4048
4049 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004050}
4051
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004052bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004053 VkDevice device,
4054 VkPipelineLayout* pPipelineLayout,
4055 VkResult result)
4056{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004057
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004058 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004059 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004060 }
4061
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004062 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004063 {
4064 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004065 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4066 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004067 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004068
4069 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004070}
4071
4072VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4073 VkDevice device,
4074 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004075 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004076 VkPipelineLayout* pPipelineLayout)
4077{
4078 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004079
Chia-I Wuf7458c52015-10-26 21:10:41 +08004080 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004081
4082 PostCreatePipelineLayout(device, pPipelineLayout, result);
4083
4084 return result;
4085}
4086
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004087bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004088 VkDevice device,
4089 const VkSamplerCreateInfo* pCreateInfo)
4090{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004091 if(pCreateInfo != nullptr)
4092 {
4093 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004094 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004096 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004097 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004098 }
Chia-I Wub99df442015-10-26 16:49:32 +08004099 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4100 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004101 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004102 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004103 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004104 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004105 }
Chia-I Wub99df442015-10-26 16:49:32 +08004106 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4107 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004108 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004109 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004110 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004111 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004112 }
Chia-I Wub99df442015-10-26 16:49:32 +08004113 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4114 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004117 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004118 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004119 }
Chia-I Wub99df442015-10-26 16:49:32 +08004120 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4121 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004122 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004123 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004124 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004125 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004126 }
Chia-I Wub99df442015-10-26 16:49:32 +08004127 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4128 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004129 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004131 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004132 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004133 }
Chia-I Wub99df442015-10-26 16:49:32 +08004134 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4135 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004136 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004138 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004139 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004140 }
4141 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4142 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4143 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004144 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004145 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004146 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004147 }
4148 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4149 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4150 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004151 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004152 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004153 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004154 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004155 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004156
4157 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004158}
4159
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004160bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004161 VkDevice device,
4162 VkSampler* pSampler,
4163 VkResult result)
4164{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004165
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004166 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004167 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004168 }
4169
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004170 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004171 {
4172 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4174 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004175 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004176
4177 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178}
4179
4180VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4181 VkDevice device,
4182 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004183 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004184 VkSampler* pSampler)
4185{
4186 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004187
Chia-I Wuf7458c52015-10-26 21:10:41 +08004188 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004189
4190 PostCreateSampler(device, pSampler, result);
4191
4192 return result;
4193}
4194
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004195bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004196 VkDevice device,
4197 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4198{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004199 if(pCreateInfo != nullptr)
4200 {
4201 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004202 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004203 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004204 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004205 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004206 }
Chia-I Wua745e512015-10-31 00:31:16 +08004207 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004208 {
Chia-I Wua745e512015-10-31 00:31:16 +08004209 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4210 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004211 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004212 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004213 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004214 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 }
Chia-I Wua745e512015-10-31 00:31:16 +08004216 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004217 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004218 }
4219 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004221
4222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223}
4224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004225bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004226 VkDevice device,
4227 VkDescriptorSetLayout* pSetLayout,
4228 VkResult result)
4229{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004230
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004231 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004232 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004233 }
4234
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004235 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004236 {
4237 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004238 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4239 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004240 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004241
4242 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004243}
4244
4245VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4246 VkDevice device,
4247 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004248 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004249 VkDescriptorSetLayout* pSetLayout)
4250{
4251 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004252
Chia-I Wuf7458c52015-10-26 21:10:41 +08004253 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254
4255 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4256
4257 return result;
4258}
4259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004260bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 VkDevice device,
4262 const VkDescriptorPoolCreateInfo* pCreateInfo)
4263{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004264 if(pCreateInfo != nullptr)
4265 {
4266 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004267 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004269 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004270 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004271 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004272 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004273 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004274 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4275 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004276 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004277 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004278 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004279 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004280 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004281 }
4282 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004283
4284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004285}
4286
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004287bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004289 uint32_t maxSets,
4290 VkDescriptorPool* pDescriptorPool,
4291 VkResult result)
4292{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004293
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004294 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004295
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004296 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004297 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004298 }
4299
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004300 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004301 {
4302 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004303 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4304 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004305 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004306
4307 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004308}
4309
4310VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4311 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004312 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004313 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004314 VkDescriptorPool* pDescriptorPool)
4315{
4316 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004317
Chia-I Wuf7458c52015-10-26 21:10:41 +08004318 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004320 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321
4322 return result;
4323}
4324
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004325bool PostResetDescriptorPool(
4326 VkDevice device,
4327 VkDescriptorPool descriptorPool,
4328 VkResult result)
4329{
4330
Jeremy Hayes99a96322015-06-26 12:48:09 -06004331
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004332 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004333 {
4334 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4336 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004337 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004338
4339 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340}
4341
4342VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4343 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004344 VkDescriptorPool descriptorPool,
4345 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004347 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004348
4349 PostResetDescriptorPool(device, descriptorPool, result);
4350
4351 return result;
4352}
4353
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004354bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004355 VkDevice device,
4356 const VkDescriptorSetLayout* pSetLayouts)
4357{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004358 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004360 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004361
4362 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004363}
4364
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004365bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366 VkDevice device,
4367 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368 uint32_t count,
4369 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004370 VkResult result)
4371{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004372
Jeremy Hayes99a96322015-06-26 12:48:09 -06004373
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004374 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004375 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004376 }
4377
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004378 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004380 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004381 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4382 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004383 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004384
4385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386}
4387
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004388VK_LAYER_EXPORT VkResult VKAPI vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004389 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004390 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004391 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004393 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004394
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004395 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004396
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004397 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004398
4399 return result;
4400}
4401
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004402bool PreFreeDescriptorSets(
4403 VkDevice device,
4404 const VkDescriptorSet* pDescriptorSets)
4405{
4406 if(pDescriptorSets != nullptr)
4407 {
4408 }
4409
4410 return true;
4411}
4412
4413bool PostFreeDescriptorSets(
4414 VkDevice device,
4415 VkDescriptorPool descriptorPool,
4416 uint32_t count,
4417 VkResult result)
4418{
4419
4420
4421
4422 if(result < VK_SUCCESS)
4423 {
4424 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4425 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4426 return false;
4427 }
4428
4429 return true;
4430}
4431
4432VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4433 VkDevice device,
4434 VkDescriptorPool descriptorPool,
4435 uint32_t count,
4436 const VkDescriptorSet* pDescriptorSets)
4437{
4438 PreFreeDescriptorSets(device, pDescriptorSets);
4439
4440 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4441
4442 PostFreeDescriptorSets(device, descriptorPool, count, result);
4443
4444 return result;
4445}
4446
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004447bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004448 VkDevice device,
4449 const VkWriteDescriptorSet* pDescriptorWrites,
4450 const VkCopyDescriptorSet* pDescriptorCopies)
4451{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004452 if(pDescriptorWrites != nullptr)
4453 {
4454 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004455 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004457 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004458 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004459 }
4460 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4461 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4462 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004463 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004464 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004465 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004466 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004467 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4468 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4469 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004470 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004471 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4472 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004473 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004475 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004476 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004477 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004478 }
4479 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004480
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004481 if(pDescriptorCopies != nullptr)
4482 {
4483 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004484 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004486 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004487 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004488 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004489 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004490
4491 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004492}
4493
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004494VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004495 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004496 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004497 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004498 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004499 const VkCopyDescriptorSet* pDescriptorCopies)
4500{
4501 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004502
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004503 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004504}
4505
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004506bool PreCreateFramebuffer(
4507 VkDevice device,
4508 const VkFramebufferCreateInfo* pCreateInfo)
4509{
4510 if(pCreateInfo != nullptr)
4511 {
4512 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4513 {
4514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4515 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4516 return false;
4517 }
4518 if(pCreateInfo->pAttachments != nullptr)
4519 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004520 }
4521 }
4522
4523 return true;
4524}
4525
4526bool PostCreateFramebuffer(
4527 VkDevice device,
4528 VkFramebuffer* pFramebuffer,
4529 VkResult result)
4530{
4531
4532 if(pFramebuffer != nullptr)
4533 {
4534 }
4535
4536 if(result < VK_SUCCESS)
4537 {
4538 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4539 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4540 return false;
4541 }
4542
4543 return true;
4544}
4545
4546VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4547 VkDevice device,
4548 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004549 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004550 VkFramebuffer* pFramebuffer)
4551{
4552 PreCreateFramebuffer(device, pCreateInfo);
4553
Chia-I Wuf7458c52015-10-26 21:10:41 +08004554 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004555
4556 PostCreateFramebuffer(device, pFramebuffer, result);
4557
4558 return result;
4559}
4560
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004561bool PreCreateRenderPass(
4562 VkDevice device,
4563 const VkRenderPassCreateInfo* pCreateInfo)
4564{
4565 if(pCreateInfo != nullptr)
4566 {
4567 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4568 {
4569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4570 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4571 return false;
4572 }
4573 if(pCreateInfo->pAttachments != nullptr)
4574 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004575 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4576 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4577 {
4578 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4579 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4580 return false;
4581 }
4582 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4583 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4584 {
4585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4586 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4587 return false;
4588 }
4589 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4590 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4591 {
4592 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4593 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4594 return false;
4595 }
4596 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4597 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4598 {
4599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4600 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4601 return false;
4602 }
4603 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4604 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4605 {
4606 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4607 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4608 return false;
4609 }
4610 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4611 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4612 {
4613 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4614 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4615 return false;
4616 }
4617 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4618 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4619 {
4620 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4621 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4622 return false;
4623 }
4624 }
4625 if(pCreateInfo->pSubpasses != nullptr)
4626 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004627 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4628 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4629 {
4630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4631 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4632 return false;
4633 }
Cody Northropa505dda2015-08-04 11:16:41 -06004634 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004635 {
Cody Northropa505dda2015-08-04 11:16:41 -06004636 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4637 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004638 {
4639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004640 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004641 return false;
4642 }
4643 }
Cody Northropa505dda2015-08-04 11:16:41 -06004644 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004645 {
Cody Northropa505dda2015-08-04 11:16:41 -06004646 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4647 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004648 {
4649 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004650 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004651 return false;
4652 }
4653 }
Cody Northropa505dda2015-08-04 11:16:41 -06004654 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004655 {
Cody Northropa505dda2015-08-04 11:16:41 -06004656 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4657 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004658 {
4659 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004660 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004661 return false;
4662 }
4663 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004664 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4665 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4666 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004667 {
4668 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004669 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004670 return false;
4671 }
Cody Northropa505dda2015-08-04 11:16:41 -06004672 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004673 {
Cody Northropa505dda2015-08-04 11:16:41 -06004674 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4675 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004676 {
4677 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004678 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004679 return false;
4680 }
4681 }
4682 }
4683 if(pCreateInfo->pDependencies != nullptr)
4684 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004685 }
4686 }
4687
4688 return true;
4689}
4690
4691bool PostCreateRenderPass(
4692 VkDevice device,
4693 VkRenderPass* pRenderPass,
4694 VkResult result)
4695{
4696
4697 if(pRenderPass != nullptr)
4698 {
4699 }
4700
4701 if(result < VK_SUCCESS)
4702 {
4703 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4705 return false;
4706 }
4707
4708 return true;
4709}
4710
4711VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4712 VkDevice device,
4713 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004714 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004715 VkRenderPass* pRenderPass)
4716{
4717 PreCreateRenderPass(device, pCreateInfo);
4718
Chia-I Wuf7458c52015-10-26 21:10:41 +08004719 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004720
4721 PostCreateRenderPass(device, pRenderPass, result);
4722
4723 return result;
4724}
4725
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004726bool PostGetRenderAreaGranularity(
4727 VkDevice device,
4728 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004729 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004730{
4731
4732
4733 if(pGranularity != nullptr)
4734 {
4735 }
4736
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004737 return true;
4738}
4739
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004740VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004741 VkDevice device,
4742 VkRenderPass renderPass,
4743 VkExtent2D* pGranularity)
4744{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004745 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004746
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004747 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004748}
4749
4750bool PreCreateCommandPool(
4751 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004752 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004753{
4754 if(pCreateInfo != nullptr)
4755 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004756 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004757 {
4758 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4759 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4760 return false;
4761 }
4762 }
4763
4764 return true;
4765}
4766
4767bool PostCreateCommandPool(
4768 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004769 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004770 VkResult result)
4771{
4772
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004773 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004774 {
4775 }
4776
4777 if(result < VK_SUCCESS)
4778 {
4779 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4781 return false;
4782 }
4783
4784 return true;
4785}
4786
4787VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4788 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004789 const VkCommandPoolCreateInfo* pCreateInfo,
4790 const VkAllocationCallbacks* pAllocator,
4791 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004792{
4793 PreCreateCommandPool(device, pCreateInfo);
4794
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004795 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004797 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004798
4799 return result;
4800}
4801
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004802bool PostResetCommandPool(
4803 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004804 VkCommandPool commandPool,
4805 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004806 VkResult result)
4807{
4808
4809
4810
4811 if(result < VK_SUCCESS)
4812 {
4813 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4815 return false;
4816 }
4817
4818 return true;
4819}
4820
4821VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4822 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004823 VkCommandPool commandPool,
4824 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004825{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004826 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004827
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004828 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004829
4830 return result;
4831}
4832
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004833bool PreCreateCommandBuffer(
4834 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004835 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004836{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004837 if(pCreateInfo != nullptr)
4838 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004839 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004840 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004841 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004842 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004843 return false;
4844 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004845 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4846 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004847 {
4848 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004849 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004850 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004851 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004852 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004853
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004854 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004855}
4856
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004857bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004858 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004859 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004860 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004861{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004862
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004863 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004864 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004865 }
4866
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004867 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004868 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004869 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004870 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4871 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004872 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004873
4874 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004875}
4876
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004877VK_LAYER_EXPORT VkResult VKAPI vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004878 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004879 const VkCommandBufferAllocateInfo* pCreateInfo,
4880 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004881{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004882 PreCreateCommandBuffer(device, pCreateInfo);
4883
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004884 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004885
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004886 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004887
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004888 return result;
4889}
4890
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004891bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004892 VkCommandBuffer commandBuffer,
4893 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004894{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004895 if(pBeginInfo != nullptr)
4896 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004897 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004898 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004899 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004900 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004901 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004902 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004903 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004904
4905 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004906}
4907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004908bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004909 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004910 VkResult result)
4911{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004912
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004913 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004914 {
4915 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004916 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004917 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004918 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004919
4920 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004921}
4922
4923VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004924 VkCommandBuffer commandBuffer,
4925 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004926{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004927 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004928
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004929 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004931 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004932
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004933 return result;
4934}
4935
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004936bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004937 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004938 VkResult result)
4939{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004940
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004941 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004942 {
4943 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004944 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004945 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004946 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004947
4948 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004949}
4950
4951VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004952 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004953{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004954 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004955
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004956 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004958 return result;
4959}
4960
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004962 VkCommandBuffer commandBuffer,
4963 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004964 VkResult result)
4965{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004966
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004967
4968 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004969 {
4970 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004971 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004972 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004974
4975 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004976}
4977
4978VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004979 VkCommandBuffer commandBuffer,
4980 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004981{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004982 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004983
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004984 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004986 return result;
4987}
4988
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004989bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004990 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004991 VkPipelineBindPoint pipelineBindPoint,
4992 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004993{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004994
4995 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4996 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4997 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004998 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004999 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005000 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005001 }
5002
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005003
5004 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005005}
5006
Jeremy Hayes99a96322015-06-26 12:48:09 -06005007VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005008 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005009 VkPipelineBindPoint pipelineBindPoint,
5010 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005011{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005012 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005014 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005015}
5016
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005017VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005018{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005019 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005020}
5021
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005022VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005023{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005024 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005025}
5026
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005029 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005030}
5031
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005033{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005034 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005035}
5036
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005037VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005038{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005039 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005040}
5041
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005042VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005043{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005044 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005045}
5046
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005047VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005048{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005049 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005050}
5051
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005052VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005053{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005054 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005055}
5056
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005057VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005058{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005059 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005060}
5061
5062bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005063 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005064 const VkDescriptorSet* pDescriptorSets,
5065 const uint32_t* pDynamicOffsets)
5066{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005067 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005068 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005069 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005070
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005071 if(pDynamicOffsets != nullptr)
5072 {
5073 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005074
5075 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005076}
5077
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005078bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005079 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005080 VkPipelineBindPoint pipelineBindPoint,
5081 VkPipelineLayout layout,
5082 uint32_t firstSet,
5083 uint32_t setCount,
5084 uint32_t dynamicOffsetCount)
5085{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005086
5087 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5088 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5089 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005090 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005091 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005092 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005093 }
5094
5095
5096
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005097
5098
5099 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005100}
5101
5102VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005103 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005104 VkPipelineBindPoint pipelineBindPoint,
5105 VkPipelineLayout layout,
5106 uint32_t firstSet,
5107 uint32_t setCount,
5108 const VkDescriptorSet* pDescriptorSets,
5109 uint32_t dynamicOffsetCount,
5110 const uint32_t* pDynamicOffsets)
5111{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005112 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005113
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005114 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005115
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005116 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005117}
5118
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005119bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005120 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005121 VkBuffer buffer,
5122 VkDeviceSize offset,
5123 VkIndexType indexType)
5124{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005125
Jeremy Hayes99a96322015-06-26 12:48:09 -06005126
5127
5128 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5129 indexType > VK_INDEX_TYPE_END_RANGE)
5130 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005131 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005132 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005133 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005134 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005135
5136 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005137}
5138
5139VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005140 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005141 VkBuffer buffer,
5142 VkDeviceSize offset,
5143 VkIndexType indexType)
5144{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005145 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005146
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005147 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005148}
5149
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005150bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005151 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005152 const VkBuffer* pBuffers,
5153 const VkDeviceSize* pOffsets)
5154{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005155 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005156 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005157 }
5158
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005159 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005160 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005161 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005162
5163 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005164}
5165
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005166bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005167 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168 uint32_t startBinding,
5169 uint32_t bindingCount)
5170{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005171
5172
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005173
5174 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005175}
5176
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005177VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005178 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179 uint32_t startBinding,
5180 uint32_t bindingCount,
5181 const VkBuffer* pBuffers,
5182 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005183{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005184 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005185
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005186 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005187
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005188 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005189}
5190
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005191bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005192 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005193 uint32_t firstVertex,
5194 uint32_t vertexCount,
5195 uint32_t firstInstance,
5196 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005197{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005198
5199
5200
5201
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005202
5203 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005204}
5205
Jeremy Hayes99a96322015-06-26 12:48:09 -06005206VK_LAYER_EXPORT void VKAPI vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005207 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005208 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005209 uint32_t instanceCount,
5210 uint32_t firstVertex,
5211 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005212{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005213 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005214
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005215 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005216}
5217
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005218bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005219 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005220 uint32_t firstIndex,
5221 uint32_t indexCount,
5222 int32_t vertexOffset,
5223 uint32_t firstInstance,
5224 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005225{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005226
5227
5228
5229
5230
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005231
5232 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005233}
5234
Jeremy Hayes99a96322015-06-26 12:48:09 -06005235VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005236 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005237 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005238 uint32_t instanceCount,
5239 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005240 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005241 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005242{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005243 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005244
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005245 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005246}
5247
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005248bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005249 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005250 VkBuffer buffer,
5251 VkDeviceSize offset,
5252 uint32_t count,
5253 uint32_t stride)
5254{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005255
5256
5257
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005258
5259
5260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005261}
5262
5263VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005264 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005265 VkBuffer buffer,
5266 VkDeviceSize offset,
5267 uint32_t count,
5268 uint32_t stride)
5269{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005270 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005271
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005272 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005273}
5274
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005275bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005276 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005277 VkBuffer buffer,
5278 VkDeviceSize offset,
5279 uint32_t count,
5280 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005281{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005282
5283
5284
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005285
5286
5287 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005288}
5289
Jeremy Hayes99a96322015-06-26 12:48:09 -06005290VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005291 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005292 VkBuffer buffer,
5293 VkDeviceSize offset,
5294 uint32_t count,
5295 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005296{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005297 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005298
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005299 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005300}
5301
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005302bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005303 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005304 uint32_t x,
5305 uint32_t y,
5306 uint32_t z)
5307{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005308
5309
5310
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005311
5312 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005313}
5314
5315VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005316 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317 uint32_t x,
5318 uint32_t y,
5319 uint32_t z)
5320{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005321 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005322
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005323 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005324}
5325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005326bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005327 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005328 VkBuffer buffer,
5329 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005330{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005331
Jeremy Hayes99a96322015-06-26 12:48:09 -06005332
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005333
5334 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005335}
5336
Jeremy Hayes99a96322015-06-26 12:48:09 -06005337VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005338 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005339 VkBuffer buffer,
5340 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005341{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005342 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005343
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005344 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005345}
5346
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005347bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005348 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005349 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005350{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005351 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005352 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005353 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005354
5355 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005356}
5357
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005358bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005359 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005360 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005361 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005362 uint32_t regionCount)
5363{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005364
Jeremy Hayes99a96322015-06-26 12:48:09 -06005365
Jeremy Hayes99a96322015-06-26 12:48:09 -06005366
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005367
5368 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005369}
5370
5371VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005372 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005373 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005374 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005375 uint32_t regionCount,
5376 const VkBufferCopy* pRegions)
5377{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005378 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005379
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005380 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005381
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005382 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005383}
5384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005385bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005386 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005387 const VkImageCopy* pRegions)
5388{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005389 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005390 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005391 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005392 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005393 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005394 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005395 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005396 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005397 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005398 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005399 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005400 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005401 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005402 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005403 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005404 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005405 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005406
5407 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005408}
5409
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005410bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005411 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005412 VkImage srcImage,
5413 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005414 VkImage dstImage,
5415 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005416 uint32_t regionCount)
5417{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005418
Jeremy Hayes99a96322015-06-26 12:48:09 -06005419
5420 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5421 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5422 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005423 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005424 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005425 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426 }
5427
Jeremy Hayes99a96322015-06-26 12:48:09 -06005428
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005429 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5430 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005432 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5433 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435 }
5436
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005437
5438 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005439}
5440
5441VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005442 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005443 VkImage srcImage,
5444 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005445 VkImage dstImage,
5446 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447 uint32_t regionCount,
5448 const VkImageCopy* pRegions)
5449{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005450 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005451
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005452 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005453
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005454 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005455}
5456
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005457bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005458 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005459 const VkImageBlit* pRegions)
5460{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005461 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005462 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005463 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005464 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005465 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005466 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005467 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005468 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005469 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005470 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005471 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005472 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005473 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005474 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005475 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005476 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005477 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005478
5479 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005480}
5481
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005482bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005483 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005484 VkImage srcImage,
5485 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005486 VkImage dstImage,
5487 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005488 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005489 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005491
Jeremy Hayes99a96322015-06-26 12:48:09 -06005492
5493 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5494 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5495 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005496 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005497 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005498 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005499 }
5500
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005502 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5503 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005504 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005505 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5506 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005507 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508 }
5509
5510
Chia-I Wub99df442015-10-26 16:49:32 +08005511 if(filter < VK_FILTER_BEGIN_RANGE ||
5512 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005513 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005514 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005515 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005516 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005517 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005518
5519 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005520}
5521
5522VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005523 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524 VkImage srcImage,
5525 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005526 VkImage dstImage,
5527 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528 uint32_t regionCount,
5529 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005530 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005531{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005532 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005534 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005535
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005536 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005537}
5538
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005539bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005540 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005541 const VkBufferImageCopy* pRegions)
5542{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005543 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005544 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005545 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005546 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005547 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005548 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005549 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005550 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005552 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005553
5554 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005555}
5556
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005557bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005558 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005560 VkImage dstImage,
5561 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562 uint32_t regionCount)
5563{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564
Jeremy Hayes99a96322015-06-26 12:48:09 -06005565
Jeremy Hayes99a96322015-06-26 12:48:09 -06005566
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005567 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5568 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005569 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005570 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5571 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005572 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573 }
5574
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005575
5576 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005577}
5578
5579VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005580 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005581 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005582 VkImage dstImage,
5583 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005584 uint32_t regionCount,
5585 const VkBufferImageCopy* pRegions)
5586{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005587 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005588
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005589 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005590
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005591 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005592}
5593
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005594bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005595 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005596 const VkBufferImageCopy* pRegions)
5597{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005598 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005599 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005600 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005601 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005603 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005604 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005605 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005607 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005608
5609 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005610}
5611
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005612bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005613 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005614 VkImage srcImage,
5615 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005616 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 uint32_t regionCount)
5618{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005619
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620
5621 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5622 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5623 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005624 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005625 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005627 }
5628
Jeremy Hayes99a96322015-06-26 12:48:09 -06005629
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005630
5631 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005632}
5633
5634VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005635 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636 VkImage srcImage,
5637 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005638 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639 uint32_t regionCount,
5640 const VkBufferImageCopy* pRegions)
5641{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005642 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005643
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005644 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005646 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647}
5648
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005650 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005651 const uint32_t* pData)
5652{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005653 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005654 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005655 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005656
5657 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005658}
5659
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005660bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005661 VkCommandBuffer commandBuffer,
5662 VkBuffer dstBuffer,
5663 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 VkDeviceSize dataSize)
5665{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666
5667
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005668
5669
5670 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671}
5672
5673VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005674 VkCommandBuffer commandBuffer,
5675 VkBuffer dstBuffer,
5676 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005677 VkDeviceSize dataSize,
5678 const uint32_t* pData)
5679{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005680 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005681
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005682 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005683
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005684 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005685}
5686
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005687bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005688 VkCommandBuffer commandBuffer,
5689 VkBuffer dstBuffer,
5690 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005691 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005692 uint32_t data)
5693{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005694
5695
5696
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005697
5698
5699 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700}
5701
5702VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005703 VkCommandBuffer commandBuffer,
5704 VkBuffer dstBuffer,
5705 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005706 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005707 uint32_t data)
5708{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005709 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005710
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005711 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005712}
5713
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005714bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005715 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005716 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005717 const VkImageSubresourceRange* pRanges)
5718{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005719 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721 }
5722
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005723 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005724 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005725 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005726 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005727
5728 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005729}
5730
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005731bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005732 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733 VkImage image,
5734 VkImageLayout imageLayout,
5735 uint32_t rangeCount)
5736{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005737
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738
5739 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5740 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5741 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005742 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005743 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005744 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005745 }
5746
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005747
5748 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749}
5750
5751VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005752 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 VkImage image,
5754 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005755 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005756 uint32_t rangeCount,
5757 const VkImageSubresourceRange* pRanges)
5758{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005759 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005760
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005761 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005763 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764}
5765
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005766bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005767 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768 const VkImageSubresourceRange* pRanges)
5769{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005770 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005772 /*
5773 * TODO: How do we validation pRanges->aspectMask?
5774 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5775 * VK_IMAGE_ASPECT_STENCIL_BIT.
5776 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005777 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005778
5779 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005780}
5781
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005782bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005783 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784 VkImage image,
5785 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005786 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005787 uint32_t rangeCount)
5788{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005789
Jeremy Hayes99a96322015-06-26 12:48:09 -06005790
5791 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5792 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5793 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005794 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005795 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005796 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005797 }
5798
5799
5800
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005801
5802 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005803}
5804
Chris Forbesd9be82b2015-06-22 17:21:59 +12005805VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005806 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807 VkImage image,
5808 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005809 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810 uint32_t rangeCount,
5811 const VkImageSubresourceRange* pRanges)
5812{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005813 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005814
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005815 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005816
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005817 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005818}
5819
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005820bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005821 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005822 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005823 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005824{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005825 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005826 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005827 }
5828
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005829 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005830 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005831 }
5832
5833 return true;
5834}
5835
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005836VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005837 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005838 uint32_t attachmentCount,
5839 const VkClearAttachment* pAttachments,
5840 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005841 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005842{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005843 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005844 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005845 }
5846
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005847 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005848}
5849
5850bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005851 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005852 const VkImageResolve* pRegions)
5853{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005854 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005855 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005856 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005857 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005858 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005859 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005860 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005861 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005862 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005863 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005864 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005866 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005867 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005868 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005869 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005870 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005871
5872 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873}
5874
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005875bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005876 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005877 VkImage srcImage,
5878 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005879 VkImage dstImage,
5880 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005881 uint32_t regionCount)
5882{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005883
Jeremy Hayes99a96322015-06-26 12:48:09 -06005884
5885 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5886 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5887 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005888 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005889 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005890 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005891 }
5892
Jeremy Hayes99a96322015-06-26 12:48:09 -06005893
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005894 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5895 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005896 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005897 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5898 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005899 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005900 }
5901
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005902
5903 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005904}
5905
5906VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005907 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005908 VkImage srcImage,
5909 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005910 VkImage dstImage,
5911 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005912 uint32_t regionCount,
5913 const VkImageResolve* pRegions)
5914{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005915 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005916
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005917 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005918
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005919 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005920}
5921
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005922bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005923 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005924 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005925 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005926{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005927
Jeremy Hayes99a96322015-06-26 12:48:09 -06005928
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005929
5930 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931}
5932
5933VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005934 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005936 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005937{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005938 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005939
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005940 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005941}
5942
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005943bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005944 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005945 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005946 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005947{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005948
Jeremy Hayes99a96322015-06-26 12:48:09 -06005949
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005950
5951 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005952}
5953
5954VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005955 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005956 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005957 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005958{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005959 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005960
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005961 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005962}
5963
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005964bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005965 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966 const VkEvent* pEvents,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005967 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005968{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005969 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971 }
5972
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005973 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005974 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005976
5977 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005978}
5979
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005980bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005981 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005983 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005984 VkPipelineStageFlags dstStageMask,
5985 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005987
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005988
Jeremy Hayes99a96322015-06-26 12:48:09 -06005989
5990
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005991
5992 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993}
5994
5995VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005996 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997 uint32_t eventCount,
5998 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005999 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006000 VkPipelineStageFlags dstStageMask,
6001 uint32_t memoryBarrierCount,
6002 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006004 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006005
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006006 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006008 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009}
6010
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006011bool PreCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006012 VkCommandBuffer commandBuffer,
6013 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006014{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006015 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006016 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006018
6019 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006020}
6021
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006022bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006023 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006024 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006025 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006026 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006027 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006030
Jeremy Hayes99a96322015-06-26 12:48:09 -06006031
6032
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006033
6034 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006035}
6036
6037VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006038 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006039 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006040 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006041 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006042 uint32_t memoryBarrierCount,
6043 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006045 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006046
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006047 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006048
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006049 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006050}
6051
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006052bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006053 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054 VkQueryPool queryPool,
6055 uint32_t slot,
6056 VkQueryControlFlags flags)
6057{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059
6060
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006061
6062 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063}
6064
6065VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006066 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067 VkQueryPool queryPool,
6068 uint32_t slot,
6069 VkQueryControlFlags flags)
6070{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006071 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006072
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006073 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006074}
6075
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006076bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006077 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078 VkQueryPool queryPool,
6079 uint32_t slot)
6080{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006081
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006083
6084 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006085}
6086
6087VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006088 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006089 VkQueryPool queryPool,
6090 uint32_t slot)
6091{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006092 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006094 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095}
6096
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006097bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006098 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099 VkQueryPool queryPool,
6100 uint32_t startQuery,
6101 uint32_t queryCount)
6102{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006103
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006104
6105
6106
6107 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006108}
6109
6110VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006111 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112 VkQueryPool queryPool,
6113 uint32_t startQuery,
6114 uint32_t queryCount)
6115{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006116 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006117
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006118 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006119}
6120
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006121bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006122 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006123 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006124 VkQueryPool queryPool,
6125 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006126{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006127
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006128 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006129
6130 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006131}
6132
6133VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006134 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006135 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006136 VkQueryPool queryPool,
6137 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006139 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006140
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006141 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006142}
6143
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006144bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006145 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006146 VkQueryPool queryPool,
6147 uint32_t startQuery,
6148 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006149 VkBuffer dstBuffer,
6150 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006151 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006152 VkQueryResultFlags flags)
6153{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154
6155
6156
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006157
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158
6159
6160
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006161
6162 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006163}
6164
Jeremy Hayesad367152015-04-17 10:36:53 -06006165VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006166 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006167 VkQueryPool queryPool,
6168 uint32_t startQuery,
6169 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006170 VkBuffer dstBuffer,
6171 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006172 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006174{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006175 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006176
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006177 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006178}
6179
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006180bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006181 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006182 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006184 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006185 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006186 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006187
6188 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006189}
6190
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006191bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006192 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006193 VkPipelineLayout layout,
6194 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006195 uint32_t offset,
6196 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006197{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198
Jeremy Hayes99a96322015-06-26 12:48:09 -06006199
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006200
6201
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006202
6203 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006204}
6205
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006206VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006207 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006208 VkPipelineLayout layout,
6209 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006210 uint32_t offset,
6211 uint32_t size,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006212 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006213{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006214 PreCmdPushConstants(commandBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006215
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006216 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006217
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006218 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006219}
6220
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006221bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006222 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006223 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006224{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006225 if(pRenderPassBegin != nullptr)
6226 {
6227 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006229 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006230 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006231 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006232 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006233 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006234 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006235 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006236 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006237
6238 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006239}
6240
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006241bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006242 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006243 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006244{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006245
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006246 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6247 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006248 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006249 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006250 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006251 return false;
6252 }
6253
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006254 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006255}
6256
Jeremy Hayes99a96322015-06-26 12:48:09 -06006257VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006258 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006259 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006260 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006261{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006262 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006263
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006264 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006265
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006266 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006267}
6268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006269bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006270 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006271 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006272{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006273
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006274 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6275 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006276 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006277 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006278 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006279 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006280 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006281
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006282 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006283}
6284
6285VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006286 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006287 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006288{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006289 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006290
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006291 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006292}
6293
6294bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006295 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006296{
6297
6298 return true;
6299}
6300
6301VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006302 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006303{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006304 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006305
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006306 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006307}
6308
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006309bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006310 VkCommandBuffer commandBuffer,
6311 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006312{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006313 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006314 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006315 }
6316
6317 return true;
6318}
6319
6320bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006321 VkCommandBuffer commandBuffer,
6322 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006323{
6324
6325
6326 return true;
6327}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006328
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006329VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006330 VkCommandBuffer commandBuffer,
6331 uint32_t commandBuffersCount,
6332 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006333{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006334 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006335
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006336 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006337
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006338 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006339}
6340
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006341VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006342{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006343 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006344 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006345 }
6346
Jon Ashburn8fd08252015-05-28 16:25:02 -06006347 /* loader uses this to force layer initialization; device object is wrapped */
6348 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006349 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006350 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006351 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006352
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006353 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006354 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006355 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006356 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006357 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006358 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006359 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006360 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006361 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006362 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006363 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006364 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006365 if (!strcmp(funcName, "vkAllocateMemory"))
6366 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006367 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006368 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006369 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006370 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006371 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006372 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006373 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006374 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006375 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006376 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006377 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006378 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006379 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006380 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006381 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006382 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006384 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006385 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006386 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006387 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006388 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006389 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006390 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006391 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006392 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006393 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006394 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006395 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006396 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006397 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006398 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006399 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006400 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006401 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006402 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006403 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006404 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006405 if (!strcmp(funcName, "vkCreateShaderModule"))
6406 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006407 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006408 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006409 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006410 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006411 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006412 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006413 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006414 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006415 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006416 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006417 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006418 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006419 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006420 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006421 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6422 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006423 if (!strcmp(funcName, "vkCmdSetViewport"))
6424 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006425 if (!strcmp(funcName, "vkCmdSetScissor"))
6426 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006427 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6428 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6429 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6430 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6431 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6432 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6433 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6434 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6435 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6436 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6437 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6438 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6439 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6440 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006441 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6442 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006443 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006444 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006445 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006446 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006447 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006448 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006449 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006450 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006451 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006452 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006453 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006454 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006455 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006456 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006457 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006458 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006459 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006460 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006461 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006462 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006463 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006464 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006465 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006466 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006467 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006468 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006470 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006471 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006472 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006473 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006474 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006476 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006477 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006478 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006479 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006480 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006481 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006482 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006483 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006484 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006485 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006486 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006487 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006493 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006494 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006495 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006496 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006497 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006498 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006499 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006500 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006501 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006502 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006504 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006505 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006506 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006507 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006508 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006509 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006510 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006511 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006512 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006513
Jon Ashburneab34492015-06-01 09:37:38 -06006514 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006515 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006516 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006517 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006518 }
6519}
6520
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006521VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006522{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006523 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006524 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006525 }
6526
Jon Ashburn8fd08252015-05-28 16:25:02 -06006527 /* loader uses this to force layer initialization; instance object is wrapped */
6528 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006531 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006532
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006534 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006536 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006537 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006538 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006539 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006540 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006541 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006542 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006543 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006544 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006545 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6546 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6547 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6548 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6549 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6550 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6551 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6552 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006553
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006557 return fptr;
6558
Jeremy Hayes99a96322015-06-26 12:48:09 -06006559 {
6560 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6561 return NULL;
6562 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6563 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006564}