blob: 800b093c06602e1d34c7892ecd571b7b6bcd573b [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002 *
Courtney Goeltzenleuchterfcbe16f2015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Michael Lentine03d8e572015-09-15 14:59:14 -05004 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060023 *
24 * Author: Jeremy Hayes <jeremy@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060026 */
27
28#include <stdio.h>
29#include <stdlib.h>
30#include <string.h>
31
32#include <iostream>
33#include <string>
34#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050035#include <unordered_map>
Michael Lentine157a2ec2016-01-27 11:25:05 -060036#include <unordered_set>
Jeremy Hayes99a96322015-06-26 12:48:09 -060037#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060038
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060039#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070040#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060041#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060042#include "vk_enum_validate_helper.h"
43#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060044
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060045#include "vk_layer_table.h"
46#include "vk_layer_data.h"
47#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060048#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060049
Cody Northrop55443ef2015-09-28 15:09:32 -060050struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060051 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070052 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060053
54 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060055 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060056 {};
57};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050058
Jeremy Hayes99a96322015-06-26 12:48:09 -060059static std::unordered_map<void*, layer_data*> layer_data_map;
60static device_table_map pc_device_table_map;
61static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060062
Jeremy Hayes99a96322015-06-26 12:48:09 -060063// "my instance data"
64debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060065{
Jeremy Hayes99a96322015-06-26 12:48:09 -060066 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060067 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060068#if DISPATCH_MAP_DEBUG
69 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
70#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060071 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060072
73 return data->report_data;
74}
75
76// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060077debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060078{
79 dispatch_key key = get_dispatch_key(object);
80 layer_data *data = get_my_data_ptr(key, layer_data_map);
81#if DISPATCH_MAP_DEBUG
82 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
83#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060084 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060085 return data->report_data;
86}
87
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -070088static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -060089{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070090 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060091 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
92
93 uint32_t debug_action = 0;
94 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
95 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
96 {
97 FILE *log_output = NULL;
98 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060099 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700100 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700101 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700102 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700103 dbgCreateInfo.flags = report_flags;
104 dbgCreateInfo.pfnCallback = log_callback;
105 dbgCreateInfo.pUserData = log_output;
106
107 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600108 data->logging_callback.push_back(callback);
109 }
110
111 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700112 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700113 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700114 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700115 dbgCreateInfo.flags = report_flags;
116 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
117 dbgCreateInfo.pUserData = NULL;
118
119 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600120 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600121 }
122}
123
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700124VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600125 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700126 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700127 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700128 VkDebugReportCallbackEXT* pMsgCallback)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700131 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600132
133 if (result == VK_SUCCESS)
134 {
135 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700136 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600137 }
138
139 return result;
140}
141
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700142VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600143 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700144 VkDebugReportCallbackEXT msgCallback,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700145 const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600146{
147 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700148 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600149
150 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700151 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600152}
153
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700154VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700155 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700156 VkDebugReportFlagsEXT flags,
157 VkDebugReportObjectTypeEXT objType,
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700158 uint64_t object,
159 size_t location,
160 int32_t msgCode,
161 const char* pLayerPrefix,
162 const char* pMsg)
163{
164 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700165 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700166}
167
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700168static const VkExtensionProperties instance_extensions[] = {
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600169 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700170 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
Courtney Goeltzenleuchterb69cd592016-01-19 16:08:39 -0700171 VK_EXT_DEBUG_REPORT_SPEC_VERSION
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600172 }
173};
Tony Barbour59a47322015-06-24 16:06:58 -0600174
Chia-I Wu9ab61502015-11-06 06:42:02 +0800175VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600176 const char *pLayerName,
177 uint32_t *pCount,
178 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600179{
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700180 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600181}
182
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700183static const VkLayerProperties pc_global_layers[] = {
184 {
Michael Lentine1f8d4412016-01-19 14:19:38 -0600185 "VK_LAYER_LUNARG_param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700186 VK_API_VERSION,
187 VK_MAKE_VERSION(0, 1, 0),
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700188 "Validation layer: param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700189 }
190};
191
Chia-I Wu9ab61502015-11-06 06:42:02 +0800192VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600193 uint32_t *pCount,
194 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600195{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600196 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
197 pc_global_layers,
198 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600199}
200
Chia-I Wu9ab61502015-11-06 06:42:02 +0800201VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600202 VkPhysicalDevice physicalDevice,
203 const char* pLayerName,
204 uint32_t* pCount,
205 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600206{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600207 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700208 if (pLayerName == NULL) {
209 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
210 physicalDevice,
211 NULL,
212 pCount,
213 pProperties);
214 } else {
215 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
216 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600217}
218
Chia-I Wu9ab61502015-11-06 06:42:02 +0800219VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600220 VkPhysicalDevice physicalDevice,
221 uint32_t* pCount,
222 VkLayerProperties* pProperties)
223{
224 /* ParamChecker's physical device layers are the same as global */
225 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
226 pCount, pProperties);
227}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600228
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600229// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600230
Jeremy Hayes99a96322015-06-26 12:48:09 -0600231static
232std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600233{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600234 switch(enumerator)
235 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600236 case VK_RESULT_MAX_ENUM:
237 {
238 return "VK_RESULT_MAX_ENUM";
239 break;
240 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600241 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600242 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600243 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600244 break;
245 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600246 case VK_ERROR_INCOMPATIBLE_DRIVER:
247 {
248 return "VK_ERROR_INCOMPATIBLE_DRIVER";
249 break;
250 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600251 case VK_ERROR_MEMORY_MAP_FAILED:
252 {
253 return "VK_ERROR_MEMORY_MAP_FAILED";
254 break;
255 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600256 case VK_INCOMPLETE:
257 {
258 return "VK_INCOMPLETE";
259 break;
260 }
261 case VK_ERROR_OUT_OF_HOST_MEMORY:
262 {
263 return "VK_ERROR_OUT_OF_HOST_MEMORY";
264 break;
265 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600266 case VK_ERROR_INITIALIZATION_FAILED:
267 {
268 return "VK_ERROR_INITIALIZATION_FAILED";
269 break;
270 }
271 case VK_NOT_READY:
272 {
273 return "VK_NOT_READY";
274 break;
275 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600276 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
277 {
278 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
279 break;
280 }
281 case VK_EVENT_SET:
282 {
283 return "VK_EVENT_SET";
284 break;
285 }
286 case VK_TIMEOUT:
287 {
288 return "VK_TIMEOUT";
289 break;
290 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600291 case VK_EVENT_RESET:
292 {
293 return "VK_EVENT_RESET";
294 break;
295 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600296 case VK_SUCCESS:
297 {
298 return "VK_SUCCESS";
299 break;
300 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600301 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600302 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600303 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600304 break;
305 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600306 case VK_ERROR_DEVICE_LOST:
307 {
308 return "VK_ERROR_DEVICE_LOST";
309 break;
310 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600311 default:
312 {
313 return "unrecognized enumerator";
314 break;
315 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600316 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600317}
318
319static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600320bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
321{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600322 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600323 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
324 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
325 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
326 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
327 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
328 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
329 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
330 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
331 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600332 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800333 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
Jon Ashburn766866a2016-01-22 15:39:20 -0700334 VK_FORMAT_FEATURE_BLIT_DST_BIT |
335 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600336 if(enumerator & (~allFlags))
337 {
338 return false;
339 }
340
341 return true;
342}
343
344static
345std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
346{
347 if(!ValidateEnumerator(enumerator))
348 {
349 return "unrecognized enumerator";
350 }
351
352 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600353 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
354 {
355 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
356 }
357 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
358 {
359 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
360 }
361 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
362 {
363 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
364 }
365 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
366 {
367 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
368 }
369 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
370 {
371 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
372 }
373 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
374 {
375 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
376 }
377 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
378 {
379 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
380 }
381 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
382 {
383 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
384 }
385 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
386 {
387 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
388 }
389 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
390 {
391 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
392 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800393 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600394 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800395 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600396 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800397 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600398 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800399 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600400 }
Jon Ashburn766866a2016-01-22 15:39:20 -0700401 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
402 {
403 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT");
404 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600405
406 std::string enumeratorString;
407 for(auto const& string : strings)
408 {
409 enumeratorString += string;
410
411 if(string != strings.back())
412 {
413 enumeratorString += '|';
414 }
415 }
416
417 return enumeratorString;
418}
419
420static
421bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
422{
423 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600424 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600425 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
426 VK_IMAGE_USAGE_STORAGE_BIT |
427 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800428 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600429 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800430 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600431 if(enumerator & (~allFlags))
432 {
433 return false;
434 }
435
436 return true;
437}
438
439static
440std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
441{
442 if(!ValidateEnumerator(enumerator))
443 {
444 return "unrecognized enumerator";
445 }
446
447 std::vector<std::string> strings;
448 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
449 {
450 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
451 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600452 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600453 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600454 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600455 }
456 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
457 {
458 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
459 }
460 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
461 {
462 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
463 }
464 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
465 {
466 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
467 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800468 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600469 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800470 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600471 }
472 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
473 {
474 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
475 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800476 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600477 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800478 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600479 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600480
481 std::string enumeratorString;
482 for(auto const& string : strings)
483 {
484 enumeratorString += string;
485
486 if(string != strings.back())
487 {
488 enumeratorString += '|';
489 }
490 }
491
492 return enumeratorString;
493}
494
495static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600496bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
497{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800498 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800499 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600500 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800501 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600502 VK_QUEUE_GRAPHICS_BIT);
503 if(enumerator & (~allFlags))
504 {
505 return false;
506 }
507
508 return true;
509}
510
511static
512std::string EnumeratorString(VkQueueFlagBits const& enumerator)
513{
514 if(!ValidateEnumerator(enumerator))
515 {
516 return "unrecognized enumerator";
517 }
518
519 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800520 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600521 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800522 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600523 }
524 if(enumerator & VK_QUEUE_COMPUTE_BIT)
525 {
526 strings.push_back("VK_QUEUE_COMPUTE_BIT");
527 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800528 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600529 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800530 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600531 }
532 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
533 {
534 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
535 }
536
537 std::string enumeratorString;
538 for(auto const& string : strings)
539 {
540 enumeratorString += string;
541
542 if(string != strings.back())
543 {
544 enumeratorString += '|';
545 }
546 }
547
548 return enumeratorString;
549}
550
551static
552bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
553{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600554 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800555 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600556 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800557 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
558 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600559 if(enumerator & (~allFlags))
560 {
561 return false;
562 }
563
564 return true;
565}
566
567static
568std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
569{
570 if(!ValidateEnumerator(enumerator))
571 {
572 return "unrecognized enumerator";
573 }
574
575 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600576 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
577 {
578 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
579 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800580 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600581 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800582 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600583 }
584 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
585 {
586 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
587 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800588 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600589 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800590 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600591 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800592 if(enumerator & VK_MEMORY_PROPERTY_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_PROPERTY_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(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600613{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800614 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600615 if(enumerator & (~allFlags))
616 {
617 return false;
618 }
619
620 return true;
621}
622
623static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600624std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600625{
626 if(!ValidateEnumerator(enumerator))
627 {
628 return "unrecognized enumerator";
629 }
630
631 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800632 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600633 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800634 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635 }
636
637 std::string enumeratorString;
638 for(auto const& string : strings)
639 {
640 enumeratorString += string;
641
642 if(string != strings.back())
643 {
644 enumeratorString += '|';
645 }
646 }
647
648 return enumeratorString;
649}
650
651static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600652bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
653{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800654 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
655 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
656 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600657 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600658 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600659 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600660 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600661
662 return true;
663}
664
665static
666std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
667{
668 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600669 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600670 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600671 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600672
673 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800674 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600675 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800676 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600677 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800678 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600679 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800680 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600681 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800682 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600683 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800684 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600685 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600686
687 std::string enumeratorString;
688 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600689 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600690 enumeratorString += string;
691
692 if(string != strings.back())
693 {
694 enumeratorString += '|';
695 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600696 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600697
698 return enumeratorString;
699}
700
701static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600702bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
703{
704 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
705 if(enumerator & (~allFlags))
706 {
707 return false;
708 }
709
710 return true;
711}
712
713static
714std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
715{
716 if(!ValidateEnumerator(enumerator))
717 {
718 return "unrecognized enumerator";
719 }
720
721 std::vector<std::string> strings;
722 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
723 {
724 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
725 }
726
727 std::string enumeratorString;
728 for(auto const& string : strings)
729 {
730 enumeratorString += string;
731
732 if(string != strings.back())
733 {
734 enumeratorString += '|';
735 }
736 }
737
738 return enumeratorString;
739}
740
741static
742bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
743{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600744 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
754 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600755 if(enumerator & (~allFlags))
756 {
757 return false;
758 }
759
760 return true;
761}
762
763static
764std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
765{
766 if(!ValidateEnumerator(enumerator))
767 {
768 return "unrecognized enumerator";
769 }
770
771 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_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_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600777 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600779 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600781 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600782 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600811 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600812 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600813 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600814 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600815 }
816
817 std::string enumeratorString;
818 for(auto const& string : strings)
819 {
820 enumeratorString += string;
821
822 if(string != strings.back())
823 {
824 enumeratorString += '|';
825 }
826 }
827
828 return enumeratorString;
829}
830
831static
832bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
833{
834 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
835 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
836 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700837 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600838 if(enumerator & (~allFlags))
839 {
840 return false;
841 }
842
843 return true;
844}
845
846static
847std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
848{
849 if(!ValidateEnumerator(enumerator))
850 {
851 return "unrecognized enumerator";
852 }
853
854 std::vector<std::string> strings;
855 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
856 {
857 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
858 }
859 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
860 {
861 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
862 }
863 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
864 {
865 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
866 }
867 if(enumerator & VK_QUERY_RESULT_64_BIT)
868 {
869 strings.push_back("VK_QUERY_RESULT_64_BIT");
870 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600871
872 std::string enumeratorString;
873 for(auto const& string : strings)
874 {
875 enumeratorString += string;
876
877 if(string != strings.back())
878 {
879 enumeratorString += '|';
880 }
881 }
882
883 return enumeratorString;
884}
885
886static
887bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
888{
889 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
890 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
891 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
892 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
893 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800894 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600895 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800896 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600897 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600898 if(enumerator & (~allFlags))
899 {
900 return false;
901 }
902
903 return true;
904}
905
906static
907std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
908{
909 if(!ValidateEnumerator(enumerator))
910 {
911 return "unrecognized enumerator";
912 }
913
914 std::vector<std::string> strings;
915 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
916 {
917 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
918 }
919 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
920 {
921 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
922 }
923 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
924 {
925 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
926 }
927 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
928 {
929 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
930 }
931 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
932 {
933 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
934 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800935 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600936 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800937 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600938 }
939 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
940 {
941 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
942 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800943 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600944 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800945 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600946 }
947 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
948 {
949 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
950 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600951
952 std::string enumeratorString;
953 for(auto const& string : strings)
954 {
955 enumeratorString += string;
956
957 if(string != strings.back())
958 {
959 enumeratorString += '|';
960 }
961 }
962
963 return enumeratorString;
964}
965
966static
967bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
968{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600969 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
970 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600971 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600972 if(enumerator & (~allFlags))
973 {
974 return false;
975 }
976
977 return true;
978}
979
980static
981std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
982{
983 if(!ValidateEnumerator(enumerator))
984 {
985 return "unrecognized enumerator";
986 }
987
988 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600989 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
990 {
991 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
992 }
993 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
994 {
995 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
996 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600997 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600998 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600999 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001000 }
1001
1002 std::string enumeratorString;
1003 for(auto const& string : strings)
1004 {
1005 enumeratorString += string;
1006
1007 if(string != strings.back())
1008 {
1009 enumeratorString += '|';
1010 }
1011 }
1012
1013 return enumeratorString;
1014}
1015
1016static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001017bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1018{
1019 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001020 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1021 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001022 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001023 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001024 if(enumerator & (~allFlags))
1025 {
1026 return false;
1027 }
1028
1029 return true;
1030}
1031
1032static
1033std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1034{
1035 if(!ValidateEnumerator(enumerator))
1036 {
1037 return "unrecognized enumerator";
1038 }
1039
1040 std::vector<std::string> strings;
1041 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1042 {
1043 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1044 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001045 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1046 {
1047 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1048 }
1049 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1050 {
1051 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1052 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001053 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1054 {
1055 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1056 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001057 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001058 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001059 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001060 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001061
1062 std::string enumeratorString;
1063 for(auto const& string : strings)
1064 {
1065 enumeratorString += string;
1066
1067 if(string != strings.back())
1068 {
1069 enumeratorString += '|';
1070 }
1071 }
1072
1073 return enumeratorString;
1074}
1075
1076static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001077bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001078{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001079 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1080 VK_COLOR_COMPONENT_B_BIT |
1081 VK_COLOR_COMPONENT_G_BIT |
1082 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001083 if(enumerator & (~allFlags))
1084 {
1085 return false;
1086 }
1087
1088 return true;
1089}
1090
1091static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001092std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001093{
1094 if(!ValidateEnumerator(enumerator))
1095 {
1096 return "unrecognized enumerator";
1097 }
1098
1099 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001100 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001101 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001102 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001103 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001104 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001105 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001106 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001107 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001108 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001109 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001110 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001111 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001112 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001113 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001114 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001115 }
1116
1117 std::string enumeratorString;
1118 for(auto const& string : strings)
1119 {
1120 enumeratorString += string;
1121
1122 if(string != strings.back())
1123 {
1124 enumeratorString += '|';
1125 }
1126 }
1127
1128 return enumeratorString;
1129}
1130
1131static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001132bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001133{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001134 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1135 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1136 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001137 if(enumerator & (~allFlags))
1138 {
1139 return false;
1140 }
1141
1142 return true;
1143}
1144
1145static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001146std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001147{
1148 if(!ValidateEnumerator(enumerator))
1149 {
1150 return "unrecognized enumerator";
1151 }
1152
1153 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001154 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001155 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001156 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1157 }
1158 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1159 {
1160 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1161 }
1162 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1163 {
1164 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001165 }
1166
1167 std::string enumeratorString;
1168 for(auto const& string : strings)
1169 {
1170 enumeratorString += string;
1171
1172 if(string != strings.back())
1173 {
1174 enumeratorString += '|';
1175 }
1176 }
1177
1178 return enumeratorString;
1179}
1180
1181static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001182bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001183{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001184 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1185 VK_SHADER_STAGE_FRAGMENT_BIT |
1186 VK_SHADER_STAGE_GEOMETRY_BIT |
1187 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001188 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1189 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001190 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001191 if(enumerator & (~allFlags))
1192 {
1193 return false;
1194 }
1195
1196 return true;
1197}
1198
1199static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001200std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001201{
1202 if(!ValidateEnumerator(enumerator))
1203 {
1204 return "unrecognized enumerator";
1205 }
1206
1207 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001208 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001209 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001210 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001211 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001212 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001213 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001214 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001215 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001216 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001217 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001218 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1219 }
1220 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1221 {
1222 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1223 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001224 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001225 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001226 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001227 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001228 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001229 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001230 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001231 }
1232 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1233 {
1234 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001235 }
1236
1237 std::string enumeratorString;
1238 for(auto const& string : strings)
1239 {
1240 enumeratorString += string;
1241
1242 if(string != strings.back())
1243 {
1244 enumeratorString += '|';
1245 }
1246 }
1247
1248 return enumeratorString;
1249}
1250
1251static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001252bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001253{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001254 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001255 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001256 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1257 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001258 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001259 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001261 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001263 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1264 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1265 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1266 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1267 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1268 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1269 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1270 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1271 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001272 if(enumerator & (~allFlags))
1273 {
1274 return false;
1275 }
1276
1277 return true;
1278}
1279
1280static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001281std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001282{
1283 if(!ValidateEnumerator(enumerator))
1284 {
1285 return "unrecognized enumerator";
1286 }
1287
1288 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001289 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001290 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001291 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1292 }
1293 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1294 {
1295 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001296 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001297 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001298 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001299 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001300 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001301 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001302 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001303 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001304 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001305 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001306 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001307 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001308 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001309 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001310 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001311 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001312 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001314 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001315 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001316 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001317 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001318 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001319 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001320 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001321 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001322 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001323 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001324 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001326 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001327 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001328 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001329 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001330 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001331 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1332 }
1333 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1334 {
1335 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1336 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001337 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001338 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001339 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001340 }
1341 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1342 {
1343 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1344 }
1345 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1346 {
1347 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1348 }
1349 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1350 {
1351 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1352 }
1353 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1354 {
1355 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001356 }
1357
1358 std::string enumeratorString;
1359 for(auto const& string : strings)
1360 {
1361 enumeratorString += string;
1362
1363 if(string != strings.back())
1364 {
1365 enumeratorString += '|';
1366 }
1367 }
1368
1369 return enumeratorString;
1370}
1371
1372static
Chia-I Wua4594202015-10-27 19:54:37 +08001373bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001374{
Chia-I Wua4594202015-10-27 19:54:37 +08001375 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1376 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1377 VK_ACCESS_INDEX_READ_BIT |
1378 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1379 VK_ACCESS_UNIFORM_READ_BIT |
1380 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1381 VK_ACCESS_SHADER_READ_BIT |
1382 VK_ACCESS_SHADER_WRITE_BIT |
1383 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1384 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1385 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1386 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1387 VK_ACCESS_TRANSFER_READ_BIT |
1388 VK_ACCESS_TRANSFER_WRITE_BIT |
1389 VK_ACCESS_HOST_READ_BIT |
1390 VK_ACCESS_HOST_WRITE_BIT |
1391 VK_ACCESS_MEMORY_READ_BIT |
1392 VK_ACCESS_MEMORY_WRITE_BIT);
1393
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001394 if(enumerator & (~allFlags))
1395 {
1396 return false;
1397 }
1398
1399 return true;
1400}
1401
1402static
Chia-I Wua4594202015-10-27 19:54:37 +08001403std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001404{
1405 if(!ValidateEnumerator(enumerator))
1406 {
1407 return "unrecognized enumerator";
1408 }
1409
1410 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001411 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001412 {
Chia-I Wua4594202015-10-27 19:54:37 +08001413 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001414 }
Chia-I Wua4594202015-10-27 19:54:37 +08001415 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001416 {
Chia-I Wua4594202015-10-27 19:54:37 +08001417 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001418 }
Chia-I Wua4594202015-10-27 19:54:37 +08001419 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001420 {
Chia-I Wua4594202015-10-27 19:54:37 +08001421 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001422 }
Chia-I Wua4594202015-10-27 19:54:37 +08001423 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001424 {
Chia-I Wua4594202015-10-27 19:54:37 +08001425 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001426 }
Chia-I Wua4594202015-10-27 19:54:37 +08001427 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001428 {
Chia-I Wua4594202015-10-27 19:54:37 +08001429 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001430 }
Chia-I Wua4594202015-10-27 19:54:37 +08001431 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001432 {
Chia-I Wua4594202015-10-27 19:54:37 +08001433 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001434 }
Chia-I Wua4594202015-10-27 19:54:37 +08001435 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001436 {
Chia-I Wua4594202015-10-27 19:54:37 +08001437 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001438 }
Chia-I Wua4594202015-10-27 19:54:37 +08001439 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001440 {
Chia-I Wua4594202015-10-27 19:54:37 +08001441 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001442 }
Chia-I Wua4594202015-10-27 19:54:37 +08001443 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001444 {
Chia-I Wua4594202015-10-27 19:54:37 +08001445 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001446 }
Chia-I Wua4594202015-10-27 19:54:37 +08001447 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001448 {
Chia-I Wua4594202015-10-27 19:54:37 +08001449 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001450 }
Chia-I Wua4594202015-10-27 19:54:37 +08001451 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001452 {
Chia-I Wua4594202015-10-27 19:54:37 +08001453 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001454 }
Chia-I Wua4594202015-10-27 19:54:37 +08001455 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001456 {
Chia-I Wua4594202015-10-27 19:54:37 +08001457 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001458 }
Chia-I Wua4594202015-10-27 19:54:37 +08001459 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001460 {
Chia-I Wua4594202015-10-27 19:54:37 +08001461 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001462 }
Chia-I Wua4594202015-10-27 19:54:37 +08001463 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001464 {
Chia-I Wua4594202015-10-27 19:54:37 +08001465 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001466 }
Chia-I Wua4594202015-10-27 19:54:37 +08001467 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001468 {
Chia-I Wua4594202015-10-27 19:54:37 +08001469 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001470 }
Chia-I Wua4594202015-10-27 19:54:37 +08001471 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001472 {
Chia-I Wua4594202015-10-27 19:54:37 +08001473 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001474 }
Chia-I Wua4594202015-10-27 19:54:37 +08001475 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001476 {
Chia-I Wua4594202015-10-27 19:54:37 +08001477 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001478 }
1479
1480 std::string enumeratorString;
1481 for(auto const& string : strings)
1482 {
1483 enumeratorString += string;
1484
1485 if(string != strings.back())
1486 {
1487 enumeratorString += '|';
1488 }
1489 }
1490
1491 return enumeratorString;
1492}
1493
1494static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001495bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001496{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001497 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1498 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001499 if(enumerator & (~allFlags))
1500 {
1501 return false;
1502 }
1503
1504 return true;
1505}
1506
1507static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001508std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001509{
1510 if(!ValidateEnumerator(enumerator))
1511 {
1512 return "unrecognized enumerator";
1513 }
1514
1515 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001516 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001517 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001518 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001519 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001520 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001521 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001522 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001523 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001524
1525 std::string enumeratorString;
1526 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001527 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001528 enumeratorString += string;
1529
1530 if(string != strings.back())
1531 {
1532 enumeratorString += '|';
1533 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001534 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001535
1536 return enumeratorString;
1537}
1538
1539static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001540bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001541{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001542 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001543 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001544 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001545 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001546 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001547
1548 return true;
1549}
1550
1551static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001552std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001553{
1554 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001555 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001556 return "unrecognized enumerator";
1557 }
1558
1559 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001560 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001561 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001562 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001563 }
1564
1565 std::string enumeratorString;
1566 for(auto const& string : strings)
1567 {
1568 enumeratorString += string;
1569
1570 if(string != strings.back())
1571 {
1572 enumeratorString += '|';
1573 }
1574 }
1575
1576 return enumeratorString;
1577}
1578
1579static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001580bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001581{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001582 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1583 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1584 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001585 if(enumerator & (~allFlags))
1586 {
1587 return false;
1588 }
1589
1590 return true;
1591}
1592
1593static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001594std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001595{
1596 if(!ValidateEnumerator(enumerator))
1597 {
1598 return "unrecognized enumerator";
1599 }
1600
1601 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001602 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001603 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001604 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001605 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001606 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001607 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001608 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001609 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001610 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001611 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001612 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001613 }
1614
1615 std::string enumeratorString;
1616 for(auto const& string : strings)
1617 {
1618 enumeratorString += string;
1619
1620 if(string != strings.back())
1621 {
1622 enumeratorString += '|';
1623 }
1624 }
1625
1626 return enumeratorString;
1627}
1628
1629static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001630bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001631{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001632 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001633 if(enumerator & (~allFlags))
1634 {
1635 return false;
1636 }
1637
1638 return true;
1639}
1640
1641static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001642std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001643{
1644 if(!ValidateEnumerator(enumerator))
1645 {
1646 return "unrecognized enumerator";
1647 }
1648
1649 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001650 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001651 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001652 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001653 }
1654
1655 std::string enumeratorString;
1656 for(auto const& string : strings)
1657 {
1658 enumeratorString += string;
1659
1660 if(string != strings.back())
1661 {
1662 enumeratorString += '|';
1663 }
1664 }
1665
1666 return enumeratorString;
1667}
1668
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001669static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001670bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001671{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001672 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1673 VK_IMAGE_ASPECT_STENCIL_BIT |
1674 VK_IMAGE_ASPECT_DEPTH_BIT |
1675 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001676 if(enumerator & (~allFlags))
1677 {
1678 return false;
1679 }
1680
1681 return true;
1682}
1683
1684static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001685std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001686{
1687 if(!ValidateEnumerator(enumerator))
1688 {
1689 return "unrecognized enumerator";
1690 }
1691
1692 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001693 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001694 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001695 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1696 }
1697 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1698 {
1699 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1700 }
1701 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1702 {
1703 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1704 }
1705 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1706 {
1707 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1708 }
1709
1710 std::string enumeratorString;
1711 for(auto const& string : strings)
1712 {
1713 enumeratorString += string;
1714
1715 if(string != strings.back())
1716 {
1717 enumeratorString += '|';
1718 }
1719 }
1720
1721 return enumeratorString;
1722}
1723
1724static
1725bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1726{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001727 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001728 if(enumerator & (~allFlags))
1729 {
1730 return false;
1731 }
1732
1733 return true;
1734}
1735
1736static
1737std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1738{
1739 if(!ValidateEnumerator(enumerator))
1740 {
1741 return "unrecognized enumerator";
1742 }
1743
1744 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001745 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001746 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001747 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001748 }
1749
1750 std::string enumeratorString;
1751 for(auto const& string : strings)
1752 {
1753 enumeratorString += string;
1754
1755 if(string != strings.back())
1756 {
1757 enumeratorString += '|';
1758 }
1759 }
1760
1761 return enumeratorString;
1762}
1763
Chia-I Wu9ab61502015-11-06 06:42:02 +08001764VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001765 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001766 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001767 VkInstance* pInstance)
1768{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001769 VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001771 assert(chain_info->u.pLayerInfo);
1772 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
1773 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance) fpGetInstanceProcAddr(NULL, "vkCreateInstance");
1774 if (fpCreateInstance == NULL) {
1775 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001776 }
1777
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001778 // Advance the link info for the next element on the chain
1779 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
1780
1781 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
1782 if (result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001783 return result;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001784
1785 layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1786 VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
1787
1788 my_data->report_data = debug_report_create_instance(
1789 pTable,
1790 *pInstance,
1791 pCreateInfo->enabledExtensionCount,
1792 pCreateInfo->ppEnabledExtensionNames);
1793
1794 InitParamChecker(my_data, pAllocator);
1795
1796 return result;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001797}
1798
Chia-I Wu9ab61502015-11-06 06:42:02 +08001799VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001800 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001801 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001802{
1803 // Grab the key before the instance is destroyed.
1804 dispatch_key key = get_dispatch_key(instance);
1805 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001806 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807
1808 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001809 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1810 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001811 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001812 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001813 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001814 }
1815
1816 layer_debug_report_destroy_instance(mid(instance));
1817 layer_data_map.erase(pTable);
1818
1819 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001820}
1821
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001822bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001823 VkInstance instance,
1824 uint32_t* pPhysicalDeviceCount,
1825 VkPhysicalDevice* pPhysicalDevices,
1826 VkResult result)
1827{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001829 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001830 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001831 }
1832
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001833 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001834 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001835 }
1836
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001837 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001838 {
1839 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001840 log_msg(mid(instance), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001841 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001842 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001843
1844 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001845}
1846
Chia-I Wu9ab61502015-11-06 06:42:02 +08001847VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001848 VkInstance instance,
1849 uint32_t* pPhysicalDeviceCount,
1850 VkPhysicalDevice* pPhysicalDevices)
1851{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001852 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1853
1854 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1855
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001856 return result;
1857}
1858
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001859bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001860 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001861 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001862{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001863
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001864 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001865 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001866 }
1867
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001868 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001869}
1870
Chia-I Wu9ab61502015-11-06 06:42:02 +08001871VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001872 VkPhysicalDevice physicalDevice,
1873 VkPhysicalDeviceFeatures* pFeatures)
1874{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001875 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001876
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001877 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001878}
1879
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001880bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001881 VkPhysicalDevice physicalDevice,
1882 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001883 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001885
1886 if(format < VK_FORMAT_BEGIN_RANGE ||
1887 format > VK_FORMAT_END_RANGE)
1888 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001889 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001890 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001891 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001892 }
1893
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001894 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001895 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001896 }
1897
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001898 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001899}
1900
Chia-I Wu9ab61502015-11-06 06:42:02 +08001901VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001902 VkPhysicalDevice physicalDevice,
1903 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001904 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001905{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001906 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001907
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001908 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001909}
1910
1911bool PostGetPhysicalDeviceImageFormatProperties(
1912 VkPhysicalDevice physicalDevice,
1913 VkFormat format,
1914 VkImageType type,
1915 VkImageTiling tiling,
1916 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001917 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001918 VkImageFormatProperties* pImageFormatProperties,
1919 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001920{
1921
1922 if(format < VK_FORMAT_BEGIN_RANGE ||
1923 format > VK_FORMAT_END_RANGE)
1924 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001925 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001926 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1927 return false;
1928 }
1929
1930 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1931 type > VK_IMAGE_TYPE_END_RANGE)
1932 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001933 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001934 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1935 return false;
1936 }
1937
1938 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1939 tiling > VK_IMAGE_TILING_END_RANGE)
1940 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001941 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001942 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1943 return false;
1944 }
1945
1946
1947 if(pImageFormatProperties != nullptr)
1948 {
1949 }
1950
Chia-I Wu17241042015-10-31 00:31:16 +08001951 if(result < VK_SUCCESS)
1952 {
1953 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001954 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Chia-I Wu17241042015-10-31 00:31:16 +08001955 return false;
1956 }
1957
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001958 return true;
1959}
1960
Chia-I Wu9ab61502015-11-06 06:42:02 +08001961VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001962 VkPhysicalDevice physicalDevice,
1963 VkFormat format,
1964 VkImageType type,
1965 VkImageTiling tiling,
1966 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001967 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001968 VkImageFormatProperties* pImageFormatProperties)
1969{
Chia-I Wu17241042015-10-31 00:31:16 +08001970 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001971
Chia-I Wu17241042015-10-31 00:31:16 +08001972 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1973
1974 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001975}
1976
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001977bool PostGetPhysicalDeviceProperties(
1978 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001979 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001980{
1981
1982 if(pProperties != nullptr)
1983 {
1984 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1985 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1986 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001987 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001988 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1989 return false;
1990 }
1991 }
1992
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001993 return true;
1994}
1995
Chia-I Wu9ab61502015-11-06 06:42:02 +08001996VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001997 VkPhysicalDevice physicalDevice,
1998 VkPhysicalDeviceProperties* pProperties)
1999{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002000 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002001
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002002 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002003}
2004
Cody Northropd0802882015-08-03 17:04:53 -06002005bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002006 VkPhysicalDevice physicalDevice,
2007 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002008 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002009{
2010
Cody Northropd0802882015-08-03 17:04:53 -06002011 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002012 {
2013 }
2014
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002015 if(pQueueProperties != nullptr)
2016 {
2017 }
2018
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002019 return true;
2020}
2021
Chia-I Wu9ab61502015-11-06 06:42:02 +08002022VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002023 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002024 uint32_t* pCount,
2025 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002026{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002027 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002028
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002029 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002030}
2031
2032bool PostGetPhysicalDeviceMemoryProperties(
2033 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002034 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002035{
2036
2037 if(pMemoryProperties != nullptr)
2038 {
2039 }
2040
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002041 return true;
2042}
2043
Chia-I Wu9ab61502015-11-06 06:42:02 +08002044VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002045 VkPhysicalDevice physicalDevice,
2046 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2047{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002048 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002049
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002050 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002051}
2052
Michael Lentine157a2ec2016-01-27 11:25:05 -06002053void validateDeviceCreateInfo(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo) {
2054 std::unordered_set<uint32_t> set;
2055 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2056 if (set.count(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex)) {
2057 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2058 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex, is not unique within this structure.", i);
2059 } else {
2060 set.insert(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex);
2061 }
2062 }
2063}
2064
Chia-I Wu9ab61502015-11-06 06:42:02 +08002065VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002066 VkPhysicalDevice physicalDevice,
2067 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002068 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002069 VkDevice* pDevice)
2070{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002071 /*
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002072 * NOTE: We do not validate physicalDevice or any dispatchable
2073 * object as the first parameter. We couldn't get here if it was wrong!
2074 */
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002075 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
2076
2077 assert(chain_info->u.pLayerInfo);
2078 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
2079 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
2080 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice) fpGetInstanceProcAddr(NULL, "vkCreateDevice");
2081 if (fpCreateDevice == NULL) {
2082 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002083 }
2084
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002085 // Advance the link info for the next element on the chain
2086 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
2087
2088 VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
2089 if (result != VK_SUCCESS) {
2090 return result;
2091 }
2092
2093 layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2094 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2095 my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
2096 initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
2097
Michael Lentine157a2ec2016-01-27 11:25:05 -06002098 validateDeviceCreateInfo(physicalDevice, pCreateInfo);
2099
Jeremy Hayes99a96322015-06-26 12:48:09 -06002100 return result;
2101}
2102
Chia-I Wu9ab61502015-11-06 06:42:02 +08002103VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002104 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002105 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002106{
2107 layer_debug_report_destroy_device(device);
2108
2109 dispatch_key key = get_dispatch_key(device);
2110#if DISPATCH_MAP_DEBUG
2111 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2112#endif
2113
Chia-I Wuf7458c52015-10-26 21:10:41 +08002114 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002115 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002116}
2117
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002118bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002119 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002120 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002121 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002122 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002123{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002124
2125
2126
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002127 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002128 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129 }
2130
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002131 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002132}
2133
Chia-I Wu9ab61502015-11-06 06:42:02 +08002134VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002135 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002136 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137 uint32_t queueIndex,
2138 VkQueue* pQueue)
2139{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002140 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002142 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002143}
2144
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002145bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002146 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002147 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002148{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002149 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002150 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002151 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002152 return false;
2153 }
2154
2155 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002156 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002158
2159 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002160}
2161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002162bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002163 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002164 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002165 VkFence fence,
2166 VkResult result)
2167{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002168
2169
Jeremy Hayes99a96322015-06-26 12:48:09 -06002170
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002171 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002172 {
2173 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002174 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002175 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002177
2178 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179}
2180
Chia-I Wu9ab61502015-11-06 06:42:02 +08002181VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002183 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002184 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185 VkFence fence)
2186{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002187 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002188 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002189 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002190
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002191 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002192
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002193 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002194
2195 return result;
2196}
2197
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002198bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002199 VkQueue queue,
2200 VkResult result)
2201{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002202
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002203 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204 {
2205 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002206 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002207 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002209
2210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211}
2212
Chia-I Wu9ab61502015-11-06 06:42:02 +08002213VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002214 VkQueue queue)
2215{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002216 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2217
2218 PostQueueWaitIdle(queue, result);
2219
2220 return result;
2221}
2222
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002223bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002224 VkDevice device,
2225 VkResult result)
2226{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002228 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002229 {
2230 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002231 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002232 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
Chia-I Wu9ab61502015-11-06 06:42:02 +08002238VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002239 VkDevice device)
2240{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002241 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2242
2243 PostDeviceWaitIdle(device, result);
2244
2245 return result;
2246}
2247
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002248bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002249 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002250 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002251{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002252 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002253 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002254 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002255 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002256 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002257 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002258 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002259 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002261
2262 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002263}
2264
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002265bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002266 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002267 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268 VkResult result)
2269{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002271 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002272 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002273 }
2274
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002275 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002276 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002277 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002278 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002279 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002281
2282 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002283}
2284
Chia-I Wu9ab61502015-11-06 06:42:02 +08002285VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002286 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002287 const VkMemoryAllocateInfo* pAllocateInfo,
2288 const VkAllocationCallbacks* pAllocator,
2289 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002290{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002291 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002292
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002293 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002294
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002295 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296
2297 return result;
2298}
2299
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002300bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002301 VkDevice device,
2302 VkDeviceMemory mem,
2303 VkDeviceSize offset,
2304 VkDeviceSize size,
2305 VkMemoryMapFlags flags,
2306 void** ppData,
2307 VkResult result)
2308{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309
Jeremy Hayes99a96322015-06-26 12:48:09 -06002310
2311
2312
2313
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002314 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002315 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316 }
2317
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002318 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319 {
2320 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002321 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002322 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002324
2325 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326}
2327
Chia-I Wu9ab61502015-11-06 06:42:02 +08002328VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002329 VkDevice device,
2330 VkDeviceMemory mem,
2331 VkDeviceSize offset,
2332 VkDeviceSize size,
2333 VkMemoryMapFlags flags,
2334 void** ppData)
2335{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002336 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2337
2338 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2339
2340 return result;
2341}
2342
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002343bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002344 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002345 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002346{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002347 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002348 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002349 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002350 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002351 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002352 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002353 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002355 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356
2357 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002358}
2359
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002360bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002361 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002362 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002363 VkResult result)
2364{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002365
2366
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002367 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368 {
2369 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002370 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002371 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002373
2374 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002375}
2376
Chia-I Wu9ab61502015-11-06 06:42:02 +08002377VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002379 uint32_t memoryRangeCount,
2380 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002381{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002382 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002383
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002384 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002385
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002386 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002387
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002388 return result;
2389}
2390
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002391bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002392 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002393 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002394{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002395 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002396 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002397 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002398 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002399 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002400 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002401 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002402 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002403 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002404
2405 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002406}
2407
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002408bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002410 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002411 VkResult result)
2412{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002413
2414
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002415 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416 {
2417 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002418 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002419 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002420 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002421
2422 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423}
2424
Chia-I Wu9ab61502015-11-06 06:42:02 +08002425VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002426 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002427 uint32_t memoryRangeCount,
2428 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002429{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002430 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002431
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002432 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002433
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002434 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435
Tony Barbourb1250542015-04-16 19:23:13 -06002436 return result;
2437}
2438
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002439bool PostGetDeviceMemoryCommitment(
2440 VkDevice device,
2441 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002442 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002443{
2444
2445
2446 if(pCommittedMemoryInBytes != nullptr)
2447 {
2448 }
2449
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002450 return true;
2451}
2452
Chia-I Wu9ab61502015-11-06 06:42:02 +08002453VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002454 VkDevice device,
2455 VkDeviceMemory memory,
2456 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002457{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002458 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002459
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002460 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002461}
2462
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002463bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002465 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002466 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002467 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002468 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002469{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002470
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002471
Jeremy Hayes99a96322015-06-26 12:48:09 -06002472
2473
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002474 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002475 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002476 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002477 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002478 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002479 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480
2481 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002482}
2483
Chia-I Wu9ab61502015-11-06 06:42:02 +08002484VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002485 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002486 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002487 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002488 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002489{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002490 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002491
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002492 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002494 return result;
2495}
2496
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002497bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002498 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002499 VkImage image,
2500 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002501 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002502 VkResult result)
2503{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002504
2505
2506
2507
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002508 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002509 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002510 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002512 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002513 }
2514
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002515 return true;
2516}
2517
Chia-I Wu9ab61502015-11-06 06:42:02 +08002518VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519 VkDevice device,
2520 VkImage image,
2521 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002522 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002523{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002524 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002525
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002526 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002527
2528 return result;
2529}
2530
2531bool PostGetBufferMemoryRequirements(
2532 VkDevice device,
2533 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002534 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002535{
2536
2537
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002538 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002539 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002540 }
2541
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002542 return true;
2543}
2544
Chia-I Wu9ab61502015-11-06 06:42:02 +08002545VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002546 VkDevice device,
2547 VkBuffer buffer,
2548 VkMemoryRequirements* pMemoryRequirements)
2549{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002550 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002551
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002552 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553}
2554
2555bool PostGetImageMemoryRequirements(
2556 VkDevice device,
2557 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002558 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002559{
2560
2561
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002562 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002563 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002564 }
2565
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002566 return true;
2567}
2568
Chia-I Wu9ab61502015-11-06 06:42:02 +08002569VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002570 VkDevice device,
2571 VkImage image,
2572 VkMemoryRequirements* pMemoryRequirements)
2573{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002574 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002575
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002576 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002577}
2578
2579bool PostGetImageSparseMemoryRequirements(
2580 VkDevice device,
2581 VkImage image,
2582 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002583 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002584{
2585
2586
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002587 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002588 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002589 }
2590
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002591 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002593 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002594 (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 -06002595 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002596 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002597 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002598 return false;
2599 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002600 }
2601
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002602 return true;
2603}
2604
Chia-I Wu9ab61502015-11-06 06:42:02 +08002605VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002606 VkDevice device,
2607 VkImage image,
2608 uint32_t* pNumRequirements,
2609 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2610{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002611 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002612
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002613 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002614}
2615
2616bool PostGetPhysicalDeviceSparseImageFormatProperties(
2617 VkPhysicalDevice physicalDevice,
2618 VkFormat format,
2619 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002620 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 VkImageUsageFlags usage,
2622 VkImageTiling tiling,
2623 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002624 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002625{
2626
2627 if(format < VK_FORMAT_BEGIN_RANGE ||
2628 format > VK_FORMAT_END_RANGE)
2629 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002630 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002631 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002632 return false;
2633 }
2634
2635 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2636 type > VK_IMAGE_TYPE_END_RANGE)
2637 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002638 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002639 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002640 return false;
2641 }
2642
2643
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002644
2645 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2646 tiling > VK_IMAGE_TILING_END_RANGE)
2647 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002648 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002649 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002650 return false;
2651 }
2652
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002653 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002654 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002655 }
2656
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002657 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002659 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002660 (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 -06002661 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002662 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002663 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664 return false;
2665 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002666 }
2667
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002668 return true;
2669}
2670
Chia-I Wu9ab61502015-11-06 06:42:02 +08002671VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672 VkPhysicalDevice physicalDevice,
2673 VkFormat format,
2674 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002675 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002676 VkImageUsageFlags usage,
2677 VkImageTiling tiling,
2678 uint32_t* pNumProperties,
2679 VkSparseImageFormatProperties* pProperties)
2680{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002681 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002682
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002683 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002684}
2685
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002686bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002687 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002688 uint32_t bindInfoCount,
2689 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002690{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002691 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002692 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002693 }
2694
2695 return true;
2696}
2697
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002698bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002699 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002700 uint32_t bindInfoCount,
2701 const VkBindSparseInfo* pBindInfo,
2702 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002703 VkResult result)
2704{
2705
2706
2707
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002708 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002709 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002710 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002711 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002712 return false;
2713 }
2714
2715 return true;
2716}
2717
Chia-I Wu9ab61502015-11-06 06:42:02 +08002718VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002719 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002720 uint32_t bindInfoCount,
2721 const VkBindSparseInfo* pBindInfo,
2722 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002723{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002724 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002725
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002726 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002727
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002728 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002729
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002730 return result;
2731}
2732
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002733bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002734 VkDevice device,
2735 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002736{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002737 if(pCreateInfo != nullptr)
2738 {
2739 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002740 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002741 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002742 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002743 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002744 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002745 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002746
2747 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002748}
2749
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002750bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002751 VkDevice device,
2752 VkFence* pFence,
2753 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002754{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002755
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002756 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002757 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002758 }
2759
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002760 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002761 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002762 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002763 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002764 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002765 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002766
2767 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002768}
2769
Chia-I Wu9ab61502015-11-06 06:42:02 +08002770VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002771 VkDevice device,
2772 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002773 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002774 VkFence* pFence)
2775{
2776 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002777
Chia-I Wuf7458c52015-10-26 21:10:41 +08002778 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002779
2780 PostCreateFence(device, pFence, result);
2781
2782 return result;
2783}
2784
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002785bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002786 VkDevice device,
2787 const VkFence* pFences)
2788{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002789 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002790 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002791 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002792
2793 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002794}
2795
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002796bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002797 VkDevice device,
2798 uint32_t fenceCount,
2799 VkResult result)
2800{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002801
2802
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002803 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002804 {
2805 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002806 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002807 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002808 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002809
2810 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002811}
2812
Chia-I Wu9ab61502015-11-06 06:42:02 +08002813VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002814 VkDevice device,
2815 uint32_t fenceCount,
2816 const VkFence* pFences)
2817{
2818 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002819
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2821
2822 PostResetFences(device, fenceCount, result);
2823
2824 return result;
2825}
2826
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002827bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828 VkDevice device,
2829 VkFence fence,
2830 VkResult result)
2831{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002832
Jeremy Hayes99a96322015-06-26 12:48:09 -06002833
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002834 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002835 {
2836 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002837 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002838 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002839 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002840
2841 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002842}
2843
Chia-I Wu9ab61502015-11-06 06:42:02 +08002844VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002845 VkDevice device,
2846 VkFence fence)
2847{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002848 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2849
2850 PostGetFenceStatus(device, fence, result);
2851
2852 return result;
2853}
2854
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002855bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002856 VkDevice device,
2857 const VkFence* pFences)
2858{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002859 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002860 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002861 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002862
2863 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002864}
2865
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002866bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002867 VkDevice device,
2868 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002869 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002870 uint64_t timeout,
2871 VkResult result)
2872{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002873
2874
2875
2876
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002877 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002878 {
2879 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002880 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002881 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002882 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002883
2884 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002885}
2886
Chia-I Wu9ab61502015-11-06 06:42:02 +08002887VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002888 VkDevice device,
2889 uint32_t fenceCount,
2890 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002891 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002892 uint64_t timeout)
2893{
2894 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002895
Jeremy Hayes99a96322015-06-26 12:48:09 -06002896 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2897
2898 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2899
2900 return result;
2901}
2902
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002903bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002904 VkDevice device,
2905 const VkSemaphoreCreateInfo* pCreateInfo)
2906{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002907 if(pCreateInfo != nullptr)
2908 {
2909 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002910 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002911 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002912 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002913 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002914 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002915 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002916
2917 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002918}
2919
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002920bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 VkDevice device,
2922 VkSemaphore* pSemaphore,
2923 VkResult result)
2924{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002926 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002927 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002928 }
2929
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002930 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002931 {
2932 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002933 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002934 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002935 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002936
2937 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938}
2939
Chia-I Wu9ab61502015-11-06 06:42:02 +08002940VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002941 VkDevice device,
2942 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002943 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002944 VkSemaphore* pSemaphore)
2945{
2946 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002947
Chia-I Wuf7458c52015-10-26 21:10:41 +08002948 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002949
2950 PostCreateSemaphore(device, pSemaphore, result);
2951
2952 return result;
2953}
2954
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002955bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002956 VkDevice device,
2957 const VkEventCreateInfo* pCreateInfo)
2958{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002959 if(pCreateInfo != nullptr)
2960 {
2961 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002962 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002963 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002964 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002965 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002967 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002968
2969 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002970}
2971
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002972bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 VkDevice device,
2974 VkEvent* pEvent,
2975 VkResult result)
2976{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002977
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002978 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002980 }
2981
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002982 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002983 {
2984 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002985 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002986 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002987 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002988
2989 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002990}
2991
Chia-I Wu9ab61502015-11-06 06:42:02 +08002992VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993 VkDevice device,
2994 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002995 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996 VkEvent* pEvent)
2997{
2998 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002999
Chia-I Wuf7458c52015-10-26 21:10:41 +08003000 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001
3002 PostCreateEvent(device, pEvent, result);
3003
3004 return result;
3005}
3006
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003007bool PostGetEventStatus(
3008 VkDevice device,
3009 VkEvent event,
3010 VkResult result)
3011{
3012
Jeremy Hayes99a96322015-06-26 12:48:09 -06003013
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003014 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003015 {
3016 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003017 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003019 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003020
3021 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003022}
3023
Chia-I Wu9ab61502015-11-06 06:42:02 +08003024VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025 VkDevice device,
3026 VkEvent event)
3027{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3029
3030 PostGetEventStatus(device, event, result);
3031
3032 return result;
3033}
3034
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003035bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 VkDevice device,
3037 VkEvent event,
3038 VkResult result)
3039{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040
Jeremy Hayes99a96322015-06-26 12:48:09 -06003041
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003042 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043 {
3044 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003045 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003046 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003047 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003048
3049 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003050}
3051
Chia-I Wu9ab61502015-11-06 06:42:02 +08003052VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053 VkDevice device,
3054 VkEvent event)
3055{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003056 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3057
3058 PostSetEvent(device, event, result);
3059
3060 return result;
3061}
3062
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003063bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064 VkDevice device,
3065 VkEvent event,
3066 VkResult result)
3067{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003070 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071 {
3072 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003073 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003074 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003076
3077 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078}
3079
Chia-I Wu9ab61502015-11-06 06:42:02 +08003080VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 VkDevice device,
3082 VkEvent event)
3083{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003084 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3085
3086 PostResetEvent(device, event, result);
3087
3088 return result;
3089}
3090
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003091bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003092 VkDevice device,
3093 const VkQueryPoolCreateInfo* pCreateInfo)
3094{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003095 if(pCreateInfo != nullptr)
3096 {
3097 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003098 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003099 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003100 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003101 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003102 }
3103 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3104 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3105 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003106 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003107 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003108 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003109 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003111
3112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113}
3114
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003115bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116 VkDevice device,
3117 VkQueryPool* pQueryPool,
3118 VkResult result)
3119{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003120
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003121 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003123 }
3124
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003125 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126 {
3127 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003128 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003129 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003130 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003131
3132 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133}
3134
Chia-I Wu9ab61502015-11-06 06:42:02 +08003135VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136 VkDevice device,
3137 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003138 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139 VkQueryPool* pQueryPool)
3140{
3141 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003142
Chia-I Wuf7458c52015-10-26 21:10:41 +08003143 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144
3145 PostCreateQueryPool(device, pQueryPool, result);
3146
3147 return result;
3148}
3149
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003150bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 VkDevice device,
3152 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003153 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003154 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003155 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003156 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003157 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158 VkQueryResultFlags flags,
3159 VkResult result)
3160{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003161
Jeremy Hayes99a96322015-06-26 12:48:09 -06003162
3163
3164
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003165 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003167 }
3168
Jeremy Hayes99a96322015-06-26 12:48:09 -06003169
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003170 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003171 {
3172 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003173 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003174 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003175 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003176
3177 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178}
3179
Chia-I Wu9ab61502015-11-06 06:42:02 +08003180VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003181 VkDevice device,
3182 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003183 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003185 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003186 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003187 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003188 VkQueryResultFlags flags)
3189{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003190 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003192 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003193
3194 return result;
3195}
3196
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003197bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003198 VkDevice device,
3199 const VkBufferCreateInfo* pCreateInfo)
3200{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003201 if(pCreateInfo != nullptr)
3202 {
3203 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003205 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003206 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003207 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003209 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3210 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003212 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003213 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003214 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003216 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003218 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003220
3221 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003222}
3223
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003224bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 VkDevice device,
3226 VkBuffer* pBuffer,
3227 VkResult result)
3228{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003229
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003230 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003231 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003232 }
3233
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003234 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003235 {
3236 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003237 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003240
3241 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003242}
3243
Chia-I Wu9ab61502015-11-06 06:42:02 +08003244VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003245 VkDevice device,
3246 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003247 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003248 VkBuffer* pBuffer)
3249{
3250 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003251
Chia-I Wuf7458c52015-10-26 21:10:41 +08003252 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253
3254 PostCreateBuffer(device, pBuffer, result);
3255
3256 return result;
3257}
3258
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003260 VkDevice device,
3261 const VkBufferViewCreateInfo* pCreateInfo)
3262{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003263 if(pCreateInfo != nullptr)
3264 {
3265 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003266 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003267 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003268 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003269 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003270 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003271 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3272 pCreateInfo->format > VK_FORMAT_END_RANGE)
3273 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003274 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003275 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003276 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003277 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003278 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003279
3280 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003281}
3282
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003283bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 VkDevice device,
3285 VkBufferView* pView,
3286 VkResult result)
3287{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003288
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003289 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003290 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003291 }
3292
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003293 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003294 {
3295 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003296 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003297 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003298 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003299
3300 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003301}
3302
Chia-I Wu9ab61502015-11-06 06:42:02 +08003303VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003304 VkDevice device,
3305 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003306 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003307 VkBufferView* pView)
3308{
3309 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003310
Chia-I Wuf7458c52015-10-26 21:10:41 +08003311 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312
3313 PostCreateBufferView(device, pView, result);
3314
3315 return result;
3316}
3317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003318bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319 VkDevice device,
3320 const VkImageCreateInfo* pCreateInfo)
3321{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003322 if(pCreateInfo != nullptr)
3323 {
3324 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003325 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003326 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003327 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003328 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 }
3330 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3331 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3332 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003333 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003334 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003335 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003336 }
3337 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3338 pCreateInfo->format > VK_FORMAT_END_RANGE)
3339 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003340 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003341 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003342 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003343 }
3344 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3345 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3346 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003347 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003348 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003349 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003350 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003351 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3352 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003353 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003354 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003355 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003356 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003358 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003360 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003361 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003362
3363 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003364}
3365
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003366bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 VkDevice device,
3368 VkImage* pImage,
3369 VkResult result)
3370{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003371
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003372 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003373 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003374 }
3375
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003376 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003377 {
3378 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003379 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003380 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003381 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003382
3383 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003384}
3385
Chia-I Wu9ab61502015-11-06 06:42:02 +08003386VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 VkDevice device,
3388 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003389 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003390 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003391{
3392 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003393
Chia-I Wuf7458c52015-10-26 21:10:41 +08003394 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003395
3396 PostCreateImage(device, pImage, result);
3397
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003398 return result;
3399}
3400
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003401bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 VkDevice device,
3403 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003404{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003405 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003406 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003407 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003408 (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 -06003409 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003410 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003411 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003412 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003413 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003414 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003415
3416 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003417}
3418
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003419bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003420 VkDevice device,
3421 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003422 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003423{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424
Jeremy Hayes99a96322015-06-26 12:48:09 -06003425
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003426 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003428 }
3429
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003430 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431}
3432
Chia-I Wu9ab61502015-11-06 06:42:02 +08003433VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003434 VkDevice device,
3435 VkImage image,
3436 const VkImageSubresource* pSubresource,
3437 VkSubresourceLayout* pLayout)
3438{
3439 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003440
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003441 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003442
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003443 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003444}
3445
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003446bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003447 VkDevice device,
3448 const VkImageViewCreateInfo* pCreateInfo)
3449{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003450 if(pCreateInfo != nullptr)
3451 {
3452 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003453 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003454 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003455 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003456 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003457 }
3458 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3459 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3460 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003461 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003462 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003463 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003464 }
3465 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3466 pCreateInfo->format > VK_FORMAT_END_RANGE)
3467 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003468 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003469 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003470 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003471 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003472 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3473 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003474 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003475 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003476 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003477 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003479 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3480 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003481 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003482 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003483 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003484 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003485 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003486 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3487 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003488 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003489 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003490 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003491 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003492 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003493 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3494 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003495 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003496 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003497 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003498 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003499 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003500 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003501
3502 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003503}
3504
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003505bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003506 VkDevice device,
3507 VkImageView* pView,
3508 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003509{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003510
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003511 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003512 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003513 }
3514
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003515 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003516 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003517 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003518 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003519 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003520 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003521
3522 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003523}
3524
Chia-I Wu9ab61502015-11-06 06:42:02 +08003525VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003526 VkDevice device,
3527 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003528 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003529 VkImageView* pView)
3530{
3531 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003532
Chia-I Wuf7458c52015-10-26 21:10:41 +08003533 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003534
3535 PostCreateImageView(device, pView, result);
3536
3537 return result;
3538}
3539
Michael Lentine03d8e572015-09-15 14:59:14 -05003540bool PreCreateShaderModule(
3541 VkDevice device,
3542 const VkShaderModuleCreateInfo* pCreateInfo)
3543{
3544 if(pCreateInfo) {
3545 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003546 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003547 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3548 return false;
3549 }
3550 if(!pCreateInfo->pCode) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003551 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003552 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3553 return false;
3554 }
3555 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003556 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003557 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3558 return false;
3559 }
3560
3561 return true;
3562}
3563
3564bool PostCreateShaderModule(
3565 VkDevice device,
3566 VkShaderModule* pShaderModule,
3567 VkResult result)
3568{
3569 if(result < VK_SUCCESS) {
3570 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003571 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Michael Lentine03d8e572015-09-15 14:59:14 -05003572 return false;
3573 }
3574
3575 return true;
3576}
3577
Chia-I Wu9ab61502015-11-06 06:42:02 +08003578VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003579 VkDevice device,
3580 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003581 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003582 VkShaderModule* pShaderModule)
3583{
3584 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003585 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003586 PostCreateShaderModule(device, pShaderModule, result);
3587 return result;
3588}
3589
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003590bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003591 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003592 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003593{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003594 if(pCreateInfo != nullptr)
3595 {
3596 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003597 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003598 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003599 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003600 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003601 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003602 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003603 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003604 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003605 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003606
3607 return true;
3608}
3609
3610bool PostCreatePipelineCache(
3611 VkDevice device,
3612 VkPipelineCache* pPipelineCache,
3613 VkResult result)
3614{
3615
3616 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003617 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003618 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619
3620 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003621 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003622 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003623 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003624 return false;
3625 }
3626
3627 return true;
3628}
3629
Chia-I Wu9ab61502015-11-06 06:42:02 +08003630VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003631 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003632 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003633 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003634 VkPipelineCache* pPipelineCache)
3635{
3636 PreCreatePipelineCache(device, pCreateInfo);
3637
Chia-I Wuf7458c52015-10-26 21:10:41 +08003638 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003639
3640 PostCreatePipelineCache(device, pPipelineCache, result);
3641
3642 return result;
3643}
3644
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003645bool PostGetPipelineCacheData(
3646 VkDevice device,
3647 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003648 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003649 void* pData,
3650 VkResult result)
3651{
3652
3653
Chia-I Wub16facd2015-10-26 19:17:06 +08003654 if(pDataSize != nullptr)
3655 {
3656 }
3657
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003658 if(pData != nullptr)
3659 {
3660 }
3661
3662 if(result < VK_SUCCESS)
3663 {
3664 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003665 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003666 return false;
3667 }
3668
3669 return true;
3670}
3671
Chia-I Wu9ab61502015-11-06 06:42:02 +08003672VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003673 VkDevice device,
3674 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003675 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003676 void* pData)
3677{
Chia-I Wub16facd2015-10-26 19:17:06 +08003678 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679
Chia-I Wub16facd2015-10-26 19:17:06 +08003680 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003681
3682 return result;
3683}
3684
3685bool PreMergePipelineCaches(
3686 VkDevice device,
3687 const VkPipelineCache* pSrcCaches)
3688{
3689 if(pSrcCaches != nullptr)
3690 {
3691 }
3692
3693 return true;
3694}
3695
3696bool PostMergePipelineCaches(
3697 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003698 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003699 uint32_t srcCacheCount,
3700 VkResult result)
3701{
3702
3703
3704
3705 if(result < VK_SUCCESS)
3706 {
3707 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003708 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003709 return false;
3710 }
3711
3712 return true;
3713}
3714
Chia-I Wu9ab61502015-11-06 06:42:02 +08003715VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003716 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003717 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003718 uint32_t srcCacheCount,
3719 const VkPipelineCache* pSrcCaches)
3720{
3721 PreMergePipelineCaches(device, pSrcCaches);
3722
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003723 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003724
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003725 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003726
3727 return result;
3728}
3729
3730bool PreCreateGraphicsPipelines(
3731 VkDevice device,
3732 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3733{
3734 if(pCreateInfos != nullptr)
3735 {
3736 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3737 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003738 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3740 return false;
3741 }
3742 if(pCreateInfos->pStages != nullptr)
3743 {
3744 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3745 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003746 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003747 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3748 return false;
3749 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003750 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3751 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003752 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003753 {
3754 }
3755 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3756 {
3757 }
3758 }
3759 }
3760 if(pCreateInfos->pVertexInputState != nullptr)
3761 {
3762 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3763 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003764 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003765 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3766 return false;
3767 }
3768 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3769 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003770 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3771 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003772 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003773 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003774 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003775 return false;
3776 }
3777 }
3778 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3779 {
3780 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3781 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3782 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003783 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003784 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3785 return false;
3786 }
3787 }
3788 }
3789 if(pCreateInfos->pInputAssemblyState != nullptr)
3790 {
3791 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3792 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003793 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003794 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3795 return false;
3796 }
3797 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3798 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3799 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003800 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003801 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3802 return false;
3803 }
3804 }
3805 if(pCreateInfos->pTessellationState != nullptr)
3806 {
3807 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3808 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003809 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003810 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3811 return false;
3812 }
3813 }
3814 if(pCreateInfos->pViewportState != nullptr)
3815 {
3816 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3817 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003818 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003819 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3820 return false;
3821 }
3822 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003823 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003824 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003825 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003827 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003828 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003829 return false;
3830 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003831 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3832 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003833 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003834 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003835 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003836 return false;
3837 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003838 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003839 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003840 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003841 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003842 return false;
3843 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003844 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3845 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003846 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003847 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003848 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003849 return false;
3850 }
3851 }
3852 if(pCreateInfos->pMultisampleState != nullptr)
3853 {
3854 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3855 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003856 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003857 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3858 return false;
3859 }
3860 }
3861 if(pCreateInfos->pDepthStencilState != nullptr)
3862 {
3863 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3864 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003865 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003866 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3867 return false;
3868 }
3869 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3870 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3871 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003872 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3874 return false;
3875 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003876 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3877 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003878 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003879 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003880 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003881 return false;
3882 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003883 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3884 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003885 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003886 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003887 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003888 return false;
3889 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003890 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3891 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003892 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003893 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003894 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003895 return false;
3896 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003897 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3898 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003899 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003900 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003901 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003902 return false;
3903 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003904 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3905 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003906 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003907 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003908 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003909 return false;
3910 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003911 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3912 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003913 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003914 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003915 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003916 return false;
3917 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003918 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3919 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003920 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003921 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003922 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 return false;
3924 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003925 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3926 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003927 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003928 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003929 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003930 return false;
3931 }
3932 }
3933 if(pCreateInfos->pColorBlendState != nullptr)
3934 {
3935 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3936 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003937 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003938 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3939 return false;
3940 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003941 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3942 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003943 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3944 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003945 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003946 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3947 return false;
3948 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003949 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003950 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003951 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3952 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003953 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003954 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003955 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003956 return false;
3957 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003958 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3959 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003960 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003961 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003962 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003963 return false;
3964 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003965 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3966 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003967 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003968 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003969 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003970 return false;
3971 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003972 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3973 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003974 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003975 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003976 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003977 return false;
3978 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003979 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3980 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003981 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003982 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003983 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003984 return false;
3985 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003986 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3987 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003988 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003989 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003990 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003991 return false;
3992 }
3993 }
3994 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003995 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3996 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003997 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003998 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3999 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004000 }
4001
4002 return true;
4003}
4004
4005bool PostCreateGraphicsPipelines(
4006 VkDevice device,
4007 VkPipelineCache pipelineCache,
4008 uint32_t count,
4009 VkPipeline* pPipelines,
4010 VkResult result)
4011{
4012
4013
4014
4015 if(pPipelines != nullptr)
4016 {
4017 }
4018
4019 if(result < VK_SUCCESS)
4020 {
4021 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004022 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004023 return false;
4024 }
4025
4026 return true;
4027}
4028
Chia-I Wu9ab61502015-11-06 06:42:02 +08004029VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004030 VkDevice device,
4031 VkPipelineCache pipelineCache,
4032 uint32_t count,
4033 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004034 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004035 VkPipeline* pPipelines)
4036{
4037 PreCreateGraphicsPipelines(device, pCreateInfos);
4038
Chia-I Wuf7458c52015-10-26 21:10:41 +08004039 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004040
4041 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4042
4043 return result;
4044}
4045
4046bool PreCreateComputePipelines(
4047 VkDevice device,
4048 const VkComputePipelineCreateInfo* pCreateInfos)
4049{
4050 if(pCreateInfos != nullptr)
4051 {
4052 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4053 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004054 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004055 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4056 return false;
4057 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004058 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004059 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004060 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004061 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4062 return false;
4063 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004064 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004065 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004066 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004067 {
4068 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004069 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004070 {
4071 }
4072 }
4073 }
4074
4075 return true;
4076}
4077
4078bool PostCreateComputePipelines(
4079 VkDevice device,
4080 VkPipelineCache pipelineCache,
4081 uint32_t count,
4082 VkPipeline* pPipelines,
4083 VkResult result)
4084{
4085
4086
4087
4088 if(pPipelines != nullptr)
4089 {
4090 }
4091
4092 if(result < VK_SUCCESS)
4093 {
4094 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004095 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004096 return false;
4097 }
4098
4099 return true;
4100}
4101
Chia-I Wu9ab61502015-11-06 06:42:02 +08004102VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103 VkDevice device,
4104 VkPipelineCache pipelineCache,
4105 uint32_t count,
4106 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004107 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004108 VkPipeline* pPipelines)
4109{
4110 PreCreateComputePipelines(device, pCreateInfos);
4111
Chia-I Wuf7458c52015-10-26 21:10:41 +08004112 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004113
4114 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4115
4116 return result;
4117}
4118
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004119bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004120 VkDevice device,
4121 const VkPipelineLayoutCreateInfo* pCreateInfo)
4122{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004123 if(pCreateInfo != nullptr)
4124 {
4125 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004126 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004127 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004128 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4129 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004130 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004131 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004132 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004133 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004134 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004135 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004136 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004137 }
4138
4139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004140}
4141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004142bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004143 VkDevice device,
4144 VkPipelineLayout* pPipelineLayout,
4145 VkResult result)
4146{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004147
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004148 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004149 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004150 }
4151
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004152 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004153 {
4154 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004155 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004156 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004157 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004158
4159 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004160}
4161
Chia-I Wu9ab61502015-11-06 06:42:02 +08004162VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004163 VkDevice device,
4164 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004165 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004166 VkPipelineLayout* pPipelineLayout)
4167{
4168 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004169
Chia-I Wuf7458c52015-10-26 21:10:41 +08004170 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004171
4172 PostCreatePipelineLayout(device, pPipelineLayout, result);
4173
4174 return result;
4175}
4176
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004177bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178 VkDevice device,
4179 const VkSamplerCreateInfo* pCreateInfo)
4180{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004181 if(pCreateInfo != nullptr)
4182 {
4183 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004184 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004185 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004186 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004188 }
Chia-I Wub99df442015-10-26 16:49:32 +08004189 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4190 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004191 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004192 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004193 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004194 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004195 }
Chia-I Wub99df442015-10-26 16:49:32 +08004196 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4197 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004198 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004199 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004200 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004201 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004202 }
Chia-I Wub99df442015-10-26 16:49:32 +08004203 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4204 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004205 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004206 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004207 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004208 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004209 }
Chia-I Wub99df442015-10-26 16:49:32 +08004210 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4211 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004212 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004213 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004214 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004215 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004216 }
Chia-I Wub99df442015-10-26 16:49:32 +08004217 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4218 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004219 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004220 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004221 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223 }
Chia-I Wub99df442015-10-26 16:49:32 +08004224 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4225 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004226 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004227 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004228 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004229 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004230 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004231 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004232 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004233 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4234 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4235 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004236 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004237 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4238 return false;
4239 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004240 }
4241 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4242 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4243 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004244 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004245 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004246 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004247 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004248 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004249
4250 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004251}
4252
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004253bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 VkDevice device,
4255 VkSampler* pSampler,
4256 VkResult result)
4257{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004258
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004259 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004260 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 }
4262
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004263 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004264 {
4265 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004266 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004267 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004268 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004269
4270 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004271}
4272
Chia-I Wu9ab61502015-11-06 06:42:02 +08004273VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 VkDevice device,
4275 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004276 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004277 VkSampler* pSampler)
4278{
4279 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004280
Chia-I Wuf7458c52015-10-26 21:10:41 +08004281 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004282
4283 PostCreateSampler(device, pSampler, result);
4284
4285 return result;
4286}
4287
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004288bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004289 VkDevice device,
4290 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4291{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004292 if(pCreateInfo != nullptr)
4293 {
4294 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004295 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004296 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004297 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004298 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004299 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004300 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004301 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004302 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4303 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004304 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004305 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004306 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004307 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004308 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004309 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004310 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004311 }
4312 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004313 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004314
4315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004316}
4317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004318bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 VkDevice device,
4320 VkDescriptorSetLayout* pSetLayout,
4321 VkResult result)
4322{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004323
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004324 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004325 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004326 }
4327
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004328 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004329 {
4330 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004331 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004332 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004333 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004334
4335 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004336}
4337
Chia-I Wu9ab61502015-11-06 06:42:02 +08004338VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004339 VkDevice device,
4340 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004341 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342 VkDescriptorSetLayout* pSetLayout)
4343{
4344 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004345
Chia-I Wuf7458c52015-10-26 21:10:41 +08004346 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004347
4348 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4349
4350 return result;
4351}
4352
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004353bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004354 VkDevice device,
4355 const VkDescriptorPoolCreateInfo* pCreateInfo)
4356{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004357 if(pCreateInfo != nullptr)
4358 {
4359 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004360 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004361 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004362 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004363 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004364 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004365 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004367 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4368 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004369 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004370 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004371 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004372 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004373 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004374 }
4375 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004376
4377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004378}
4379
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004380bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004382 uint32_t maxSets,
4383 VkDescriptorPool* pDescriptorPool,
4384 VkResult result)
4385{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004387 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004389 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004390 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391 }
4392
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004393 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004394 {
4395 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004396 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004397 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004398 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004399
4400 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401}
4402
Chia-I Wu9ab61502015-11-06 06:42:02 +08004403VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004404 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004406 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004407 VkDescriptorPool* pDescriptorPool)
4408{
4409 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004410
Chia-I Wuf7458c52015-10-26 21:10:41 +08004411 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004412
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004413 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004414
4415 return result;
4416}
4417
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004418bool PostResetDescriptorPool(
4419 VkDevice device,
4420 VkDescriptorPool descriptorPool,
4421 VkResult result)
4422{
4423
Jeremy Hayes99a96322015-06-26 12:48:09 -06004424
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004425 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004426 {
4427 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004428 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004429 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004430 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004431
4432 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004433}
4434
Chia-I Wu9ab61502015-11-06 06:42:02 +08004435VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004437 VkDescriptorPool descriptorPool,
4438 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004439{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004440 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441
4442 PostResetDescriptorPool(device, descriptorPool, result);
4443
4444 return result;
4445}
4446
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004447bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004448 VkDevice device,
4449 const VkDescriptorSetLayout* pSetLayouts)
4450{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004451 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004452 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004453 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004454
4455 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004456}
4457
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004458bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004459 VkDevice device,
4460 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004461 uint32_t count,
4462 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004463 VkResult result)
4464{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004465
Jeremy Hayes99a96322015-06-26 12:48:09 -06004466
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004467 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004468 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004469 }
4470
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004471 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004472 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004473 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004474 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004475 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004476 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004477
4478 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004479}
4480
Chia-I Wu9ab61502015-11-06 06:42:02 +08004481VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004482 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004483 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004484 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004485{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004486 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004487
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004488 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004489
Jon Ashburnf19916e2016-01-11 13:12:43 -07004490 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004491
4492 return result;
4493}
4494
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004495bool PreFreeDescriptorSets(
4496 VkDevice device,
4497 const VkDescriptorSet* pDescriptorSets)
4498{
4499 if(pDescriptorSets != nullptr)
4500 {
4501 }
4502
4503 return true;
4504}
4505
4506bool PostFreeDescriptorSets(
4507 VkDevice device,
4508 VkDescriptorPool descriptorPool,
4509 uint32_t count,
4510 VkResult result)
4511{
4512
4513
4514
4515 if(result < VK_SUCCESS)
4516 {
4517 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004518 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004519 return false;
4520 }
4521
4522 return true;
4523}
4524
Chia-I Wu9ab61502015-11-06 06:42:02 +08004525VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004526 VkDevice device,
4527 VkDescriptorPool descriptorPool,
4528 uint32_t count,
4529 const VkDescriptorSet* pDescriptorSets)
4530{
4531 PreFreeDescriptorSets(device, pDescriptorSets);
4532
4533 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4534
4535 PostFreeDescriptorSets(device, descriptorPool, count, result);
4536
4537 return result;
4538}
4539
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004540bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004541 VkDevice device,
4542 const VkWriteDescriptorSet* pDescriptorWrites,
4543 const VkCopyDescriptorSet* pDescriptorCopies)
4544{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004545 if(pDescriptorWrites != nullptr)
4546 {
4547 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004549 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004550 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004551 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552 }
4553 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4554 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4555 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004556 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004557 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004558 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004560 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4561 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4562 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004563 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004564 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4565 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4566 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004567 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004568 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004569 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004570 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004571 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004572 }
4573 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004574
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004575 if(pDescriptorCopies != nullptr)
4576 {
4577 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004578 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004579 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004580 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004581 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004582 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004583 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004584
4585 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004586}
4587
Chia-I Wu9ab61502015-11-06 06:42:02 +08004588VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004589 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004590 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004591 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004592 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004593 const VkCopyDescriptorSet* pDescriptorCopies)
4594{
4595 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004596
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004597 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004598}
4599
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004600bool PreCreateFramebuffer(
4601 VkDevice device,
4602 const VkFramebufferCreateInfo* pCreateInfo)
4603{
4604 if(pCreateInfo != nullptr)
4605 {
4606 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4607 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004608 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004609 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4610 return false;
4611 }
4612 if(pCreateInfo->pAttachments != nullptr)
4613 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004614 }
4615 }
4616
4617 return true;
4618}
4619
4620bool PostCreateFramebuffer(
4621 VkDevice device,
4622 VkFramebuffer* pFramebuffer,
4623 VkResult result)
4624{
4625
4626 if(pFramebuffer != nullptr)
4627 {
4628 }
4629
4630 if(result < VK_SUCCESS)
4631 {
4632 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004633 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004634 return false;
4635 }
4636
4637 return true;
4638}
4639
Chia-I Wu9ab61502015-11-06 06:42:02 +08004640VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004641 VkDevice device,
4642 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004643 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004644 VkFramebuffer* pFramebuffer)
4645{
4646 PreCreateFramebuffer(device, pCreateInfo);
4647
Chia-I Wuf7458c52015-10-26 21:10:41 +08004648 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004649
4650 PostCreateFramebuffer(device, pFramebuffer, result);
4651
4652 return result;
4653}
4654
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004655bool PreCreateRenderPass(
4656 VkDevice device,
4657 const VkRenderPassCreateInfo* pCreateInfo)
4658{
4659 if(pCreateInfo != nullptr)
4660 {
4661 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4662 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004663 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004664 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4665 return false;
4666 }
4667 if(pCreateInfo->pAttachments != nullptr)
4668 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004669 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4670 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4671 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004672 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004673 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4674 return false;
4675 }
4676 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4677 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4678 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004679 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004680 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4681 return false;
4682 }
4683 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4684 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4685 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004686 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004687 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4688 return false;
4689 }
4690 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4691 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4692 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004693 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004694 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4695 return false;
4696 }
4697 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4698 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4699 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004700 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004701 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4702 return false;
4703 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004704 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4705 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4706 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004707 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004708 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004709 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4710 return false;
4711 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004712 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4713 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4714 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004715 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004716 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004717 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4718 return false;
4719 }
4720 }
4721 if(pCreateInfo->pSubpasses != nullptr)
4722 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004723 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4724 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4725 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004726 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004727 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4728 return false;
4729 }
Cody Northropa505dda2015-08-04 11:16:41 -06004730 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004731 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004732 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4733 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4734 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004735 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004736 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004737 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004738 return false;
4739 }
4740 }
Cody Northropa505dda2015-08-04 11:16:41 -06004741 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004742 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004743 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4744 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4745 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004746 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004747 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004748 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004749 return false;
4750 }
4751 }
Cody Northropa505dda2015-08-04 11:16:41 -06004752 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004753 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004754 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4755 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4756 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004757 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004758 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004759 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004760 return false;
4761 }
4762 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004763 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004764 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4765 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4766 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004767 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004768 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004769 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004770 return false;
4771 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004772 }
4773 if(pCreateInfo->pDependencies != nullptr)
4774 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004775 }
4776 }
4777
4778 return true;
4779}
4780
4781bool PostCreateRenderPass(
4782 VkDevice device,
4783 VkRenderPass* pRenderPass,
4784 VkResult result)
4785{
4786
4787 if(pRenderPass != nullptr)
4788 {
4789 }
4790
4791 if(result < VK_SUCCESS)
4792 {
4793 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004794 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004795 return false;
4796 }
4797
4798 return true;
4799}
4800
Chia-I Wu9ab61502015-11-06 06:42:02 +08004801VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004802 VkDevice device,
4803 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004804 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004805 VkRenderPass* pRenderPass)
4806{
4807 PreCreateRenderPass(device, pCreateInfo);
4808
Chia-I Wuf7458c52015-10-26 21:10:41 +08004809 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004810
4811 PostCreateRenderPass(device, pRenderPass, result);
4812
4813 return result;
4814}
4815
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004816bool PostGetRenderAreaGranularity(
4817 VkDevice device,
4818 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004819 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004820{
4821
4822
4823 if(pGranularity != nullptr)
4824 {
4825 }
4826
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004827 return true;
4828}
4829
Chia-I Wu9ab61502015-11-06 06:42:02 +08004830VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004831 VkDevice device,
4832 VkRenderPass renderPass,
4833 VkExtent2D* pGranularity)
4834{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004835 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004836
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004837 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004838}
4839
4840bool PreCreateCommandPool(
4841 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004842 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004843{
4844 if(pCreateInfo != nullptr)
4845 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004846 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004847 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004848 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004849 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4850 return false;
4851 }
4852 }
4853
4854 return true;
4855}
4856
4857bool PostCreateCommandPool(
4858 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004859 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004860 VkResult result)
4861{
4862
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004863 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004864 {
4865 }
4866
4867 if(result < VK_SUCCESS)
4868 {
4869 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004870 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004871 return false;
4872 }
4873
4874 return true;
4875}
4876
Chia-I Wu9ab61502015-11-06 06:42:02 +08004877VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004878 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004879 const VkCommandPoolCreateInfo* pCreateInfo,
4880 const VkAllocationCallbacks* pAllocator,
4881 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004882{
4883 PreCreateCommandPool(device, pCreateInfo);
4884
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004885 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004886
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004887 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004888
4889 return result;
4890}
4891
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004892bool PostResetCommandPool(
4893 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004894 VkCommandPool commandPool,
4895 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004896 VkResult result)
4897{
4898
4899
4900
4901 if(result < VK_SUCCESS)
4902 {
4903 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004904 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004905 return false;
4906 }
4907
4908 return true;
4909}
4910
Chia-I Wu9ab61502015-11-06 06:42:02 +08004911VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004912 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004913 VkCommandPool commandPool,
4914 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004915{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004916 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004917
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004918 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004919
4920 return result;
4921}
4922
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004923bool PreCreateCommandBuffer(
4924 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004925 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004926{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004927 if(pCreateInfo != nullptr)
4928 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004929 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004931 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004932 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004933 return false;
4934 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004935 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4936 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004937 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004938 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004939 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004940 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004941 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004942 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004943
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004944 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004945}
4946
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004947bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004948 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004949 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004950 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004951{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004952
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004953 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004954 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004955 }
4956
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004957 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004958 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004959 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004960 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004962 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004963
4964 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004965}
4966
Chia-I Wu9ab61502015-11-06 06:42:02 +08004967VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004968 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004969 const VkCommandBufferAllocateInfo* pCreateInfo,
4970 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004971{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004972 PreCreateCommandBuffer(device, pCreateInfo);
4973
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004974 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004975
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004976 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004977
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004978 return result;
4979}
4980
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004981bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004982 VkCommandBuffer commandBuffer,
4983 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004984{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004985 if(pBeginInfo != nullptr)
4986 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004987 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004989 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004990 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004991 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004992 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004993 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004994
4995 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004996}
4997
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004998bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000 VkResult result)
5001{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005003 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005004 {
5005 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005006 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005007 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005009
5010 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005011}
5012
Chia-I Wu9ab61502015-11-06 06:42:02 +08005013VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005014 VkCommandBuffer commandBuffer,
5015 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005017 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005018
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005019 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005020
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005021 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005022
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005023 return result;
5024}
5025
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005026bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028 VkResult result)
5029{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005030
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005031 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005032 {
5033 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005034 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005035 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005037
5038 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039}
5040
Chia-I Wu9ab61502015-11-06 06:42:02 +08005041VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005042 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005043{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005044 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005045
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005046 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005047
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005048 return result;
5049}
5050
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005051bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005052 VkCommandBuffer commandBuffer,
5053 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005054 VkResult result)
5055{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005057
5058 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005059 {
5060 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005061 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005062 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005063 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005064
5065 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005066}
5067
Chia-I Wu9ab61502015-11-06 06:42:02 +08005068VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005069 VkCommandBuffer commandBuffer,
5070 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005072 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005073
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005074 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005075
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005076 return result;
5077}
5078
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005079bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005080 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005081 VkPipelineBindPoint pipelineBindPoint,
5082 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005083{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005084
5085 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5086 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5087 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005088 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005089 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005090 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005091 }
5092
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005093
5094 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005095}
5096
Chia-I Wu9ab61502015-11-06 06:42:02 +08005097VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005098 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005099 VkPipelineBindPoint pipelineBindPoint,
5100 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005101{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005102 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005103
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005104 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005105}
5106
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005107VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005108{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005109 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005110}
5111
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005112VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005113{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005114 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005115}
5116
Chia-I Wu9ab61502015-11-06 06:42:02 +08005117VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005118{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005119 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005120}
5121
Chia-I Wu9ab61502015-11-06 06:42:02 +08005122VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005123{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005124 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005125}
5126
Chia-I Wu9ab61502015-11-06 06:42:02 +08005127VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005128{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005129 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005130}
5131
Chia-I Wu9ab61502015-11-06 06:42:02 +08005132VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005133{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005134 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005135}
5136
Chia-I Wu9ab61502015-11-06 06:42:02 +08005137VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005138{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005139 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005140}
5141
Chia-I Wu9ab61502015-11-06 06:42:02 +08005142VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005143{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005144 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005145}
5146
Chia-I Wu9ab61502015-11-06 06:42:02 +08005147VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005148{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005149 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005150}
5151
5152bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005153 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005154 const VkDescriptorSet* pDescriptorSets,
5155 const uint32_t* pDynamicOffsets)
5156{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005157 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005158 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005159 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005160
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005161 if(pDynamicOffsets != nullptr)
5162 {
5163 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005164
5165 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005166}
5167
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005168bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005169 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170 VkPipelineBindPoint pipelineBindPoint,
5171 VkPipelineLayout layout,
5172 uint32_t firstSet,
5173 uint32_t setCount,
5174 uint32_t dynamicOffsetCount)
5175{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005176
5177 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5178 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5179 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005180 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005181 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005182 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005183 }
5184
5185
5186
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005187
5188
5189 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005190}
5191
Chia-I Wu9ab61502015-11-06 06:42:02 +08005192VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005193 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005194 VkPipelineBindPoint pipelineBindPoint,
5195 VkPipelineLayout layout,
5196 uint32_t firstSet,
5197 uint32_t setCount,
5198 const VkDescriptorSet* pDescriptorSets,
5199 uint32_t dynamicOffsetCount,
5200 const uint32_t* pDynamicOffsets)
5201{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005202 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005203
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005204 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005205
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005206 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207}
5208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005209bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005210 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005211 VkBuffer buffer,
5212 VkDeviceSize offset,
5213 VkIndexType indexType)
5214{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005215
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216
5217
5218 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5219 indexType > VK_INDEX_TYPE_END_RANGE)
5220 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005221 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005222 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005223 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005225
5226 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005227}
5228
Chia-I Wu9ab61502015-11-06 06:42:02 +08005229VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005230 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005231 VkBuffer buffer,
5232 VkDeviceSize offset,
5233 VkIndexType indexType)
5234{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005235 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005236
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005237 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005238}
5239
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005240bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005241 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005242 const VkBuffer* pBuffers,
5243 const VkDeviceSize* pOffsets)
5244{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005245 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005246 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005247 }
5248
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005249 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005250 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005251 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005252
5253 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005254}
5255
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005256bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005257 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005258 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005259 uint32_t bindingCount)
5260{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005261
5262
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005263
5264 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005265}
5266
Chia-I Wu9ab61502015-11-06 06:42:02 +08005267VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005268 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005269 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005270 uint32_t bindingCount,
5271 const VkBuffer* pBuffers,
5272 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005273{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005274 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005275
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005276 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005277
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005278 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005279}
5280
Michael Lentine55a913f2015-11-24 09:48:23 -06005281bool PreCmdDraw(
5282 VkCommandBuffer commandBuffer,
5283 uint32_t vertexCount,
5284 uint32_t instanceCount,
5285 uint32_t firstVertex,
5286 uint32_t firstInstance)
5287{
5288 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005289 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5290 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005291 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005292 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5293 return false;
5294 }
5295
5296 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005297 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5298 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005299 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005300 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5301 return false;
5302 }
5303
5304 return true;
5305}
5306
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005307bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005308 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309 uint32_t firstVertex,
5310 uint32_t vertexCount,
5311 uint32_t firstInstance,
5312 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005313{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005314
5315
5316
5317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005318
5319 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005320}
5321
Chia-I Wu9ab61502015-11-06 06:42:02 +08005322VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005323 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005324 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005325 uint32_t instanceCount,
5326 uint32_t firstVertex,
5327 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005328{
Michael Lentine55a913f2015-11-24 09:48:23 -06005329 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5330
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005331 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005332
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005333 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005334}
5335
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005336bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005337 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005338 uint32_t firstIndex,
5339 uint32_t indexCount,
5340 int32_t vertexOffset,
5341 uint32_t firstInstance,
5342 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005343{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005344
5345
5346
5347
5348
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005349
5350 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005351}
5352
Chia-I Wu9ab61502015-11-06 06:42:02 +08005353VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005354 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005355 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005356 uint32_t instanceCount,
5357 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005358 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005359 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005360{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005361 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005362
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005363 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005364}
5365
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005366bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005367 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368 VkBuffer buffer,
5369 VkDeviceSize offset,
5370 uint32_t count,
5371 uint32_t stride)
5372{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005373
5374
5375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005376
5377
5378 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005379}
5380
Chia-I Wu9ab61502015-11-06 06:42:02 +08005381VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005382 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005383 VkBuffer buffer,
5384 VkDeviceSize offset,
5385 uint32_t count,
5386 uint32_t stride)
5387{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005388 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005389
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005390 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005391}
5392
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005393bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005394 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395 VkBuffer buffer,
5396 VkDeviceSize offset,
5397 uint32_t count,
5398 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005399{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005400
5401
5402
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005403
5404
5405 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005406}
5407
Chia-I Wu9ab61502015-11-06 06:42:02 +08005408VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005409 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005410 VkBuffer buffer,
5411 VkDeviceSize offset,
5412 uint32_t count,
5413 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005414{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005415 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005416
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005417 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005418}
5419
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005420bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005421 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005422 uint32_t x,
5423 uint32_t y,
5424 uint32_t z)
5425{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426
5427
5428
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005429
5430 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431}
5432
Chia-I Wu9ab61502015-11-06 06:42:02 +08005433VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005434 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435 uint32_t x,
5436 uint32_t y,
5437 uint32_t z)
5438{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005439 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005440
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005441 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442}
5443
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005444bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005445 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446 VkBuffer buffer,
5447 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005448{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005449
Jeremy Hayes99a96322015-06-26 12:48:09 -06005450
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005451
5452 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005453}
5454
Chia-I Wu9ab61502015-11-06 06:42:02 +08005455VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005456 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005457 VkBuffer buffer,
5458 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005459{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005460 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005461
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005462 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005463}
5464
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005465bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005466 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005468{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005469 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005470 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005471 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005472
5473 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005474}
5475
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005476bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005477 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005478 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005479 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005480 uint32_t regionCount)
5481{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005482
Jeremy Hayes99a96322015-06-26 12:48:09 -06005483
Jeremy Hayes99a96322015-06-26 12:48:09 -06005484
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005485
5486 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005487}
5488
Chia-I Wu9ab61502015-11-06 06:42:02 +08005489VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005490 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005491 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005492 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005493 uint32_t regionCount,
5494 const VkBufferCopy* pRegions)
5495{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005496 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005497
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005498 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005499
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005500 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501}
5502
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005503bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005504 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005505 const VkImageCopy* pRegions)
5506{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005507 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005509 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005510 (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 -06005511 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005512 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005513 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005514 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005515 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005516 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005517 (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 -06005518 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005519 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005520 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005521 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005522 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005523 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005524
5525 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005526}
5527
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005528bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005529 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005530 VkImage srcImage,
5531 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005532 VkImage dstImage,
5533 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534 uint32_t regionCount)
5535{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005536 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5537 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5538 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005539 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005540 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005541 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005542 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005543 }
5544
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005546 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5547 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5548 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005549 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005550 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005551 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005552 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005553 }
5554
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005555
5556 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557}
5558
Chia-I Wu9ab61502015-11-06 06:42:02 +08005559VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005560 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005561 VkImage srcImage,
5562 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005563 VkImage dstImage,
5564 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005565 uint32_t regionCount,
5566 const VkImageCopy* pRegions)
5567{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005568 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005569
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005570 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005572 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573}
5574
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005575bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005576 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005577 const VkImageBlit* pRegions)
5578{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005579 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005580 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005581 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005582 (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 -06005583 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005584 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005585 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005586 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005587 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005588 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005589 (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 -06005590 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005591 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005592 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005593 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005594 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005595 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005596
5597 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005598}
5599
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005600bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005601 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602 VkImage srcImage,
5603 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005604 VkImage dstImage,
5605 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005607 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005608{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005609
Jeremy Hayes99a96322015-06-26 12:48:09 -06005610
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005611 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5612 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5613 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005614 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005615 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005616 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005617 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005618 }
5619
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005621 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5622 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5623 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005624 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005625 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005626 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005627 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628 }
5629
5630
Chia-I Wub99df442015-10-26 16:49:32 +08005631 if(filter < VK_FILTER_BEGIN_RANGE ||
5632 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005633 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005634 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005635 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005636 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005637 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005638
5639 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640}
5641
Chia-I Wu9ab61502015-11-06 06:42:02 +08005642VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005643 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005644 VkImage srcImage,
5645 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005646 VkImage dstImage,
5647 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005648 uint32_t regionCount,
5649 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005650 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005651{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005652 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005653
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005654 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005655
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005656 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657}
5658
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005659bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005660 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661 const VkBufferImageCopy* pRegions)
5662{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005663 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005665 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005666 (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 -06005667 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005668 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005669 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005670 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005672 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005673
5674 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675}
5676
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005677bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005678 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005679 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005680 VkImage dstImage,
5681 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005682 uint32_t regionCount)
5683{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684
Jeremy Hayes99a96322015-06-26 12:48:09 -06005685
Jeremy Hayes99a96322015-06-26 12:48:09 -06005686
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005687 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5688 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5689 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005690 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005691 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005692 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005693 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005694 }
5695
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005696
5697 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005698}
5699
Chia-I Wu9ab61502015-11-06 06:42:02 +08005700VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005701 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005703 VkImage dstImage,
5704 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005705 uint32_t regionCount,
5706 const VkBufferImageCopy* pRegions)
5707{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005708 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005709
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005710 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005711
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005712 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713}
5714
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005715bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005716 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005717 const VkBufferImageCopy* pRegions)
5718{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005719 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005721 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005722 (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 -06005723 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005724 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005725 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005726 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005727 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005728 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005729
5730 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005731}
5732
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005733bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005734 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005735 VkImage srcImage,
5736 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005737 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738 uint32_t regionCount)
5739{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005740
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005742 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5743 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5744 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005745 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005746 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005747 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005748 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749 }
5750
Jeremy Hayes99a96322015-06-26 12:48:09 -06005751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005752
5753 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754}
5755
Chia-I Wu9ab61502015-11-06 06:42:02 +08005756VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005757 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005758 VkImage srcImage,
5759 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005760 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005761 uint32_t regionCount,
5762 const VkBufferImageCopy* pRegions)
5763{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005764 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005765
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005766 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005767
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005768 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005769}
5770
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005771bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005772 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773 const uint32_t* pData)
5774{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005775 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776 {
Jeremy Hayes99a96322015-06-26 12:48:09 -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 PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005783 VkCommandBuffer commandBuffer,
5784 VkBuffer dstBuffer,
5785 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005786 VkDeviceSize dataSize)
5787{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005788
5789
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005790
5791
5792 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793}
5794
Chia-I Wu9ab61502015-11-06 06:42:02 +08005795VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005796 VkCommandBuffer commandBuffer,
5797 VkBuffer dstBuffer,
5798 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799 VkDeviceSize dataSize,
5800 const uint32_t* pData)
5801{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005802 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005803
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005804 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005805
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005806 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807}
5808
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005809bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005810 VkCommandBuffer commandBuffer,
5811 VkBuffer dstBuffer,
5812 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005813 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814 uint32_t data)
5815{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005816
5817
5818
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005819
5820
5821 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005822}
5823
Chia-I Wu9ab61502015-11-06 06:42:02 +08005824VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005825 VkCommandBuffer commandBuffer,
5826 VkBuffer dstBuffer,
5827 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005828 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005829 uint32_t data)
5830{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005831 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005833 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834}
5835
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005836bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005837 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005838 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839 const VkImageSubresourceRange* pRanges)
5840{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005841 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005842 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843 }
5844
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005845 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005846 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005847 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005848 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005849
5850 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005851}
5852
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005853bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005854 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005855 VkImage image,
5856 VkImageLayout imageLayout,
5857 uint32_t rangeCount)
5858{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005859
Jeremy Hayes99a96322015-06-26 12:48:09 -06005860
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005861 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5862 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5863 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005864 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005865 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005866 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005867 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868 }
5869
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005870
5871 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005872}
5873
Chia-I Wu9ab61502015-11-06 06:42:02 +08005874VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005875 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005876 VkImage image,
5877 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005878 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005879 uint32_t rangeCount,
5880 const VkImageSubresourceRange* pRanges)
5881{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005882 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005883
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005884 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005885
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005886 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887}
5888
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005889bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005890 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005891 const VkImageSubresourceRange* pRanges)
5892{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005893 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005894 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005895 /*
5896 * TODO: How do we validation pRanges->aspectMask?
5897 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5898 * VK_IMAGE_ASPECT_STENCIL_BIT.
5899 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005900 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005901
5902 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005903}
5904
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005905bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005906 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005907 VkImage image,
5908 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005909 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005910 uint32_t rangeCount)
5911{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005912
Jeremy Hayes99a96322015-06-26 12:48:09 -06005913
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005914 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5915 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5916 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005917 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005918 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005919 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005920 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005921 }
5922
5923
5924
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005925
5926 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005927}
5928
Chia-I Wu9ab61502015-11-06 06:42:02 +08005929VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005930 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931 VkImage image,
5932 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005933 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005934 uint32_t rangeCount,
5935 const VkImageSubresourceRange* pRanges)
5936{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005937 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005938
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005939 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005940
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005941 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005942}
5943
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005944bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005945 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005946 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005947 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005948{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005949 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005950 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005951 }
5952
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005953 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005954 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005955 }
5956
5957 return true;
5958}
5959
Chia-I Wu9ab61502015-11-06 06:42:02 +08005960VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005961 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005962 uint32_t attachmentCount,
5963 const VkClearAttachment* pAttachments,
5964 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005965 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005966{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005967 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005968 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005969 }
5970
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005971 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005972}
5973
5974bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005975 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005976 const VkImageResolve* pRegions)
5977{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005978 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005980 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005981 (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 -06005982 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005983 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005984 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005985 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005987 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005988 (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 -06005989 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005990 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005991 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005992 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005994 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005995
5996 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997}
5998
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005999bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006000 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001 VkImage srcImage,
6002 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006003 VkImage dstImage,
6004 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005 uint32_t regionCount)
6006{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007
Jeremy Hayes99a96322015-06-26 12:48:09 -06006008
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006009 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6010 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6011 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006012 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006013 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006014 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006015 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006016 }
6017
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006019 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6020 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6021 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006023 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006024 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006025 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026 }
6027
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006028
6029 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030}
6031
Chia-I Wu9ab61502015-11-06 06:42:02 +08006032VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006033 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006034 VkImage srcImage,
6035 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006036 VkImage dstImage,
6037 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038 uint32_t regionCount,
6039 const VkImageResolve* pRegions)
6040{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006041 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006042
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006043 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006045 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006046}
6047
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006048bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006049 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006050 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006051 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006053
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006055
6056 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006057}
6058
Chia-I Wu9ab61502015-11-06 06:42:02 +08006059VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006060 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006061 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006062 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006064 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006065
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006066 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067}
6068
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006069bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006070 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006072 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006074
Jeremy Hayes99a96322015-06-26 12:48:09 -06006075
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006076
6077 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078}
6079
Chia-I Wu9ab61502015-11-06 06:42:02 +08006080VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006081 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006083 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006085 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006087 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006088}
6089
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006090bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006091 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006092 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006093 uint32_t memoryBarrierCount,
6094 const VkMemoryBarrier *pMemoryBarriers,
6095 uint32_t bufferMemoryBarrierCount,
6096 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6097 uint32_t imageMemoryBarrierCount,
6098 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006100 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006101 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006102 }
6103
Jon Ashburnf19916e2016-01-11 13:12:43 -07006104 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006106 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006107
6108 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109}
6110
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006111bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006112 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006113 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006114 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006115 VkPipelineStageFlags dstStageMask,
6116 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006117{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006118
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006119
Jeremy Hayes99a96322015-06-26 12:48:09 -06006120
6121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006122
6123 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124}
6125
Chia-I Wu9ab61502015-11-06 06:42:02 +08006126VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006127 VkCommandBuffer commandBuffer,
6128 uint32_t eventCount,
6129 const VkEvent *pEvents,
6130 VkPipelineStageFlags srcStageMask,
6131 VkPipelineStageFlags dstStageMask,
6132 uint32_t memoryBarrierCount,
6133 const VkMemoryBarrier *pMemoryBarriers,
6134 uint32_t bufferMemoryBarrierCount,
6135 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6136 uint32_t imageMemoryBarrierCount,
6137 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006139 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006140
Jon Ashburnf19916e2016-01-11 13:12:43 -07006141 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006142
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006143 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144}
6145
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006146bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006147 VkCommandBuffer commandBuffer,
6148 uint32_t memoryBarrierCount,
6149 const VkMemoryBarrier *pMemoryBarriers,
6150 uint32_t bufferMemoryBarrierCount,
6151 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6152 uint32_t imageMemoryBarrierCount,
6153 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006155 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006156 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006157 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006158
6159 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160}
6161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006162bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006163 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006164 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006165 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006166 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006167 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006168{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006170
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171
6172
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006173
6174 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006175}
6176
Chia-I Wu9ab61502015-11-06 06:42:02 +08006177VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006178 VkCommandBuffer commandBuffer,
6179 VkPipelineStageFlags srcStageMask,
6180 VkPipelineStageFlags dstStageMask,
6181 VkDependencyFlags dependencyFlags,
6182 uint32_t memoryBarrierCount,
6183 const VkMemoryBarrier *pMemoryBarriers,
6184 uint32_t bufferMemoryBarrierCount,
6185 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6186 uint32_t imageMemoryBarrierCount,
6187 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006188{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006189 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006190
Jon Ashburnf19916e2016-01-11 13:12:43 -07006191 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006192
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006193 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006194}
6195
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006196bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006197 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198 VkQueryPool queryPool,
6199 uint32_t slot,
6200 VkQueryControlFlags flags)
6201{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202
Jeremy Hayes99a96322015-06-26 12:48:09 -06006203
6204
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205
6206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207}
6208
Chia-I Wu9ab61502015-11-06 06:42:02 +08006209VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006210 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211 VkQueryPool queryPool,
6212 uint32_t slot,
6213 VkQueryControlFlags flags)
6214{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006215 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006217 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218}
6219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006220bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006221 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222 VkQueryPool queryPool,
6223 uint32_t slot)
6224{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006225
Jeremy Hayes99a96322015-06-26 12:48:09 -06006226
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006227
6228 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006229}
6230
Chia-I Wu9ab61502015-11-06 06:42:02 +08006231VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006232 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006233 VkQueryPool queryPool,
6234 uint32_t slot)
6235{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006236 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006237
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006238 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006239}
6240
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006241bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006242 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006244 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245 uint32_t queryCount)
6246{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006247
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006248
6249
6250
6251 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006252}
6253
Chia-I Wu9ab61502015-11-06 06:42:02 +08006254VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006255 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006256 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006257 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006258 uint32_t queryCount)
6259{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006260 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006261
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006262 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006263}
6264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006265bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006266 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006267 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006268 VkQueryPool queryPool,
6269 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006271
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006272 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006273
6274 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275}
6276
Chia-I Wu9ab61502015-11-06 06:42:02 +08006277VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006278 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006279 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006280 VkQueryPool queryPool,
6281 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006282{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006283 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006284
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006285 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006286}
6287
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006288bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006289 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006290 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006291 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006292 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006293 VkBuffer dstBuffer,
6294 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006295 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296 VkQueryResultFlags flags)
6297{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006298
6299
6300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006301
Jeremy Hayes99a96322015-06-26 12:48:09 -06006302
6303
6304
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006305
6306 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006307}
6308
Chia-I Wu9ab61502015-11-06 06:42:02 +08006309VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006310 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006311 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006312 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006313 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006314 VkBuffer dstBuffer,
6315 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006316 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006317 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006318{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006319 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006320
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006321 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006322}
6323
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006324bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006325 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006326 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006328 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006329 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006331
6332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006333}
6334
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006335bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006336 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006337 VkPipelineLayout layout,
6338 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006339 uint32_t offset,
6340 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006341{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006342
Jeremy Hayes99a96322015-06-26 12:48:09 -06006343
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006344
6345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006346
6347 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006348}
6349
Chia-I Wu9ab61502015-11-06 06:42:02 +08006350VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006351 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006352 VkPipelineLayout layout,
6353 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006354 uint32_t offset,
6355 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006356 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006357{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006358 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006359
Chia-I Wuce9b1772015-11-12 06:09:22 +08006360 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006361
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006362 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006363}
6364
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006365bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006366 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006367 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006368{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006369 if(pRenderPassBegin != nullptr)
6370 {
6371 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006372 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006373 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006374 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006375 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006376 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006377 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006378 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006379 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006380 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006381
6382 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006383}
6384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006385bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006386 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006387 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006388{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006389
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006390 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6391 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006392 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006393 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006394 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006395 return false;
6396 }
6397
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006398 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006399}
6400
Chia-I Wu9ab61502015-11-06 06:42:02 +08006401VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006402 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006403 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006404 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006405{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006406 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006407
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006408 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006409
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006410 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006411}
6412
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006413bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006414 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006415 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006416{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006417
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006418 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6419 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006420 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006421 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006422 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006423 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006424 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006425
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006426 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006427}
6428
Chia-I Wu9ab61502015-11-06 06:42:02 +08006429VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006430 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006431 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006432{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006433 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006434
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006435 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006436}
6437
6438bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006439 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006440{
6441
6442 return true;
6443}
6444
Chia-I Wu9ab61502015-11-06 06:42:02 +08006445VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006446 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006447{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006448 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006449
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006450 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006451}
6452
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006453bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006454 VkCommandBuffer commandBuffer,
6455 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006456{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006457 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006458 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006459 }
6460
6461 return true;
6462}
6463
6464bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006465 VkCommandBuffer commandBuffer,
6466 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006467{
6468
6469
6470 return true;
6471}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006472
Chia-I Wu9ab61502015-11-06 06:42:02 +08006473VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006474 VkCommandBuffer commandBuffer,
6475 uint32_t commandBuffersCount,
6476 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006477{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006478 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006479
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006480 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006481
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006482 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006483}
6484
Chia-I Wu9ab61502015-11-06 06:42:02 +08006485VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006486{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006487 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006493 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006494 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006495 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006496 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006497 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006498 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006499 if (!strcmp(funcName, "vkAllocateMemory"))
6500 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006501 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006502 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006504 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006505 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006506 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006507 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006508 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006509 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006510 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006511 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006512 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006513 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006514 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006515 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006516 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006517 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006518 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006519 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006520 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006521 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006522 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006524 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006525 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006526 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006528 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006531 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006532 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006534 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006536 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006537 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006538 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006539 if (!strcmp(funcName, "vkCreateShaderModule"))
6540 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006541 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006542 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006543 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006544 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006545 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006546 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006547 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006548 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006549 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006550 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006551 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006552 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006553 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006554 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006555 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6556 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006557 if (!strcmp(funcName, "vkCmdSetViewport"))
6558 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006559 if (!strcmp(funcName, "vkCmdSetScissor"))
6560 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006561 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6562 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6563 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6564 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6565 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6566 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6567 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6568 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6569 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6570 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6571 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6572 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6573 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6574 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006575 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6576 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006580 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006583 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006584 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006585 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006586 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006587 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006588 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006589 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006590 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006591 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006592 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006593 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006594 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006595 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006596 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006597 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006598 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006599 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006600 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006602 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006604 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006606 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006607 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006608 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006610 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006613 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006614 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006615 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006616 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006617 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006618 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006619 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006620 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006621 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006622 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006623 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006624 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006625 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006626 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006627 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006628 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006629 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006630 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006631 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006632 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006633 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006634 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006635 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006636 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006637 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006638 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006639 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006640 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006641 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006642 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006643 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006644 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006645 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006646 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006647
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006648 if (device == NULL) {
6649 return NULL;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006650 }
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006651
6652 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
6653 return NULL;
6654 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006655}
6656
Chia-I Wu9ab61502015-11-06 06:42:02 +08006657VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006658{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006659 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006660 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006661 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006662 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006663 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006664 return (PFN_vkVoidFunction) vkDestroyInstance;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006665 if (!strcmp(funcName, "vkCreateDevice"))
6666 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006667 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006668 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006669 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006670 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006671 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006672 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006673 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006674 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006675 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6676 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6677 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6678 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6679 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6680 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6681 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6682 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006683
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006684 if (instance == NULL) {
6685 return NULL;
6686 }
6687
Jeremy Hayes99a96322015-06-26 12:48:09 -06006688 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006689 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006690 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006691 return fptr;
6692
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006693 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6694 return NULL;
6695 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006696}