blob: 905cc1369443ef19e1ef16accf5fbf70d81835f9 [file] [log] [blame]
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -07001/* Copyright (c) 2015-2016 The Khronos Group Inc.
2 * Copyright (c) 2015-2016 Valve Corporation
3 * Copyright (c) 2015-2016 LunarG, Inc.
4 * Copyright (C) 2015-2016 Google Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -07006 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and/or associated documentation files (the "Materials"), to
8 * deal in the Materials without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Materials, and to permit persons to whom the Materials
11 * are furnished to do so, subject to the following conditions:
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060012 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070013 * The above copyright notice(s) and this permission notice shall be included
14 * in all copies or substantial portions of the Materials.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060015 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070016 * The Materials are Confidential Information as defined by the Khronos
17 * Membership Agreement until designated non-confidential by Khronos, at which
18 * point this condition clause shall be removed.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060019 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070020 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060021 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070022 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 *
24 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
26 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
27 * USE OR OTHER DEALINGS IN THE MATERIALS
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060028 *
29 * Author: Jeremy Hayes <jeremy@lunarg.com>
30 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060031 */
32
33#include <stdio.h>
34#include <stdlib.h>
35#include <string.h>
36
37#include <iostream>
38#include <string>
39#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050040#include <unordered_map>
Michael Lentine157a2ec2016-01-27 11:25:05 -060041#include <unordered_set>
Jeremy Hayes99a96322015-06-26 12:48:09 -060042#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060043
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060044#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070045#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060046#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060047#include "vk_enum_validate_helper.h"
48#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060049
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060050#include "vk_layer_table.h"
51#include "vk_layer_data.h"
52#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060053#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060054
Cody Northrop55443ef2015-09-28 15:09:32 -060055struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060056 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070057 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060058
Michael Lentinebdf744f2016-01-27 15:43:43 -060059 //TODO: Split instance/device structs
60 //Device Data
61 //Map for queue family index to queue count
62 std::unordered_map<uint32_t, uint32_t> queueFamilyIndexMap;
63
Cody Northrop55443ef2015-09-28 15:09:32 -060064 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060065 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060066 {};
67};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050068
Jeremy Hayes99a96322015-06-26 12:48:09 -060069static std::unordered_map<void*, layer_data*> layer_data_map;
70static device_table_map pc_device_table_map;
71static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060072
Jeremy Hayes99a96322015-06-26 12:48:09 -060073// "my instance data"
74debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060075{
Jeremy Hayes99a96322015-06-26 12:48:09 -060076 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060077 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060078#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060082
83 return data->report_data;
84}
85
86// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060087debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060088{
89 dispatch_key key = get_dispatch_key(object);
90 layer_data *data = get_my_data_ptr(key, layer_data_map);
91#if DISPATCH_MAP_DEBUG
92 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
93#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060094 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060095 return data->report_data;
96}
97
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -070098static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -060099{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700100 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600101 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
102
103 uint32_t debug_action = 0;
104 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
105 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
106 {
107 FILE *log_output = NULL;
108 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -0600109 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700110 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700111 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700112 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700113 dbgCreateInfo.flags = report_flags;
114 dbgCreateInfo.pfnCallback = log_callback;
115 dbgCreateInfo.pUserData = log_output;
116
117 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600118 data->logging_callback.push_back(callback);
119 }
120
121 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700122 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700123 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700124 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700125 dbgCreateInfo.flags = report_flags;
126 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
127 dbgCreateInfo.pUserData = NULL;
128
129 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600130 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600131 }
132}
133
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700134VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600135 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700136 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700137 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700138 VkDebugReportCallbackEXT* pMsgCallback)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600139{
140 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700141 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600142
143 if (result == VK_SUCCESS)
144 {
145 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700146 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600147 }
148
149 return result;
150}
151
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700152VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600153 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700154 VkDebugReportCallbackEXT msgCallback,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700155 const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600156{
157 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700158 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600159
160 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700161 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600162}
163
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700164VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700165 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700166 VkDebugReportFlagsEXT flags,
167 VkDebugReportObjectTypeEXT objType,
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700168 uint64_t object,
169 size_t location,
170 int32_t msgCode,
171 const char* pLayerPrefix,
172 const char* pMsg)
173{
174 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700175 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700176}
177
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700178static const VkExtensionProperties instance_extensions[] = {
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600179 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700180 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
Courtney Goeltzenleuchterb69cd592016-01-19 16:08:39 -0700181 VK_EXT_DEBUG_REPORT_SPEC_VERSION
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600182 }
183};
Tony Barbour59a47322015-06-24 16:06:58 -0600184
Chia-I Wu9ab61502015-11-06 06:42:02 +0800185VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600186 const char *pLayerName,
187 uint32_t *pCount,
188 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600189{
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700190 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600191}
192
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700193static const VkLayerProperties pc_global_layers[] = {
194 {
Michael Lentine1f8d4412016-01-19 14:19:38 -0600195 "VK_LAYER_LUNARG_param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700196 VK_API_VERSION,
197 VK_MAKE_VERSION(0, 1, 0),
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700198 "Validation layer: param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700199 }
200};
201
Chia-I Wu9ab61502015-11-06 06:42:02 +0800202VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600203 uint32_t *pCount,
204 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600205{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600206 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
207 pc_global_layers,
208 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600209}
210
Chia-I Wu9ab61502015-11-06 06:42:02 +0800211VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600212 VkPhysicalDevice physicalDevice,
213 const char* pLayerName,
214 uint32_t* pCount,
215 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600216{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600217 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700218 if (pLayerName == NULL) {
219 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
220 physicalDevice,
221 NULL,
222 pCount,
223 pProperties);
224 } else {
225 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
226 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600227}
228
Chia-I Wu9ab61502015-11-06 06:42:02 +0800229VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600230 VkPhysicalDevice physicalDevice,
231 uint32_t* pCount,
232 VkLayerProperties* pProperties)
233{
234 /* ParamChecker's physical device layers are the same as global */
235 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
236 pCount, pProperties);
237}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600238
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600239// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600240
Jeremy Hayes99a96322015-06-26 12:48:09 -0600241static
242std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600243{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600244 switch(enumerator)
245 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600246 case VK_RESULT_MAX_ENUM:
247 {
248 return "VK_RESULT_MAX_ENUM";
249 break;
250 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600251 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600252 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600253 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600254 break;
255 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600256 case VK_ERROR_INCOMPATIBLE_DRIVER:
257 {
258 return "VK_ERROR_INCOMPATIBLE_DRIVER";
259 break;
260 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600261 case VK_ERROR_MEMORY_MAP_FAILED:
262 {
263 return "VK_ERROR_MEMORY_MAP_FAILED";
264 break;
265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600266 case VK_INCOMPLETE:
267 {
268 return "VK_INCOMPLETE";
269 break;
270 }
271 case VK_ERROR_OUT_OF_HOST_MEMORY:
272 {
273 return "VK_ERROR_OUT_OF_HOST_MEMORY";
274 break;
275 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600276 case VK_ERROR_INITIALIZATION_FAILED:
277 {
278 return "VK_ERROR_INITIALIZATION_FAILED";
279 break;
280 }
281 case VK_NOT_READY:
282 {
283 return "VK_NOT_READY";
284 break;
285 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600286 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
287 {
288 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
289 break;
290 }
291 case VK_EVENT_SET:
292 {
293 return "VK_EVENT_SET";
294 break;
295 }
296 case VK_TIMEOUT:
297 {
298 return "VK_TIMEOUT";
299 break;
300 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600301 case VK_EVENT_RESET:
302 {
303 return "VK_EVENT_RESET";
304 break;
305 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600306 case VK_SUCCESS:
307 {
308 return "VK_SUCCESS";
309 break;
310 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600311 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600312 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600313 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600314 break;
315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600316 case VK_ERROR_DEVICE_LOST:
317 {
318 return "VK_ERROR_DEVICE_LOST";
319 break;
320 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600321 default:
322 {
323 return "unrecognized enumerator";
324 break;
325 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600326 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600327}
328
329static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600330bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
331{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600332 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600333 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
334 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
335 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
336 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
337 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
338 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
339 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
340 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
341 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600342 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800343 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
Jon Ashburn766866a2016-01-22 15:39:20 -0700344 VK_FORMAT_FEATURE_BLIT_DST_BIT |
345 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600346 if(enumerator & (~allFlags))
347 {
348 return false;
349 }
350
351 return true;
352}
353
354static
355std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
356{
357 if(!ValidateEnumerator(enumerator))
358 {
359 return "unrecognized enumerator";
360 }
361
362 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600363 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
364 {
365 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
366 }
367 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
368 {
369 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
370 }
371 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
372 {
373 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
374 }
375 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
376 {
377 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
378 }
379 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
380 {
381 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
382 }
383 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
384 {
385 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
386 }
387 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
388 {
389 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
390 }
391 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
392 {
393 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
394 }
395 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
396 {
397 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
398 }
399 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
400 {
401 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
402 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800403 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600404 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800405 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600406 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800407 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600408 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800409 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600410 }
Jon Ashburn766866a2016-01-22 15:39:20 -0700411 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
412 {
413 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT");
414 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600415
416 std::string enumeratorString;
417 for(auto const& string : strings)
418 {
419 enumeratorString += string;
420
421 if(string != strings.back())
422 {
423 enumeratorString += '|';
424 }
425 }
426
427 return enumeratorString;
428}
429
430static
431bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
432{
433 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600434 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600435 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
436 VK_IMAGE_USAGE_STORAGE_BIT |
437 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800438 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600439 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800440 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600441 if(enumerator & (~allFlags))
442 {
443 return false;
444 }
445
446 return true;
447}
448
449static
450std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
451{
452 if(!ValidateEnumerator(enumerator))
453 {
454 return "unrecognized enumerator";
455 }
456
457 std::vector<std::string> strings;
458 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
459 {
460 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
461 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600462 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600463 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600464 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600465 }
466 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
467 {
468 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
469 }
470 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
471 {
472 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
473 }
474 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
475 {
476 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
477 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800478 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600479 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800480 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600481 }
482 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
483 {
484 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
485 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800486 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600487 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800488 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600489 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600490
491 std::string enumeratorString;
492 for(auto const& string : strings)
493 {
494 enumeratorString += string;
495
496 if(string != strings.back())
497 {
498 enumeratorString += '|';
499 }
500 }
501
502 return enumeratorString;
503}
504
505static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600506bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
507{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800508 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800509 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600510 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800511 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600512 VK_QUEUE_GRAPHICS_BIT);
513 if(enumerator & (~allFlags))
514 {
515 return false;
516 }
517
518 return true;
519}
520
521static
522std::string EnumeratorString(VkQueueFlagBits const& enumerator)
523{
524 if(!ValidateEnumerator(enumerator))
525 {
526 return "unrecognized enumerator";
527 }
528
529 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800530 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600531 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800532 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600533 }
534 if(enumerator & VK_QUEUE_COMPUTE_BIT)
535 {
536 strings.push_back("VK_QUEUE_COMPUTE_BIT");
537 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800538 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600539 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800540 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600541 }
542 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
543 {
544 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
545 }
546
547 std::string enumeratorString;
548 for(auto const& string : strings)
549 {
550 enumeratorString += string;
551
552 if(string != strings.back())
553 {
554 enumeratorString += '|';
555 }
556 }
557
558 return enumeratorString;
559}
560
561static
562bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
563{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600564 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800565 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600566 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800567 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
568 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600569 if(enumerator & (~allFlags))
570 {
571 return false;
572 }
573
574 return true;
575}
576
577static
578std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
579{
580 if(!ValidateEnumerator(enumerator))
581 {
582 return "unrecognized enumerator";
583 }
584
585 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600586 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
587 {
588 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
589 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800590 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600591 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800592 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600593 }
594 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
595 {
596 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
597 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800598 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600599 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800600 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600601 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800602 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600603 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800604 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600605 }
606
607 std::string enumeratorString;
608 for(auto const& string : strings)
609 {
610 enumeratorString += string;
611
612 if(string != strings.back())
613 {
614 enumeratorString += '|';
615 }
616 }
617
618 return enumeratorString;
619}
620
621static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600622bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600623{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800624 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600625 if(enumerator & (~allFlags))
626 {
627 return false;
628 }
629
630 return true;
631}
632
633static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600634std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635{
636 if(!ValidateEnumerator(enumerator))
637 {
638 return "unrecognized enumerator";
639 }
640
641 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800642 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600643 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800644 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600645 }
646
647 std::string enumeratorString;
648 for(auto const& string : strings)
649 {
650 enumeratorString += string;
651
652 if(string != strings.back())
653 {
654 enumeratorString += '|';
655 }
656 }
657
658 return enumeratorString;
659}
660
661static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600662bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
663{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800664 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
665 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
666 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600667 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600668 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600669 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600670 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600671
672 return true;
673}
674
675static
676std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
677{
678 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600679 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600680 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600681 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600682
683 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800684 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600685 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800686 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600687 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800688 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600689 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800690 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600691 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800692 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600693 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800694 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600695 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600696
697 std::string enumeratorString;
698 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600699 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600700 enumeratorString += string;
701
702 if(string != strings.back())
703 {
704 enumeratorString += '|';
705 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600706 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600707
708 return enumeratorString;
709}
710
711static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600712bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
713{
714 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
715 if(enumerator & (~allFlags))
716 {
717 return false;
718 }
719
720 return true;
721}
722
723static
724std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
725{
726 if(!ValidateEnumerator(enumerator))
727 {
728 return "unrecognized enumerator";
729 }
730
731 std::vector<std::string> strings;
732 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
733 {
734 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
735 }
736
737 std::string enumeratorString;
738 for(auto const& string : strings)
739 {
740 enumeratorString += string;
741
742 if(string != strings.back())
743 {
744 enumeratorString += '|';
745 }
746 }
747
748 return enumeratorString;
749}
750
751static
752bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
753{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600754 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
755 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
756 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
757 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
758 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
759 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
760 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
761 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
762 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
763 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
764 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600765 if(enumerator & (~allFlags))
766 {
767 return false;
768 }
769
770 return true;
771}
772
773static
774std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
775{
776 if(!ValidateEnumerator(enumerator))
777 {
778 return "unrecognized enumerator";
779 }
780
781 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600806 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600808 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600810 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600811 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600812 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600813 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600814 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600815 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600816 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600817 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600818 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600819 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600820 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600821 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600822 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600823 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600824 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600825 }
826
827 std::string enumeratorString;
828 for(auto const& string : strings)
829 {
830 enumeratorString += string;
831
832 if(string != strings.back())
833 {
834 enumeratorString += '|';
835 }
836 }
837
838 return enumeratorString;
839}
840
841static
842bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
843{
844 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
845 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
846 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700847 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600848 if(enumerator & (~allFlags))
849 {
850 return false;
851 }
852
853 return true;
854}
855
856static
857std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
858{
859 if(!ValidateEnumerator(enumerator))
860 {
861 return "unrecognized enumerator";
862 }
863
864 std::vector<std::string> strings;
865 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
866 {
867 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
868 }
869 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
870 {
871 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
872 }
873 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
874 {
875 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
876 }
877 if(enumerator & VK_QUERY_RESULT_64_BIT)
878 {
879 strings.push_back("VK_QUERY_RESULT_64_BIT");
880 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600881
882 std::string enumeratorString;
883 for(auto const& string : strings)
884 {
885 enumeratorString += string;
886
887 if(string != strings.back())
888 {
889 enumeratorString += '|';
890 }
891 }
892
893 return enumeratorString;
894}
895
896static
897bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
898{
899 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
900 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
901 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
902 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
903 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800904 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600905 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800906 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600907 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600908 if(enumerator & (~allFlags))
909 {
910 return false;
911 }
912
913 return true;
914}
915
916static
917std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
918{
919 if(!ValidateEnumerator(enumerator))
920 {
921 return "unrecognized enumerator";
922 }
923
924 std::vector<std::string> strings;
925 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
928 }
929 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
930 {
931 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
932 }
933 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
936 }
937 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
938 {
939 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
940 }
941 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
944 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800945 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600946 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800947 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600948 }
949 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
950 {
951 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
952 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800953 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600954 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800955 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600956 }
957 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
958 {
959 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
960 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600961
962 std::string enumeratorString;
963 for(auto const& string : strings)
964 {
965 enumeratorString += string;
966
967 if(string != strings.back())
968 {
969 enumeratorString += '|';
970 }
971 }
972
973 return enumeratorString;
974}
975
976static
977bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
978{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600979 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
980 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600981 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600982 if(enumerator & (~allFlags))
983 {
984 return false;
985 }
986
987 return true;
988}
989
990static
991std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
992{
993 if(!ValidateEnumerator(enumerator))
994 {
995 return "unrecognized enumerator";
996 }
997
998 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600999 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1000 {
1001 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1002 }
1003 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1004 {
1005 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1006 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001007 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001008 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001009 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001010 }
1011
1012 std::string enumeratorString;
1013 for(auto const& string : strings)
1014 {
1015 enumeratorString += string;
1016
1017 if(string != strings.back())
1018 {
1019 enumeratorString += '|';
1020 }
1021 }
1022
1023 return enumeratorString;
1024}
1025
1026static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001027bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1028{
1029 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001030 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1031 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001032 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001033 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001034 if(enumerator & (~allFlags))
1035 {
1036 return false;
1037 }
1038
1039 return true;
1040}
1041
1042static
1043std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1044{
1045 if(!ValidateEnumerator(enumerator))
1046 {
1047 return "unrecognized enumerator";
1048 }
1049
1050 std::vector<std::string> strings;
1051 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1052 {
1053 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1054 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001055 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1056 {
1057 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1058 }
1059 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1060 {
1061 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1062 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001063 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1064 {
1065 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1066 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001067 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001068 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001069 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001070 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001071
1072 std::string enumeratorString;
1073 for(auto const& string : strings)
1074 {
1075 enumeratorString += string;
1076
1077 if(string != strings.back())
1078 {
1079 enumeratorString += '|';
1080 }
1081 }
1082
1083 return enumeratorString;
1084}
1085
1086static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001087bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001088{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001089 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1090 VK_COLOR_COMPONENT_B_BIT |
1091 VK_COLOR_COMPONENT_G_BIT |
1092 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001093 if(enumerator & (~allFlags))
1094 {
1095 return false;
1096 }
1097
1098 return true;
1099}
1100
1101static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001102std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001103{
1104 if(!ValidateEnumerator(enumerator))
1105 {
1106 return "unrecognized enumerator";
1107 }
1108
1109 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001110 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001111 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001112 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001113 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001114 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001115 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001116 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001117 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001118 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001119 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001120 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001121 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001122 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001123 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001124 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001125 }
1126
1127 std::string enumeratorString;
1128 for(auto const& string : strings)
1129 {
1130 enumeratorString += string;
1131
1132 if(string != strings.back())
1133 {
1134 enumeratorString += '|';
1135 }
1136 }
1137
1138 return enumeratorString;
1139}
1140
1141static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001142bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001143{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001144 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1145 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1146 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001147 if(enumerator & (~allFlags))
1148 {
1149 return false;
1150 }
1151
1152 return true;
1153}
1154
1155static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001156std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001157{
1158 if(!ValidateEnumerator(enumerator))
1159 {
1160 return "unrecognized enumerator";
1161 }
1162
1163 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001164 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001165 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001166 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1167 }
1168 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1169 {
1170 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1171 }
1172 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1173 {
1174 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001175 }
1176
1177 std::string enumeratorString;
1178 for(auto const& string : strings)
1179 {
1180 enumeratorString += string;
1181
1182 if(string != strings.back())
1183 {
1184 enumeratorString += '|';
1185 }
1186 }
1187
1188 return enumeratorString;
1189}
1190
1191static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001192bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001193{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001194 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1195 VK_SHADER_STAGE_FRAGMENT_BIT |
1196 VK_SHADER_STAGE_GEOMETRY_BIT |
1197 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001198 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1199 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001200 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001201 if(enumerator & (~allFlags))
1202 {
1203 return false;
1204 }
1205
1206 return true;
1207}
1208
1209static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001210std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001211{
1212 if(!ValidateEnumerator(enumerator))
1213 {
1214 return "unrecognized enumerator";
1215 }
1216
1217 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001218 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001219 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001220 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001221 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001222 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001223 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001224 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001225 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001226 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001227 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1229 }
1230 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1231 {
1232 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1233 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001234 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001235 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001236 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001237 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001238 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001239 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001240 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001241 }
1242 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1243 {
1244 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001245 }
1246
1247 std::string enumeratorString;
1248 for(auto const& string : strings)
1249 {
1250 enumeratorString += string;
1251
1252 if(string != strings.back())
1253 {
1254 enumeratorString += '|';
1255 }
1256 }
1257
1258 return enumeratorString;
1259}
1260
1261static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001263{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001264 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001265 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001266 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1267 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001268 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001269 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001270 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001271 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001272 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001273 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1274 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1275 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1276 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1277 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1278 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1279 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1280 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1281 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001282 if(enumerator & (~allFlags))
1283 {
1284 return false;
1285 }
1286
1287 return true;
1288}
1289
1290static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001291std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001292{
1293 if(!ValidateEnumerator(enumerator))
1294 {
1295 return "unrecognized enumerator";
1296 }
1297
1298 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001299 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001300 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001301 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1302 }
1303 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1304 {
1305 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001306 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001307 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001308 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001309 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001311 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001312 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001314 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001315 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001316 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001317 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001318 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001319 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001320 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001321 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001322 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001323 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001324 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001326 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001327 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001328 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001329 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001330 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001331 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001332 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001333 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001334 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001335 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001336 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001337 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001338 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001339 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001340 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001341 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1342 }
1343 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1344 {
1345 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1346 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001347 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001348 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001349 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001350 }
1351 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1352 {
1353 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1354 }
1355 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1356 {
1357 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1358 }
1359 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1360 {
1361 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1362 }
1363 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1364 {
1365 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001366 }
1367
1368 std::string enumeratorString;
1369 for(auto const& string : strings)
1370 {
1371 enumeratorString += string;
1372
1373 if(string != strings.back())
1374 {
1375 enumeratorString += '|';
1376 }
1377 }
1378
1379 return enumeratorString;
1380}
1381
1382static
Chia-I Wua4594202015-10-27 19:54:37 +08001383bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001384{
Chia-I Wua4594202015-10-27 19:54:37 +08001385 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1386 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1387 VK_ACCESS_INDEX_READ_BIT |
1388 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1389 VK_ACCESS_UNIFORM_READ_BIT |
1390 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1391 VK_ACCESS_SHADER_READ_BIT |
1392 VK_ACCESS_SHADER_WRITE_BIT |
1393 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1394 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1395 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1396 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1397 VK_ACCESS_TRANSFER_READ_BIT |
1398 VK_ACCESS_TRANSFER_WRITE_BIT |
1399 VK_ACCESS_HOST_READ_BIT |
1400 VK_ACCESS_HOST_WRITE_BIT |
1401 VK_ACCESS_MEMORY_READ_BIT |
1402 VK_ACCESS_MEMORY_WRITE_BIT);
1403
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001404 if(enumerator & (~allFlags))
1405 {
1406 return false;
1407 }
1408
1409 return true;
1410}
1411
1412static
Chia-I Wua4594202015-10-27 19:54:37 +08001413std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001414{
1415 if(!ValidateEnumerator(enumerator))
1416 {
1417 return "unrecognized enumerator";
1418 }
1419
1420 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001421 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001422 {
Chia-I Wua4594202015-10-27 19:54:37 +08001423 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001424 }
Chia-I Wua4594202015-10-27 19:54:37 +08001425 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001426 {
Chia-I Wua4594202015-10-27 19:54:37 +08001427 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001428 }
Chia-I Wua4594202015-10-27 19:54:37 +08001429 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001430 {
Chia-I Wua4594202015-10-27 19:54:37 +08001431 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001432 }
Chia-I Wua4594202015-10-27 19:54:37 +08001433 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001434 {
Chia-I Wua4594202015-10-27 19:54:37 +08001435 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001436 }
Chia-I Wua4594202015-10-27 19:54:37 +08001437 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001438 {
Chia-I Wua4594202015-10-27 19:54:37 +08001439 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001440 }
Chia-I Wua4594202015-10-27 19:54:37 +08001441 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001442 {
Chia-I Wua4594202015-10-27 19:54:37 +08001443 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001444 }
Chia-I Wua4594202015-10-27 19:54:37 +08001445 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001446 {
Chia-I Wua4594202015-10-27 19:54:37 +08001447 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001448 }
Chia-I Wua4594202015-10-27 19:54:37 +08001449 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001450 {
Chia-I Wua4594202015-10-27 19:54:37 +08001451 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001452 }
Chia-I Wua4594202015-10-27 19:54:37 +08001453 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001454 {
Chia-I Wua4594202015-10-27 19:54:37 +08001455 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001456 }
Chia-I Wua4594202015-10-27 19:54:37 +08001457 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001458 {
Chia-I Wua4594202015-10-27 19:54:37 +08001459 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001460 }
Chia-I Wua4594202015-10-27 19:54:37 +08001461 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001462 {
Chia-I Wua4594202015-10-27 19:54:37 +08001463 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001464 }
Chia-I Wua4594202015-10-27 19:54:37 +08001465 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001466 {
Chia-I Wua4594202015-10-27 19:54:37 +08001467 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001468 }
Chia-I Wua4594202015-10-27 19:54:37 +08001469 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001470 {
Chia-I Wua4594202015-10-27 19:54:37 +08001471 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001472 }
Chia-I Wua4594202015-10-27 19:54:37 +08001473 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001474 {
Chia-I Wua4594202015-10-27 19:54:37 +08001475 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001476 }
Chia-I Wua4594202015-10-27 19:54:37 +08001477 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001478 {
Chia-I Wua4594202015-10-27 19:54:37 +08001479 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001480 }
Chia-I Wua4594202015-10-27 19:54:37 +08001481 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001482 {
Chia-I Wua4594202015-10-27 19:54:37 +08001483 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001484 }
Chia-I Wua4594202015-10-27 19:54:37 +08001485 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001486 {
Chia-I Wua4594202015-10-27 19:54:37 +08001487 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001488 }
1489
1490 std::string enumeratorString;
1491 for(auto const& string : strings)
1492 {
1493 enumeratorString += string;
1494
1495 if(string != strings.back())
1496 {
1497 enumeratorString += '|';
1498 }
1499 }
1500
1501 return enumeratorString;
1502}
1503
1504static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001505bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001506{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001507 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1508 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001509 if(enumerator & (~allFlags))
1510 {
1511 return false;
1512 }
1513
1514 return true;
1515}
1516
1517static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001518std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001519{
1520 if(!ValidateEnumerator(enumerator))
1521 {
1522 return "unrecognized enumerator";
1523 }
1524
1525 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001526 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001527 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001528 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001529 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001530 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001531 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001532 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001533 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001534
1535 std::string enumeratorString;
1536 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001537 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001538 enumeratorString += string;
1539
1540 if(string != strings.back())
1541 {
1542 enumeratorString += '|';
1543 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001544 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001545
1546 return enumeratorString;
1547}
1548
1549static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001550bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001551{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001552 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001553 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001554 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001556 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001557
1558 return true;
1559}
1560
1561static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001562std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001563{
1564 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001565 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001566 return "unrecognized enumerator";
1567 }
1568
1569 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001570 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001571 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001572 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001573 }
1574
1575 std::string enumeratorString;
1576 for(auto const& string : strings)
1577 {
1578 enumeratorString += string;
1579
1580 if(string != strings.back())
1581 {
1582 enumeratorString += '|';
1583 }
1584 }
1585
1586 return enumeratorString;
1587}
1588
1589static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001590bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001591{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001592 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1593 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1594 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001595 if(enumerator & (~allFlags))
1596 {
1597 return false;
1598 }
1599
1600 return true;
1601}
1602
1603static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001604std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001605{
1606 if(!ValidateEnumerator(enumerator))
1607 {
1608 return "unrecognized enumerator";
1609 }
1610
1611 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001612 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001613 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001614 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001615 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001616 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001617 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001618 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001619 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001620 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001621 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001622 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001623 }
1624
1625 std::string enumeratorString;
1626 for(auto const& string : strings)
1627 {
1628 enumeratorString += string;
1629
1630 if(string != strings.back())
1631 {
1632 enumeratorString += '|';
1633 }
1634 }
1635
1636 return enumeratorString;
1637}
1638
1639static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001640bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001641{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001642 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001643 if(enumerator & (~allFlags))
1644 {
1645 return false;
1646 }
1647
1648 return true;
1649}
1650
1651static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001652std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001653{
1654 if(!ValidateEnumerator(enumerator))
1655 {
1656 return "unrecognized enumerator";
1657 }
1658
1659 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001660 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001661 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001662 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001663 }
1664
1665 std::string enumeratorString;
1666 for(auto const& string : strings)
1667 {
1668 enumeratorString += string;
1669
1670 if(string != strings.back())
1671 {
1672 enumeratorString += '|';
1673 }
1674 }
1675
1676 return enumeratorString;
1677}
1678
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001679static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001680bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001681{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001682 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1683 VK_IMAGE_ASPECT_STENCIL_BIT |
1684 VK_IMAGE_ASPECT_DEPTH_BIT |
1685 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001686 if(enumerator & (~allFlags))
1687 {
1688 return false;
1689 }
1690
1691 return true;
1692}
1693
1694static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001695std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001696{
1697 if(!ValidateEnumerator(enumerator))
1698 {
1699 return "unrecognized enumerator";
1700 }
1701
1702 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001703 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001704 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001705 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1706 }
1707 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1708 {
1709 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1710 }
1711 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1712 {
1713 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1714 }
1715 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1716 {
1717 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1718 }
1719
1720 std::string enumeratorString;
1721 for(auto const& string : strings)
1722 {
1723 enumeratorString += string;
1724
1725 if(string != strings.back())
1726 {
1727 enumeratorString += '|';
1728 }
1729 }
1730
1731 return enumeratorString;
1732}
1733
1734static
1735bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1736{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001737 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001738 if(enumerator & (~allFlags))
1739 {
1740 return false;
1741 }
1742
1743 return true;
1744}
1745
1746static
1747std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1748{
1749 if(!ValidateEnumerator(enumerator))
1750 {
1751 return "unrecognized enumerator";
1752 }
1753
1754 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001755 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001756 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001757 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001758 }
1759
1760 std::string enumeratorString;
1761 for(auto const& string : strings)
1762 {
1763 enumeratorString += string;
1764
1765 if(string != strings.back())
1766 {
1767 enumeratorString += '|';
1768 }
1769 }
1770
1771 return enumeratorString;
1772}
1773
Chia-I Wu9ab61502015-11-06 06:42:02 +08001774VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001776 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001777 VkInstance* pInstance)
1778{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001779 VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001780
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001781 assert(chain_info->u.pLayerInfo);
1782 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
1783 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance) fpGetInstanceProcAddr(NULL, "vkCreateInstance");
1784 if (fpCreateInstance == NULL) {
1785 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001786 }
1787
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001788 // Advance the link info for the next element on the chain
1789 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
1790
1791 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
1792 if (result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001793 return result;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001794
1795 layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1796 VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
1797
1798 my_data->report_data = debug_report_create_instance(
1799 pTable,
1800 *pInstance,
1801 pCreateInfo->enabledExtensionCount,
1802 pCreateInfo->ppEnabledExtensionNames);
1803
1804 InitParamChecker(my_data, pAllocator);
1805
1806 return result;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807}
1808
Chia-I Wu9ab61502015-11-06 06:42:02 +08001809VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001810 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001811 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001812{
1813 // Grab the key before the instance is destroyed.
1814 dispatch_key key = get_dispatch_key(instance);
1815 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001816 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001817
1818 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001819 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1820 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001821 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001822 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001823 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001824 }
1825
1826 layer_debug_report_destroy_instance(mid(instance));
1827 layer_data_map.erase(pTable);
1828
1829 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001830}
1831
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001832bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001833 VkInstance instance,
1834 uint32_t* pPhysicalDeviceCount,
1835 VkPhysicalDevice* pPhysicalDevices,
1836 VkResult result)
1837{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001838
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001839 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001840 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841 }
1842
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001843 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001845 }
1846
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001847 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001848 {
1849 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001850 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 -06001851 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001852 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001853
1854 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001855}
1856
Chia-I Wu9ab61502015-11-06 06:42:02 +08001857VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001858 VkInstance instance,
1859 uint32_t* pPhysicalDeviceCount,
1860 VkPhysicalDevice* pPhysicalDevices)
1861{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001862 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1863
1864 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1865
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001866 return result;
1867}
1868
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001869bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001870 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001871 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001872{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001873
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001874 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001875 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001876 }
1877
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001878 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001879}
1880
Chia-I Wu9ab61502015-11-06 06:42:02 +08001881VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001882 VkPhysicalDevice physicalDevice,
1883 VkPhysicalDeviceFeatures* pFeatures)
1884{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001885 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001887 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001888}
1889
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001890bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001891 VkPhysicalDevice physicalDevice,
1892 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001893 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001894{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001895
1896 if(format < VK_FORMAT_BEGIN_RANGE ||
1897 format > VK_FORMAT_END_RANGE)
1898 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001899 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001900 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001901 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001902 }
1903
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001904 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001905 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906 }
1907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001908 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001909}
1910
Chia-I Wu9ab61502015-11-06 06:42:02 +08001911VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001912 VkPhysicalDevice physicalDevice,
1913 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001914 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001915{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001916 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001917
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001918 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001919}
1920
1921bool PostGetPhysicalDeviceImageFormatProperties(
1922 VkPhysicalDevice physicalDevice,
1923 VkFormat format,
1924 VkImageType type,
1925 VkImageTiling tiling,
1926 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001927 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001928 VkImageFormatProperties* pImageFormatProperties,
1929 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001930{
1931
1932 if(format < VK_FORMAT_BEGIN_RANGE ||
1933 format > VK_FORMAT_END_RANGE)
1934 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001935 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001936 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1937 return false;
1938 }
1939
1940 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1941 type > VK_IMAGE_TYPE_END_RANGE)
1942 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001943 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001944 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1945 return false;
1946 }
1947
1948 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1949 tiling > VK_IMAGE_TILING_END_RANGE)
1950 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001951 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001952 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1953 return false;
1954 }
1955
1956
1957 if(pImageFormatProperties != nullptr)
1958 {
1959 }
1960
Chia-I Wu17241042015-10-31 00:31:16 +08001961 if(result < VK_SUCCESS)
1962 {
1963 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001964 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 +08001965 return false;
1966 }
1967
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001968 return true;
1969}
1970
Chia-I Wu9ab61502015-11-06 06:42:02 +08001971VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001972 VkPhysicalDevice physicalDevice,
1973 VkFormat format,
1974 VkImageType type,
1975 VkImageTiling tiling,
1976 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001977 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001978 VkImageFormatProperties* pImageFormatProperties)
1979{
Chia-I Wu17241042015-10-31 00:31:16 +08001980 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 -06001981
Chia-I Wu17241042015-10-31 00:31:16 +08001982 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1983
1984 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001985}
1986
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001987bool PostGetPhysicalDeviceProperties(
1988 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001989 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001990{
1991
1992 if(pProperties != nullptr)
1993 {
1994 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1995 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1996 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001997 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001998 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1999 return false;
2000 }
2001 }
2002
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002003 return true;
2004}
2005
Chia-I Wu9ab61502015-11-06 06:42:02 +08002006VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002007 VkPhysicalDevice physicalDevice,
2008 VkPhysicalDeviceProperties* pProperties)
2009{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002010 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002011
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002012 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002013}
2014
Cody Northropd0802882015-08-03 17:04:53 -06002015bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002016 VkPhysicalDevice physicalDevice,
2017 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002018 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002019{
2020
Cody Northropd0802882015-08-03 17:04:53 -06002021 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002022 {
2023 }
2024
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002025 if(pQueueProperties != nullptr)
2026 {
2027 }
2028
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029 return true;
2030}
2031
Chia-I Wu9ab61502015-11-06 06:42:02 +08002032VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002033 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002034 uint32_t* pCount,
2035 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002036{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002037 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002038
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002039 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002040}
2041
2042bool PostGetPhysicalDeviceMemoryProperties(
2043 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002044 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002045{
2046
2047 if(pMemoryProperties != nullptr)
2048 {
2049 }
2050
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002051 return true;
2052}
2053
Chia-I Wu9ab61502015-11-06 06:42:02 +08002054VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002055 VkPhysicalDevice physicalDevice,
2056 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2057{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002058 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002059
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002060 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002061}
2062
Michael Lentine774704f2016-01-27 13:36:46 -06002063void validateDeviceCreateInfo(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const std::vector<VkQueueFamilyProperties> properties) {
Michael Lentine157a2ec2016-01-27 11:25:05 -06002064 std::unordered_set<uint32_t> set;
2065 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2066 if (set.count(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex)) {
2067 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentinefa71bd52016-01-27 12:50:30 -06002068 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex, is not unique within this structure.", i);
Michael Lentine157a2ec2016-01-27 11:25:05 -06002069 } else {
2070 set.insert(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex);
2071 }
Michael Lentine26244832016-01-27 11:40:27 -06002072 if (pCreateInfo->pQueueCreateInfos[i].queueCount == 0) {
2073 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentinefa71bd52016-01-27 12:50:30 -06002074 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount, cannot be zero.", i);
2075 }
2076 for (uint32_t j = 0; j < pCreateInfo->pQueueCreateInfos[i].queueCount; ++j) {
2077 if (pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] < 0.f || pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] > 1.f) {
2078 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2079 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->pQueuePriorities[%d], must be between 0 and 1. Actual value is %f", i, j, pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j]);
2080 }
Michael Lentine26244832016-01-27 11:40:27 -06002081 }
Michael Lentine774704f2016-01-27 13:36:46 -06002082 if (pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex >= properties.size()) {
2083 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2084 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex cannot be more than the number of queue families.", i);
2085 } else if (pCreateInfo->pQueueCreateInfos[i].queueCount > properties[pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex].queueCount) {
2086 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2087 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount cannot be more than the number of queues for the given family index.", i);
2088 }
Michael Lentine157a2ec2016-01-27 11:25:05 -06002089 }
2090}
2091
Michael Lentinebdf744f2016-01-27 15:43:43 -06002092void storeCreateDeviceData(VkDevice device, const VkDeviceCreateInfo* pCreateInfo) {
2093 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
2094 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2095 my_device_data->queueFamilyIndexMap.insert(
2096 std::make_pair(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex, pCreateInfo->pQueueCreateInfos[i].queueCount));
2097 }
2098}
2099
Chia-I Wu9ab61502015-11-06 06:42:02 +08002100VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101 VkPhysicalDevice physicalDevice,
2102 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002103 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104 VkDevice* pDevice)
2105{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002106 /*
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002107 * NOTE: We do not validate physicalDevice or any dispatchable
2108 * object as the first parameter. We couldn't get here if it was wrong!
2109 */
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002110 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
2111
2112 assert(chain_info->u.pLayerInfo);
2113 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
2114 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
2115 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice) fpGetInstanceProcAddr(NULL, "vkCreateDevice");
2116 if (fpCreateDevice == NULL) {
2117 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 }
2119
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002120 // Advance the link info for the next element on the chain
2121 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
2122
2123 VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
2124 if (result != VK_SUCCESS) {
2125 return result;
2126 }
2127
2128 layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2129 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2130 my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
2131 initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
2132
Michael Lentine774704f2016-01-27 13:36:46 -06002133 uint32_t count;
2134 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, nullptr);
2135 std::vector<VkQueueFamilyProperties> properties(count);
2136 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, &properties[0]);
2137
2138 validateDeviceCreateInfo(physicalDevice, pCreateInfo, properties);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002139 storeCreateDeviceData(*pDevice, pCreateInfo);
Michael Lentine157a2ec2016-01-27 11:25:05 -06002140
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141 return result;
2142}
2143
Chia-I Wu9ab61502015-11-06 06:42:02 +08002144VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002145 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002146 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002147{
2148 layer_debug_report_destroy_device(device);
2149
2150 dispatch_key key = get_dispatch_key(device);
2151#if DISPATCH_MAP_DEBUG
2152 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2153#endif
2154
Chia-I Wuf7458c52015-10-26 21:10:41 +08002155 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002156 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157}
2158
Michael Lentinebdf744f2016-01-27 15:43:43 -06002159bool PreGetDeviceQueue(
2160 VkDevice device,
2161 uint32_t queueFamilyIndex,
2162 uint32_t queueIndex)
2163{
2164 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
2165 auto queue_data = my_device_data->queueFamilyIndexMap.find(queueFamilyIndex);
2166 if (queue_data == my_device_data->queueFamilyIndexMap.end()) {
2167 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2168 "VkGetDeviceQueue parameter, uint32_t queueFamilyIndex %d, must have been given when the device was created.", queueFamilyIndex);
2169 return false;
2170 }
2171 if (queue_data->second <= queueIndex) {
2172 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2173 "VkGetDeviceQueue parameter, uint32_t queueIndex %d, must be less than the number of queues given when the device was created.", queueIndex);
2174 return false;
2175 }
2176 return true;
2177}
2178
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002179bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002181 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002183 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185
2186
2187
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002188 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002190 }
2191
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002192 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193}
2194
Chia-I Wu9ab61502015-11-06 06:42:02 +08002195VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002197 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198 uint32_t queueIndex,
2199 VkQueue* pQueue)
2200{
Michael Lentinebdf744f2016-01-27 15:43:43 -06002201 PreGetDeviceQueue(device, queueFamilyIndex, queueIndex);
2202
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002203 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002205 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206}
2207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002208bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002209 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002210 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002212 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002213 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002214 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002215 return false;
2216 }
2217
2218 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002221
2222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223}
2224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002225bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002227 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228 VkFence fence,
2229 VkResult result)
2230{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002231
2232
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002234 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235 {
2236 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002237 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 -06002238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002239 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002240
2241 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002242}
2243
Chia-I Wu9ab61502015-11-06 06:42:02 +08002244VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002245 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002246 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002247 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248 VkFence fence)
2249{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002250 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002251 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002252 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002254 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002255
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002256 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002257
2258 return result;
2259}
2260
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002261bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002262 VkQueue queue,
2263 VkResult result)
2264{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002266 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002267 {
2268 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002269 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 -06002270 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002272
2273 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274}
2275
Chia-I Wu9ab61502015-11-06 06:42:02 +08002276VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002277 VkQueue queue)
2278{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2280
2281 PostQueueWaitIdle(queue, result);
2282
2283 return result;
2284}
2285
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002286bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002287 VkDevice device,
2288 VkResult result)
2289{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002290
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002291 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002292 {
2293 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002294 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 -06002295 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002297
2298 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299}
2300
Chia-I Wu9ab61502015-11-06 06:42:02 +08002301VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002302 VkDevice device)
2303{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2305
2306 PostDeviceWaitIdle(device, result);
2307
2308 return result;
2309}
2310
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002311bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002313 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002314{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002315 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002316 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002317 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002319 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002320 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002321 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002322 }
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 Wu3432a0c2015-10-27 18:04:07 +08002328bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002329 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002330 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002331 VkResult result)
2332{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002334 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002335 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002336 }
2337
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002338 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002339 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002340 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002341 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 -06002342 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002343 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002344
2345 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002346}
2347
Chia-I Wu9ab61502015-11-06 06:42:02 +08002348VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002349 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002350 const VkMemoryAllocateInfo* pAllocateInfo,
2351 const VkAllocationCallbacks* pAllocator,
2352 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002353{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002354 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002355
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002356 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002358 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002359
2360 return result;
2361}
2362
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002363bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002364 VkDevice device,
2365 VkDeviceMemory mem,
2366 VkDeviceSize offset,
2367 VkDeviceSize size,
2368 VkMemoryMapFlags flags,
2369 void** ppData,
2370 VkResult result)
2371{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372
Jeremy Hayes99a96322015-06-26 12:48:09 -06002373
2374
2375
2376
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002377 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379 }
2380
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002381 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002382 {
2383 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002384 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 -06002385 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002387
2388 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389}
2390
Chia-I Wu9ab61502015-11-06 06:42:02 +08002391VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002392 VkDevice device,
2393 VkDeviceMemory mem,
2394 VkDeviceSize offset,
2395 VkDeviceSize size,
2396 VkMemoryMapFlags flags,
2397 void** ppData)
2398{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002399 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2400
2401 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2402
2403 return result;
2404}
2405
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002406bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002407 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002408 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002410 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002411 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002412 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002413 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002414 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002415 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002416 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002417 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002418 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002419
2420 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421}
2422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002423bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002424 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002425 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002426 VkResult result)
2427{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002428
2429
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002430 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002431 {
2432 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002433 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 -06002434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002436
2437 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002438}
2439
Chia-I Wu9ab61502015-11-06 06:42:02 +08002440VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002441 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002442 uint32_t memoryRangeCount,
2443 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002444{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002445 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002446
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002447 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002448
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002449 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002451 return result;
2452}
2453
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002454bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002455 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002456 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002457{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002458 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002459 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002460 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002461 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002462 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002463 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002464 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002465 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002466 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002467
2468 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002469}
2470
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002471bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002472 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002473 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002474 VkResult result)
2475{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002476
2477
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002478 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002479 {
2480 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002481 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 -06002482 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002483 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002484
2485 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002486}
2487
Chia-I Wu9ab61502015-11-06 06:42:02 +08002488VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002489 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002490 uint32_t memoryRangeCount,
2491 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002492{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002493 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002494
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002495 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002496
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002497 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002498
Tony Barbourb1250542015-04-16 19:23:13 -06002499 return result;
2500}
2501
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002502bool PostGetDeviceMemoryCommitment(
2503 VkDevice device,
2504 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002505 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002506{
2507
2508
2509 if(pCommittedMemoryInBytes != nullptr)
2510 {
2511 }
2512
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002513 return true;
2514}
2515
Chia-I Wu9ab61502015-11-06 06:42:02 +08002516VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002517 VkDevice device,
2518 VkDeviceMemory memory,
2519 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002520{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002521 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002522
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002523 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002524}
2525
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002526bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002527 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002528 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002529 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002530 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002531 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002532{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002533
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002534
Jeremy Hayes99a96322015-06-26 12:48:09 -06002535
2536
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002537 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002538 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002539 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002540 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 -06002541 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002542 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002543
2544 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002545}
2546
Chia-I Wu9ab61502015-11-06 06:42:02 +08002547VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002548 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002549 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002550 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002551 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002552{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002553 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002554
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002555 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002556
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002557 return result;
2558}
2559
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002561 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002562 VkImage image,
2563 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002564 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002565 VkResult result)
2566{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567
2568
2569
2570
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002571 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002572 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002573 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002574 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 -06002575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002576 }
2577
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578 return true;
2579}
2580
Chia-I Wu9ab61502015-11-06 06:42:02 +08002581VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002582 VkDevice device,
2583 VkImage image,
2584 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002585 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002586{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002587 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002588
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002589 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002590
2591 return result;
2592}
2593
2594bool PostGetBufferMemoryRequirements(
2595 VkDevice device,
2596 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002597 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002598{
2599
2600
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002601 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002602 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002603 }
2604
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 return true;
2606}
2607
Chia-I Wu9ab61502015-11-06 06:42:02 +08002608VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609 VkDevice device,
2610 VkBuffer buffer,
2611 VkMemoryRequirements* pMemoryRequirements)
2612{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002613 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002614
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002615 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002616}
2617
2618bool PostGetImageMemoryRequirements(
2619 VkDevice device,
2620 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002621 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002622{
2623
2624
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002625 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002626 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002627 }
2628
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629 return true;
2630}
2631
Chia-I Wu9ab61502015-11-06 06:42:02 +08002632VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002633 VkDevice device,
2634 VkImage image,
2635 VkMemoryRequirements* pMemoryRequirements)
2636{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002637 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002638
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002639 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002640}
2641
2642bool PostGetImageSparseMemoryRequirements(
2643 VkDevice device,
2644 VkImage image,
2645 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002646 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647{
2648
2649
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002650 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002651 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652 }
2653
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002654 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002655 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002656 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002657 (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 -06002658 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002659 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002660 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002661 return false;
2662 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002663 }
2664
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002665 return true;
2666}
2667
Chia-I Wu9ab61502015-11-06 06:42:02 +08002668VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002669 VkDevice device,
2670 VkImage image,
2671 uint32_t* pNumRequirements,
2672 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2673{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002674 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002675
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002676 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002677}
2678
2679bool PostGetPhysicalDeviceSparseImageFormatProperties(
2680 VkPhysicalDevice physicalDevice,
2681 VkFormat format,
2682 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002683 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002684 VkImageUsageFlags usage,
2685 VkImageTiling tiling,
2686 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002687 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002688{
2689
2690 if(format < VK_FORMAT_BEGIN_RANGE ||
2691 format > VK_FORMAT_END_RANGE)
2692 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002693 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002694 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002695 return false;
2696 }
2697
2698 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2699 type > VK_IMAGE_TYPE_END_RANGE)
2700 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002701 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002702 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002703 return false;
2704 }
2705
2706
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002707
2708 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2709 tiling > VK_IMAGE_TILING_END_RANGE)
2710 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002711 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002712 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002713 return false;
2714 }
2715
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002716 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002717 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002718 }
2719
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002720 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002721 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002722 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002723 (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 -06002724 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002725 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002726 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002727 return false;
2728 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002729 }
2730
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002731 return true;
2732}
2733
Chia-I Wu9ab61502015-11-06 06:42:02 +08002734VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002735 VkPhysicalDevice physicalDevice,
2736 VkFormat format,
2737 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002738 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002739 VkImageUsageFlags usage,
2740 VkImageTiling tiling,
2741 uint32_t* pNumProperties,
2742 VkSparseImageFormatProperties* pProperties)
2743{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002744 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002745
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002746 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002747}
2748
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002749bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002750 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002751 uint32_t bindInfoCount,
2752 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002753{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002754 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002755 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002756 }
2757
2758 return true;
2759}
2760
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002761bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002762 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002763 uint32_t bindInfoCount,
2764 const VkBindSparseInfo* pBindInfo,
2765 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002766 VkResult result)
2767{
2768
2769
2770
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002771 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002772 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002773 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002774 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 -06002775 return false;
2776 }
2777
2778 return true;
2779}
2780
Chia-I Wu9ab61502015-11-06 06:42:02 +08002781VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002782 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002783 uint32_t bindInfoCount,
2784 const VkBindSparseInfo* pBindInfo,
2785 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002786{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002787 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002788
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002789 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002790
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002791 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002793 return result;
2794}
2795
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002796bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002797 VkDevice device,
2798 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002799{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002800 if(pCreateInfo != nullptr)
2801 {
2802 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002803 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002804 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002805 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002806 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002807 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002808 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002809
2810 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002811}
2812
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002813bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002814 VkDevice device,
2815 VkFence* pFence,
2816 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002817{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002818
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002819 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002821 }
2822
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002823 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002824 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002826 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 -06002827 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002829
2830 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002831}
2832
Chia-I Wu9ab61502015-11-06 06:42:02 +08002833VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002834 VkDevice device,
2835 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002836 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837 VkFence* pFence)
2838{
2839 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002840
Chia-I Wuf7458c52015-10-26 21:10:41 +08002841 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002842
2843 PostCreateFence(device, pFence, result);
2844
2845 return result;
2846}
2847
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002848bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002849 VkDevice device,
2850 const VkFence* pFences)
2851{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002852 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002853 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002854 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002855
2856 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002857}
2858
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002859bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002860 VkDevice device,
2861 uint32_t fenceCount,
2862 VkResult result)
2863{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002864
2865
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002866 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002867 {
2868 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002869 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 -06002870 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002871 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002872
2873 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002874}
2875
Chia-I Wu9ab61502015-11-06 06:42:02 +08002876VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002877 VkDevice device,
2878 uint32_t fenceCount,
2879 const VkFence* pFences)
2880{
2881 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002882
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2884
2885 PostResetFences(device, fenceCount, result);
2886
2887 return result;
2888}
2889
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002890bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002891 VkDevice device,
2892 VkFence fence,
2893 VkResult result)
2894{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002895
Jeremy Hayes99a96322015-06-26 12:48:09 -06002896
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002897 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898 {
2899 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002900 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 -06002901 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002902 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002903
2904 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002905}
2906
Chia-I Wu9ab61502015-11-06 06:42:02 +08002907VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002908 VkDevice device,
2909 VkFence fence)
2910{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002911 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2912
2913 PostGetFenceStatus(device, fence, result);
2914
2915 return result;
2916}
2917
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002918bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002919 VkDevice device,
2920 const VkFence* pFences)
2921{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002922 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002923 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002924 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002925
2926 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002927}
2928
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002929bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002930 VkDevice device,
2931 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002932 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002933 uint64_t timeout,
2934 VkResult result)
2935{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002936
2937
2938
2939
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002940 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002941 {
2942 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002943 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 -06002944 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002946
2947 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002948}
2949
Chia-I Wu9ab61502015-11-06 06:42:02 +08002950VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951 VkDevice device,
2952 uint32_t fenceCount,
2953 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002954 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002955 uint64_t timeout)
2956{
2957 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002958
Jeremy Hayes99a96322015-06-26 12:48:09 -06002959 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2960
2961 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2962
2963 return result;
2964}
2965
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002966bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002967 VkDevice device,
2968 const VkSemaphoreCreateInfo* pCreateInfo)
2969{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002970 if(pCreateInfo != nullptr)
2971 {
2972 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002974 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002975 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002976 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002977 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002979
2980 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981}
2982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002983bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002984 VkDevice device,
2985 VkSemaphore* pSemaphore,
2986 VkResult result)
2987{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002988
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002989 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002990 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002991 }
2992
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002993 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994 {
2995 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002996 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 -06002997 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002998 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002999
3000 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001}
3002
Chia-I Wu9ab61502015-11-06 06:42:02 +08003003VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003004 VkDevice device,
3005 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003006 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003007 VkSemaphore* pSemaphore)
3008{
3009 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003010
Chia-I Wuf7458c52015-10-26 21:10:41 +08003011 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003012
3013 PostCreateSemaphore(device, pSemaphore, result);
3014
3015 return result;
3016}
3017
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003019 VkDevice device,
3020 const VkEventCreateInfo* pCreateInfo)
3021{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003022 if(pCreateInfo != nullptr)
3023 {
3024 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003026 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003027 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003028 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003029 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003031
3032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033}
3034
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003035bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 VkDevice device,
3037 VkEvent* pEvent,
3038 VkResult result)
3039{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003041 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003042 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043 }
3044
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003045 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003046 {
3047 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003048 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 -06003049 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003050 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003051
3052 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053}
3054
Chia-I Wu9ab61502015-11-06 06:42:02 +08003055VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003056 VkDevice device,
3057 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003058 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003059 VkEvent* pEvent)
3060{
3061 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003062
Chia-I Wuf7458c52015-10-26 21:10:41 +08003063 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064
3065 PostCreateEvent(device, pEvent, result);
3066
3067 return result;
3068}
3069
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003070bool PostGetEventStatus(
3071 VkDevice device,
3072 VkEvent event,
3073 VkResult result)
3074{
3075
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003077 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078 {
3079 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003080 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 -06003081 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003082 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003083
3084 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085}
3086
Chia-I Wu9ab61502015-11-06 06:42:02 +08003087VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088 VkDevice device,
3089 VkEvent event)
3090{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003091 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3092
3093 PostGetEventStatus(device, event, result);
3094
3095 return result;
3096}
3097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003098bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099 VkDevice device,
3100 VkEvent event,
3101 VkResult result)
3102{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103
Jeremy Hayes99a96322015-06-26 12:48:09 -06003104
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003105 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106 {
3107 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003108 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 -06003109 return false;
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
Chia-I Wu9ab61502015-11-06 06:42:02 +08003115VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116 VkDevice device,
3117 VkEvent event)
3118{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003119 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3120
3121 PostSetEvent(device, event, result);
3122
3123 return result;
3124}
3125
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003126bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127 VkDevice device,
3128 VkEvent event,
3129 VkResult result)
3130{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131
Jeremy Hayes99a96322015-06-26 12:48:09 -06003132
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003133 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134 {
3135 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003136 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 -06003137 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003138 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003139
3140 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141}
3142
Chia-I Wu9ab61502015-11-06 06:42:02 +08003143VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144 VkDevice device,
3145 VkEvent event)
3146{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003147 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3148
3149 PostResetEvent(device, event, result);
3150
3151 return result;
3152}
3153
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003154bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003155 VkDevice device,
3156 const VkQueryPoolCreateInfo* pCreateInfo)
3157{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003158 if(pCreateInfo != nullptr)
3159 {
3160 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003161 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003162 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003163 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003164 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003165 }
3166 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3167 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3168 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003169 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003170 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003171 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003172 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003174
3175 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003176}
3177
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003178bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003179 VkDevice device,
3180 VkQueryPool* pQueryPool,
3181 VkResult result)
3182{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003183
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003184 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003186 }
3187
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003188 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003189 {
3190 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003191 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 -06003192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003193 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003194
3195 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003196}
3197
Chia-I Wu9ab61502015-11-06 06:42:02 +08003198VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003199 VkDevice device,
3200 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003201 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202 VkQueryPool* pQueryPool)
3203{
3204 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003205
Chia-I Wuf7458c52015-10-26 21:10:41 +08003206 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207
3208 PostCreateQueryPool(device, pQueryPool, result);
3209
3210 return result;
3211}
3212
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003213bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003214 VkDevice device,
3215 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003216 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003218 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003220 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003221 VkQueryResultFlags flags,
3222 VkResult result)
3223{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225
3226
3227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003228 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003229 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 }
3231
Jeremy Hayes99a96322015-06-26 12:48:09 -06003232
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003233 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003234 {
3235 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003236 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 -06003237 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003238 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239
3240 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003241}
3242
Chia-I Wu9ab61502015-11-06 06:42:02 +08003243VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003244 VkDevice device,
3245 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003246 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003247 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003248 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003249 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003250 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251 VkQueryResultFlags flags)
3252{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003253 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 -06003254
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003255 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256
3257 return result;
3258}
3259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003260bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261 VkDevice device,
3262 const VkBufferCreateInfo* pCreateInfo)
3263{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003264 if(pCreateInfo != nullptr)
3265 {
3266 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003268 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003269 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003270 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003271 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003272 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3273 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003275 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003276 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003277 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003278 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003279 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003281 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003282 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003283
3284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003285}
3286
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003287bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003288 VkDevice device,
3289 VkBuffer* pBuffer,
3290 VkResult result)
3291{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003293 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003294 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003295 }
3296
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003297 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003298 {
3299 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003300 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 -06003301 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003302 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303
3304 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305}
3306
Chia-I Wu9ab61502015-11-06 06:42:02 +08003307VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 VkDevice device,
3309 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003310 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003311 VkBuffer* pBuffer)
3312{
3313 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003314
Chia-I Wuf7458c52015-10-26 21:10:41 +08003315 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316
3317 PostCreateBuffer(device, pBuffer, result);
3318
3319 return result;
3320}
3321
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003322bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003323 VkDevice device,
3324 const VkBufferViewCreateInfo* pCreateInfo)
3325{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003326 if(pCreateInfo != nullptr)
3327 {
3328 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003330 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003331 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003332 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003334 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3335 pCreateInfo->format > VK_FORMAT_END_RANGE)
3336 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003337 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003338 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003339 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003340 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003341 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003342
3343 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344}
3345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003346bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003347 VkDevice device,
3348 VkBufferView* pView,
3349 VkResult result)
3350{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003351
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003352 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003353 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354 }
3355
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003356 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 {
3358 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003359 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 -06003360 return false;
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
Chia-I Wu9ab61502015-11-06 06:42:02 +08003366VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 VkDevice device,
3368 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003369 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003370 VkBufferView* pView)
3371{
3372 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003373
Chia-I Wuf7458c52015-10-26 21:10:41 +08003374 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375
3376 PostCreateBufferView(device, pView, result);
3377
3378 return result;
3379}
3380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003381bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 VkDevice device,
3383 const VkImageCreateInfo* pCreateInfo)
3384{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003385 if(pCreateInfo != nullptr)
3386 {
3387 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003388 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003389 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003390 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003391 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003392 }
3393 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3394 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3395 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003396 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003397 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003398 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003399 }
3400 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3401 pCreateInfo->format > VK_FORMAT_END_RANGE)
3402 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003403 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003404 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003405 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003406 }
3407 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3408 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3409 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003410 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003411 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, 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 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3415 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003416 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003417 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003418 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003419 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003420 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003421 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003423 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425
3426 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427}
3428
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003429bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003430 VkDevice device,
3431 VkImage* pImage,
3432 VkResult result)
3433{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003434
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003435 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003436 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437 }
3438
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003439 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003440 {
3441 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003442 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 -06003443 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003444 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003445
3446 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003447}
3448
Chia-I Wu9ab61502015-11-06 06:42:02 +08003449VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450 VkDevice device,
3451 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003452 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003453 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003454{
3455 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003456
Chia-I Wuf7458c52015-10-26 21:10:41 +08003457 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003458
3459 PostCreateImage(device, pImage, result);
3460
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003461 return result;
3462}
3463
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003464bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003465 VkDevice device,
3466 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003467{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003468 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003469 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003470 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003471 (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 -06003472 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003473 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003474 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003475 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003476 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003477 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003478
3479 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003480}
3481
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003482bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003483 VkDevice device,
3484 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003485 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003486{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003487
Jeremy Hayes99a96322015-06-26 12:48:09 -06003488
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003489 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003490 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003491 }
3492
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003493 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003494}
3495
Chia-I Wu9ab61502015-11-06 06:42:02 +08003496VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003497 VkDevice device,
3498 VkImage image,
3499 const VkImageSubresource* pSubresource,
3500 VkSubresourceLayout* pLayout)
3501{
3502 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003503
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003504 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003505
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003506 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507}
3508
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003509bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003510 VkDevice device,
3511 const VkImageViewCreateInfo* pCreateInfo)
3512{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003513 if(pCreateInfo != nullptr)
3514 {
3515 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003516 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003517 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003518 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003519 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003520 }
3521 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3522 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3523 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003524 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003525 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003526 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003527 }
3528 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3529 pCreateInfo->format > VK_FORMAT_END_RANGE)
3530 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003531 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003532 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003533 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003534 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003535 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3536 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003537 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003538 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003539 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003540 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003541 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003542 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3543 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003544 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003545 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003546 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003547 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003548 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003549 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3550 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003551 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003552 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003553 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003554 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003555 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003556 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3557 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003559 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003560 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003561 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003562 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003563 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003564
3565 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003566}
3567
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003568bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003569 VkDevice device,
3570 VkImageView* pView,
3571 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003572{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003574 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003575 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 }
3577
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003578 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003579 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003580 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003581 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 -06003582 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003584
3585 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003586}
3587
Chia-I Wu9ab61502015-11-06 06:42:02 +08003588VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003589 VkDevice device,
3590 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003591 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003592 VkImageView* pView)
3593{
3594 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003595
Chia-I Wuf7458c52015-10-26 21:10:41 +08003596 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003597
3598 PostCreateImageView(device, pView, result);
3599
3600 return result;
3601}
3602
Michael Lentine03d8e572015-09-15 14:59:14 -05003603bool PreCreateShaderModule(
3604 VkDevice device,
3605 const VkShaderModuleCreateInfo* pCreateInfo)
3606{
3607 if(pCreateInfo) {
3608 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003609 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003610 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3611 return false;
3612 }
3613 if(!pCreateInfo->pCode) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003614 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003615 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3616 return false;
3617 }
3618 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003619 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003620 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3621 return false;
3622 }
3623
3624 return true;
3625}
3626
3627bool PostCreateShaderModule(
3628 VkDevice device,
3629 VkShaderModule* pShaderModule,
3630 VkResult result)
3631{
3632 if(result < VK_SUCCESS) {
3633 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003634 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 -05003635 return false;
3636 }
3637
3638 return true;
3639}
3640
Chia-I Wu9ab61502015-11-06 06:42:02 +08003641VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003642 VkDevice device,
3643 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003644 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003645 VkShaderModule* pShaderModule)
3646{
3647 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003648 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003649 PostCreateShaderModule(device, pShaderModule, result);
3650 return result;
3651}
3652
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003653bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003654 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003655 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003656{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003657 if(pCreateInfo != nullptr)
3658 {
3659 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003660 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003661 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003662 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003663 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003664 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003665 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003666 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003667 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003668 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003669
3670 return true;
3671}
3672
3673bool PostCreatePipelineCache(
3674 VkDevice device,
3675 VkPipelineCache* pPipelineCache,
3676 VkResult result)
3677{
3678
3679 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003680 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003681 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003682
3683 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003684 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003685 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003686 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 -06003687 return false;
3688 }
3689
3690 return true;
3691}
3692
Chia-I Wu9ab61502015-11-06 06:42:02 +08003693VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003694 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003695 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003696 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003697 VkPipelineCache* pPipelineCache)
3698{
3699 PreCreatePipelineCache(device, pCreateInfo);
3700
Chia-I Wuf7458c52015-10-26 21:10:41 +08003701 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003702
3703 PostCreatePipelineCache(device, pPipelineCache, result);
3704
3705 return result;
3706}
3707
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003708bool PostGetPipelineCacheData(
3709 VkDevice device,
3710 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003711 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003712 void* pData,
3713 VkResult result)
3714{
3715
3716
Chia-I Wub16facd2015-10-26 19:17:06 +08003717 if(pDataSize != nullptr)
3718 {
3719 }
3720
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003721 if(pData != nullptr)
3722 {
3723 }
3724
3725 if(result < VK_SUCCESS)
3726 {
3727 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003728 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 -06003729 return false;
3730 }
3731
3732 return true;
3733}
3734
Chia-I Wu9ab61502015-11-06 06:42:02 +08003735VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003736 VkDevice device,
3737 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003738 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739 void* pData)
3740{
Chia-I Wub16facd2015-10-26 19:17:06 +08003741 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003742
Chia-I Wub16facd2015-10-26 19:17:06 +08003743 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003744
3745 return result;
3746}
3747
3748bool PreMergePipelineCaches(
3749 VkDevice device,
3750 const VkPipelineCache* pSrcCaches)
3751{
3752 if(pSrcCaches != nullptr)
3753 {
3754 }
3755
3756 return true;
3757}
3758
3759bool PostMergePipelineCaches(
3760 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003761 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003762 uint32_t srcCacheCount,
3763 VkResult result)
3764{
3765
3766
3767
3768 if(result < VK_SUCCESS)
3769 {
3770 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003771 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 -06003772 return false;
3773 }
3774
3775 return true;
3776}
3777
Chia-I Wu9ab61502015-11-06 06:42:02 +08003778VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003780 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003781 uint32_t srcCacheCount,
3782 const VkPipelineCache* pSrcCaches)
3783{
3784 PreMergePipelineCaches(device, pSrcCaches);
3785
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003786 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003787
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003788 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003789
3790 return result;
3791}
3792
3793bool PreCreateGraphicsPipelines(
3794 VkDevice device,
3795 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3796{
3797 if(pCreateInfos != nullptr)
3798 {
3799 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3800 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003801 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003802 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3803 return false;
3804 }
3805 if(pCreateInfos->pStages != nullptr)
3806 {
3807 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_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->pStages->sType, is an invalid enumerator");
3811 return false;
3812 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003813 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3814 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003815 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003816 {
3817 }
3818 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3819 {
3820 }
3821 }
3822 }
3823 if(pCreateInfos->pVertexInputState != nullptr)
3824 {
3825 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3826 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003827 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003828 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3829 return false;
3830 }
3831 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3832 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003833 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3834 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003835 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003836 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003837 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003838 return false;
3839 }
3840 }
3841 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3842 {
3843 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3844 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3845 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003846 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003847 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3848 return false;
3849 }
3850 }
3851 }
3852 if(pCreateInfos->pInputAssemblyState != nullptr)
3853 {
3854 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_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->pInputAssemblyState->sType, is an invalid enumerator");
3858 return false;
3859 }
3860 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3861 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3862 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003863 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003864 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3865 return false;
3866 }
3867 }
3868 if(pCreateInfos->pTessellationState != nullptr)
3869 {
3870 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
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, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3874 return false;
3875 }
3876 }
3877 if(pCreateInfos->pViewportState != nullptr)
3878 {
3879 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3880 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003881 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003882 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3883 return false;
3884 }
3885 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003886 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003887 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003888 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003889 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003890 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003891 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003892 return false;
3893 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003894 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3895 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003896 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003897 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003898 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003899 return false;
3900 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003901 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003902 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003903 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003904 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003905 return false;
3906 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003907 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3908 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003909 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003910 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003911 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003912 return false;
3913 }
3914 }
3915 if(pCreateInfos->pMultisampleState != nullptr)
3916 {
3917 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3918 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003919 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003920 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3921 return false;
3922 }
3923 }
3924 if(pCreateInfos->pDepthStencilState != nullptr)
3925 {
3926 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3927 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003928 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003929 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3930 return false;
3931 }
3932 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3933 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3934 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003935 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003936 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3937 return false;
3938 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003939 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3940 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003941 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003942 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003943 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003944 return false;
3945 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003946 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3947 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003948 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003949 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003950 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003951 return false;
3952 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003953 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3954 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003955 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003956 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003957 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003958 return false;
3959 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003960 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3961 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003962 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003963 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003964 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003965 return false;
3966 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003967 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3968 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003969 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003970 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003971 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003972 return false;
3973 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003974 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3975 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003976 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003977 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003978 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003979 return false;
3980 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003981 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3982 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003983 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003984 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003985 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003986 return false;
3987 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003988 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3989 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003990 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003991 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003992 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003993 return false;
3994 }
3995 }
3996 if(pCreateInfos->pColorBlendState != nullptr)
3997 {
3998 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3999 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004000 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004001 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4002 return false;
4003 }
Michael Lentine304b01f2015-10-06 14:55:54 -07004004 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4005 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004006 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4007 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004008 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004009 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4010 return false;
4011 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05004012 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004013 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004014 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4015 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004016 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004017 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004018 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004019 return false;
4020 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004021 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4022 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004023 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004024 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004025 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004026 return false;
4027 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004028 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
4029 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004030 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004031 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004032 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004033 return false;
4034 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004035 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4036 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004037 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004038 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004039 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004040 return false;
4041 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004042 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4043 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004044 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004045 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004046 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004047 return false;
4048 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004049 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
4050 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004051 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004052 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004053 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004054 return false;
4055 }
4056 }
4057 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004058 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4059 {
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 Hayesf06ae822015-07-31 14:16:20 -06004061 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4062 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004063 }
4064
4065 return true;
4066}
4067
4068bool PostCreateGraphicsPipelines(
4069 VkDevice device,
4070 VkPipelineCache pipelineCache,
4071 uint32_t count,
4072 VkPipeline* pPipelines,
4073 VkResult result)
4074{
4075
4076
4077
4078 if(pPipelines != nullptr)
4079 {
4080 }
4081
4082 if(result < VK_SUCCESS)
4083 {
4084 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004085 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 -06004086 return false;
4087 }
4088
4089 return true;
4090}
4091
Chia-I Wu9ab61502015-11-06 06:42:02 +08004092VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093 VkDevice device,
4094 VkPipelineCache pipelineCache,
4095 uint32_t count,
4096 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004097 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004098 VkPipeline* pPipelines)
4099{
4100 PreCreateGraphicsPipelines(device, pCreateInfos);
4101
Chia-I Wuf7458c52015-10-26 21:10:41 +08004102 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103
4104 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4105
4106 return result;
4107}
4108
4109bool PreCreateComputePipelines(
4110 VkDevice device,
4111 const VkComputePipelineCreateInfo* pCreateInfos)
4112{
4113 if(pCreateInfos != nullptr)
4114 {
4115 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4116 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004117 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004118 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4119 return false;
4120 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004121 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004122 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004123 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004124 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4125 return false;
4126 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004127 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004128 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004129 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004130 {
4131 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004132 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004133 {
4134 }
4135 }
4136 }
4137
4138 return true;
4139}
4140
4141bool PostCreateComputePipelines(
4142 VkDevice device,
4143 VkPipelineCache pipelineCache,
4144 uint32_t count,
4145 VkPipeline* pPipelines,
4146 VkResult result)
4147{
4148
4149
4150
4151 if(pPipelines != nullptr)
4152 {
4153 }
4154
4155 if(result < VK_SUCCESS)
4156 {
4157 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004158 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 -06004159 return false;
4160 }
4161
4162 return true;
4163}
4164
Chia-I Wu9ab61502015-11-06 06:42:02 +08004165VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004166 VkDevice device,
4167 VkPipelineCache pipelineCache,
4168 uint32_t count,
4169 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004170 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004171 VkPipeline* pPipelines)
4172{
4173 PreCreateComputePipelines(device, pCreateInfos);
4174
Chia-I Wuf7458c52015-10-26 21:10:41 +08004175 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004176
4177 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4178
4179 return result;
4180}
4181
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004182bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004183 VkDevice device,
4184 const VkPipelineLayoutCreateInfo* pCreateInfo)
4185{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004186 if(pCreateInfo != nullptr)
4187 {
4188 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004189 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004190 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004191 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004193 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004194 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004195 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004196 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004197 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004198 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004199 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004200 }
4201
4202 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004203}
4204
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004205bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004206 VkDevice device,
4207 VkPipelineLayout* pPipelineLayout,
4208 VkResult result)
4209{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004210
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004211 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004212 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004213 }
4214
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004215 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004216 {
4217 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004218 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 -06004219 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004221
4222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223}
4224
Chia-I Wu9ab61502015-11-06 06:42:02 +08004225VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004226 VkDevice device,
4227 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004228 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004229 VkPipelineLayout* pPipelineLayout)
4230{
4231 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004232
Chia-I Wuf7458c52015-10-26 21:10:41 +08004233 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004234
4235 PostCreatePipelineLayout(device, pPipelineLayout, result);
4236
4237 return result;
4238}
4239
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004240bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004241 VkDevice device,
4242 const VkSamplerCreateInfo* pCreateInfo)
4243{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004244 if(pCreateInfo != nullptr)
4245 {
4246 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004247 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004248 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004249 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004250 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004251 }
Chia-I Wub99df442015-10-26 16:49:32 +08004252 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4253 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004255 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004256 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004257 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004258 }
Chia-I Wub99df442015-10-26 16:49:32 +08004259 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4260 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004262 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004263 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004264 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004265 }
Chia-I Wub99df442015-10-26 16:49:32 +08004266 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4267 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004268 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004269 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004270 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004271 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004272 }
Chia-I Wub99df442015-10-26 16:49:32 +08004273 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4274 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004275 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004276 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004277 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004278 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004279 }
Chia-I Wub99df442015-10-26 16:49:32 +08004280 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4281 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004282 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004283 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004284 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004285 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004286 }
Chia-I Wub99df442015-10-26 16:49:32 +08004287 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4288 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004289 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004290 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004291 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004292 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004293 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004294 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004295 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004296 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4297 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4298 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004299 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004300 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4301 return false;
4302 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004303 }
4304 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4305 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4306 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004307 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004308 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004309 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004311 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004312
4313 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004314}
4315
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004316bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004317 VkDevice device,
4318 VkSampler* pSampler,
4319 VkResult result)
4320{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004322 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004323 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 }
4325
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004326 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004327 {
4328 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004329 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 -06004330 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004331 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004332
4333 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004334}
4335
Chia-I Wu9ab61502015-11-06 06:42:02 +08004336VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004337 VkDevice device,
4338 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004339 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340 VkSampler* pSampler)
4341{
4342 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004343
Chia-I Wuf7458c52015-10-26 21:10:41 +08004344 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345
4346 PostCreateSampler(device, pSampler, result);
4347
4348 return result;
4349}
4350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004351bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004352 VkDevice device,
4353 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4354{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004355 if(pCreateInfo != nullptr)
4356 {
4357 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004359 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004360 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004361 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004363 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004364 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004365 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4366 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004368 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004369 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004370 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004372 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004373 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004374 }
4375 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004376 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004377
4378 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379}
4380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004381bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004382 VkDevice device,
4383 VkDescriptorSetLayout* pSetLayout,
4384 VkResult result)
4385{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004387 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004389 }
4390
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004391 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392 {
4393 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004394 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 -06004395 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004396 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004397
4398 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004399}
4400
Chia-I Wu9ab61502015-11-06 06:42:02 +08004401VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004402 VkDevice device,
4403 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004404 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405 VkDescriptorSetLayout* pSetLayout)
4406{
4407 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004408
Chia-I Wuf7458c52015-10-26 21:10:41 +08004409 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004410
4411 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4412
4413 return result;
4414}
4415
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004416bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004417 VkDevice device,
4418 const VkDescriptorPoolCreateInfo* pCreateInfo)
4419{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004420 if(pCreateInfo != nullptr)
4421 {
4422 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004424 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004425 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004426 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004427 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004428 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004429 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004430 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4431 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004432 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004433 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004434 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004435 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004437 }
4438 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004439
4440 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441}
4442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004443bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004445 uint32_t maxSets,
4446 VkDescriptorPool* pDescriptorPool,
4447 VkResult result)
4448{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004450 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004451
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004452 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004453 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004454 }
4455
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004456 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004457 {
4458 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004459 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 -06004460 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004461 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004462
4463 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004464}
4465
Chia-I Wu9ab61502015-11-06 06:42:02 +08004466VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004467 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004468 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004469 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004470 VkDescriptorPool* pDescriptorPool)
4471{
4472 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004473
Chia-I Wuf7458c52015-10-26 21:10:41 +08004474 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004475
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004476 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004477
4478 return result;
4479}
4480
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004481bool PostResetDescriptorPool(
4482 VkDevice device,
4483 VkDescriptorPool descriptorPool,
4484 VkResult result)
4485{
4486
Jeremy Hayes99a96322015-06-26 12:48:09 -06004487
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004488 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004489 {
4490 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004491 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 -06004492 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004493 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004494
4495 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004496}
4497
Chia-I Wu9ab61502015-11-06 06:42:02 +08004498VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004499 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004500 VkDescriptorPool descriptorPool,
4501 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004502{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004503 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004504
4505 PostResetDescriptorPool(device, descriptorPool, result);
4506
4507 return result;
4508}
4509
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004510bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004511 VkDevice device,
4512 const VkDescriptorSetLayout* pSetLayouts)
4513{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004514 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004515 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004516 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004517
4518 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004519}
4520
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004521bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004522 VkDevice device,
4523 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004524 uint32_t count,
4525 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 VkResult result)
4527{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004528
Jeremy Hayes99a96322015-06-26 12:48:09 -06004529
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004530 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004531 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 }
4533
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004534 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004535 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004536 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004537 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 -06004538 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004540
4541 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004542}
4543
Chia-I Wu9ab61502015-11-06 06:42:02 +08004544VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004545 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004546 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004547 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004549 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004550
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004551 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552
Jon Ashburnf19916e2016-01-11 13:12:43 -07004553 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004554
4555 return result;
4556}
4557
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004558bool PreFreeDescriptorSets(
4559 VkDevice device,
4560 const VkDescriptorSet* pDescriptorSets)
4561{
4562 if(pDescriptorSets != nullptr)
4563 {
4564 }
4565
4566 return true;
4567}
4568
4569bool PostFreeDescriptorSets(
4570 VkDevice device,
4571 VkDescriptorPool descriptorPool,
4572 uint32_t count,
4573 VkResult result)
4574{
4575
4576
4577
4578 if(result < VK_SUCCESS)
4579 {
4580 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004581 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 -06004582 return false;
4583 }
4584
4585 return true;
4586}
4587
Chia-I Wu9ab61502015-11-06 06:42:02 +08004588VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004589 VkDevice device,
4590 VkDescriptorPool descriptorPool,
4591 uint32_t count,
4592 const VkDescriptorSet* pDescriptorSets)
4593{
4594 PreFreeDescriptorSets(device, pDescriptorSets);
4595
4596 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4597
4598 PostFreeDescriptorSets(device, descriptorPool, count, result);
4599
4600 return result;
4601}
4602
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004603bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004604 VkDevice device,
4605 const VkWriteDescriptorSet* pDescriptorWrites,
4606 const VkCopyDescriptorSet* pDescriptorCopies)
4607{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004608 if(pDescriptorWrites != nullptr)
4609 {
4610 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004611 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004612 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004613 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004614 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004615 }
4616 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4617 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4618 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004619 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004620 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004621 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004622 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004623 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4624 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4625 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004626 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004627 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4628 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4629 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004630 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004631 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004632 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004633 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004634 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004635 }
4636 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004637
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004638 if(pDescriptorCopies != nullptr)
4639 {
4640 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004641 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004642 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004643 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004644 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004645 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004646 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004647
4648 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004649}
4650
Chia-I Wu9ab61502015-11-06 06:42:02 +08004651VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004652 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004653 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004654 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004655 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004656 const VkCopyDescriptorSet* pDescriptorCopies)
4657{
4658 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004659
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004660 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004661}
4662
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004663bool PreCreateFramebuffer(
4664 VkDevice device,
4665 const VkFramebufferCreateInfo* pCreateInfo)
4666{
4667 if(pCreateInfo != nullptr)
4668 {
4669 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4670 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004671 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004672 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4673 return false;
4674 }
4675 if(pCreateInfo->pAttachments != nullptr)
4676 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004677 }
4678 }
4679
4680 return true;
4681}
4682
4683bool PostCreateFramebuffer(
4684 VkDevice device,
4685 VkFramebuffer* pFramebuffer,
4686 VkResult result)
4687{
4688
4689 if(pFramebuffer != nullptr)
4690 {
4691 }
4692
4693 if(result < VK_SUCCESS)
4694 {
4695 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004696 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 -06004697 return false;
4698 }
4699
4700 return true;
4701}
4702
Chia-I Wu9ab61502015-11-06 06:42:02 +08004703VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004704 VkDevice device,
4705 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004706 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004707 VkFramebuffer* pFramebuffer)
4708{
4709 PreCreateFramebuffer(device, pCreateInfo);
4710
Chia-I Wuf7458c52015-10-26 21:10:41 +08004711 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004712
4713 PostCreateFramebuffer(device, pFramebuffer, result);
4714
4715 return result;
4716}
4717
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004718bool PreCreateRenderPass(
4719 VkDevice device,
4720 const VkRenderPassCreateInfo* pCreateInfo)
4721{
4722 if(pCreateInfo != nullptr)
4723 {
4724 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
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, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4728 return false;
4729 }
4730 if(pCreateInfo->pAttachments != nullptr)
4731 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004732 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4733 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4734 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004735 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004736 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4737 return false;
4738 }
4739 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4740 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4741 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004742 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004743 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4744 return false;
4745 }
4746 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4747 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4748 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004749 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004750 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4751 return false;
4752 }
4753 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4754 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4755 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004756 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004757 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4758 return false;
4759 }
4760 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4761 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4762 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004763 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004764 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4765 return false;
4766 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004767 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4768 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4769 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004770 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004771 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004772 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4773 return false;
4774 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004775 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4776 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4777 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004778 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004779 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004780 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4781 return false;
4782 }
4783 }
4784 if(pCreateInfo->pSubpasses != nullptr)
4785 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004786 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4787 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4788 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004789 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004790 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4791 return false;
4792 }
Cody Northropa505dda2015-08-04 11:16:41 -06004793 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004794 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004795 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4796 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4797 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004798 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004799 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004800 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004801 return false;
4802 }
4803 }
Cody Northropa505dda2015-08-04 11:16:41 -06004804 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004805 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004806 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4807 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4808 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004809 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004810 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004811 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004812 return false;
4813 }
4814 }
Cody Northropa505dda2015-08-04 11:16:41 -06004815 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004816 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004817 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4818 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4819 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004820 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004821 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004822 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004823 return false;
4824 }
4825 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004826 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004827 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4828 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4829 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004830 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004831 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004832 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004833 return false;
4834 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004835 }
4836 if(pCreateInfo->pDependencies != nullptr)
4837 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004838 }
4839 }
4840
4841 return true;
4842}
4843
4844bool PostCreateRenderPass(
4845 VkDevice device,
4846 VkRenderPass* pRenderPass,
4847 VkResult result)
4848{
4849
4850 if(pRenderPass != nullptr)
4851 {
4852 }
4853
4854 if(result < VK_SUCCESS)
4855 {
4856 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004857 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 -06004858 return false;
4859 }
4860
4861 return true;
4862}
4863
Chia-I Wu9ab61502015-11-06 06:42:02 +08004864VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004865 VkDevice device,
4866 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004867 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004868 VkRenderPass* pRenderPass)
4869{
4870 PreCreateRenderPass(device, pCreateInfo);
4871
Chia-I Wuf7458c52015-10-26 21:10:41 +08004872 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873
4874 PostCreateRenderPass(device, pRenderPass, result);
4875
4876 return result;
4877}
4878
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004879bool PostGetRenderAreaGranularity(
4880 VkDevice device,
4881 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004882 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004883{
4884
4885
4886 if(pGranularity != nullptr)
4887 {
4888 }
4889
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004890 return true;
4891}
4892
Chia-I Wu9ab61502015-11-06 06:42:02 +08004893VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004894 VkDevice device,
4895 VkRenderPass renderPass,
4896 VkExtent2D* pGranularity)
4897{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004898 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004899
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004900 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004901}
4902
4903bool PreCreateCommandPool(
4904 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004905 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004906{
4907 if(pCreateInfo != nullptr)
4908 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004909 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004910 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004911 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004912 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4913 return false;
4914 }
4915 }
4916
4917 return true;
4918}
4919
4920bool PostCreateCommandPool(
4921 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004922 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004923 VkResult result)
4924{
4925
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004926 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004927 {
4928 }
4929
4930 if(result < VK_SUCCESS)
4931 {
4932 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004933 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 -06004934 return false;
4935 }
4936
4937 return true;
4938}
4939
Chia-I Wu9ab61502015-11-06 06:42:02 +08004940VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004941 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004942 const VkCommandPoolCreateInfo* pCreateInfo,
4943 const VkAllocationCallbacks* pAllocator,
4944 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004945{
4946 PreCreateCommandPool(device, pCreateInfo);
4947
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004948 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004949
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004950 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004951
4952 return result;
4953}
4954
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004955bool PostResetCommandPool(
4956 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004957 VkCommandPool commandPool,
4958 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004959 VkResult result)
4960{
4961
4962
4963
4964 if(result < VK_SUCCESS)
4965 {
4966 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004967 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 -06004968 return false;
4969 }
4970
4971 return true;
4972}
4973
Chia-I Wu9ab61502015-11-06 06:42:02 +08004974VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004975 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004976 VkCommandPool commandPool,
4977 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004978{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004979 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004980
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004981 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004982
4983 return result;
4984}
4985
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004986bool PreCreateCommandBuffer(
4987 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004988 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004989{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004990 if(pCreateInfo != nullptr)
4991 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004992 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004993 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004994 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004995 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004996 return false;
4997 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004998 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4999 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005000 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005001 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005002 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005003 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005004 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005005 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005006
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005007 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005008}
5009
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005010bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005011 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005012 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005014{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005015
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005016 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005017 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005018 }
5019
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005020 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005021 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005022 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005023 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 -06005024 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005025 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005026
5027 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028}
5029
Chia-I Wu9ab61502015-11-06 06:42:02 +08005030VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005031 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032 const VkCommandBufferAllocateInfo* pCreateInfo,
5033 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005034{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005035 PreCreateCommandBuffer(device, pCreateInfo);
5036
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005037 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005038
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005039 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005040
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005041 return result;
5042}
5043
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005044bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005045 VkCommandBuffer commandBuffer,
5046 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005047{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005048 if(pBeginInfo != nullptr)
5049 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005050 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005051 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005052 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005053 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005054 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005055 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005057
5058 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005059}
5060
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005061bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005062 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005063 VkResult result)
5064{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005065
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005066 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005067 {
5068 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005069 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 -06005070 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005072
5073 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005074}
5075
Chia-I Wu9ab61502015-11-06 06:42:02 +08005076VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005077 VkCommandBuffer commandBuffer,
5078 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005079{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005080 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005081
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005082 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005085
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005086 return result;
5087}
5088
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005089bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005090 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005091 VkResult result)
5092{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005093
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005094 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005095 {
5096 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005097 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 -06005098 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005099 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005100
5101 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005102}
5103
Chia-I Wu9ab61502015-11-06 06:42:02 +08005104VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005105 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005106{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005107 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005108
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005109 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005110
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005111 return result;
5112}
5113
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005114bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005115 VkCommandBuffer commandBuffer,
5116 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005117 VkResult result)
5118{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005119
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005120
5121 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005122 {
5123 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005124 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 -06005125 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005126 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005127
5128 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005129}
5130
Chia-I Wu9ab61502015-11-06 06:42:02 +08005131VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005132 VkCommandBuffer commandBuffer,
5133 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005134{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005135 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005136
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005137 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005138
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005139 return result;
5140}
5141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005142bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005143 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005144 VkPipelineBindPoint pipelineBindPoint,
5145 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005146{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005147
5148 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5149 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5150 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005151 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005152 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005153 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005154 }
5155
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005156
5157 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005158}
5159
Chia-I Wu9ab61502015-11-06 06:42:02 +08005160VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005161 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005162 VkPipelineBindPoint pipelineBindPoint,
5163 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005164{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005165 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005166
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005167 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168}
5169
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005170VK_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 -06005171{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005172 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005173}
5174
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005175VK_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 -06005176{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005177 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005178}
5179
Chia-I Wu9ab61502015-11-06 06:42:02 +08005180VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005181{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005182 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005183}
5184
Chia-I Wu9ab61502015-11-06 06:42:02 +08005185VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005186{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005187 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188}
5189
Chia-I Wu9ab61502015-11-06 06:42:02 +08005190VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005191{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005192 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005193}
5194
Chia-I Wu9ab61502015-11-06 06:42:02 +08005195VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005196{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005197 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005198}
5199
Chia-I Wu9ab61502015-11-06 06:42:02 +08005200VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005201{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005202 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005203}
5204
Chia-I Wu9ab61502015-11-06 06:42:02 +08005205VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005206{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005207 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005208}
5209
Chia-I Wu9ab61502015-11-06 06:42:02 +08005210VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005211{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005212 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005213}
5214
5215bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005216 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005217 const VkDescriptorSet* pDescriptorSets,
5218 const uint32_t* pDynamicOffsets)
5219{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005220 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005221 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005222 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005223
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005224 if(pDynamicOffsets != nullptr)
5225 {
5226 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005227
5228 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005229}
5230
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005231bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005232 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005233 VkPipelineBindPoint pipelineBindPoint,
5234 VkPipelineLayout layout,
5235 uint32_t firstSet,
5236 uint32_t setCount,
5237 uint32_t dynamicOffsetCount)
5238{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005239
5240 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5241 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5242 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005243 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005244 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005245 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005246 }
5247
5248
5249
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005250
5251
5252 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005253}
5254
Chia-I Wu9ab61502015-11-06 06:42:02 +08005255VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005256 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005257 VkPipelineBindPoint pipelineBindPoint,
5258 VkPipelineLayout layout,
5259 uint32_t firstSet,
5260 uint32_t setCount,
5261 const VkDescriptorSet* pDescriptorSets,
5262 uint32_t dynamicOffsetCount,
5263 const uint32_t* pDynamicOffsets)
5264{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005265 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005266
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005267 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005268
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005269 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005270}
5271
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005272bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005273 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005274 VkBuffer buffer,
5275 VkDeviceSize offset,
5276 VkIndexType indexType)
5277{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005278
Jeremy Hayes99a96322015-06-26 12:48:09 -06005279
5280
5281 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5282 indexType > VK_INDEX_TYPE_END_RANGE)
5283 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005284 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005285 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005286 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005287 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005288
5289 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005290}
5291
Chia-I Wu9ab61502015-11-06 06:42:02 +08005292VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005293 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005294 VkBuffer buffer,
5295 VkDeviceSize offset,
5296 VkIndexType indexType)
5297{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005298 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005299
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005300 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005301}
5302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005303bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005304 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005305 const VkBuffer* pBuffers,
5306 const VkDeviceSize* pOffsets)
5307{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005308 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310 }
5311
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005312 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005313 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005314 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005315
5316 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317}
5318
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005319bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005320 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005321 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005322 uint32_t bindingCount)
5323{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005324
5325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005326
5327 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005328}
5329
Chia-I Wu9ab61502015-11-06 06:42:02 +08005330VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005331 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005332 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005333 uint32_t bindingCount,
5334 const VkBuffer* pBuffers,
5335 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005336{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005337 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005338
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005339 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005340
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005341 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005342}
5343
Michael Lentine55a913f2015-11-24 09:48:23 -06005344bool PreCmdDraw(
5345 VkCommandBuffer commandBuffer,
5346 uint32_t vertexCount,
5347 uint32_t instanceCount,
5348 uint32_t firstVertex,
5349 uint32_t firstInstance)
5350{
5351 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005352 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5353 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005354 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005355 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5356 return false;
5357 }
5358
5359 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005360 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5361 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005362 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005363 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5364 return false;
5365 }
5366
5367 return true;
5368}
5369
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005370bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005371 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005372 uint32_t firstVertex,
5373 uint32_t vertexCount,
5374 uint32_t firstInstance,
5375 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005376{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005377
5378
5379
5380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005381
5382 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005383}
5384
Chia-I Wu9ab61502015-11-06 06:42:02 +08005385VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005386 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005387 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005388 uint32_t instanceCount,
5389 uint32_t firstVertex,
5390 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005391{
Michael Lentine55a913f2015-11-24 09:48:23 -06005392 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5393
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005394 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005396 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005397}
5398
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005399bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005400 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005401 uint32_t firstIndex,
5402 uint32_t indexCount,
5403 int32_t vertexOffset,
5404 uint32_t firstInstance,
5405 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005406{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407
5408
5409
5410
5411
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005412
5413 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005414}
5415
Chia-I Wu9ab61502015-11-06 06:42:02 +08005416VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005417 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005418 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005419 uint32_t instanceCount,
5420 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005421 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005422 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005423{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005424 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005426 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005427}
5428
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005429bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005430 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431 VkBuffer buffer,
5432 VkDeviceSize offset,
5433 uint32_t count,
5434 uint32_t stride)
5435{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005436
5437
5438
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005439
5440
5441 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442}
5443
Chia-I Wu9ab61502015-11-06 06:42:02 +08005444VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005445 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446 VkBuffer buffer,
5447 VkDeviceSize offset,
5448 uint32_t count,
5449 uint32_t stride)
5450{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005451 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005453 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005454}
5455
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005456bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005457 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005458 VkBuffer buffer,
5459 VkDeviceSize offset,
5460 uint32_t count,
5461 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005462{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463
5464
5465
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005466
5467
5468 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005469}
5470
Chia-I Wu9ab61502015-11-06 06:42:02 +08005471VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005472 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005473 VkBuffer buffer,
5474 VkDeviceSize offset,
5475 uint32_t count,
5476 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005477{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005478 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005479
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005480 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481}
5482
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005483bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005484 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005485 uint32_t x,
5486 uint32_t y,
5487 uint32_t z)
5488{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005489
5490
5491
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005492
5493 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494}
5495
Chia-I Wu9ab61502015-11-06 06:42:02 +08005496VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005497 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005498 uint32_t x,
5499 uint32_t y,
5500 uint32_t z)
5501{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005502 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005503
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005504 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005505}
5506
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005507bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005508 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005509 VkBuffer buffer,
5510 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005511{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005512
Jeremy Hayes99a96322015-06-26 12:48:09 -06005513
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005514
5515 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005516}
5517
Chia-I Wu9ab61502015-11-06 06:42:02 +08005518VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005519 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005520 VkBuffer buffer,
5521 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005522{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005523 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005525 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005526}
5527
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005528bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005529 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005530 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005531{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005532 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005533 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005535
5536 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005537}
5538
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005539bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005540 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005541 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005542 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005543 uint32_t regionCount)
5544{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546
Jeremy Hayes99a96322015-06-26 12:48:09 -06005547
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005548
5549 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005550}
5551
Chia-I Wu9ab61502015-11-06 06:42:02 +08005552VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005553 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005554 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005555 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005556 uint32_t regionCount,
5557 const VkBufferCopy* pRegions)
5558{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005559 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005560
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005561 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005563 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564}
5565
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005566bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005567 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005568 const VkImageCopy* pRegions)
5569{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005570 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005572 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005573 (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 -06005574 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005575 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005576 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005577 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005579 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005580 (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 -06005581 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005582 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005583 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005584 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005585 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005586 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005587
5588 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005589}
5590
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005591bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005592 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593 VkImage srcImage,
5594 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005595 VkImage dstImage,
5596 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005597 uint32_t regionCount)
5598{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005599 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5600 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5601 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005603 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005604 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005605 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606 }
5607
Jeremy Hayes99a96322015-06-26 12:48:09 -06005608
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005609 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5610 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5611 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005612 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005613 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005614 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005615 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005616 }
5617
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005618
5619 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620}
5621
Chia-I Wu9ab61502015-11-06 06:42:02 +08005622VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005623 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005624 VkImage srcImage,
5625 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005626 VkImage dstImage,
5627 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628 uint32_t regionCount,
5629 const VkImageCopy* pRegions)
5630{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005631 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005632
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005633 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005635 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636}
5637
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005638bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005639 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640 const VkImageBlit* pRegions)
5641{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005642 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005644 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005645 (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 -06005646 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005647 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005648 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005650 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005651 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005652 (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 -06005653 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005654 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005655 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005656 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005658 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005659
5660 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661}
5662
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005663bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005664 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005665 VkImage srcImage,
5666 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005667 VkImage dstImage,
5668 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005670 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005672
Jeremy Hayes99a96322015-06-26 12:48:09 -06005673
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005674 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5675 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5676 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005677 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005678 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005679 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005680 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005681 }
5682
Jeremy Hayes99a96322015-06-26 12:48:09 -06005683
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005684 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5685 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5686 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005687 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005688 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005689 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005690 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 }
5692
5693
Chia-I Wub99df442015-10-26 16:49:32 +08005694 if(filter < VK_FILTER_BEGIN_RANGE ||
5695 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005696 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005697 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005698 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005699 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005701
5702 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005703}
5704
Chia-I Wu9ab61502015-11-06 06:42:02 +08005705VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005706 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005707 VkImage srcImage,
5708 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005709 VkImage dstImage,
5710 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005711 uint32_t regionCount,
5712 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005713 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005714{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005715 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005716
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005717 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005718
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005719 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720}
5721
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005722bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005723 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005724 const VkBufferImageCopy* pRegions)
5725{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005726 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005727 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005728 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005729 (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 -06005730 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005731 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005732 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005733 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005734 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005735 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005736
5737 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738}
5739
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005740bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005741 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005742 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005743 VkImage dstImage,
5744 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005745 uint32_t regionCount)
5746{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747
Jeremy Hayes99a96322015-06-26 12:48:09 -06005748
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005750 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5751 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5752 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005754 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005755 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005756 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005757 }
5758
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005759
5760 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005761}
5762
Chia-I Wu9ab61502015-11-06 06:42:02 +08005763VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005764 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005765 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005766 VkImage dstImage,
5767 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768 uint32_t regionCount,
5769 const VkBufferImageCopy* pRegions)
5770{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005771 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005772
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005773 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005774
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005775 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776}
5777
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005778bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005779 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005780 const VkBufferImageCopy* pRegions)
5781{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005782 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005783 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005784 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005785 (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 -06005786 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005787 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005788 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005789 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005790 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005791 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005792
5793 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005794}
5795
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005796bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005797 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798 VkImage srcImage,
5799 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005800 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005801 uint32_t regionCount)
5802{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005803
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005805 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5806 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5807 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005808 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005809 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005810 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005811 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005812 }
5813
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005815
5816 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817}
5818
Chia-I Wu9ab61502015-11-06 06:42:02 +08005819VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005820 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005821 VkImage srcImage,
5822 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005823 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005824 uint32_t regionCount,
5825 const VkBufferImageCopy* pRegions)
5826{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005827 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005828
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005829 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005830
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005831 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832}
5833
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005834bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005835 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005836 const uint32_t* pData)
5837{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005838 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005841
5842 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843}
5844
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005845bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005846 VkCommandBuffer commandBuffer,
5847 VkBuffer dstBuffer,
5848 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005849 VkDeviceSize dataSize)
5850{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005851
5852
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005853
5854
5855 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005856}
5857
Chia-I Wu9ab61502015-11-06 06:42:02 +08005858VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005859 VkCommandBuffer commandBuffer,
5860 VkBuffer dstBuffer,
5861 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005862 VkDeviceSize dataSize,
5863 const uint32_t* pData)
5864{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005865 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005866
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005867 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005869 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870}
5871
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005872bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005873 VkCommandBuffer commandBuffer,
5874 VkBuffer dstBuffer,
5875 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005876 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005877 uint32_t data)
5878{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005879
5880
5881
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005882
5883
5884 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005885}
5886
Chia-I Wu9ab61502015-11-06 06:42:02 +08005887VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005888 VkCommandBuffer commandBuffer,
5889 VkBuffer dstBuffer,
5890 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005891 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892 uint32_t data)
5893{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005894 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005896 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897}
5898
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005899bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005900 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005901 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005902 const VkImageSubresourceRange* pRanges)
5903{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005904 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005905 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005906 }
5907
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005908 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005909 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005910 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005911 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005912
5913 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005914}
5915
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005916bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005917 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005918 VkImage image,
5919 VkImageLayout imageLayout,
5920 uint32_t rangeCount)
5921{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005922
Jeremy Hayes99a96322015-06-26 12:48:09 -06005923
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005924 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5925 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5926 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005927 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005928 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005929 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005930 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931 }
5932
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005933
5934 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935}
5936
Chia-I Wu9ab61502015-11-06 06:42:02 +08005937VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005938 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005939 VkImage image,
5940 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005941 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005942 uint32_t rangeCount,
5943 const VkImageSubresourceRange* pRanges)
5944{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005945 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005946
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005947 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005948
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005949 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005950}
5951
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005952bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005953 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005954 const VkImageSubresourceRange* pRanges)
5955{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005956 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005957 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005958 /*
5959 * TODO: How do we validation pRanges->aspectMask?
5960 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5961 * VK_IMAGE_ASPECT_STENCIL_BIT.
5962 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005963 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005964
5965 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966}
5967
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005968bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005969 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970 VkImage image,
5971 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005972 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973 uint32_t rangeCount)
5974{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975
Jeremy Hayes99a96322015-06-26 12:48:09 -06005976
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005977 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5978 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5979 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005980 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005981 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005982 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005984 }
5985
5986
5987
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005988
5989 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005990}
5991
Chia-I Wu9ab61502015-11-06 06:42:02 +08005992VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005993 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994 VkImage image,
5995 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005996 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997 uint32_t rangeCount,
5998 const VkImageSubresourceRange* pRanges)
5999{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006000 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006001
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006002 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006004 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005}
6006
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006007bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006008 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006009 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006010 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006011{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006012 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006013 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006014 }
6015
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006016 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006017 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006018 }
6019
6020 return true;
6021}
6022
Chia-I Wu9ab61502015-11-06 06:42:02 +08006023VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006024 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006025 uint32_t attachmentCount,
6026 const VkClearAttachment* pAttachments,
6027 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006028 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006029{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006030 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006031 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006032 }
6033
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006034 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035}
6036
6037bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006038 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039 const VkImageResolve* pRegions)
6040{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006041 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006042 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006043 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006044 (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 -06006045 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006046 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006047 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006048 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006049 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006050 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006051 (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 -06006052 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006053 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006054 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006055 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006057 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006058
6059 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060}
6061
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006062bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006063 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064 VkImage srcImage,
6065 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006066 VkImage dstImage,
6067 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006068 uint32_t regionCount)
6069{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006070
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006072 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6073 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6074 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006075 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006076 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006077 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006078 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006079 }
6080
Jeremy Hayes99a96322015-06-26 12:48:09 -06006081
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006082 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6083 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6084 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006085 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006086 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006087 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006088 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006089 }
6090
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006091
6092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093}
6094
Chia-I Wu9ab61502015-11-06 06:42:02 +08006095VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006096 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097 VkImage srcImage,
6098 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006099 VkImage dstImage,
6100 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006101 uint32_t regionCount,
6102 const VkImageResolve* pRegions)
6103{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006104 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006105
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006106 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006107
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006108 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109}
6110
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006111bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006112 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006113 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006114 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006115{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006116
Jeremy Hayes99a96322015-06-26 12:48:09 -06006117
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006118
6119 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006120}
6121
Chia-I Wu9ab61502015-11-06 06:42:02 +08006122VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006123 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006125 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006126{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006127 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006129 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006130}
6131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006132bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006133 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006134 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006135 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006136{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006137
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006139
6140 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141}
6142
Chia-I Wu9ab61502015-11-06 06:42:02 +08006143VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006144 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006145 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006146 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006147{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006148 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006150 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006151}
6152
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006153bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006154 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006155 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006156 uint32_t memoryBarrierCount,
6157 const VkMemoryBarrier *pMemoryBarriers,
6158 uint32_t bufferMemoryBarrierCount,
6159 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6160 uint32_t imageMemoryBarrierCount,
6161 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006162{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006163 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006165 }
6166
Jon Ashburnf19916e2016-01-11 13:12:43 -07006167 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006168 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006170
6171 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006172}
6173
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006174bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006175 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006176 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006177 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006178 VkPipelineStageFlags dstStageMask,
6179 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006180{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006181
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006182
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183
6184
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006185
6186 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187}
6188
Chia-I Wu9ab61502015-11-06 06:42:02 +08006189VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006190 VkCommandBuffer commandBuffer,
6191 uint32_t eventCount,
6192 const VkEvent *pEvents,
6193 VkPipelineStageFlags srcStageMask,
6194 VkPipelineStageFlags dstStageMask,
6195 uint32_t memoryBarrierCount,
6196 const VkMemoryBarrier *pMemoryBarriers,
6197 uint32_t bufferMemoryBarrierCount,
6198 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6199 uint32_t imageMemoryBarrierCount,
6200 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006202 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006203
Jon Ashburnf19916e2016-01-11 13:12:43 -07006204 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 -06006205
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006206 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207}
6208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006209bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006210 VkCommandBuffer commandBuffer,
6211 uint32_t memoryBarrierCount,
6212 const VkMemoryBarrier *pMemoryBarriers,
6213 uint32_t bufferMemoryBarrierCount,
6214 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6215 uint32_t imageMemoryBarrierCount,
6216 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006217{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006218 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006219 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006221
6222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223}
6224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006225bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006226 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006227 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006228 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006229 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006230 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006231{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006233
Jeremy Hayes99a96322015-06-26 12:48:09 -06006234
6235
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006236
6237 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238}
6239
Chia-I Wu9ab61502015-11-06 06:42:02 +08006240VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006241 VkCommandBuffer commandBuffer,
6242 VkPipelineStageFlags srcStageMask,
6243 VkPipelineStageFlags dstStageMask,
6244 VkDependencyFlags dependencyFlags,
6245 uint32_t memoryBarrierCount,
6246 const VkMemoryBarrier *pMemoryBarriers,
6247 uint32_t bufferMemoryBarrierCount,
6248 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6249 uint32_t imageMemoryBarrierCount,
6250 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006252 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006253
Jon Ashburnf19916e2016-01-11 13:12:43 -07006254 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 -06006255
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006256 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006257}
6258
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006259bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006260 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006261 VkQueryPool queryPool,
6262 uint32_t slot,
6263 VkQueryControlFlags flags)
6264{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006265
Jeremy Hayes99a96322015-06-26 12:48:09 -06006266
6267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006268
6269 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270}
6271
Chia-I Wu9ab61502015-11-06 06:42:02 +08006272VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006273 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006274 VkQueryPool queryPool,
6275 uint32_t slot,
6276 VkQueryControlFlags flags)
6277{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006278 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006279
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006280 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006281}
6282
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006283bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006284 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006285 VkQueryPool queryPool,
6286 uint32_t slot)
6287{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006288
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006290
6291 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006292}
6293
Chia-I Wu9ab61502015-11-06 06:42:02 +08006294VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006295 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296 VkQueryPool queryPool,
6297 uint32_t slot)
6298{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006299 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006300
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006301 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006302}
6303
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006304bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006305 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006306 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006307 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006308 uint32_t queryCount)
6309{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006310
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006311
6312
6313
6314 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006315}
6316
Chia-I Wu9ab61502015-11-06 06:42:02 +08006317VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006318 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006319 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006320 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006321 uint32_t queryCount)
6322{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006323 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006324
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006325 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006326}
6327
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006328bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006329 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006330 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006331 VkQueryPool queryPool,
6332 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006333{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006334
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006335 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006336
6337 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006338}
6339
Chia-I Wu9ab61502015-11-06 06:42:02 +08006340VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006341 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006342 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006343 VkQueryPool queryPool,
6344 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006345{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006346 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006347
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006348 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006349}
6350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006351bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006352 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006353 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006354 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006355 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006356 VkBuffer dstBuffer,
6357 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006358 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006359 VkQueryResultFlags flags)
6360{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006361
6362
6363
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006364
Jeremy Hayes99a96322015-06-26 12:48:09 -06006365
6366
6367
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006368
6369 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006370}
6371
Chia-I Wu9ab61502015-11-06 06:42:02 +08006372VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006373 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006374 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006375 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006376 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006377 VkBuffer dstBuffer,
6378 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006379 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006380 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006381{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006382 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006384 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006385}
6386
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006387bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006388 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006389 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006390{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006391 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006392 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006393 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006394
6395 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006396}
6397
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006398bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006399 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006400 VkPipelineLayout layout,
6401 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006402 uint32_t offset,
6403 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006404{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006405
Jeremy Hayes99a96322015-06-26 12:48:09 -06006406
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006407
6408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006409
6410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006411}
6412
Chia-I Wu9ab61502015-11-06 06:42:02 +08006413VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006414 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006415 VkPipelineLayout layout,
6416 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006417 uint32_t offset,
6418 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006419 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006420{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006421 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006422
Chia-I Wuce9b1772015-11-12 06:09:22 +08006423 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006424
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006425 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006426}
6427
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006428bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006429 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006430 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006431{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006432 if(pRenderPassBegin != nullptr)
6433 {
6434 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006435 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006436 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006437 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006438 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006439 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006440 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006441 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006442 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006443 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006444
6445 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006446}
6447
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006448bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006449 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006450 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006451{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006452
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006453 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6454 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006455 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006456 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006457 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006458 return false;
6459 }
6460
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006461 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006462}
6463
Chia-I Wu9ab61502015-11-06 06:42:02 +08006464VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006465 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006466 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006467 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006468{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006469 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006470
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006471 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006472
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006473 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006474}
6475
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006476bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006477 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006478 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006479{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006480
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006481 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6482 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006483 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006484 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006485 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006486 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006487 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006488
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006489 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006490}
6491
Chia-I Wu9ab61502015-11-06 06:42:02 +08006492VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006493 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006494 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006495{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006496 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006497
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006498 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006499}
6500
6501bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006502 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006503{
6504
6505 return true;
6506}
6507
Chia-I Wu9ab61502015-11-06 06:42:02 +08006508VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006509 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006510{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006511 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006512
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006513 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006514}
6515
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006516bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006517 VkCommandBuffer commandBuffer,
6518 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006519{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006520 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006521 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006522 }
6523
6524 return true;
6525}
6526
6527bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006528 VkCommandBuffer commandBuffer,
6529 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006530{
6531
6532
6533 return true;
6534}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006535
Chia-I Wu9ab61502015-11-06 06:42:02 +08006536VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006537 VkCommandBuffer commandBuffer,
6538 uint32_t commandBuffersCount,
6539 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006540{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006541 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006542
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006543 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006544
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006545 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006546}
6547
Chia-I Wu9ab61502015-11-06 06:42:02 +08006548VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006549{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006550 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006562 if (!strcmp(funcName, "vkAllocateMemory"))
6563 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006571 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006573 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006577 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006581 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006600 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006602 if (!strcmp(funcName, "vkCreateShaderModule"))
6603 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006604 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006605 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006606 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006607 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006608 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006609 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006610 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006611 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006613 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006615 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006617 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006618 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6619 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006620 if (!strcmp(funcName, "vkCmdSetViewport"))
6621 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006622 if (!strcmp(funcName, "vkCmdSetScissor"))
6623 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006624 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6625 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6626 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6627 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6628 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6629 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6630 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6631 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6632 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6633 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6634 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6635 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6636 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6637 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006638 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6639 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006641 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006642 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006643 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006644 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006645 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006646 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006647 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006648 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006649 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006650 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006651 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006652 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006653 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006654 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006655 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006657 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006658 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006659 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006660 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006661 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006662 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006663 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006664 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006665 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006666 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006667 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006668 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006669 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006670 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006671 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006672 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006673 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006674 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006675 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006676 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006677 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006678 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006679 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006680 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006681 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006682 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006683 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006684 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006685 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006686 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006687 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006688 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006689 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006690 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006691 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006692 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006693 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006694 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006695 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006696 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006697 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006698 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006699 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006700 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006701 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006702 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006703 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006704 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006705 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006706 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006707 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006708 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006709 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006710
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006711 if (device == NULL) {
6712 return NULL;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006713 }
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006714
6715 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
6716 return NULL;
6717 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006718}
6719
Chia-I Wu9ab61502015-11-06 06:42:02 +08006720VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006721{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006722 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006723 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006724 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006725 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006726 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006727 return (PFN_vkVoidFunction) vkDestroyInstance;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006728 if (!strcmp(funcName, "vkCreateDevice"))
6729 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006731 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006733 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006734 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006735 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006736 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006737 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006738 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6739 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6740 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6741 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6742 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6743 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6744 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6745 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006746
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006747 if (instance == NULL) {
6748 return NULL;
6749 }
6750
Jeremy Hayes99a96322015-06-26 12:48:09 -06006751 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006752 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006753 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006754 return fptr;
6755
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006756 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6757 return NULL;
6758 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006759}