blob: e23019778b6e22d8f7306dfbf6ec06154662b6cd [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002 *
Courtney Goeltzenleuchterfcbe16f2015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Michael Lentine03d8e572015-09-15 14:59:14 -05004 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060023 *
24 * Author: Jeremy Hayes <jeremy@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060026 */
27
28#include <stdio.h>
29#include <stdlib.h>
30#include <string.h>
31
32#include <iostream>
33#include <string>
34#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050035#include <unordered_map>
Michael Lentine157a2ec2016-01-27 11:25:05 -060036#include <unordered_set>
Jeremy Hayes99a96322015-06-26 12:48:09 -060037#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060038
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060039#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070040#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060041#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060042#include "vk_enum_validate_helper.h"
43#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060044
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060045#include "vk_layer_table.h"
46#include "vk_layer_data.h"
47#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060048#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060049
Cody Northrop55443ef2015-09-28 15:09:32 -060050struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060051 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070052 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060053
Michael Lentinebdf744f2016-01-27 15:43:43 -060054 //TODO: Split instance/device structs
55 //Device Data
56 //Map for queue family index to queue count
57 std::unordered_map<uint32_t, uint32_t> queueFamilyIndexMap;
58
Cody Northrop55443ef2015-09-28 15:09:32 -060059 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060060 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060061 {};
62};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050063
Jeremy Hayes99a96322015-06-26 12:48:09 -060064static std::unordered_map<void*, layer_data*> layer_data_map;
65static device_table_map pc_device_table_map;
66static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060067
Jeremy Hayes99a96322015-06-26 12:48:09 -060068// "my instance data"
69debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060070{
Jeremy Hayes99a96322015-06-26 12:48:09 -060071 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060072 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060073#if DISPATCH_MAP_DEBUG
74 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
75#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060076 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060077
78 return data->report_data;
79}
80
81// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060082debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060083{
84 dispatch_key key = get_dispatch_key(object);
85 layer_data *data = get_my_data_ptr(key, layer_data_map);
86#if DISPATCH_MAP_DEBUG
87 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
88#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060089 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060090 return data->report_data;
91}
92
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -070093static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -060094{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070095 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060096 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
97
98 uint32_t debug_action = 0;
99 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
100 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
101 {
102 FILE *log_output = NULL;
103 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -0600104 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700105 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700106 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700107 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700108 dbgCreateInfo.flags = report_flags;
109 dbgCreateInfo.pfnCallback = log_callback;
110 dbgCreateInfo.pUserData = log_output;
111
112 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600113 data->logging_callback.push_back(callback);
114 }
115
116 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700117 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700118 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700119 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700120 dbgCreateInfo.flags = report_flags;
121 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
122 dbgCreateInfo.pUserData = NULL;
123
124 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600125 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600126 }
127}
128
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700129VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600130 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700131 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700132 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700133 VkDebugReportCallbackEXT* pMsgCallback)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600134{
135 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700136 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600137
138 if (result == VK_SUCCESS)
139 {
140 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700141 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600142 }
143
144 return result;
145}
146
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700147VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600148 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700149 VkDebugReportCallbackEXT msgCallback,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700150 const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600151{
152 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700153 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600154
155 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700156 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600157}
158
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700159VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700160 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700161 VkDebugReportFlagsEXT flags,
162 VkDebugReportObjectTypeEXT objType,
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700163 uint64_t object,
164 size_t location,
165 int32_t msgCode,
166 const char* pLayerPrefix,
167 const char* pMsg)
168{
169 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700170 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700171}
172
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700173static const VkExtensionProperties instance_extensions[] = {
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600174 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700175 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
Courtney Goeltzenleuchterb69cd592016-01-19 16:08:39 -0700176 VK_EXT_DEBUG_REPORT_SPEC_VERSION
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600177 }
178};
Tony Barbour59a47322015-06-24 16:06:58 -0600179
Chia-I Wu9ab61502015-11-06 06:42:02 +0800180VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600181 const char *pLayerName,
182 uint32_t *pCount,
183 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600184{
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700185 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600186}
187
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700188static const VkLayerProperties pc_global_layers[] = {
189 {
Michael Lentine1f8d4412016-01-19 14:19:38 -0600190 "VK_LAYER_LUNARG_param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700191 VK_API_VERSION,
192 VK_MAKE_VERSION(0, 1, 0),
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700193 "Validation layer: param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700194 }
195};
196
Chia-I Wu9ab61502015-11-06 06:42:02 +0800197VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600198 uint32_t *pCount,
199 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600200{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600201 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
202 pc_global_layers,
203 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600204}
205
Chia-I Wu9ab61502015-11-06 06:42:02 +0800206VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600207 VkPhysicalDevice physicalDevice,
208 const char* pLayerName,
209 uint32_t* pCount,
210 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600211{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600212 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700213 if (pLayerName == NULL) {
214 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
215 physicalDevice,
216 NULL,
217 pCount,
218 pProperties);
219 } else {
220 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
221 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600222}
223
Chia-I Wu9ab61502015-11-06 06:42:02 +0800224VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600225 VkPhysicalDevice physicalDevice,
226 uint32_t* pCount,
227 VkLayerProperties* pProperties)
228{
229 /* ParamChecker's physical device layers are the same as global */
230 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
231 pCount, pProperties);
232}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600233
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600234// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600235
Jeremy Hayes99a96322015-06-26 12:48:09 -0600236static
237std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600238{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600239 switch(enumerator)
240 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600241 case VK_RESULT_MAX_ENUM:
242 {
243 return "VK_RESULT_MAX_ENUM";
244 break;
245 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600246 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600247 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600248 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600249 break;
250 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600251 case VK_ERROR_INCOMPATIBLE_DRIVER:
252 {
253 return "VK_ERROR_INCOMPATIBLE_DRIVER";
254 break;
255 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600256 case VK_ERROR_MEMORY_MAP_FAILED:
257 {
258 return "VK_ERROR_MEMORY_MAP_FAILED";
259 break;
260 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600261 case VK_INCOMPLETE:
262 {
263 return "VK_INCOMPLETE";
264 break;
265 }
266 case VK_ERROR_OUT_OF_HOST_MEMORY:
267 {
268 return "VK_ERROR_OUT_OF_HOST_MEMORY";
269 break;
270 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600271 case VK_ERROR_INITIALIZATION_FAILED:
272 {
273 return "VK_ERROR_INITIALIZATION_FAILED";
274 break;
275 }
276 case VK_NOT_READY:
277 {
278 return "VK_NOT_READY";
279 break;
280 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600281 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
282 {
283 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
284 break;
285 }
286 case VK_EVENT_SET:
287 {
288 return "VK_EVENT_SET";
289 break;
290 }
291 case VK_TIMEOUT:
292 {
293 return "VK_TIMEOUT";
294 break;
295 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600296 case VK_EVENT_RESET:
297 {
298 return "VK_EVENT_RESET";
299 break;
300 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600301 case VK_SUCCESS:
302 {
303 return "VK_SUCCESS";
304 break;
305 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600306 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600307 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600308 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600309 break;
310 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600311 case VK_ERROR_DEVICE_LOST:
312 {
313 return "VK_ERROR_DEVICE_LOST";
314 break;
315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600316 default:
317 {
318 return "unrecognized enumerator";
319 break;
320 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600321 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600322}
323
324static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600325bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
326{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600327 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600328 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
329 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
330 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
331 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
332 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
333 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
334 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
335 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
336 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600337 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800338 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
Jon Ashburn766866a2016-01-22 15:39:20 -0700339 VK_FORMAT_FEATURE_BLIT_DST_BIT |
340 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600341 if(enumerator & (~allFlags))
342 {
343 return false;
344 }
345
346 return true;
347}
348
349static
350std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
351{
352 if(!ValidateEnumerator(enumerator))
353 {
354 return "unrecognized enumerator";
355 }
356
357 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600358 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
359 {
360 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
361 }
362 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
363 {
364 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
365 }
366 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
367 {
368 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
369 }
370 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
371 {
372 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
373 }
374 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
375 {
376 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
377 }
378 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
379 {
380 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
381 }
382 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
383 {
384 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
385 }
386 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
387 {
388 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
389 }
390 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
391 {
392 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
393 }
394 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
395 {
396 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
397 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800398 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600399 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800400 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600401 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800402 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600403 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800404 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600405 }
Jon Ashburn766866a2016-01-22 15:39:20 -0700406 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
407 {
408 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT");
409 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600410
411 std::string enumeratorString;
412 for(auto const& string : strings)
413 {
414 enumeratorString += string;
415
416 if(string != strings.back())
417 {
418 enumeratorString += '|';
419 }
420 }
421
422 return enumeratorString;
423}
424
425static
426bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
427{
428 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600429 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600430 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
431 VK_IMAGE_USAGE_STORAGE_BIT |
432 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800433 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600434 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800435 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600436 if(enumerator & (~allFlags))
437 {
438 return false;
439 }
440
441 return true;
442}
443
444static
445std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
446{
447 if(!ValidateEnumerator(enumerator))
448 {
449 return "unrecognized enumerator";
450 }
451
452 std::vector<std::string> strings;
453 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
454 {
455 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
456 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600457 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600458 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600459 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600460 }
461 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
462 {
463 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
464 }
465 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
466 {
467 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
468 }
469 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
470 {
471 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
472 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800473 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600474 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800475 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600476 }
477 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
478 {
479 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
480 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800481 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600482 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800483 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600484 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600485
486 std::string enumeratorString;
487 for(auto const& string : strings)
488 {
489 enumeratorString += string;
490
491 if(string != strings.back())
492 {
493 enumeratorString += '|';
494 }
495 }
496
497 return enumeratorString;
498}
499
500static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600501bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
502{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800503 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800504 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600505 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800506 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600507 VK_QUEUE_GRAPHICS_BIT);
508 if(enumerator & (~allFlags))
509 {
510 return false;
511 }
512
513 return true;
514}
515
516static
517std::string EnumeratorString(VkQueueFlagBits const& enumerator)
518{
519 if(!ValidateEnumerator(enumerator))
520 {
521 return "unrecognized enumerator";
522 }
523
524 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800525 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600526 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800527 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600528 }
529 if(enumerator & VK_QUEUE_COMPUTE_BIT)
530 {
531 strings.push_back("VK_QUEUE_COMPUTE_BIT");
532 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800533 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600534 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800535 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600536 }
537 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
538 {
539 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
540 }
541
542 std::string enumeratorString;
543 for(auto const& string : strings)
544 {
545 enumeratorString += string;
546
547 if(string != strings.back())
548 {
549 enumeratorString += '|';
550 }
551 }
552
553 return enumeratorString;
554}
555
556static
557bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
558{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600559 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800560 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600561 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800562 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
563 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600564 if(enumerator & (~allFlags))
565 {
566 return false;
567 }
568
569 return true;
570}
571
572static
573std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
574{
575 if(!ValidateEnumerator(enumerator))
576 {
577 return "unrecognized enumerator";
578 }
579
580 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600581 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
582 {
583 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
584 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800585 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600586 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800587 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600588 }
589 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
590 {
591 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
592 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800593 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600594 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800595 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600596 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800597 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600598 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800599 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600600 }
601
602 std::string enumeratorString;
603 for(auto const& string : strings)
604 {
605 enumeratorString += string;
606
607 if(string != strings.back())
608 {
609 enumeratorString += '|';
610 }
611 }
612
613 return enumeratorString;
614}
615
616static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600617bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600618{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800619 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600620 if(enumerator & (~allFlags))
621 {
622 return false;
623 }
624
625 return true;
626}
627
628static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600629std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600630{
631 if(!ValidateEnumerator(enumerator))
632 {
633 return "unrecognized enumerator";
634 }
635
636 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800637 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600638 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800639 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600640 }
641
642 std::string enumeratorString;
643 for(auto const& string : strings)
644 {
645 enumeratorString += string;
646
647 if(string != strings.back())
648 {
649 enumeratorString += '|';
650 }
651 }
652
653 return enumeratorString;
654}
655
656static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600657bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
658{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800659 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
660 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
661 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600662 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600663 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600664 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600665 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600666
667 return true;
668}
669
670static
671std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
672{
673 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600674 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600675 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600676 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600677
678 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800679 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600680 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800681 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600682 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800683 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600684 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800685 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600686 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800687 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600688 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800689 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600690 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600691
692 std::string enumeratorString;
693 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600694 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600695 enumeratorString += string;
696
697 if(string != strings.back())
698 {
699 enumeratorString += '|';
700 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600701 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600702
703 return enumeratorString;
704}
705
706static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600707bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
708{
709 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
710 if(enumerator & (~allFlags))
711 {
712 return false;
713 }
714
715 return true;
716}
717
718static
719std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
720{
721 if(!ValidateEnumerator(enumerator))
722 {
723 return "unrecognized enumerator";
724 }
725
726 std::vector<std::string> strings;
727 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
728 {
729 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
730 }
731
732 std::string enumeratorString;
733 for(auto const& string : strings)
734 {
735 enumeratorString += string;
736
737 if(string != strings.back())
738 {
739 enumeratorString += '|';
740 }
741 }
742
743 return enumeratorString;
744}
745
746static
747bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
748{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600749 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
754 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
755 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
756 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
757 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
758 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
759 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600760 if(enumerator & (~allFlags))
761 {
762 return false;
763 }
764
765 return true;
766}
767
768static
769std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
770{
771 if(!ValidateEnumerator(enumerator))
772 {
773 return "unrecognized enumerator";
774 }
775
776 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600777 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600778 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600779 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600780 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600781 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600782 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600783 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600784 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600785 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600786 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600787 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600788 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600789 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600790 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600791 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600792 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600793 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600794 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600795 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600796 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600797 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600798 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600799 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600800 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600801 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600802 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600803 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600804 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600805 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600806 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600807 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600808 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600809 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600810 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600811 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600812 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600813 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600814 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600815 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600816 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600817 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600818 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600819 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600820 }
821
822 std::string enumeratorString;
823 for(auto const& string : strings)
824 {
825 enumeratorString += string;
826
827 if(string != strings.back())
828 {
829 enumeratorString += '|';
830 }
831 }
832
833 return enumeratorString;
834}
835
836static
837bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
838{
839 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
840 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
841 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700842 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600843 if(enumerator & (~allFlags))
844 {
845 return false;
846 }
847
848 return true;
849}
850
851static
852std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
853{
854 if(!ValidateEnumerator(enumerator))
855 {
856 return "unrecognized enumerator";
857 }
858
859 std::vector<std::string> strings;
860 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
865 {
866 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
867 }
868 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
869 {
870 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
871 }
872 if(enumerator & VK_QUERY_RESULT_64_BIT)
873 {
874 strings.push_back("VK_QUERY_RESULT_64_BIT");
875 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600876
877 std::string enumeratorString;
878 for(auto const& string : strings)
879 {
880 enumeratorString += string;
881
882 if(string != strings.back())
883 {
884 enumeratorString += '|';
885 }
886 }
887
888 return enumeratorString;
889}
890
891static
892bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
893{
894 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
895 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
896 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
897 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
898 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800899 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600900 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800901 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600902 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600903 if(enumerator & (~allFlags))
904 {
905 return false;
906 }
907
908 return true;
909}
910
911static
912std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
913{
914 if(!ValidateEnumerator(enumerator))
915 {
916 return "unrecognized enumerator";
917 }
918
919 std::vector<std::string> strings;
920 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
939 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800940 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600941 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800942 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600943 }
944 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
947 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800948 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600949 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800950 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600951 }
952 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
953 {
954 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
955 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600956
957 std::string enumeratorString;
958 for(auto const& string : strings)
959 {
960 enumeratorString += string;
961
962 if(string != strings.back())
963 {
964 enumeratorString += '|';
965 }
966 }
967
968 return enumeratorString;
969}
970
971static
972bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
973{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600974 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
975 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600976 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600977 if(enumerator & (~allFlags))
978 {
979 return false;
980 }
981
982 return true;
983}
984
985static
986std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
987{
988 if(!ValidateEnumerator(enumerator))
989 {
990 return "unrecognized enumerator";
991 }
992
993 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600994 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
995 {
996 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
997 }
998 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
999 {
1000 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1001 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001002 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001003 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001004 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001005 }
1006
1007 std::string enumeratorString;
1008 for(auto const& string : strings)
1009 {
1010 enumeratorString += string;
1011
1012 if(string != strings.back())
1013 {
1014 enumeratorString += '|';
1015 }
1016 }
1017
1018 return enumeratorString;
1019}
1020
1021static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001022bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1023{
1024 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001025 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1026 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001027 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001028 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001029 if(enumerator & (~allFlags))
1030 {
1031 return false;
1032 }
1033
1034 return true;
1035}
1036
1037static
1038std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1039{
1040 if(!ValidateEnumerator(enumerator))
1041 {
1042 return "unrecognized enumerator";
1043 }
1044
1045 std::vector<std::string> strings;
1046 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1049 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001050 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1053 }
1054 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1055 {
1056 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1057 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001058 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1059 {
1060 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1061 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001062 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001063 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001064 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001065 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001066
1067 std::string enumeratorString;
1068 for(auto const& string : strings)
1069 {
1070 enumeratorString += string;
1071
1072 if(string != strings.back())
1073 {
1074 enumeratorString += '|';
1075 }
1076 }
1077
1078 return enumeratorString;
1079}
1080
1081static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001082bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001083{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001084 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1085 VK_COLOR_COMPONENT_B_BIT |
1086 VK_COLOR_COMPONENT_G_BIT |
1087 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001088 if(enumerator & (~allFlags))
1089 {
1090 return false;
1091 }
1092
1093 return true;
1094}
1095
1096static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001097std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001098{
1099 if(!ValidateEnumerator(enumerator))
1100 {
1101 return "unrecognized enumerator";
1102 }
1103
1104 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001105 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001107 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001108 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001109 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001110 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001111 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001112 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001113 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001114 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001115 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001116 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001117 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001118 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001119 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001120 }
1121
1122 std::string enumeratorString;
1123 for(auto const& string : strings)
1124 {
1125 enumeratorString += string;
1126
1127 if(string != strings.back())
1128 {
1129 enumeratorString += '|';
1130 }
1131 }
1132
1133 return enumeratorString;
1134}
1135
1136static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001137bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001138{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001139 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1140 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1141 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001142 if(enumerator & (~allFlags))
1143 {
1144 return false;
1145 }
1146
1147 return true;
1148}
1149
1150static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001151std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001152{
1153 if(!ValidateEnumerator(enumerator))
1154 {
1155 return "unrecognized enumerator";
1156 }
1157
1158 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001159 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001160 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001161 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1162 }
1163 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1164 {
1165 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1166 }
1167 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1168 {
1169 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001170 }
1171
1172 std::string enumeratorString;
1173 for(auto const& string : strings)
1174 {
1175 enumeratorString += string;
1176
1177 if(string != strings.back())
1178 {
1179 enumeratorString += '|';
1180 }
1181 }
1182
1183 return enumeratorString;
1184}
1185
1186static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001187bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001188{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001189 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1190 VK_SHADER_STAGE_FRAGMENT_BIT |
1191 VK_SHADER_STAGE_GEOMETRY_BIT |
1192 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001193 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1194 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001195 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001196 if(enumerator & (~allFlags))
1197 {
1198 return false;
1199 }
1200
1201 return true;
1202}
1203
1204static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001205std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001206{
1207 if(!ValidateEnumerator(enumerator))
1208 {
1209 return "unrecognized enumerator";
1210 }
1211
1212 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001213 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001214 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001215 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001216 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001217 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001218 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001220 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001221 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001222 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001223 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1224 }
1225 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1226 {
1227 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1228 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001229 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001230 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001231 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001232 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001233 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001234 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001235 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001236 }
1237 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1238 {
1239 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001240 }
1241
1242 std::string enumeratorString;
1243 for(auto const& string : strings)
1244 {
1245 enumeratorString += string;
1246
1247 if(string != strings.back())
1248 {
1249 enumeratorString += '|';
1250 }
1251 }
1252
1253 return enumeratorString;
1254}
1255
1256static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001257bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001258{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001259 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001260 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001261 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1262 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001263 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001264 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001265 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001266 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001267 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001268 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1269 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1270 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1271 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1272 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1273 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1274 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1275 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1276 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001277 if(enumerator & (~allFlags))
1278 {
1279 return false;
1280 }
1281
1282 return true;
1283}
1284
1285static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001286std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001287{
1288 if(!ValidateEnumerator(enumerator))
1289 {
1290 return "unrecognized enumerator";
1291 }
1292
1293 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001294 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001295 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001296 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1297 }
1298 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1299 {
1300 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001301 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001302 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001303 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001304 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001305 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001306 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001307 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001308 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001309 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001310 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001311 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001312 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001313 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001314 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001315 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001316 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001317 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001318 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001319 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001320 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001321 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001322 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001323 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001324 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001325 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001326 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001327 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001328 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001329 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001330 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001331 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001332 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001333 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001334 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001335 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001336 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1337 }
1338 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1339 {
1340 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1341 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001342 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001343 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001344 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001345 }
1346 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1347 {
1348 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1349 }
1350 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1351 {
1352 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1353 }
1354 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1355 {
1356 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1357 }
1358 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1359 {
1360 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001361 }
1362
1363 std::string enumeratorString;
1364 for(auto const& string : strings)
1365 {
1366 enumeratorString += string;
1367
1368 if(string != strings.back())
1369 {
1370 enumeratorString += '|';
1371 }
1372 }
1373
1374 return enumeratorString;
1375}
1376
1377static
Chia-I Wua4594202015-10-27 19:54:37 +08001378bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001379{
Chia-I Wua4594202015-10-27 19:54:37 +08001380 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1381 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1382 VK_ACCESS_INDEX_READ_BIT |
1383 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1384 VK_ACCESS_UNIFORM_READ_BIT |
1385 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1386 VK_ACCESS_SHADER_READ_BIT |
1387 VK_ACCESS_SHADER_WRITE_BIT |
1388 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1389 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1390 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1391 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1392 VK_ACCESS_TRANSFER_READ_BIT |
1393 VK_ACCESS_TRANSFER_WRITE_BIT |
1394 VK_ACCESS_HOST_READ_BIT |
1395 VK_ACCESS_HOST_WRITE_BIT |
1396 VK_ACCESS_MEMORY_READ_BIT |
1397 VK_ACCESS_MEMORY_WRITE_BIT);
1398
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001399 if(enumerator & (~allFlags))
1400 {
1401 return false;
1402 }
1403
1404 return true;
1405}
1406
1407static
Chia-I Wua4594202015-10-27 19:54:37 +08001408std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001409{
1410 if(!ValidateEnumerator(enumerator))
1411 {
1412 return "unrecognized enumerator";
1413 }
1414
1415 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001416 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001417 {
Chia-I Wua4594202015-10-27 19:54:37 +08001418 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001419 }
Chia-I Wua4594202015-10-27 19:54:37 +08001420 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001421 {
Chia-I Wua4594202015-10-27 19:54:37 +08001422 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001423 }
Chia-I Wua4594202015-10-27 19:54:37 +08001424 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001425 {
Chia-I Wua4594202015-10-27 19:54:37 +08001426 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001427 }
Chia-I Wua4594202015-10-27 19:54:37 +08001428 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001429 {
Chia-I Wua4594202015-10-27 19:54:37 +08001430 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001431 }
Chia-I Wua4594202015-10-27 19:54:37 +08001432 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001433 {
Chia-I Wua4594202015-10-27 19:54:37 +08001434 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001435 }
Chia-I Wua4594202015-10-27 19:54:37 +08001436 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001437 {
Chia-I Wua4594202015-10-27 19:54:37 +08001438 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001439 }
Chia-I Wua4594202015-10-27 19:54:37 +08001440 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001441 {
Chia-I Wua4594202015-10-27 19:54:37 +08001442 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001443 }
Chia-I Wua4594202015-10-27 19:54:37 +08001444 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001445 {
Chia-I Wua4594202015-10-27 19:54:37 +08001446 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001447 }
Chia-I Wua4594202015-10-27 19:54:37 +08001448 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001449 {
Chia-I Wua4594202015-10-27 19:54:37 +08001450 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001451 }
Chia-I Wua4594202015-10-27 19:54:37 +08001452 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001453 {
Chia-I Wua4594202015-10-27 19:54:37 +08001454 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001455 }
Chia-I Wua4594202015-10-27 19:54:37 +08001456 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001457 {
Chia-I Wua4594202015-10-27 19:54:37 +08001458 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001459 }
Chia-I Wua4594202015-10-27 19:54:37 +08001460 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001461 {
Chia-I Wua4594202015-10-27 19:54:37 +08001462 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001463 }
Chia-I Wua4594202015-10-27 19:54:37 +08001464 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001465 {
Chia-I Wua4594202015-10-27 19:54:37 +08001466 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001467 }
Chia-I Wua4594202015-10-27 19:54:37 +08001468 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001469 {
Chia-I Wua4594202015-10-27 19:54:37 +08001470 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001471 }
Chia-I Wua4594202015-10-27 19:54:37 +08001472 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001473 {
Chia-I Wua4594202015-10-27 19:54:37 +08001474 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001475 }
Chia-I Wua4594202015-10-27 19:54:37 +08001476 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001477 {
Chia-I Wua4594202015-10-27 19:54:37 +08001478 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001479 }
Chia-I Wua4594202015-10-27 19:54:37 +08001480 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001481 {
Chia-I Wua4594202015-10-27 19:54:37 +08001482 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001483 }
1484
1485 std::string enumeratorString;
1486 for(auto const& string : strings)
1487 {
1488 enumeratorString += string;
1489
1490 if(string != strings.back())
1491 {
1492 enumeratorString += '|';
1493 }
1494 }
1495
1496 return enumeratorString;
1497}
1498
1499static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001500bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001501{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001502 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1503 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001504 if(enumerator & (~allFlags))
1505 {
1506 return false;
1507 }
1508
1509 return true;
1510}
1511
1512static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001513std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001514{
1515 if(!ValidateEnumerator(enumerator))
1516 {
1517 return "unrecognized enumerator";
1518 }
1519
1520 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001521 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001522 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001523 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001524 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001525 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001526 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001527 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001528 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001529
1530 std::string enumeratorString;
1531 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001532 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001533 enumeratorString += string;
1534
1535 if(string != strings.back())
1536 {
1537 enumeratorString += '|';
1538 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001539 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001540
1541 return enumeratorString;
1542}
1543
1544static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001545bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001546{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001547 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001548 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001549 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001550 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001551 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001552
1553 return true;
1554}
1555
1556static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001557std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001558{
1559 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001560 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001561 return "unrecognized enumerator";
1562 }
1563
1564 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001565 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001566 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001567 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001568 }
1569
1570 std::string enumeratorString;
1571 for(auto const& string : strings)
1572 {
1573 enumeratorString += string;
1574
1575 if(string != strings.back())
1576 {
1577 enumeratorString += '|';
1578 }
1579 }
1580
1581 return enumeratorString;
1582}
1583
1584static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001585bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001586{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001587 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1588 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1589 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001590 if(enumerator & (~allFlags))
1591 {
1592 return false;
1593 }
1594
1595 return true;
1596}
1597
1598static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001599std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001600{
1601 if(!ValidateEnumerator(enumerator))
1602 {
1603 return "unrecognized enumerator";
1604 }
1605
1606 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001607 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001608 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001609 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001610 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001611 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001613 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001614 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001615 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001616 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001617 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001618 }
1619
1620 std::string enumeratorString;
1621 for(auto const& string : strings)
1622 {
1623 enumeratorString += string;
1624
1625 if(string != strings.back())
1626 {
1627 enumeratorString += '|';
1628 }
1629 }
1630
1631 return enumeratorString;
1632}
1633
1634static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001635bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001636{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001637 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001638 if(enumerator & (~allFlags))
1639 {
1640 return false;
1641 }
1642
1643 return true;
1644}
1645
1646static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001647std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001648{
1649 if(!ValidateEnumerator(enumerator))
1650 {
1651 return "unrecognized enumerator";
1652 }
1653
1654 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001655 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001656 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001657 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001658 }
1659
1660 std::string enumeratorString;
1661 for(auto const& string : strings)
1662 {
1663 enumeratorString += string;
1664
1665 if(string != strings.back())
1666 {
1667 enumeratorString += '|';
1668 }
1669 }
1670
1671 return enumeratorString;
1672}
1673
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001674static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001675bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001676{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001677 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1678 VK_IMAGE_ASPECT_STENCIL_BIT |
1679 VK_IMAGE_ASPECT_DEPTH_BIT |
1680 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001681 if(enumerator & (~allFlags))
1682 {
1683 return false;
1684 }
1685
1686 return true;
1687}
1688
1689static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001690std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001691{
1692 if(!ValidateEnumerator(enumerator))
1693 {
1694 return "unrecognized enumerator";
1695 }
1696
1697 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001698 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001699 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001700 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1701 }
1702 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1703 {
1704 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1705 }
1706 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1707 {
1708 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1709 }
1710 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1711 {
1712 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1713 }
1714
1715 std::string enumeratorString;
1716 for(auto const& string : strings)
1717 {
1718 enumeratorString += string;
1719
1720 if(string != strings.back())
1721 {
1722 enumeratorString += '|';
1723 }
1724 }
1725
1726 return enumeratorString;
1727}
1728
1729static
1730bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1731{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001732 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001733 if(enumerator & (~allFlags))
1734 {
1735 return false;
1736 }
1737
1738 return true;
1739}
1740
1741static
1742std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1743{
1744 if(!ValidateEnumerator(enumerator))
1745 {
1746 return "unrecognized enumerator";
1747 }
1748
1749 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001750 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001751 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001752 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001753 }
1754
1755 std::string enumeratorString;
1756 for(auto const& string : strings)
1757 {
1758 enumeratorString += string;
1759
1760 if(string != strings.back())
1761 {
1762 enumeratorString += '|';
1763 }
1764 }
1765
1766 return enumeratorString;
1767}
1768
Chia-I Wu9ab61502015-11-06 06:42:02 +08001769VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001771 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001772 VkInstance* pInstance)
1773{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001774 VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001776 assert(chain_info->u.pLayerInfo);
1777 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
1778 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance) fpGetInstanceProcAddr(NULL, "vkCreateInstance");
1779 if (fpCreateInstance == NULL) {
1780 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001781 }
1782
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001783 // Advance the link info for the next element on the chain
1784 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
1785
1786 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
1787 if (result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001788 return result;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001789
1790 layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1791 VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
1792
1793 my_data->report_data = debug_report_create_instance(
1794 pTable,
1795 *pInstance,
1796 pCreateInfo->enabledExtensionCount,
1797 pCreateInfo->ppEnabledExtensionNames);
1798
1799 InitParamChecker(my_data, pAllocator);
1800
1801 return result;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001802}
1803
Chia-I Wu9ab61502015-11-06 06:42:02 +08001804VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001805 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001806 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807{
1808 // Grab the key before the instance is destroyed.
1809 dispatch_key key = get_dispatch_key(instance);
1810 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001811 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001812
1813 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001814 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1815 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001816 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001817 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001818 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001819 }
1820
1821 layer_debug_report_destroy_instance(mid(instance));
1822 layer_data_map.erase(pTable);
1823
1824 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001825}
1826
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001827bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828 VkInstance instance,
1829 uint32_t* pPhysicalDeviceCount,
1830 VkPhysicalDevice* pPhysicalDevices,
1831 VkResult result)
1832{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001833
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001834 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001835 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001836 }
1837
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001838 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001839 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001840 }
1841
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001842 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001843 {
1844 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001845 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 -06001846 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001847 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001848
1849 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001850}
1851
Chia-I Wu9ab61502015-11-06 06:42:02 +08001852VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001853 VkInstance instance,
1854 uint32_t* pPhysicalDeviceCount,
1855 VkPhysicalDevice* pPhysicalDevices)
1856{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001857 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1858
1859 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1860
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001861 return result;
1862}
1863
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001864bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001865 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001866 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001867{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001868
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001869 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001870 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001871 }
1872
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001873 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001874}
1875
Chia-I Wu9ab61502015-11-06 06:42:02 +08001876VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001877 VkPhysicalDevice physicalDevice,
1878 VkPhysicalDeviceFeatures* pFeatures)
1879{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001880 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001881
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001882 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001883}
1884
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001885bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886 VkPhysicalDevice physicalDevice,
1887 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001888 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001889{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001890
1891 if(format < VK_FORMAT_BEGIN_RANGE ||
1892 format > VK_FORMAT_END_RANGE)
1893 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001894 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001895 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001896 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001897 }
1898
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001899 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001900 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001901 }
1902
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001903 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001904}
1905
Chia-I Wu9ab61502015-11-06 06:42:02 +08001906VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001907 VkPhysicalDevice physicalDevice,
1908 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001909 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001910{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001911 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001912
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001913 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001914}
1915
1916bool PostGetPhysicalDeviceImageFormatProperties(
1917 VkPhysicalDevice physicalDevice,
1918 VkFormat format,
1919 VkImageType type,
1920 VkImageTiling tiling,
1921 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001922 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001923 VkImageFormatProperties* pImageFormatProperties,
1924 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001925{
1926
1927 if(format < VK_FORMAT_BEGIN_RANGE ||
1928 format > VK_FORMAT_END_RANGE)
1929 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001930 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001931 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1932 return false;
1933 }
1934
1935 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1936 type > VK_IMAGE_TYPE_END_RANGE)
1937 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001938 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001939 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1940 return false;
1941 }
1942
1943 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1944 tiling > VK_IMAGE_TILING_END_RANGE)
1945 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001946 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001947 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1948 return false;
1949 }
1950
1951
1952 if(pImageFormatProperties != nullptr)
1953 {
1954 }
1955
Chia-I Wu17241042015-10-31 00:31:16 +08001956 if(result < VK_SUCCESS)
1957 {
1958 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001959 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 +08001960 return false;
1961 }
1962
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001963 return true;
1964}
1965
Chia-I Wu9ab61502015-11-06 06:42:02 +08001966VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001967 VkPhysicalDevice physicalDevice,
1968 VkFormat format,
1969 VkImageType type,
1970 VkImageTiling tiling,
1971 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001972 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001973 VkImageFormatProperties* pImageFormatProperties)
1974{
Chia-I Wu17241042015-10-31 00:31:16 +08001975 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 -06001976
Chia-I Wu17241042015-10-31 00:31:16 +08001977 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1978
1979 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001980}
1981
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001982bool PostGetPhysicalDeviceProperties(
1983 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001984 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001985{
1986
1987 if(pProperties != nullptr)
1988 {
1989 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1990 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1991 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001992 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001993 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1994 return false;
1995 }
1996 }
1997
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001998 return true;
1999}
2000
Chia-I Wu9ab61502015-11-06 06:42:02 +08002001VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002002 VkPhysicalDevice physicalDevice,
2003 VkPhysicalDeviceProperties* pProperties)
2004{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002005 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002006
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002007 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002008}
2009
Cody Northropd0802882015-08-03 17:04:53 -06002010bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002011 VkPhysicalDevice physicalDevice,
2012 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002013 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002014{
2015
Cody Northropd0802882015-08-03 17:04:53 -06002016 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002017 {
2018 }
2019
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002020 if(pQueueProperties != nullptr)
2021 {
2022 }
2023
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002024 return true;
2025}
2026
Chia-I Wu9ab61502015-11-06 06:42:02 +08002027VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002028 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002029 uint32_t* pCount,
2030 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002031{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002032 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002033
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002034 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002035}
2036
2037bool PostGetPhysicalDeviceMemoryProperties(
2038 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002039 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002040{
2041
2042 if(pMemoryProperties != nullptr)
2043 {
2044 }
2045
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002046 return true;
2047}
2048
Chia-I Wu9ab61502015-11-06 06:42:02 +08002049VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002050 VkPhysicalDevice physicalDevice,
2051 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2052{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002053 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002054
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002055 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002056}
2057
Michael Lentine774704f2016-01-27 13:36:46 -06002058void validateDeviceCreateInfo(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const std::vector<VkQueueFamilyProperties> properties) {
Michael Lentine157a2ec2016-01-27 11:25:05 -06002059 std::unordered_set<uint32_t> set;
2060 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2061 if (set.count(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex)) {
2062 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentinefa71bd52016-01-27 12:50:30 -06002063 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex, is not unique within this structure.", i);
Michael Lentine157a2ec2016-01-27 11:25:05 -06002064 } else {
2065 set.insert(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex);
2066 }
Michael Lentine26244832016-01-27 11:40:27 -06002067 if (pCreateInfo->pQueueCreateInfos[i].queueCount == 0) {
2068 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentinefa71bd52016-01-27 12:50:30 -06002069 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount, cannot be zero.", i);
2070 }
2071 for (uint32_t j = 0; j < pCreateInfo->pQueueCreateInfos[i].queueCount; ++j) {
2072 if (pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] < 0.f || pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] > 1.f) {
2073 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2074 "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]);
2075 }
Michael Lentine26244832016-01-27 11:40:27 -06002076 }
Michael Lentine774704f2016-01-27 13:36:46 -06002077 if (pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex >= properties.size()) {
2078 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2079 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex cannot be more than the number of queue families.", i);
2080 } else if (pCreateInfo->pQueueCreateInfos[i].queueCount > properties[pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex].queueCount) {
2081 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2082 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount cannot be more than the number of queues for the given family index.", i);
2083 }
Michael Lentine157a2ec2016-01-27 11:25:05 -06002084 }
2085}
2086
Michael Lentinebdf744f2016-01-27 15:43:43 -06002087void storeCreateDeviceData(VkDevice device, const VkDeviceCreateInfo* pCreateInfo) {
2088 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
2089 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2090 my_device_data->queueFamilyIndexMap.insert(
2091 std::make_pair(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex, pCreateInfo->pQueueCreateInfos[i].queueCount));
2092 }
2093}
2094
Chia-I Wu9ab61502015-11-06 06:42:02 +08002095VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002096 VkPhysicalDevice physicalDevice,
2097 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002098 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002099 VkDevice* pDevice)
2100{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002101 /*
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002102 * NOTE: We do not validate physicalDevice or any dispatchable
2103 * object as the first parameter. We couldn't get here if it was wrong!
2104 */
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002105 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
2106
2107 assert(chain_info->u.pLayerInfo);
2108 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
2109 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
2110 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice) fpGetInstanceProcAddr(NULL, "vkCreateDevice");
2111 if (fpCreateDevice == NULL) {
2112 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002113 }
2114
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002115 // Advance the link info for the next element on the chain
2116 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
2117
2118 VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
2119 if (result != VK_SUCCESS) {
2120 return result;
2121 }
2122
2123 layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2124 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2125 my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
2126 initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
2127
Michael Lentine774704f2016-01-27 13:36:46 -06002128 uint32_t count;
2129 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, nullptr);
2130 std::vector<VkQueueFamilyProperties> properties(count);
2131 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, &properties[0]);
2132
2133 validateDeviceCreateInfo(physicalDevice, pCreateInfo, properties);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002134 storeCreateDeviceData(*pDevice, pCreateInfo);
Michael Lentine157a2ec2016-01-27 11:25:05 -06002135
Jeremy Hayes99a96322015-06-26 12:48:09 -06002136 return result;
2137}
2138
Chia-I Wu9ab61502015-11-06 06:42:02 +08002139VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002140 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002141 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002142{
2143 layer_debug_report_destroy_device(device);
2144
2145 dispatch_key key = get_dispatch_key(device);
2146#if DISPATCH_MAP_DEBUG
2147 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2148#endif
2149
Chia-I Wuf7458c52015-10-26 21:10:41 +08002150 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002151 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002152}
2153
Michael Lentinebdf744f2016-01-27 15:43:43 -06002154bool PreGetDeviceQueue(
2155 VkDevice device,
2156 uint32_t queueFamilyIndex,
2157 uint32_t queueIndex)
2158{
2159 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
2160 auto queue_data = my_device_data->queueFamilyIndexMap.find(queueFamilyIndex);
2161 if (queue_data == my_device_data->queueFamilyIndexMap.end()) {
2162 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2163 "VkGetDeviceQueue parameter, uint32_t queueFamilyIndex %d, must have been given when the device was created.", queueFamilyIndex);
2164 return false;
2165 }
2166 if (queue_data->second <= queueIndex) {
2167 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2168 "VkGetDeviceQueue parameter, uint32_t queueIndex %d, must be less than the number of queues given when the device was created.", queueIndex);
2169 return false;
2170 }
2171 return true;
2172}
2173
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002174bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002175 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002176 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002177 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002178 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180
2181
2182
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002183 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185 }
2186
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002187 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002188}
2189
Chia-I Wu9ab61502015-11-06 06:42:02 +08002190VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002191 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002192 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193 uint32_t queueIndex,
2194 VkQueue* pQueue)
2195{
Michael Lentinebdf744f2016-01-27 15:43:43 -06002196 PreGetDeviceQueue(device, queueFamilyIndex, queueIndex);
2197
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002198 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002199
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002200 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002201}
2202
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002203bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002205 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002207 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002208 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002209 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002210 return false;
2211 }
2212
2213 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002214 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002215 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002216
2217 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218}
2219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002220bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002222 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223 VkFence fence,
2224 VkResult result)
2225{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002226
2227
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002229 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002230 {
2231 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002232 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 -06002233 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002234 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002235
2236 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002237}
2238
Chia-I Wu9ab61502015-11-06 06:42:02 +08002239VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002241 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002242 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002243 VkFence fence)
2244{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002245 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002246 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002247 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002248
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002249 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002250
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002251 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002252
2253 return result;
2254}
2255
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002256bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002257 VkQueue queue,
2258 VkResult result)
2259{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002261 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002262 {
2263 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002264 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 -06002265 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002266 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002267
2268 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002269}
2270
Chia-I Wu9ab61502015-11-06 06:42:02 +08002271VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002272 VkQueue queue)
2273{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2275
2276 PostQueueWaitIdle(queue, result);
2277
2278 return result;
2279}
2280
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002281bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002282 VkDevice device,
2283 VkResult result)
2284{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002285
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002286 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002287 {
2288 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002289 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 -06002290 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002291 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002292
2293 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002294}
2295
Chia-I Wu9ab61502015-11-06 06:42:02 +08002296VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002297 VkDevice device)
2298{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2300
2301 PostDeviceWaitIdle(device, result);
2302
2303 return result;
2304}
2305
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002306bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002307 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002308 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002310 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002311 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002312 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002314 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002315 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002316 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002317 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002319
2320 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321}
2322
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002323bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002324 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002325 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326 VkResult result)
2327{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002329 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002331 }
2332
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002333 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002334 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002335 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002336 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 -06002337 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002338 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002339
2340 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002341}
2342
Chia-I Wu9ab61502015-11-06 06:42:02 +08002343VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002344 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002345 const VkMemoryAllocateInfo* pAllocateInfo,
2346 const VkAllocationCallbacks* pAllocator,
2347 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002348{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002349 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002350
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002351 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002352
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002353 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354
2355 return result;
2356}
2357
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002358bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002359 VkDevice device,
2360 VkDeviceMemory mem,
2361 VkDeviceSize offset,
2362 VkDeviceSize size,
2363 VkMemoryMapFlags flags,
2364 void** ppData,
2365 VkResult result)
2366{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002367
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368
2369
2370
2371
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002372 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002373 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374 }
2375
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002376 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002377 {
2378 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002379 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 -06002380 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002382
2383 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002384}
2385
Chia-I Wu9ab61502015-11-06 06:42:02 +08002386VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002387 VkDevice device,
2388 VkDeviceMemory mem,
2389 VkDeviceSize offset,
2390 VkDeviceSize size,
2391 VkMemoryMapFlags flags,
2392 void** ppData)
2393{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002394 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2395
2396 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2397
2398 return result;
2399}
2400
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002401bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002402 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002403 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002404{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002405 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002406 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002407 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002408 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002409 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002410 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002411 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002412 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002413 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002414
2415 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416}
2417
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002418bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002420 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421 VkResult result)
2422{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423
2424
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002425 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002426 {
2427 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002428 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 -06002429 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002430 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002431
2432 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002433}
2434
Chia-I Wu9ab61502015-11-06 06:42:02 +08002435VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002436 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002437 uint32_t memoryRangeCount,
2438 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002439{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002440 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002441
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002442 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002443
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002444 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002445
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002446 return result;
2447}
2448
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002449bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002451 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002452{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002453 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002454 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002455 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002456 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002457 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002458 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002459 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002460 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002461 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002462
2463 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464}
2465
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002466bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002467 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002468 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002469 VkResult result)
2470{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002471
2472
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002473 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002474 {
2475 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002476 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 -06002477 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002478 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002479
2480 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002481}
2482
Chia-I Wu9ab61502015-11-06 06:42:02 +08002483VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002484 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002485 uint32_t memoryRangeCount,
2486 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002487{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002488 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002489
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002490 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002491
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002492 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493
Tony Barbourb1250542015-04-16 19:23:13 -06002494 return result;
2495}
2496
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002497bool PostGetDeviceMemoryCommitment(
2498 VkDevice device,
2499 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002500 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002501{
2502
2503
2504 if(pCommittedMemoryInBytes != nullptr)
2505 {
2506 }
2507
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002508 return true;
2509}
2510
Chia-I Wu9ab61502015-11-06 06:42:02 +08002511VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002512 VkDevice device,
2513 VkDeviceMemory memory,
2514 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002515{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002516 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002517
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002518 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002519}
2520
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002521bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002522 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002523 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002524 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002525 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002526 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002527{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002528
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002529
Jeremy Hayes99a96322015-06-26 12:48:09 -06002530
2531
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002532 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002533 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002534 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002535 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 -06002536 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002537 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002538
2539 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002540}
2541
Chia-I Wu9ab61502015-11-06 06:42:02 +08002542VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002543 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002544 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002545 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002546 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002547{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002548 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002549
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002550 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002551
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002552 return result;
2553}
2554
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002555bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002556 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002557 VkImage image,
2558 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002559 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002560 VkResult result)
2561{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002562
2563
2564
2565
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002566 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002567 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002568 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002569 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 -06002570 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002571 }
2572
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002573 return true;
2574}
2575
Chia-I Wu9ab61502015-11-06 06:42:02 +08002576VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002577 VkDevice device,
2578 VkImage image,
2579 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002580 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002581{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002582 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002583
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002584 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002585
2586 return result;
2587}
2588
2589bool PostGetBufferMemoryRequirements(
2590 VkDevice device,
2591 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002592 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002593{
2594
2595
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002596 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002597 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002598 }
2599
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002600 return true;
2601}
2602
Chia-I Wu9ab61502015-11-06 06:42:02 +08002603VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002604 VkDevice device,
2605 VkBuffer buffer,
2606 VkMemoryRequirements* pMemoryRequirements)
2607{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002608 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002610 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002611}
2612
2613bool PostGetImageMemoryRequirements(
2614 VkDevice device,
2615 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002616 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002617{
2618
2619
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002620 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002622 }
2623
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002624 return true;
2625}
2626
Chia-I Wu9ab61502015-11-06 06:42:02 +08002627VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002628 VkDevice device,
2629 VkImage image,
2630 VkMemoryRequirements* pMemoryRequirements)
2631{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002632 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002633
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002634 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635}
2636
2637bool PostGetImageSparseMemoryRequirements(
2638 VkDevice device,
2639 VkImage image,
2640 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002641 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002642{
2643
2644
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002645 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002646 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647 }
2648
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002649 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002650 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002651 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002652 (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 -06002653 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002654 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002655 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002656 return false;
2657 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 }
2659
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002660 return true;
2661}
2662
Chia-I Wu9ab61502015-11-06 06:42:02 +08002663VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664 VkDevice device,
2665 VkImage image,
2666 uint32_t* pNumRequirements,
2667 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2668{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002669 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002670
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002671 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672}
2673
2674bool PostGetPhysicalDeviceSparseImageFormatProperties(
2675 VkPhysicalDevice physicalDevice,
2676 VkFormat format,
2677 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002678 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002679 VkImageUsageFlags usage,
2680 VkImageTiling tiling,
2681 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002682 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002683{
2684
2685 if(format < VK_FORMAT_BEGIN_RANGE ||
2686 format > VK_FORMAT_END_RANGE)
2687 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002688 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002689 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002690 return false;
2691 }
2692
2693 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2694 type > VK_IMAGE_TYPE_END_RANGE)
2695 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002696 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002697 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002698 return false;
2699 }
2700
2701
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002702
2703 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2704 tiling > VK_IMAGE_TILING_END_RANGE)
2705 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002706 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002707 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002708 return false;
2709 }
2710
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002711 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002712 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002713 }
2714
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002715 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002716 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002717 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002718 (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 -06002719 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002720 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002721 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002722 return false;
2723 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002724 }
2725
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002726 return true;
2727}
2728
Chia-I Wu9ab61502015-11-06 06:42:02 +08002729VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002730 VkPhysicalDevice physicalDevice,
2731 VkFormat format,
2732 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002733 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002734 VkImageUsageFlags usage,
2735 VkImageTiling tiling,
2736 uint32_t* pNumProperties,
2737 VkSparseImageFormatProperties* pProperties)
2738{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002739 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002740
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002741 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002742}
2743
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002744bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002745 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002746 uint32_t bindInfoCount,
2747 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002748{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002749 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002750 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002751 }
2752
2753 return true;
2754}
2755
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002756bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002757 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002758 uint32_t bindInfoCount,
2759 const VkBindSparseInfo* pBindInfo,
2760 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002761 VkResult result)
2762{
2763
2764
2765
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002766 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002767 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002768 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002769 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 -06002770 return false;
2771 }
2772
2773 return true;
2774}
2775
Chia-I Wu9ab61502015-11-06 06:42:02 +08002776VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002777 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002778 uint32_t bindInfoCount,
2779 const VkBindSparseInfo* pBindInfo,
2780 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002781{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002782 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002783
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002784 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002785
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002786 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002787
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002788 return result;
2789}
2790
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002791bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792 VkDevice device,
2793 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002794{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002795 if(pCreateInfo != nullptr)
2796 {
2797 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002798 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002799 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002800 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002801 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002802 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002803 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002804
2805 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002806}
2807
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002808bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002809 VkDevice device,
2810 VkFence* pFence,
2811 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002812{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002813
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002814 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002815 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002816 }
2817
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002818 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002819 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002821 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 -06002822 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002823 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002824
2825 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002826}
2827
Chia-I Wu9ab61502015-11-06 06:42:02 +08002828VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002829 VkDevice device,
2830 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002831 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002832 VkFence* pFence)
2833{
2834 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002835
Chia-I Wuf7458c52015-10-26 21:10:41 +08002836 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837
2838 PostCreateFence(device, pFence, result);
2839
2840 return result;
2841}
2842
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002843bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002844 VkDevice device,
2845 const VkFence* pFences)
2846{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002847 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002848 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002849 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002850
2851 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002852}
2853
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002854bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002855 VkDevice device,
2856 uint32_t fenceCount,
2857 VkResult result)
2858{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002859
2860
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002861 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002862 {
2863 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002864 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 -06002865 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002866 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002867
2868 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002869}
2870
Chia-I Wu9ab61502015-11-06 06:42:02 +08002871VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002872 VkDevice device,
2873 uint32_t fenceCount,
2874 const VkFence* pFences)
2875{
2876 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002877
Jeremy Hayes99a96322015-06-26 12:48:09 -06002878 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2879
2880 PostResetFences(device, fenceCount, result);
2881
2882 return result;
2883}
2884
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002885bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002886 VkDevice device,
2887 VkFence fence,
2888 VkResult result)
2889{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890
Jeremy Hayes99a96322015-06-26 12:48:09 -06002891
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002892 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893 {
2894 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002895 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 -06002896 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002897 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002898
2899 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002900}
2901
Chia-I Wu9ab61502015-11-06 06:42:02 +08002902VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002903 VkDevice device,
2904 VkFence fence)
2905{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002906 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2907
2908 PostGetFenceStatus(device, fence, result);
2909
2910 return result;
2911}
2912
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002913bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002914 VkDevice device,
2915 const VkFence* pFences)
2916{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002917 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002918 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002919 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002920
2921 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002922}
2923
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002924bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925 VkDevice device,
2926 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002927 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002928 uint64_t timeout,
2929 VkResult result)
2930{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002931
2932
2933
2934
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002935 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002936 {
2937 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002938 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 -06002939 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002940 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002941
2942 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002943}
2944
Chia-I Wu9ab61502015-11-06 06:42:02 +08002945VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002946 VkDevice device,
2947 uint32_t fenceCount,
2948 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002949 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002950 uint64_t timeout)
2951{
2952 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002953
Jeremy Hayes99a96322015-06-26 12:48:09 -06002954 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2955
2956 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2957
2958 return result;
2959}
2960
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002961bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002962 VkDevice device,
2963 const VkSemaphoreCreateInfo* pCreateInfo)
2964{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002965 if(pCreateInfo != nullptr)
2966 {
2967 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002969 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002970 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002971 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002972 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002974
2975 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002976}
2977
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002978bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979 VkDevice device,
2980 VkSemaphore* pSemaphore,
2981 VkResult result)
2982{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002983
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002984 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002985 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002986 }
2987
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002988 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002989 {
2990 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002991 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 -06002992 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002994
2995 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996}
2997
Chia-I Wu9ab61502015-11-06 06:42:02 +08002998VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002999 VkDevice device,
3000 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003001 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003002 VkSemaphore* pSemaphore)
3003{
3004 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003005
Chia-I Wuf7458c52015-10-26 21:10:41 +08003006 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003007
3008 PostCreateSemaphore(device, pSemaphore, result);
3009
3010 return result;
3011}
3012
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003013bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003014 VkDevice device,
3015 const VkEventCreateInfo* pCreateInfo)
3016{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003017 if(pCreateInfo != nullptr)
3018 {
3019 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003020 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003021 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003022 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003023 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003026
3027 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028}
3029
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003030bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003031 VkDevice device,
3032 VkEvent* pEvent,
3033 VkResult result)
3034{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003035
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003036 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003037 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003038 }
3039
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003040 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003041 {
3042 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003043 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 -06003044 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003045 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003046
3047 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003048}
3049
Chia-I Wu9ab61502015-11-06 06:42:02 +08003050VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003051 VkDevice device,
3052 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003053 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003054 VkEvent* pEvent)
3055{
3056 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003057
Chia-I Wuf7458c52015-10-26 21:10:41 +08003058 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003059
3060 PostCreateEvent(device, pEvent, result);
3061
3062 return result;
3063}
3064
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003065bool PostGetEventStatus(
3066 VkDevice device,
3067 VkEvent event,
3068 VkResult result)
3069{
3070
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003072 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003073 {
3074 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003075 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 -06003076 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003078
3079 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003080}
3081
Chia-I Wu9ab61502015-11-06 06:42:02 +08003082VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 VkDevice device,
3084 VkEvent event)
3085{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003086 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3087
3088 PostGetEventStatus(device, event, result);
3089
3090 return result;
3091}
3092
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003093bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094 VkDevice device,
3095 VkEvent event,
3096 VkResult result)
3097{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003098
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003100 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003101 {
3102 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003103 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 -06003104 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003105 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003106
3107 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003108}
3109
Chia-I Wu9ab61502015-11-06 06:42:02 +08003110VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 VkDevice device,
3112 VkEvent event)
3113{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3115
3116 PostSetEvent(device, event, result);
3117
3118 return result;
3119}
3120
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003121bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122 VkDevice device,
3123 VkEvent event,
3124 VkResult result)
3125{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003128 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129 {
3130 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003131 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 -06003132 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003134
3135 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136}
3137
Chia-I Wu9ab61502015-11-06 06:42:02 +08003138VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139 VkDevice device,
3140 VkEvent event)
3141{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3143
3144 PostResetEvent(device, event, result);
3145
3146 return result;
3147}
3148
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003149bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003150 VkDevice device,
3151 const VkQueryPoolCreateInfo* pCreateInfo)
3152{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003153 if(pCreateInfo != nullptr)
3154 {
3155 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003156 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003157 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003158 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003159 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003160 }
3161 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3162 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3163 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003164 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003165 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003166 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003167 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003168 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003169
3170 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003171}
3172
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003173bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003174 VkDevice device,
3175 VkQueryPool* pQueryPool,
3176 VkResult result)
3177{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003179 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003180 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003181 }
3182
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003183 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184 {
3185 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003186 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 -06003187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003188 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003189
3190 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191}
3192
Chia-I Wu9ab61502015-11-06 06:42:02 +08003193VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 VkDevice device,
3195 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003196 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197 VkQueryPool* pQueryPool)
3198{
3199 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003200
Chia-I Wuf7458c52015-10-26 21:10:41 +08003201 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202
3203 PostCreateQueryPool(device, pQueryPool, result);
3204
3205 return result;
3206}
3207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003208bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003209 VkDevice device,
3210 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003211 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003212 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003213 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003214 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003215 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003216 VkQueryResultFlags flags,
3217 VkResult result)
3218{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219
Jeremy Hayes99a96322015-06-26 12:48:09 -06003220
3221
3222
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003223 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 }
3226
Jeremy Hayes99a96322015-06-26 12:48:09 -06003227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003228 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003229 {
3230 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003231 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 -06003232 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003234
3235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003236}
3237
Chia-I Wu9ab61502015-11-06 06:42:02 +08003238VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 VkDevice device,
3240 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003241 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003242 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003243 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003244 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003245 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246 VkQueryResultFlags flags)
3247{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003248 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 -06003249
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003250 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251
3252 return result;
3253}
3254
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003255bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256 VkDevice device,
3257 const VkBufferCreateInfo* pCreateInfo)
3258{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003259 if(pCreateInfo != nullptr)
3260 {
3261 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003262 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003263 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003264 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003265 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003266 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003267 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3268 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003269 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003270 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003271 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003272 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003273 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003274 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003275 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003276 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003277 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003278
3279 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280}
3281
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003282bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003283 VkDevice device,
3284 VkBuffer* pBuffer,
3285 VkResult result)
3286{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003287
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003288 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003290 }
3291
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003292 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003293 {
3294 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003295 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 -06003296 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003297 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003298
3299 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003300}
3301
Chia-I Wu9ab61502015-11-06 06:42:02 +08003302VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003303 VkDevice device,
3304 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003305 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003306 VkBuffer* pBuffer)
3307{
3308 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003309
Chia-I Wuf7458c52015-10-26 21:10:41 +08003310 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003311
3312 PostCreateBuffer(device, pBuffer, result);
3313
3314 return result;
3315}
3316
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003317bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003318 VkDevice device,
3319 const VkBufferViewCreateInfo* pCreateInfo)
3320{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003321 if(pCreateInfo != nullptr)
3322 {
3323 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003324 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003325 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003326 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003327 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003328 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3330 pCreateInfo->format > VK_FORMAT_END_RANGE)
3331 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003332 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003333 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003334 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003335 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003336 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003337
3338 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003339}
3340
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003341bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003342 VkDevice device,
3343 VkBufferView* pView,
3344 VkResult result)
3345{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003346
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003347 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003348 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003349 }
3350
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003351 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003352 {
3353 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003354 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 -06003355 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003356 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003357
3358 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359}
3360
Chia-I Wu9ab61502015-11-06 06:42:02 +08003361VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003362 VkDevice device,
3363 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003364 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003365 VkBufferView* pView)
3366{
3367 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003368
Chia-I Wuf7458c52015-10-26 21:10:41 +08003369 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003370
3371 PostCreateBufferView(device, pView, result);
3372
3373 return result;
3374}
3375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003376bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003377 VkDevice device,
3378 const VkImageCreateInfo* pCreateInfo)
3379{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003380 if(pCreateInfo != nullptr)
3381 {
3382 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003384 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003385 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003386 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 }
3388 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3389 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3390 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003391 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003392 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003393 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003394 }
3395 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3396 pCreateInfo->format > VK_FORMAT_END_RANGE)
3397 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003398 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003399 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003400 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003401 }
3402 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3403 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3404 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003405 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003406 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003407 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003408 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003409 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3410 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003411 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003412 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003413 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003414 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003415 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003416 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003417 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003418 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003419 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003420
3421 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422}
3423
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003424bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003425 VkDevice device,
3426 VkImage* pImage,
3427 VkResult result)
3428{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003429
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003430 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003431 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003432 }
3433
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003434 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003435 {
3436 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003437 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 -06003438 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003439 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003440
3441 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003442}
3443
Chia-I Wu9ab61502015-11-06 06:42:02 +08003444VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 VkDevice device,
3446 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003447 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003448 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003449{
3450 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003451
Chia-I Wuf7458c52015-10-26 21:10:41 +08003452 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003453
3454 PostCreateImage(device, pImage, result);
3455
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003456 return result;
3457}
3458
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003459bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003460 VkDevice device,
3461 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003462{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003463 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003464 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003465 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003466 (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 -06003467 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003468 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003469 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003470 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003471 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003472 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003473
3474 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003475}
3476
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003477bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478 VkDevice device,
3479 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003480 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003481{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003482
Jeremy Hayes99a96322015-06-26 12:48:09 -06003483
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003484 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003485 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003486 }
3487
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003488 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003489}
3490
Chia-I Wu9ab61502015-11-06 06:42:02 +08003491VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003492 VkDevice device,
3493 VkImage image,
3494 const VkImageSubresource* pSubresource,
3495 VkSubresourceLayout* pLayout)
3496{
3497 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003498
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003499 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003500
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003501 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003502}
3503
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003504bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003505 VkDevice device,
3506 const VkImageViewCreateInfo* pCreateInfo)
3507{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003508 if(pCreateInfo != nullptr)
3509 {
3510 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003511 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003512 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003513 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003514 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515 }
3516 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3517 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3518 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003519 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003520 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003521 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003522 }
3523 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3524 pCreateInfo->format > VK_FORMAT_END_RANGE)
3525 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003526 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003527 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003528 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003529 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003530 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3531 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003532 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003533 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003534 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003535 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003536 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003537 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3538 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003539 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003540 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003541 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003542 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003543 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003544 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3545 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003546 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003547 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003548 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003549 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003550 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003551 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3552 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003553 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003554 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003555 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003556 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003557 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003558 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003559
3560 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003561}
3562
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003563bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003564 VkDevice device,
3565 VkImageView* pView,
3566 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003567{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003568
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003569 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003571 }
3572
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003573 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003574 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003575 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003576 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 -06003577 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003578 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003579
3580 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003581}
3582
Chia-I Wu9ab61502015-11-06 06:42:02 +08003583VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003584 VkDevice device,
3585 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003586 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003587 VkImageView* pView)
3588{
3589 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003590
Chia-I Wuf7458c52015-10-26 21:10:41 +08003591 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003592
3593 PostCreateImageView(device, pView, result);
3594
3595 return result;
3596}
3597
Michael Lentine03d8e572015-09-15 14:59:14 -05003598bool PreCreateShaderModule(
3599 VkDevice device,
3600 const VkShaderModuleCreateInfo* pCreateInfo)
3601{
3602 if(pCreateInfo) {
3603 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003604 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003605 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3606 return false;
3607 }
3608 if(!pCreateInfo->pCode) {
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 paramter, void* pCreateInfo->pCode, is null");
3611 return false;
3612 }
3613 } else {
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 parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3616 return false;
3617 }
3618
3619 return true;
3620}
3621
3622bool PostCreateShaderModule(
3623 VkDevice device,
3624 VkShaderModule* pShaderModule,
3625 VkResult result)
3626{
3627 if(result < VK_SUCCESS) {
3628 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003629 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 -05003630 return false;
3631 }
3632
3633 return true;
3634}
3635
Chia-I Wu9ab61502015-11-06 06:42:02 +08003636VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003637 VkDevice device,
3638 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003639 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003640 VkShaderModule* pShaderModule)
3641{
3642 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003643 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003644 PostCreateShaderModule(device, pShaderModule, result);
3645 return result;
3646}
3647
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003648bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003649 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003650 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003651{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003652 if(pCreateInfo != nullptr)
3653 {
3654 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003655 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003656 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003657 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003658 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003659 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003660 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003661 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003662 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003663 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003664
3665 return true;
3666}
3667
3668bool PostCreatePipelineCache(
3669 VkDevice device,
3670 VkPipelineCache* pPipelineCache,
3671 VkResult result)
3672{
3673
3674 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003675 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003676 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003677
3678 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003679 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003680 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003681 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 -06003682 return false;
3683 }
3684
3685 return true;
3686}
3687
Chia-I Wu9ab61502015-11-06 06:42:02 +08003688VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003689 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003690 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003691 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003692 VkPipelineCache* pPipelineCache)
3693{
3694 PreCreatePipelineCache(device, pCreateInfo);
3695
Chia-I Wuf7458c52015-10-26 21:10:41 +08003696 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003697
3698 PostCreatePipelineCache(device, pPipelineCache, result);
3699
3700 return result;
3701}
3702
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003703bool PostGetPipelineCacheData(
3704 VkDevice device,
3705 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003706 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003707 void* pData,
3708 VkResult result)
3709{
3710
3711
Chia-I Wub16facd2015-10-26 19:17:06 +08003712 if(pDataSize != nullptr)
3713 {
3714 }
3715
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003716 if(pData != nullptr)
3717 {
3718 }
3719
3720 if(result < VK_SUCCESS)
3721 {
3722 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003723 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 -06003724 return false;
3725 }
3726
3727 return true;
3728}
3729
Chia-I Wu9ab61502015-11-06 06:42:02 +08003730VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003731 VkDevice device,
3732 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003733 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003734 void* pData)
3735{
Chia-I Wub16facd2015-10-26 19:17:06 +08003736 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003737
Chia-I Wub16facd2015-10-26 19:17:06 +08003738 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739
3740 return result;
3741}
3742
3743bool PreMergePipelineCaches(
3744 VkDevice device,
3745 const VkPipelineCache* pSrcCaches)
3746{
3747 if(pSrcCaches != nullptr)
3748 {
3749 }
3750
3751 return true;
3752}
3753
3754bool PostMergePipelineCaches(
3755 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003756 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003757 uint32_t srcCacheCount,
3758 VkResult result)
3759{
3760
3761
3762
3763 if(result < VK_SUCCESS)
3764 {
3765 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003766 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 -06003767 return false;
3768 }
3769
3770 return true;
3771}
3772
Chia-I Wu9ab61502015-11-06 06:42:02 +08003773VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003774 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003775 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003776 uint32_t srcCacheCount,
3777 const VkPipelineCache* pSrcCaches)
3778{
3779 PreMergePipelineCaches(device, pSrcCaches);
3780
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003781 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003782
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003783 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003784
3785 return result;
3786}
3787
3788bool PreCreateGraphicsPipelines(
3789 VkDevice device,
3790 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3791{
3792 if(pCreateInfos != nullptr)
3793 {
3794 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3795 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003796 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003797 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3798 return false;
3799 }
3800 if(pCreateInfos->pStages != nullptr)
3801 {
3802 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3803 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003804 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003805 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3806 return false;
3807 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003808 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3809 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003810 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003811 {
3812 }
3813 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3814 {
3815 }
3816 }
3817 }
3818 if(pCreateInfos->pVertexInputState != nullptr)
3819 {
3820 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3821 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003822 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003823 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3824 return false;
3825 }
3826 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3827 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003828 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3829 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003830 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003831 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003832 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003833 return false;
3834 }
3835 }
3836 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3837 {
3838 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3839 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3840 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003841 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003842 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3843 return false;
3844 }
3845 }
3846 }
3847 if(pCreateInfos->pInputAssemblyState != nullptr)
3848 {
3849 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3850 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003851 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003852 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3853 return false;
3854 }
3855 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3856 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3857 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003858 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003859 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3860 return false;
3861 }
3862 }
3863 if(pCreateInfos->pTessellationState != nullptr)
3864 {
3865 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3866 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003867 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003868 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3869 return false;
3870 }
3871 }
3872 if(pCreateInfos->pViewportState != nullptr)
3873 {
3874 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3875 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003876 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3878 return false;
3879 }
3880 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003881 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003882 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003883 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003884 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003885 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003886 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003887 return false;
3888 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003889 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3890 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003891 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003892 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003893 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003894 return false;
3895 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003896 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003897 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003898 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003899 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003900 return false;
3901 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003902 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3903 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003904 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003905 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003906 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003907 return false;
3908 }
3909 }
3910 if(pCreateInfos->pMultisampleState != nullptr)
3911 {
3912 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3913 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003914 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003915 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3916 return false;
3917 }
3918 }
3919 if(pCreateInfos->pDepthStencilState != nullptr)
3920 {
3921 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3922 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003923 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003924 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3925 return false;
3926 }
3927 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3928 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3929 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003930 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003931 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3932 return false;
3933 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003934 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3935 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003936 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003937 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003938 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003939 return false;
3940 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003941 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3942 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003943 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003944 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003945 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003946 return false;
3947 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003948 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3949 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003950 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003951 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003952 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003953 return false;
3954 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003955 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3956 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003957 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003958 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003959 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003960 return false;
3961 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003962 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3963 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003964 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003965 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003966 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003967 return false;
3968 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003969 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3970 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003971 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003972 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003973 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003974 return false;
3975 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003976 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3977 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003978 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003979 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003980 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003981 return false;
3982 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003983 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3984 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003985 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003986 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003987 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003988 return false;
3989 }
3990 }
3991 if(pCreateInfos->pColorBlendState != nullptr)
3992 {
3993 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3994 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003995 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003996 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3997 return false;
3998 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003999 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4000 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004001 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4002 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004003 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004004 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4005 return false;
4006 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05004007 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004008 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004009 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4010 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004011 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004012 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004013 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004014 return false;
4015 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004016 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4017 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004018 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004019 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004020 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004021 return false;
4022 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004023 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
4024 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004025 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004026 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004027 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004028 return false;
4029 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004030 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4031 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004032 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004033 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004034 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004035 return false;
4036 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08004037 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4038 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004039 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004040 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004041 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004042 return false;
4043 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004044 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
4045 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004046 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004047 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004048 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004049 return false;
4050 }
4051 }
4052 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004053 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4054 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004055 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004056 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4057 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004058 }
4059
4060 return true;
4061}
4062
4063bool PostCreateGraphicsPipelines(
4064 VkDevice device,
4065 VkPipelineCache pipelineCache,
4066 uint32_t count,
4067 VkPipeline* pPipelines,
4068 VkResult result)
4069{
4070
4071
4072
4073 if(pPipelines != nullptr)
4074 {
4075 }
4076
4077 if(result < VK_SUCCESS)
4078 {
4079 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004080 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 -06004081 return false;
4082 }
4083
4084 return true;
4085}
4086
Chia-I Wu9ab61502015-11-06 06:42:02 +08004087VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 VkDevice device,
4089 VkPipelineCache pipelineCache,
4090 uint32_t count,
4091 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004092 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093 VkPipeline* pPipelines)
4094{
4095 PreCreateGraphicsPipelines(device, pCreateInfos);
4096
Chia-I Wuf7458c52015-10-26 21:10:41 +08004097 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004098
4099 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4100
4101 return result;
4102}
4103
4104bool PreCreateComputePipelines(
4105 VkDevice device,
4106 const VkComputePipelineCreateInfo* pCreateInfos)
4107{
4108 if(pCreateInfos != nullptr)
4109 {
4110 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4111 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004112 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004113 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4114 return false;
4115 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004116 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004117 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004118 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004119 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4120 return false;
4121 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004122 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004123 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004124 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004125 {
4126 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004127 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004128 {
4129 }
4130 }
4131 }
4132
4133 return true;
4134}
4135
4136bool PostCreateComputePipelines(
4137 VkDevice device,
4138 VkPipelineCache pipelineCache,
4139 uint32_t count,
4140 VkPipeline* pPipelines,
4141 VkResult result)
4142{
4143
4144
4145
4146 if(pPipelines != nullptr)
4147 {
4148 }
4149
4150 if(result < VK_SUCCESS)
4151 {
4152 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004153 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 -06004154 return false;
4155 }
4156
4157 return true;
4158}
4159
Chia-I Wu9ab61502015-11-06 06:42:02 +08004160VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004161 VkDevice device,
4162 VkPipelineCache pipelineCache,
4163 uint32_t count,
4164 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004165 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004166 VkPipeline* pPipelines)
4167{
4168 PreCreateComputePipelines(device, pCreateInfos);
4169
Chia-I Wuf7458c52015-10-26 21:10:41 +08004170 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004171
4172 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4173
4174 return result;
4175}
4176
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004177bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178 VkDevice device,
4179 const VkPipelineLayoutCreateInfo* pCreateInfo)
4180{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004181 if(pCreateInfo != nullptr)
4182 {
4183 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004184 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004185 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004186 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004188 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004189 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004190 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004191 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004192 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004193 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004194 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004195 }
4196
4197 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004198}
4199
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004200bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004201 VkDevice device,
4202 VkPipelineLayout* pPipelineLayout,
4203 VkResult result)
4204{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004205
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004206 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004207 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004208 }
4209
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004210 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004211 {
4212 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004213 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 -06004214 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004216
4217 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004218}
4219
Chia-I Wu9ab61502015-11-06 06:42:02 +08004220VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004221 VkDevice device,
4222 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004223 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004224 VkPipelineLayout* pPipelineLayout)
4225{
4226 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004227
Chia-I Wuf7458c52015-10-26 21:10:41 +08004228 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004229
4230 PostCreatePipelineLayout(device, pPipelineLayout, result);
4231
4232 return result;
4233}
4234
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004235bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004236 VkDevice device,
4237 const VkSamplerCreateInfo* pCreateInfo)
4238{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004239 if(pCreateInfo != nullptr)
4240 {
4241 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004242 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004243 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004244 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004245 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004246 }
Chia-I Wub99df442015-10-26 16:49:32 +08004247 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4248 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004249 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004250 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004251 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004253 }
Chia-I Wub99df442015-10-26 16:49:32 +08004254 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4255 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004256 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004257 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004258 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004259 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004260 }
Chia-I Wub99df442015-10-26 16:49:32 +08004261 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4262 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004263 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004264 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004265 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004266 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004267 }
Chia-I Wub99df442015-10-26 16:49:32 +08004268 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4269 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004270 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004271 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004272 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004273 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 }
Chia-I Wub99df442015-10-26 16:49:32 +08004275 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4276 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004277 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004278 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004279 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004280 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 }
Chia-I Wub99df442015-10-26 16:49:32 +08004282 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4283 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004284 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004285 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004286 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004287 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004289 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004290 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004291 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4292 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4293 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004294 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004295 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4296 return false;
4297 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004298 }
4299 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4300 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4301 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004302 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004303 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004304 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004305 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004306 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004307
4308 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004309}
4310
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004311bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004312 VkDevice device,
4313 VkSampler* pSampler,
4314 VkResult result)
4315{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004316
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004317 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004318 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 }
4320
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004321 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004322 {
4323 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004324 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 -06004325 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004326 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004327
4328 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004329}
4330
Chia-I Wu9ab61502015-11-06 06:42:02 +08004331VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004332 VkDevice device,
4333 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004334 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004335 VkSampler* pSampler)
4336{
4337 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004338
Chia-I Wuf7458c52015-10-26 21:10:41 +08004339 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340
4341 PostCreateSampler(device, pSampler, result);
4342
4343 return result;
4344}
4345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004346bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004347 VkDevice device,
4348 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4349{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004350 if(pCreateInfo != nullptr)
4351 {
4352 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004353 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004354 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004355 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004356 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004357 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004358 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004360 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4361 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004363 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004364 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004365 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004367 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004369 }
4370 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004372
4373 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004374}
4375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004376bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004377 VkDevice device,
4378 VkDescriptorSetLayout* pSetLayout,
4379 VkResult result)
4380{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004382 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004383 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 }
4385
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004386 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004387 {
4388 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004389 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 -06004390 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004392
4393 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004394}
4395
Chia-I Wu9ab61502015-11-06 06:42:02 +08004396VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004397 VkDevice device,
4398 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004399 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004400 VkDescriptorSetLayout* pSetLayout)
4401{
4402 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004403
Chia-I Wuf7458c52015-10-26 21:10:41 +08004404 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405
4406 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4407
4408 return result;
4409}
4410
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004411bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004412 VkDevice device,
4413 const VkDescriptorPoolCreateInfo* pCreateInfo)
4414{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004415 if(pCreateInfo != nullptr)
4416 {
4417 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004419 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004420 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004421 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004422 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004423 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004424 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004425 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4426 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004427 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004428 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004429 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004430 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004432 }
4433 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004434
4435 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436}
4437
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004438bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004439 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004440 uint32_t maxSets,
4441 VkDescriptorPool* pDescriptorPool,
4442 VkResult result)
4443{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004445 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004447 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004448 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449 }
4450
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004451 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004452 {
4453 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004454 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 -06004455 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004456 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004457
4458 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004459}
4460
Chia-I Wu9ab61502015-11-06 06:42:02 +08004461VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004462 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004463 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004464 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004465 VkDescriptorPool* pDescriptorPool)
4466{
4467 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004468
Chia-I Wuf7458c52015-10-26 21:10:41 +08004469 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004470
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004471 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004472
4473 return result;
4474}
4475
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004476bool PostResetDescriptorPool(
4477 VkDevice device,
4478 VkDescriptorPool descriptorPool,
4479 VkResult result)
4480{
4481
Jeremy Hayes99a96322015-06-26 12:48:09 -06004482
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004483 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004484 {
4485 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004486 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 -06004487 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004488 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004489
4490 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004491}
4492
Chia-I Wu9ab61502015-11-06 06:42:02 +08004493VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004494 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004495 VkDescriptorPool descriptorPool,
4496 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004497{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004498 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004499
4500 PostResetDescriptorPool(device, descriptorPool, result);
4501
4502 return result;
4503}
4504
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004505bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004506 VkDevice device,
4507 const VkDescriptorSetLayout* pSetLayouts)
4508{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004509 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004510 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004511 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004512
4513 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004514}
4515
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004516bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004517 VkDevice device,
4518 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004519 uint32_t count,
4520 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004521 VkResult result)
4522{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523
Jeremy Hayes99a96322015-06-26 12:48:09 -06004524
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004525 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004527 }
4528
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004529 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004530 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004531 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004532 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 -06004533 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004534 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004535
4536 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537}
4538
Chia-I Wu9ab61502015-11-06 06:42:02 +08004539VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004540 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004541 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004542 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004544 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004545
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004546 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004547
Jon Ashburnf19916e2016-01-11 13:12:43 -07004548 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004549
4550 return result;
4551}
4552
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004553bool PreFreeDescriptorSets(
4554 VkDevice device,
4555 const VkDescriptorSet* pDescriptorSets)
4556{
4557 if(pDescriptorSets != nullptr)
4558 {
4559 }
4560
4561 return true;
4562}
4563
4564bool PostFreeDescriptorSets(
4565 VkDevice device,
4566 VkDescriptorPool descriptorPool,
4567 uint32_t count,
4568 VkResult result)
4569{
4570
4571
4572
4573 if(result < VK_SUCCESS)
4574 {
4575 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004576 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 -06004577 return false;
4578 }
4579
4580 return true;
4581}
4582
Chia-I Wu9ab61502015-11-06 06:42:02 +08004583VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004584 VkDevice device,
4585 VkDescriptorPool descriptorPool,
4586 uint32_t count,
4587 const VkDescriptorSet* pDescriptorSets)
4588{
4589 PreFreeDescriptorSets(device, pDescriptorSets);
4590
4591 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4592
4593 PostFreeDescriptorSets(device, descriptorPool, count, result);
4594
4595 return result;
4596}
4597
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004598bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004599 VkDevice device,
4600 const VkWriteDescriptorSet* pDescriptorWrites,
4601 const VkCopyDescriptorSet* pDescriptorCopies)
4602{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004603 if(pDescriptorWrites != nullptr)
4604 {
4605 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004606 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004607 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004608 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004609 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004610 }
4611 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4612 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4613 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004614 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004615 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004616 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004617 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004618 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4619 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4620 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004621 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004622 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4623 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4624 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004625 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004626 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004627 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004628 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004629 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004630 }
4631 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004632
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004633 if(pDescriptorCopies != nullptr)
4634 {
4635 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004636 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004637 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004638 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004639 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004640 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004641 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004642
4643 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004644}
4645
Chia-I Wu9ab61502015-11-06 06:42:02 +08004646VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004647 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004648 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004649 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004650 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004651 const VkCopyDescriptorSet* pDescriptorCopies)
4652{
4653 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004654
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004655 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004656}
4657
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004658bool PreCreateFramebuffer(
4659 VkDevice device,
4660 const VkFramebufferCreateInfo* pCreateInfo)
4661{
4662 if(pCreateInfo != nullptr)
4663 {
4664 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4665 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004666 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004667 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4668 return false;
4669 }
4670 if(pCreateInfo->pAttachments != nullptr)
4671 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004672 }
4673 }
4674
4675 return true;
4676}
4677
4678bool PostCreateFramebuffer(
4679 VkDevice device,
4680 VkFramebuffer* pFramebuffer,
4681 VkResult result)
4682{
4683
4684 if(pFramebuffer != nullptr)
4685 {
4686 }
4687
4688 if(result < VK_SUCCESS)
4689 {
4690 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004691 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 -06004692 return false;
4693 }
4694
4695 return true;
4696}
4697
Chia-I Wu9ab61502015-11-06 06:42:02 +08004698VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004699 VkDevice device,
4700 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004701 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004702 VkFramebuffer* pFramebuffer)
4703{
4704 PreCreateFramebuffer(device, pCreateInfo);
4705
Chia-I Wuf7458c52015-10-26 21:10:41 +08004706 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004707
4708 PostCreateFramebuffer(device, pFramebuffer, result);
4709
4710 return result;
4711}
4712
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004713bool PreCreateRenderPass(
4714 VkDevice device,
4715 const VkRenderPassCreateInfo* pCreateInfo)
4716{
4717 if(pCreateInfo != nullptr)
4718 {
4719 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4720 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004721 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004722 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4723 return false;
4724 }
4725 if(pCreateInfo->pAttachments != nullptr)
4726 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004727 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4728 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4729 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004730 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004731 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4732 return false;
4733 }
4734 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4735 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4736 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004737 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004738 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4739 return false;
4740 }
4741 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4742 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4743 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004744 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004745 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4746 return false;
4747 }
4748 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4749 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4750 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004751 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004752 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4753 return false;
4754 }
4755 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4756 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4757 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004758 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004759 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4760 return false;
4761 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004762 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4763 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4764 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004765 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004766 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004767 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4768 return false;
4769 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004770 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4771 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4772 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004773 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004774 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004775 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4776 return false;
4777 }
4778 }
4779 if(pCreateInfo->pSubpasses != nullptr)
4780 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004781 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4782 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4783 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004784 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004785 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4786 return false;
4787 }
Cody Northropa505dda2015-08-04 11:16:41 -06004788 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004789 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004790 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4791 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4792 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004793 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004794 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004795 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796 return false;
4797 }
4798 }
Cody Northropa505dda2015-08-04 11:16:41 -06004799 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004800 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004801 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4802 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4803 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004804 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004805 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004806 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004807 return false;
4808 }
4809 }
Cody Northropa505dda2015-08-04 11:16:41 -06004810 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004811 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004812 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4813 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4814 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004815 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004816 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004817 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004818 return false;
4819 }
4820 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004821 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004822 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4823 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4824 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004825 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004826 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004827 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004828 return false;
4829 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004830 }
4831 if(pCreateInfo->pDependencies != nullptr)
4832 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004833 }
4834 }
4835
4836 return true;
4837}
4838
4839bool PostCreateRenderPass(
4840 VkDevice device,
4841 VkRenderPass* pRenderPass,
4842 VkResult result)
4843{
4844
4845 if(pRenderPass != nullptr)
4846 {
4847 }
4848
4849 if(result < VK_SUCCESS)
4850 {
4851 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004852 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 -06004853 return false;
4854 }
4855
4856 return true;
4857}
4858
Chia-I Wu9ab61502015-11-06 06:42:02 +08004859VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004860 VkDevice device,
4861 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004862 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004863 VkRenderPass* pRenderPass)
4864{
4865 PreCreateRenderPass(device, pCreateInfo);
4866
Chia-I Wuf7458c52015-10-26 21:10:41 +08004867 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004868
4869 PostCreateRenderPass(device, pRenderPass, result);
4870
4871 return result;
4872}
4873
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004874bool PostGetRenderAreaGranularity(
4875 VkDevice device,
4876 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004877 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004878{
4879
4880
4881 if(pGranularity != nullptr)
4882 {
4883 }
4884
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004885 return true;
4886}
4887
Chia-I Wu9ab61502015-11-06 06:42:02 +08004888VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004889 VkDevice device,
4890 VkRenderPass renderPass,
4891 VkExtent2D* pGranularity)
4892{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004893 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004894
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004895 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004896}
4897
4898bool PreCreateCommandPool(
4899 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004900 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004901{
4902 if(pCreateInfo != nullptr)
4903 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004904 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004905 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004906 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004907 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4908 return false;
4909 }
4910 }
4911
4912 return true;
4913}
4914
4915bool PostCreateCommandPool(
4916 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004917 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004918 VkResult result)
4919{
4920
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004921 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004922 {
4923 }
4924
4925 if(result < VK_SUCCESS)
4926 {
4927 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004928 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 -06004929 return false;
4930 }
4931
4932 return true;
4933}
4934
Chia-I Wu9ab61502015-11-06 06:42:02 +08004935VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004936 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004937 const VkCommandPoolCreateInfo* pCreateInfo,
4938 const VkAllocationCallbacks* pAllocator,
4939 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004940{
4941 PreCreateCommandPool(device, pCreateInfo);
4942
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004943 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004944
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004945 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004946
4947 return result;
4948}
4949
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004950bool PostResetCommandPool(
4951 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004952 VkCommandPool commandPool,
4953 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004954 VkResult result)
4955{
4956
4957
4958
4959 if(result < VK_SUCCESS)
4960 {
4961 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004962 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 -06004963 return false;
4964 }
4965
4966 return true;
4967}
4968
Chia-I Wu9ab61502015-11-06 06:42:02 +08004969VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004970 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004971 VkCommandPool commandPool,
4972 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004973{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004974 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004975
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004976 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004977
4978 return result;
4979}
4980
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004981bool PreCreateCommandBuffer(
4982 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004983 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004984{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004985 if(pCreateInfo != nullptr)
4986 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004987 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004989 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004990 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004991 return false;
4992 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004993 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4994 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004995 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004996 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004997 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004998 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004999 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005000 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005001
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005002 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005003}
5004
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005005bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005006 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005007 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005009{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005010
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005011 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005012 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013 }
5014
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005015 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005017 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005018 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 -06005019 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005020 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005021
5022 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005023}
5024
Chia-I Wu9ab61502015-11-06 06:42:02 +08005025VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005026 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027 const VkCommandBufferAllocateInfo* pCreateInfo,
5028 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005029{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005030 PreCreateCommandBuffer(device, pCreateInfo);
5031
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005033
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005034 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005035
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005036 return result;
5037}
5038
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005039bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005040 VkCommandBuffer commandBuffer,
5041 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005042{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005043 if(pBeginInfo != nullptr)
5044 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005045 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005046 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005047 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005048 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005049 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005050 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005051 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005052
5053 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005054}
5055
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005056bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005057 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005058 VkResult result)
5059{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005060
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005061 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005062 {
5063 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005064 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 -06005065 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005066 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005067
5068 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005069}
5070
Chia-I Wu9ab61502015-11-06 06:42:02 +08005071VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005072 VkCommandBuffer commandBuffer,
5073 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005074{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005075 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005076
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005077 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005078
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005079 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005080
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005081 return result;
5082}
5083
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005084bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005085 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005086 VkResult result)
5087{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005088
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005089 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005090 {
5091 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005092 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 -06005093 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005094 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005095
5096 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005097}
5098
Chia-I Wu9ab61502015-11-06 06:42:02 +08005099VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005100 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005101{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005102 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005103
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005104 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005105
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005106 return result;
5107}
5108
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005109bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005110 VkCommandBuffer commandBuffer,
5111 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005112 VkResult result)
5113{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005114
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005115
5116 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005117 {
5118 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005119 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 -06005120 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005121 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005122
5123 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005124}
5125
Chia-I Wu9ab61502015-11-06 06:42:02 +08005126VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005127 VkCommandBuffer commandBuffer,
5128 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005129{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005130 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005131
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005132 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005133
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005134 return result;
5135}
5136
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005137bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005138 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005139 VkPipelineBindPoint pipelineBindPoint,
5140 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005141{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005142
5143 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5144 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5145 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005146 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005147 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005148 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005149 }
5150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005151
5152 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005153}
5154
Chia-I Wu9ab61502015-11-06 06:42:02 +08005155VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005156 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005157 VkPipelineBindPoint pipelineBindPoint,
5158 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005159{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005160 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005161
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005162 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005163}
5164
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005165VK_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 -06005166{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005167 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005168}
5169
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005170VK_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 -06005171{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005172 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173}
5174
Chia-I Wu9ab61502015-11-06 06:42:02 +08005175VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005176{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005177 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
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 vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005181{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005182 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005183}
5184
Chia-I Wu9ab61502015-11-06 06:42:02 +08005185VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
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)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005188}
5189
Chia-I Wu9ab61502015-11-06 06:42:02 +08005190VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005191{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005192 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
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 vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005196{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005197 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005198}
5199
Chia-I Wu9ab61502015-11-06 06:42:02 +08005200VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005201{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005202 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
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 vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
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)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005208}
5209
5210bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005211 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005212 const VkDescriptorSet* pDescriptorSets,
5213 const uint32_t* pDynamicOffsets)
5214{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005215 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005217 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005218
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005219 if(pDynamicOffsets != nullptr)
5220 {
5221 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005222
5223 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224}
5225
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005226bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005227 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005228 VkPipelineBindPoint pipelineBindPoint,
5229 VkPipelineLayout layout,
5230 uint32_t firstSet,
5231 uint32_t setCount,
5232 uint32_t dynamicOffsetCount)
5233{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005234
5235 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5236 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5237 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005238 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005239 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005240 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005241 }
5242
5243
5244
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005245
5246
5247 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005248}
5249
Chia-I Wu9ab61502015-11-06 06:42:02 +08005250VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005251 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005252 VkPipelineBindPoint pipelineBindPoint,
5253 VkPipelineLayout layout,
5254 uint32_t firstSet,
5255 uint32_t setCount,
5256 const VkDescriptorSet* pDescriptorSets,
5257 uint32_t dynamicOffsetCount,
5258 const uint32_t* pDynamicOffsets)
5259{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005260 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005261
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005262 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005263
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005264 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005265}
5266
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005267bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005268 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005269 VkBuffer buffer,
5270 VkDeviceSize offset,
5271 VkIndexType indexType)
5272{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005273
Jeremy Hayes99a96322015-06-26 12:48:09 -06005274
5275
5276 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5277 indexType > VK_INDEX_TYPE_END_RANGE)
5278 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005279 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005280 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005281 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005282 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005283
5284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005285}
5286
Chia-I Wu9ab61502015-11-06 06:42:02 +08005287VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005288 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005289 VkBuffer buffer,
5290 VkDeviceSize offset,
5291 VkIndexType indexType)
5292{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005293 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005294
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005295 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005296}
5297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005298bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005299 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005300 const VkBuffer* pBuffers,
5301 const VkDeviceSize* pOffsets)
5302{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005303 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005304 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005305 }
5306
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005307 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005308 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005310
5311 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005312}
5313
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005314bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005315 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005316 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317 uint32_t bindingCount)
5318{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005319
5320
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005321
5322 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005323}
5324
Chia-I Wu9ab61502015-11-06 06:42:02 +08005325VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005326 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005327 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005328 uint32_t bindingCount,
5329 const VkBuffer* pBuffers,
5330 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005331{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005332 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005333
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005334 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005335
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005336 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005337}
5338
Michael Lentine55a913f2015-11-24 09:48:23 -06005339bool PreCmdDraw(
5340 VkCommandBuffer commandBuffer,
5341 uint32_t vertexCount,
5342 uint32_t instanceCount,
5343 uint32_t firstVertex,
5344 uint32_t firstInstance)
5345{
5346 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005347 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5348 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005349 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005350 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5351 return false;
5352 }
5353
5354 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005355 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5356 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005357 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005358 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5359 return false;
5360 }
5361
5362 return true;
5363}
5364
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005365bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005366 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005367 uint32_t firstVertex,
5368 uint32_t vertexCount,
5369 uint32_t firstInstance,
5370 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005371{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005372
5373
5374
5375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005376
5377 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005378}
5379
Chia-I Wu9ab61502015-11-06 06:42:02 +08005380VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005381 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005382 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005383 uint32_t instanceCount,
5384 uint32_t firstVertex,
5385 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005386{
Michael Lentine55a913f2015-11-24 09:48:23 -06005387 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5388
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005389 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005390
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005391 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005392}
5393
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005394bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005395 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005396 uint32_t firstIndex,
5397 uint32_t indexCount,
5398 int32_t vertexOffset,
5399 uint32_t firstInstance,
5400 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005401{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005402
5403
5404
5405
5406
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005407
5408 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005409}
5410
Chia-I Wu9ab61502015-11-06 06:42:02 +08005411VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005412 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005413 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005414 uint32_t instanceCount,
5415 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005416 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005417 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005418{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005419 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005421 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005422}
5423
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005424bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005425 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426 VkBuffer buffer,
5427 VkDeviceSize offset,
5428 uint32_t count,
5429 uint32_t stride)
5430{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431
5432
5433
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005434
5435
5436 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437}
5438
Chia-I Wu9ab61502015-11-06 06:42:02 +08005439VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005440 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005441 VkBuffer buffer,
5442 VkDeviceSize offset,
5443 uint32_t count,
5444 uint32_t stride)
5445{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005446 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005448 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005449}
5450
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005451bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005452 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005453 VkBuffer buffer,
5454 VkDeviceSize offset,
5455 uint32_t count,
5456 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005457{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005458
5459
5460
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005461
5462
5463 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005464}
5465
Chia-I Wu9ab61502015-11-06 06:42:02 +08005466VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005467 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005468 VkBuffer buffer,
5469 VkDeviceSize offset,
5470 uint32_t count,
5471 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005472{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005473 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005474
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005475 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005476}
5477
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005478bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005479 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005480 uint32_t x,
5481 uint32_t y,
5482 uint32_t z)
5483{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005484
5485
5486
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005487
5488 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005489}
5490
Chia-I Wu9ab61502015-11-06 06:42:02 +08005491VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005492 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005493 uint32_t x,
5494 uint32_t y,
5495 uint32_t z)
5496{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005497 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005498
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005499 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005500}
5501
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005502bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005503 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005504 VkBuffer buffer,
5505 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005506{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005507
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005509
5510 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005511}
5512
Chia-I Wu9ab61502015-11-06 06:42:02 +08005513VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005514 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005515 VkBuffer buffer,
5516 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005517{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005518 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005519
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005520 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005521}
5522
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005523bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005524 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005525 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005526{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005527 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005529 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005530
5531 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005532}
5533
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005534bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005535 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005536 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005537 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538 uint32_t regionCount)
5539{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005540
Jeremy Hayes99a96322015-06-26 12:48:09 -06005541
Jeremy Hayes99a96322015-06-26 12:48:09 -06005542
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005543
5544 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545}
5546
Chia-I Wu9ab61502015-11-06 06:42:02 +08005547VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005548 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005549 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005550 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551 uint32_t regionCount,
5552 const VkBufferCopy* pRegions)
5553{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005554 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005555
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005556 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005558 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559}
5560
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005561bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005562 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005563 const VkImageCopy* pRegions)
5564{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005565 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005566 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005567 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005568 (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 -06005569 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005570 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005571 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005572 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005574 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005575 (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 -06005576 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005577 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005578 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005579 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005580 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005581 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005582
5583 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005584}
5585
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005586bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005587 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005588 VkImage srcImage,
5589 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005590 VkImage dstImage,
5591 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005592 uint32_t regionCount)
5593{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005594 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5595 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5596 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005597 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005598 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005599 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005600 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005601 }
5602
Jeremy Hayes99a96322015-06-26 12:48:09 -06005603
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005604 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5605 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5606 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005607 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005608 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005609 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005610 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005611 }
5612
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005613
5614 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005615}
5616
Chia-I Wu9ab61502015-11-06 06:42:02 +08005617VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005618 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005619 VkImage srcImage,
5620 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005621 VkImage dstImage,
5622 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005623 uint32_t regionCount,
5624 const VkImageCopy* pRegions)
5625{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005626 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005627
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005628 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005629
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005630 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005631}
5632
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005633bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005634 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005635 const VkImageBlit* pRegions)
5636{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005637 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005638 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005639 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005640 (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 -06005641 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005642 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005643 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005644 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005646 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005647 (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 -06005648 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005649 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005650 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005651 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005652 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005653 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005654
5655 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005656}
5657
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005658bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005659 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005660 VkImage srcImage,
5661 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005662 VkImage dstImage,
5663 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005665 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005667
Jeremy Hayes99a96322015-06-26 12:48:09 -06005668
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005669 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5670 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5671 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005672 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005673 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005674 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005675 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676 }
5677
Jeremy Hayes99a96322015-06-26 12:48:09 -06005678
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005679 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5680 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5681 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005682 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005683 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005684 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005685 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005686 }
5687
5688
Chia-I Wub99df442015-10-26 16:49:32 +08005689 if(filter < VK_FILTER_BEGIN_RANGE ||
5690 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005692 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005693 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005694 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005695 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005696
5697 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005698}
5699
Chia-I Wu9ab61502015-11-06 06:42:02 +08005700VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005701 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 VkImage srcImage,
5703 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005704 VkImage dstImage,
5705 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005706 uint32_t regionCount,
5707 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005708 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005710 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005711
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005712 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005714 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005715}
5716
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005717bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005718 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005719 const VkBufferImageCopy* pRegions)
5720{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005721 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005722 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005723 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005724 (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 -06005725 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005726 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005727 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005728 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005729 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005730 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005731
5732 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733}
5734
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005735bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005736 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005737 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005738 VkImage dstImage,
5739 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005740 uint32_t regionCount)
5741{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005742
Jeremy Hayes99a96322015-06-26 12:48:09 -06005743
Jeremy Hayes99a96322015-06-26 12:48:09 -06005744
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005745 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5746 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5747 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005748 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005749 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005750 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005751 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005752 }
5753
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005754
5755 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005756}
5757
Chia-I Wu9ab61502015-11-06 06:42:02 +08005758VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005759 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005761 VkImage dstImage,
5762 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005763 uint32_t regionCount,
5764 const VkBufferImageCopy* pRegions)
5765{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005766 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005767
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005768 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005769
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005770 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771}
5772
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005773bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005774 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775 const VkBufferImageCopy* pRegions)
5776{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005777 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005778 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005779 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005780 (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 -06005781 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005782 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005783 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005784 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005785 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005786 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005787
5788 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005789}
5790
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005792 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793 VkImage srcImage,
5794 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005795 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796 uint32_t regionCount)
5797{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005800 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5801 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5802 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005803 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005804 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005805 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005806 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807 }
5808
Jeremy Hayes99a96322015-06-26 12:48:09 -06005809
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005810
5811 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005812}
5813
Chia-I Wu9ab61502015-11-06 06:42:02 +08005814VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005815 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005816 VkImage srcImage,
5817 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005818 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819 uint32_t regionCount,
5820 const VkBufferImageCopy* pRegions)
5821{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005822 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005823
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005824 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005826 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005827}
5828
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005829bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005830 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 const uint32_t* pData)
5832{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005833 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005835 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005836
5837 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005838}
5839
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005840bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005841 VkCommandBuffer commandBuffer,
5842 VkBuffer dstBuffer,
5843 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844 VkDeviceSize dataSize)
5845{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005846
5847
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005848
5849
5850 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005851}
5852
Chia-I Wu9ab61502015-11-06 06:42:02 +08005853VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005854 VkCommandBuffer commandBuffer,
5855 VkBuffer dstBuffer,
5856 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005857 VkDeviceSize dataSize,
5858 const uint32_t* pData)
5859{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005860 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005861
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005862 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005863
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005864 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865}
5866
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005867bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005868 VkCommandBuffer commandBuffer,
5869 VkBuffer dstBuffer,
5870 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005871 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005872 uint32_t data)
5873{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005874
5875
5876
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005877
5878
5879 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005880}
5881
Chia-I Wu9ab61502015-11-06 06:42:02 +08005882VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005883 VkCommandBuffer commandBuffer,
5884 VkBuffer dstBuffer,
5885 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005886 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887 uint32_t data)
5888{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005889 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005890
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005891 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892}
5893
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005894bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005895 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005896 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897 const VkImageSubresourceRange* pRanges)
5898{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005899 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005900 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005901 }
5902
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005903 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005904 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005905 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005906 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005907
5908 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005909}
5910
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005911bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005912 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005913 VkImage image,
5914 VkImageLayout imageLayout,
5915 uint32_t rangeCount)
5916{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005917
Jeremy Hayes99a96322015-06-26 12:48:09 -06005918
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005919 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5920 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5921 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005922 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005923 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005924 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005925 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005926 }
5927
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005928
5929 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005930}
5931
Chia-I Wu9ab61502015-11-06 06:42:02 +08005932VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005933 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005934 VkImage image,
5935 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005936 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005937 uint32_t rangeCount,
5938 const VkImageSubresourceRange* pRanges)
5939{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005940 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005941
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005942 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005943
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005944 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005945}
5946
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005947bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005948 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005949 const VkImageSubresourceRange* pRanges)
5950{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005951 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005952 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005953 /*
5954 * TODO: How do we validation pRanges->aspectMask?
5955 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5956 * VK_IMAGE_ASPECT_STENCIL_BIT.
5957 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005958 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005959
5960 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961}
5962
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005963bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005964 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965 VkImage image,
5966 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005967 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005968 uint32_t rangeCount)
5969{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005972 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5973 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5974 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005976 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005977 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005978 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979 }
5980
5981
5982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983
5984 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005985}
5986
Chia-I Wu9ab61502015-11-06 06:42:02 +08005987VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005988 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005989 VkImage image,
5990 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005991 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005992 uint32_t rangeCount,
5993 const VkImageSubresourceRange* pRanges)
5994{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005995 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005996
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005997 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005998
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005999 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006000}
6001
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006002bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006003 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006004 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006005 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006006{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006007 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006008 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006009 }
6010
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006011 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006012 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006013 }
6014
6015 return true;
6016}
6017
Chia-I Wu9ab61502015-11-06 06:42:02 +08006018VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006019 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006020 uint32_t attachmentCount,
6021 const VkClearAttachment* pAttachments,
6022 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006023 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006024{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006025 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006026 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006027 }
6028
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006029 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006030}
6031
6032bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006033 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006034 const VkImageResolve* pRegions)
6035{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006036 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006038 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006039 (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 -06006040 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006041 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006042 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006043 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006045 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006046 (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 -06006047 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006048 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08006049 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006050 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006052 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006053
6054 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006055}
6056
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006057bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006058 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059 VkImage srcImage,
6060 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006061 VkImage dstImage,
6062 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063 uint32_t regionCount)
6064{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006065
Jeremy Hayes99a96322015-06-26 12:48:09 -06006066
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006067 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6068 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6069 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006070 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006071 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006072 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006073 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006074 }
6075
Jeremy Hayes99a96322015-06-26 12:48:09 -06006076
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006077 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6078 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6079 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006080 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006081 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006082 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006083 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084 }
6085
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006086
6087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006088}
6089
Chia-I Wu9ab61502015-11-06 06:42:02 +08006090VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006091 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006092 VkImage srcImage,
6093 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006094 VkImage dstImage,
6095 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006096 uint32_t regionCount,
6097 const VkImageResolve* pRegions)
6098{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006099 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006100
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006101 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006102
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006103 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006104}
6105
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006106bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006107 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006108 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006109 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006111
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006113
6114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006115}
6116
Chia-I Wu9ab61502015-11-06 06:42:02 +08006117VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006118 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006119 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006120 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006121{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006122 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006123
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006124 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006125}
6126
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006127bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006128 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006130 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006131{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006132
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006134
6135 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006136}
6137
Chia-I Wu9ab61502015-11-06 06:42:02 +08006138VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006139 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006140 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006141 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006142{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006143 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006145 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006146}
6147
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006148bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006149 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006150 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006151 uint32_t memoryBarrierCount,
6152 const VkMemoryBarrier *pMemoryBarriers,
6153 uint32_t bufferMemoryBarrierCount,
6154 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6155 uint32_t imageMemoryBarrierCount,
6156 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006157{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006158 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006159 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160 }
6161
Jon Ashburnf19916e2016-01-11 13:12:43 -07006162 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006163 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006165
6166 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006167}
6168
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006169bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006170 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006172 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006173 VkPipelineStageFlags dstStageMask,
6174 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006175{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006176
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006177
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178
6179
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006180
6181 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182}
6183
Chia-I Wu9ab61502015-11-06 06:42:02 +08006184VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006185 VkCommandBuffer commandBuffer,
6186 uint32_t eventCount,
6187 const VkEvent *pEvents,
6188 VkPipelineStageFlags srcStageMask,
6189 VkPipelineStageFlags dstStageMask,
6190 uint32_t memoryBarrierCount,
6191 const VkMemoryBarrier *pMemoryBarriers,
6192 uint32_t bufferMemoryBarrierCount,
6193 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6194 uint32_t imageMemoryBarrierCount,
6195 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006196{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006197 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006198
Jon Ashburnf19916e2016-01-11 13:12:43 -07006199 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 -06006200
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006201 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202}
6203
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006204bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006205 VkCommandBuffer commandBuffer,
6206 uint32_t memoryBarrierCount,
6207 const VkMemoryBarrier *pMemoryBarriers,
6208 uint32_t bufferMemoryBarrierCount,
6209 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6210 uint32_t imageMemoryBarrierCount,
6211 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006212{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006213 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006214 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006215 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006216
6217 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218}
6219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006220bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006221 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006222 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006223 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006224 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006225 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006226{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006227
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006228
Jeremy Hayes99a96322015-06-26 12:48:09 -06006229
6230
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006231
6232 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006233}
6234
Chia-I Wu9ab61502015-11-06 06:42:02 +08006235VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006236 VkCommandBuffer commandBuffer,
6237 VkPipelineStageFlags srcStageMask,
6238 VkPipelineStageFlags dstStageMask,
6239 VkDependencyFlags dependencyFlags,
6240 uint32_t memoryBarrierCount,
6241 const VkMemoryBarrier *pMemoryBarriers,
6242 uint32_t bufferMemoryBarrierCount,
6243 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6244 uint32_t imageMemoryBarrierCount,
6245 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006246{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006247 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006248
Jon Ashburnf19916e2016-01-11 13:12:43 -07006249 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 -06006250
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006251 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006252}
6253
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006254bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006255 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006256 VkQueryPool queryPool,
6257 uint32_t slot,
6258 VkQueryControlFlags flags)
6259{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006260
Jeremy Hayes99a96322015-06-26 12:48:09 -06006261
6262
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006263
6264 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006265}
6266
Chia-I Wu9ab61502015-11-06 06:42:02 +08006267VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006268 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006269 VkQueryPool queryPool,
6270 uint32_t slot,
6271 VkQueryControlFlags flags)
6272{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006273 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006274
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006275 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006276}
6277
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006278bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006279 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006280 VkQueryPool queryPool,
6281 uint32_t slot)
6282{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283
Jeremy Hayes99a96322015-06-26 12:48:09 -06006284
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006285
6286 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006287}
6288
Chia-I Wu9ab61502015-11-06 06:42:02 +08006289VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006290 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006291 VkQueryPool queryPool,
6292 uint32_t slot)
6293{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006294 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006295
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006296 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006297}
6298
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006299bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006300 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006301 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006302 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006303 uint32_t queryCount)
6304{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006305
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006306
6307
6308
6309 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006310}
6311
Chia-I Wu9ab61502015-11-06 06:42:02 +08006312VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006313 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006314 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006315 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006316 uint32_t queryCount)
6317{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006318 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006319
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006320 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006321}
6322
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006323bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006324 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006325 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006326 VkQueryPool queryPool,
6327 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006328{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006329
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006330 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006331
6332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006333}
6334
Chia-I Wu9ab61502015-11-06 06:42:02 +08006335VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006336 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006337 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006338 VkQueryPool queryPool,
6339 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006340{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006341 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006342
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006343 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006344}
6345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006346bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006347 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006348 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006349 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006350 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006351 VkBuffer dstBuffer,
6352 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006353 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006354 VkQueryResultFlags flags)
6355{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006356
6357
6358
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006359
Jeremy Hayes99a96322015-06-26 12:48:09 -06006360
6361
6362
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006363
6364 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006365}
6366
Chia-I Wu9ab61502015-11-06 06:42:02 +08006367VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006368 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006369 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006370 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006371 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006372 VkBuffer dstBuffer,
6373 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006374 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006375 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006376{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006377 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006378
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006379 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006380}
6381
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006382bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006383 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006384 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006385{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006386 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006387 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006388 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006389
6390 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006391}
6392
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006393bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006394 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006395 VkPipelineLayout layout,
6396 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006397 uint32_t offset,
6398 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006399{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006400
Jeremy Hayes99a96322015-06-26 12:48:09 -06006401
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006402
6403
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006404
6405 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006406}
6407
Chia-I Wu9ab61502015-11-06 06:42:02 +08006408VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006409 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006410 VkPipelineLayout layout,
6411 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006412 uint32_t offset,
6413 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006414 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006415{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006416 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006417
Chia-I Wuce9b1772015-11-12 06:09:22 +08006418 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006419
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006420 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006421}
6422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006423bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006424 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006425 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006426{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006427 if(pRenderPassBegin != nullptr)
6428 {
6429 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006430 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006431 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006432 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006433 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006434 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006435 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006436 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006437 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006438 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006439
6440 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006441}
6442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006443bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006444 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006445 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006446{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006447
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006448 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6449 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006450 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006451 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006452 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006453 return false;
6454 }
6455
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006456 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006457}
6458
Chia-I Wu9ab61502015-11-06 06:42:02 +08006459VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006460 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006461 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006462 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006463{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006464 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006465
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006466 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006467
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006468 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006469}
6470
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006471bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006472 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006473 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006474{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006475
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006476 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6477 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006478 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006479 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006480 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006481 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006482 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006483
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006484 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006485}
6486
Chia-I Wu9ab61502015-11-06 06:42:02 +08006487VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006488 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006489 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006490{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006491 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006492
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006493 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006494}
6495
6496bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006497 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006498{
6499
6500 return true;
6501}
6502
Chia-I Wu9ab61502015-11-06 06:42:02 +08006503VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006504 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006505{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006506 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006507
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006508 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006509}
6510
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006511bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006512 VkCommandBuffer commandBuffer,
6513 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006514{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006515 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006516 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006517 }
6518
6519 return true;
6520}
6521
6522bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006523 VkCommandBuffer commandBuffer,
6524 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006525{
6526
6527
6528 return true;
6529}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006530
Chia-I Wu9ab61502015-11-06 06:42:02 +08006531VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006532 VkCommandBuffer commandBuffer,
6533 uint32_t commandBuffersCount,
6534 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006535{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006536 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006537
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006538 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006539
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006540 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006541}
6542
Chia-I Wu9ab61502015-11-06 06:42:02 +08006543VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006544{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006545 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006546 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006547 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006548 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006549 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006550 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006551 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006552 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006553 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006554 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006555 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006556 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006557 if (!strcmp(funcName, "vkAllocateMemory"))
6558 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006559 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006560 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006562 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006563 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006564 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006566 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006567 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006568 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006570 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006571 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006572 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006574 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006575 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006576 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006580 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006583 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006584 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006585 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006586 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006587 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006588 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006589 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006590 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006591 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006592 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006593 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006594 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006595 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006596 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006597 if (!strcmp(funcName, "vkCreateShaderModule"))
6598 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006599 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006600 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006601 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006602 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006604 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006606 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006607 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006608 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006610 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006613 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6614 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006615 if (!strcmp(funcName, "vkCmdSetViewport"))
6616 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006617 if (!strcmp(funcName, "vkCmdSetScissor"))
6618 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006619 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6620 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6621 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6622 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6623 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6624 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6625 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6626 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6627 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6628 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6629 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6630 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6631 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6632 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006633 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6634 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006635 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006636 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006637 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006638 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006639 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006640 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006641 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006642 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006643 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006644 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006645 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006646 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006647 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006648 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006649 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006650 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006651 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006652 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006653 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006654 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006655 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006656 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006657 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006658 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006659 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006660 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006661 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006662 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006663 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006664 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006665 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006666 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006667 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006668 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006669 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006670 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006671 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006672 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006673 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006674 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006675 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006676 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006677 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006678 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006679 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006680 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006681 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006682 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006683 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006684 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006685 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006686 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006687 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006688 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006689 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006690 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006691 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006692 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006693 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006694 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006695 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006696 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006697 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006698 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006699 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006700 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006701 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006702 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006703 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006704 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006705
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006706 if (device == NULL) {
6707 return NULL;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006708 }
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006709
6710 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
6711 return NULL;
6712 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006713}
6714
Chia-I Wu9ab61502015-11-06 06:42:02 +08006715VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006716{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006717 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006718 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006719 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006720 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006721 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006722 return (PFN_vkVoidFunction) vkDestroyInstance;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006723 if (!strcmp(funcName, "vkCreateDevice"))
6724 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006725 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006726 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006727 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006728 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006729 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006730 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006731 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006732 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006733 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6734 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6735 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6736 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6737 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6738 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6739 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6740 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006741
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006742 if (instance == NULL) {
6743 return NULL;
6744 }
6745
Jeremy Hayes99a96322015-06-26 12:48:09 -06006746 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006747 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006748 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006749 return fptr;
6750
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006751 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6752 return NULL;
6753 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006754}