blob: f63562d46f0f0ceb70375e4b14d4c9f41db3f506 [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>
Jeremy Hayes99a96322015-06-26 12:48:09 -060036#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060037
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060038#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070039#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060040#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060041#include "vk_enum_validate_helper.h"
42#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060043
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060044#include "vk_layer_table.h"
45#include "vk_layer_data.h"
46#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060047#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060048
Cody Northrop55443ef2015-09-28 15:09:32 -060049struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060050 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070051 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060052
53 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060054 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060055 {};
56};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050057
Jeremy Hayes99a96322015-06-26 12:48:09 -060058static std::unordered_map<void*, layer_data*> layer_data_map;
59static device_table_map pc_device_table_map;
60static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060061
Jeremy Hayes99a96322015-06-26 12:48:09 -060062// "my instance data"
63debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060064{
Jeremy Hayes99a96322015-06-26 12:48:09 -060065 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060066 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060067#if DISPATCH_MAP_DEBUG
68 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
69#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060070 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060071
72 return data->report_data;
73}
74
75// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060076debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060077{
78 dispatch_key key = get_dispatch_key(object);
79 layer_data *data = get_my_data_ptr(key, layer_data_map);
80#if DISPATCH_MAP_DEBUG
81 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
82#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060083 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060084 return data->report_data;
85}
86
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -070087static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -060088{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070089 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060090 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
91
92 uint32_t debug_action = 0;
93 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
94 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
95 {
96 FILE *log_output = NULL;
97 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060098 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070099 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700100 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700101 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700102 dbgCreateInfo.flags = report_flags;
103 dbgCreateInfo.pfnCallback = log_callback;
104 dbgCreateInfo.pUserData = log_output;
105
106 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600107 data->logging_callback.push_back(callback);
108 }
109
110 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700111 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700112 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700113 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700114 dbgCreateInfo.flags = report_flags;
115 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
116 dbgCreateInfo.pUserData = NULL;
117
118 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600119 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600120 }
121}
122
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700123VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600124 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700125 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700126 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700127 VkDebugReportCallbackEXT* pMsgCallback)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700130 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600131
132 if (result == VK_SUCCESS)
133 {
134 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700135 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600136 }
137
138 return result;
139}
140
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700141VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600142 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700143 VkDebugReportCallbackEXT msgCallback,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700144 const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600145{
146 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700147 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600148
149 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700150 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600151}
152
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700153VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700154 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700155 VkDebugReportFlagsEXT flags,
156 VkDebugReportObjectTypeEXT objType,
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700157 uint64_t object,
158 size_t location,
159 int32_t msgCode,
160 const char* pLayerPrefix,
161 const char* pMsg)
162{
163 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700164 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700165}
166
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700167static const VkExtensionProperties instance_extensions[] = {
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600168 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700169 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
170 VK_EXT_DEBUG_REPORT_REVISION
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600171 }
172};
Tony Barbour59a47322015-06-24 16:06:58 -0600173
Chia-I Wu9ab61502015-11-06 06:42:02 +0800174VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600175 const char *pLayerName,
176 uint32_t *pCount,
177 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600178{
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700179 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600180}
181
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700182static const VkLayerProperties pc_global_layers[] = {
183 {
Michael Lentine1f8d4412016-01-19 14:19:38 -0600184 "VK_LAYER_LUNARG_param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700185 VK_API_VERSION,
186 VK_MAKE_VERSION(0, 1, 0),
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700187 "Validation layer: param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700188 }
189};
190
Chia-I Wu9ab61502015-11-06 06:42:02 +0800191VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600192 uint32_t *pCount,
193 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600194{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600195 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
196 pc_global_layers,
197 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600198}
199
Chia-I Wu9ab61502015-11-06 06:42:02 +0800200VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600201 VkPhysicalDevice physicalDevice,
202 const char* pLayerName,
203 uint32_t* pCount,
204 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600205{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600206 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700207 if (pLayerName == NULL) {
208 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
209 physicalDevice,
210 NULL,
211 pCount,
212 pProperties);
213 } else {
214 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
215 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600216}
217
Chia-I Wu9ab61502015-11-06 06:42:02 +0800218VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600219 VkPhysicalDevice physicalDevice,
220 uint32_t* pCount,
221 VkLayerProperties* pProperties)
222{
223 /* ParamChecker's physical device layers are the same as global */
224 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
225 pCount, pProperties);
226}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600228// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600229
Jeremy Hayes99a96322015-06-26 12:48:09 -0600230static
231std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600232{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600233 switch(enumerator)
234 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600235 case VK_RESULT_MAX_ENUM:
236 {
237 return "VK_RESULT_MAX_ENUM";
238 break;
239 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600240 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600241 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600242 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600243 break;
244 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600245 case VK_ERROR_INCOMPATIBLE_DRIVER:
246 {
247 return "VK_ERROR_INCOMPATIBLE_DRIVER";
248 break;
249 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600250 case VK_ERROR_MEMORY_MAP_FAILED:
251 {
252 return "VK_ERROR_MEMORY_MAP_FAILED";
253 break;
254 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600255 case VK_INCOMPLETE:
256 {
257 return "VK_INCOMPLETE";
258 break;
259 }
260 case VK_ERROR_OUT_OF_HOST_MEMORY:
261 {
262 return "VK_ERROR_OUT_OF_HOST_MEMORY";
263 break;
264 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600265 case VK_ERROR_INITIALIZATION_FAILED:
266 {
267 return "VK_ERROR_INITIALIZATION_FAILED";
268 break;
269 }
270 case VK_NOT_READY:
271 {
272 return "VK_NOT_READY";
273 break;
274 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600275 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
276 {
277 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
278 break;
279 }
280 case VK_EVENT_SET:
281 {
282 return "VK_EVENT_SET";
283 break;
284 }
285 case VK_TIMEOUT:
286 {
287 return "VK_TIMEOUT";
288 break;
289 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600290 case VK_EVENT_RESET:
291 {
292 return "VK_EVENT_RESET";
293 break;
294 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600295 case VK_SUCCESS:
296 {
297 return "VK_SUCCESS";
298 break;
299 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600300 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600301 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600302 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600303 break;
304 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600305 case VK_ERROR_DEVICE_LOST:
306 {
307 return "VK_ERROR_DEVICE_LOST";
308 break;
309 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600310 default:
311 {
312 return "unrecognized enumerator";
313 break;
314 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600316}
317
318static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600319bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
320{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600321 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600322 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
323 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
324 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
325 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
326 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
327 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
328 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
329 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
330 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600331 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800332 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
333 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600334 if(enumerator & (~allFlags))
335 {
336 return false;
337 }
338
339 return true;
340}
341
342static
343std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
344{
345 if(!ValidateEnumerator(enumerator))
346 {
347 return "unrecognized enumerator";
348 }
349
350 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600351 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
352 {
353 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
354 }
355 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
356 {
357 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
358 }
359 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
360 {
361 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
362 }
363 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
364 {
365 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
366 }
367 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
368 {
369 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
370 }
371 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
372 {
373 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
374 }
375 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
376 {
377 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
378 }
379 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
380 {
381 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
382 }
383 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
384 {
385 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
386 }
387 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
388 {
389 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
390 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800391 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600392 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800393 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600394 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800395 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600396 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800397 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600398 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600399
400 std::string enumeratorString;
401 for(auto const& string : strings)
402 {
403 enumeratorString += string;
404
405 if(string != strings.back())
406 {
407 enumeratorString += '|';
408 }
409 }
410
411 return enumeratorString;
412}
413
414static
415bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
416{
417 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600418 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600419 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
420 VK_IMAGE_USAGE_STORAGE_BIT |
421 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800422 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600423 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800424 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600425 if(enumerator & (~allFlags))
426 {
427 return false;
428 }
429
430 return true;
431}
432
433static
434std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
435{
436 if(!ValidateEnumerator(enumerator))
437 {
438 return "unrecognized enumerator";
439 }
440
441 std::vector<std::string> strings;
442 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
443 {
444 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
445 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600446 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600447 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600448 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600449 }
450 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
451 {
452 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
453 }
454 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
455 {
456 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
457 }
458 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
459 {
460 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
461 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800462 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600463 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800464 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600465 }
466 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
467 {
468 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
469 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800470 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600471 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800472 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600473 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600474
475 std::string enumeratorString;
476 for(auto const& string : strings)
477 {
478 enumeratorString += string;
479
480 if(string != strings.back())
481 {
482 enumeratorString += '|';
483 }
484 }
485
486 return enumeratorString;
487}
488
489static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600490bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
491{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800492 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800493 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600494 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800495 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600496 VK_QUEUE_GRAPHICS_BIT);
497 if(enumerator & (~allFlags))
498 {
499 return false;
500 }
501
502 return true;
503}
504
505static
506std::string EnumeratorString(VkQueueFlagBits const& enumerator)
507{
508 if(!ValidateEnumerator(enumerator))
509 {
510 return "unrecognized enumerator";
511 }
512
513 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800514 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600515 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800516 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600517 }
518 if(enumerator & VK_QUEUE_COMPUTE_BIT)
519 {
520 strings.push_back("VK_QUEUE_COMPUTE_BIT");
521 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800522 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600523 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800524 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600525 }
526 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
527 {
528 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
529 }
530
531 std::string enumeratorString;
532 for(auto const& string : strings)
533 {
534 enumeratorString += string;
535
536 if(string != strings.back())
537 {
538 enumeratorString += '|';
539 }
540 }
541
542 return enumeratorString;
543}
544
545static
546bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
547{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600548 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800549 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600550 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800551 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
552 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600553 if(enumerator & (~allFlags))
554 {
555 return false;
556 }
557
558 return true;
559}
560
561static
562std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
563{
564 if(!ValidateEnumerator(enumerator))
565 {
566 return "unrecognized enumerator";
567 }
568
569 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600570 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
571 {
572 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
573 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800574 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600575 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800576 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600577 }
578 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
579 {
580 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
581 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800582 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600583 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800584 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800586 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600587 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800588 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600589 }
590
591 std::string enumeratorString;
592 for(auto const& string : strings)
593 {
594 enumeratorString += string;
595
596 if(string != strings.back())
597 {
598 enumeratorString += '|';
599 }
600 }
601
602 return enumeratorString;
603}
604
605static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600606bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600607{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800608 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600609 if(enumerator & (~allFlags))
610 {
611 return false;
612 }
613
614 return true;
615}
616
617static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600618std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600619{
620 if(!ValidateEnumerator(enumerator))
621 {
622 return "unrecognized enumerator";
623 }
624
625 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800626 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800628 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600629 }
630
631 std::string enumeratorString;
632 for(auto const& string : strings)
633 {
634 enumeratorString += string;
635
636 if(string != strings.back())
637 {
638 enumeratorString += '|';
639 }
640 }
641
642 return enumeratorString;
643}
644
645static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
647{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800648 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
649 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
650 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600651 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600652 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600653 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600654 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600655
656 return true;
657}
658
659static
660std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
661{
662 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600663 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600664 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600665 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600666
667 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800668 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600669 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800670 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600671 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800672 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600673 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800674 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600675 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800676 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600677 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800678 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600679 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600680
681 std::string enumeratorString;
682 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600683 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600684 enumeratorString += string;
685
686 if(string != strings.back())
687 {
688 enumeratorString += '|';
689 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600690 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600691
692 return enumeratorString;
693}
694
695static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600696bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
697{
698 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
699 if(enumerator & (~allFlags))
700 {
701 return false;
702 }
703
704 return true;
705}
706
707static
708std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
709{
710 if(!ValidateEnumerator(enumerator))
711 {
712 return "unrecognized enumerator";
713 }
714
715 std::vector<std::string> strings;
716 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
717 {
718 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
719 }
720
721 std::string enumeratorString;
722 for(auto const& string : strings)
723 {
724 enumeratorString += string;
725
726 if(string != strings.back())
727 {
728 enumeratorString += '|';
729 }
730 }
731
732 return enumeratorString;
733}
734
735static
736bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
737{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600738 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
739 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
740 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600749 if(enumerator & (~allFlags))
750 {
751 return false;
752 }
753
754 return true;
755}
756
757static
758std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
759{
760 if(!ValidateEnumerator(enumerator))
761 {
762 return "unrecognized enumerator";
763 }
764
765 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600766 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600771 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600773 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600774 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600776 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600777 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600778 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600779 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600780 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600781 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600806 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600808 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 }
810
811 std::string enumeratorString;
812 for(auto const& string : strings)
813 {
814 enumeratorString += string;
815
816 if(string != strings.back())
817 {
818 enumeratorString += '|';
819 }
820 }
821
822 return enumeratorString;
823}
824
825static
826bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
827{
828 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
829 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
830 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700831 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600832 if(enumerator & (~allFlags))
833 {
834 return false;
835 }
836
837 return true;
838}
839
840static
841std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
842{
843 if(!ValidateEnumerator(enumerator))
844 {
845 return "unrecognized enumerator";
846 }
847
848 std::vector<std::string> strings;
849 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
850 {
851 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
852 }
853 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
854 {
855 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
856 }
857 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
858 {
859 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
860 }
861 if(enumerator & VK_QUERY_RESULT_64_BIT)
862 {
863 strings.push_back("VK_QUERY_RESULT_64_BIT");
864 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600865
866 std::string enumeratorString;
867 for(auto const& string : strings)
868 {
869 enumeratorString += string;
870
871 if(string != strings.back())
872 {
873 enumeratorString += '|';
874 }
875 }
876
877 return enumeratorString;
878}
879
880static
881bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
882{
883 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
884 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
885 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
886 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
887 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800888 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600889 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800890 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600891 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600892 if(enumerator & (~allFlags))
893 {
894 return false;
895 }
896
897 return true;
898}
899
900static
901std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
902{
903 if(!ValidateEnumerator(enumerator))
904 {
905 return "unrecognized enumerator";
906 }
907
908 std::vector<std::string> strings;
909 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
910 {
911 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
912 }
913 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
914 {
915 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
916 }
917 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
918 {
919 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
920 }
921 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
922 {
923 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
924 }
925 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
928 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800929 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600930 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800931 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600932 }
933 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
936 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800937 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600938 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800939 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600940 }
941 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
944 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600945
946 std::string enumeratorString;
947 for(auto const& string : strings)
948 {
949 enumeratorString += string;
950
951 if(string != strings.back())
952 {
953 enumeratorString += '|';
954 }
955 }
956
957 return enumeratorString;
958}
959
960static
961bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
962{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600963 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
964 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600965 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600966 if(enumerator & (~allFlags))
967 {
968 return false;
969 }
970
971 return true;
972}
973
974static
975std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
976{
977 if(!ValidateEnumerator(enumerator))
978 {
979 return "unrecognized enumerator";
980 }
981
982 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600983 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
984 {
985 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
986 }
987 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
988 {
989 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
990 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600991 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600992 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600993 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600994 }
995
996 std::string enumeratorString;
997 for(auto const& string : strings)
998 {
999 enumeratorString += string;
1000
1001 if(string != strings.back())
1002 {
1003 enumeratorString += '|';
1004 }
1005 }
1006
1007 return enumeratorString;
1008}
1009
1010static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001011bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1012{
1013 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001014 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1015 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001016 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001017 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018 if(enumerator & (~allFlags))
1019 {
1020 return false;
1021 }
1022
1023 return true;
1024}
1025
1026static
1027std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1028{
1029 if(!ValidateEnumerator(enumerator))
1030 {
1031 return "unrecognized enumerator";
1032 }
1033
1034 std::vector<std::string> strings;
1035 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1036 {
1037 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1038 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001039 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1040 {
1041 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1042 }
1043 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1044 {
1045 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1046 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001047 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1048 {
1049 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1050 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001051 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001052 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001053 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001054 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001055
1056 std::string enumeratorString;
1057 for(auto const& string : strings)
1058 {
1059 enumeratorString += string;
1060
1061 if(string != strings.back())
1062 {
1063 enumeratorString += '|';
1064 }
1065 }
1066
1067 return enumeratorString;
1068}
1069
1070static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001071bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001072{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001073 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1074 VK_COLOR_COMPONENT_B_BIT |
1075 VK_COLOR_COMPONENT_G_BIT |
1076 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001077 if(enumerator & (~allFlags))
1078 {
1079 return false;
1080 }
1081
1082 return true;
1083}
1084
1085static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001086std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001087{
1088 if(!ValidateEnumerator(enumerator))
1089 {
1090 return "unrecognized enumerator";
1091 }
1092
1093 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001094 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001095 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001096 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001097 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001098 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001099 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001100 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001101 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001102 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001103 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001104 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001105 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001106 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001107 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001108 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001109 }
1110
1111 std::string enumeratorString;
1112 for(auto const& string : strings)
1113 {
1114 enumeratorString += string;
1115
1116 if(string != strings.back())
1117 {
1118 enumeratorString += '|';
1119 }
1120 }
1121
1122 return enumeratorString;
1123}
1124
1125static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001126bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001127{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001128 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1129 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1130 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001131 if(enumerator & (~allFlags))
1132 {
1133 return false;
1134 }
1135
1136 return true;
1137}
1138
1139static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001140std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001141{
1142 if(!ValidateEnumerator(enumerator))
1143 {
1144 return "unrecognized enumerator";
1145 }
1146
1147 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001148 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001149 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001150 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1151 }
1152 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1153 {
1154 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1155 }
1156 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1157 {
1158 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001159 }
1160
1161 std::string enumeratorString;
1162 for(auto const& string : strings)
1163 {
1164 enumeratorString += string;
1165
1166 if(string != strings.back())
1167 {
1168 enumeratorString += '|';
1169 }
1170 }
1171
1172 return enumeratorString;
1173}
1174
1175static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001176bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001177{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001178 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1179 VK_SHADER_STAGE_FRAGMENT_BIT |
1180 VK_SHADER_STAGE_GEOMETRY_BIT |
1181 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001182 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1183 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001184 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001185 if(enumerator & (~allFlags))
1186 {
1187 return false;
1188 }
1189
1190 return true;
1191}
1192
1193static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001194std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001195{
1196 if(!ValidateEnumerator(enumerator))
1197 {
1198 return "unrecognized enumerator";
1199 }
1200
1201 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001202 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001203 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001204 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001205 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001206 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001207 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001208 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001209 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001210 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001211 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001212 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1213 }
1214 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1215 {
1216 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1217 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001218 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001220 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001221 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001222 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001223 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001224 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001225 }
1226 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1227 {
1228 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001229 }
1230
1231 std::string enumeratorString;
1232 for(auto const& string : strings)
1233 {
1234 enumeratorString += string;
1235
1236 if(string != strings.back())
1237 {
1238 enumeratorString += '|';
1239 }
1240 }
1241
1242 return enumeratorString;
1243}
1244
1245static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001246bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001247{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001248 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001249 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001250 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1251 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001252 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001253 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001255 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001257 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1258 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1259 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1260 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1261 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1262 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1263 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1264 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1265 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001266 if(enumerator & (~allFlags))
1267 {
1268 return false;
1269 }
1270
1271 return true;
1272}
1273
1274static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001275std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001276{
1277 if(!ValidateEnumerator(enumerator))
1278 {
1279 return "unrecognized enumerator";
1280 }
1281
1282 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001283 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001284 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001285 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1286 }
1287 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1288 {
1289 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001290 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001291 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001292 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001293 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001294 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001295 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001296 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001297 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001298 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001299 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001300 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001301 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001302 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001303 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001304 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001305 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001306 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001307 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001308 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001309 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001311 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001312 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001314 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001315 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001316 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001317 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001318 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001319 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001320 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001321 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001322 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001323 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001324 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1326 }
1327 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1328 {
1329 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1330 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001331 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001332 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001333 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001334 }
1335 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1336 {
1337 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1338 }
1339 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1340 {
1341 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1342 }
1343 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1344 {
1345 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1346 }
1347 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1348 {
1349 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001350 }
1351
1352 std::string enumeratorString;
1353 for(auto const& string : strings)
1354 {
1355 enumeratorString += string;
1356
1357 if(string != strings.back())
1358 {
1359 enumeratorString += '|';
1360 }
1361 }
1362
1363 return enumeratorString;
1364}
1365
1366static
Chia-I Wua4594202015-10-27 19:54:37 +08001367bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001368{
Chia-I Wua4594202015-10-27 19:54:37 +08001369 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1370 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1371 VK_ACCESS_INDEX_READ_BIT |
1372 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1373 VK_ACCESS_UNIFORM_READ_BIT |
1374 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1375 VK_ACCESS_SHADER_READ_BIT |
1376 VK_ACCESS_SHADER_WRITE_BIT |
1377 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1378 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1379 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1380 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1381 VK_ACCESS_TRANSFER_READ_BIT |
1382 VK_ACCESS_TRANSFER_WRITE_BIT |
1383 VK_ACCESS_HOST_READ_BIT |
1384 VK_ACCESS_HOST_WRITE_BIT |
1385 VK_ACCESS_MEMORY_READ_BIT |
1386 VK_ACCESS_MEMORY_WRITE_BIT);
1387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001388 if(enumerator & (~allFlags))
1389 {
1390 return false;
1391 }
1392
1393 return true;
1394}
1395
1396static
Chia-I Wua4594202015-10-27 19:54:37 +08001397std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001398{
1399 if(!ValidateEnumerator(enumerator))
1400 {
1401 return "unrecognized enumerator";
1402 }
1403
1404 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001405 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001406 {
Chia-I Wua4594202015-10-27 19:54:37 +08001407 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001408 }
Chia-I Wua4594202015-10-27 19:54:37 +08001409 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001410 {
Chia-I Wua4594202015-10-27 19:54:37 +08001411 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001412 }
Chia-I Wua4594202015-10-27 19:54:37 +08001413 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001414 {
Chia-I Wua4594202015-10-27 19:54:37 +08001415 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001416 }
Chia-I Wua4594202015-10-27 19:54:37 +08001417 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001418 {
Chia-I Wua4594202015-10-27 19:54:37 +08001419 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001420 }
Chia-I Wua4594202015-10-27 19:54:37 +08001421 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001422 {
Chia-I Wua4594202015-10-27 19:54:37 +08001423 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001424 }
Chia-I Wua4594202015-10-27 19:54:37 +08001425 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001426 {
Chia-I Wua4594202015-10-27 19:54:37 +08001427 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001428 }
Chia-I Wua4594202015-10-27 19:54:37 +08001429 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001430 {
Chia-I Wua4594202015-10-27 19:54:37 +08001431 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001432 }
Chia-I Wua4594202015-10-27 19:54:37 +08001433 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001434 {
Chia-I Wua4594202015-10-27 19:54:37 +08001435 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001436 }
Chia-I Wua4594202015-10-27 19:54:37 +08001437 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001438 {
Chia-I Wua4594202015-10-27 19:54:37 +08001439 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001440 }
Chia-I Wua4594202015-10-27 19:54:37 +08001441 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001442 {
Chia-I Wua4594202015-10-27 19:54:37 +08001443 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001444 }
Chia-I Wua4594202015-10-27 19:54:37 +08001445 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001446 {
Chia-I Wua4594202015-10-27 19:54:37 +08001447 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001448 }
Chia-I Wua4594202015-10-27 19:54:37 +08001449 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001450 {
Chia-I Wua4594202015-10-27 19:54:37 +08001451 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001452 }
Chia-I Wua4594202015-10-27 19:54:37 +08001453 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001454 {
Chia-I Wua4594202015-10-27 19:54:37 +08001455 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001456 }
Chia-I Wua4594202015-10-27 19:54:37 +08001457 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001458 {
Chia-I Wua4594202015-10-27 19:54:37 +08001459 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001460 }
Chia-I Wua4594202015-10-27 19:54:37 +08001461 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001462 {
Chia-I Wua4594202015-10-27 19:54:37 +08001463 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001464 }
Chia-I Wua4594202015-10-27 19:54:37 +08001465 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001466 {
Chia-I Wua4594202015-10-27 19:54:37 +08001467 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001468 }
Chia-I Wua4594202015-10-27 19:54:37 +08001469 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001470 {
Chia-I Wua4594202015-10-27 19:54:37 +08001471 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001472 }
1473
1474 std::string enumeratorString;
1475 for(auto const& string : strings)
1476 {
1477 enumeratorString += string;
1478
1479 if(string != strings.back())
1480 {
1481 enumeratorString += '|';
1482 }
1483 }
1484
1485 return enumeratorString;
1486}
1487
1488static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001489bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001490{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001491 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1492 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 if(enumerator & (~allFlags))
1494 {
1495 return false;
1496 }
1497
1498 return true;
1499}
1500
1501static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001502std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001503{
1504 if(!ValidateEnumerator(enumerator))
1505 {
1506 return "unrecognized enumerator";
1507 }
1508
1509 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001510 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001511 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001512 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001513 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001514 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001515 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001516 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001517 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001518
1519 std::string enumeratorString;
1520 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001521 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001522 enumeratorString += string;
1523
1524 if(string != strings.back())
1525 {
1526 enumeratorString += '|';
1527 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001528 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001529
1530 return enumeratorString;
1531}
1532
1533static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001534bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001535{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001536 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001537 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001538 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001539 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001540 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001541
1542 return true;
1543}
1544
1545static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001546std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001547{
1548 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001549 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001550 return "unrecognized enumerator";
1551 }
1552
1553 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001554 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001556 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001557 }
1558
1559 std::string enumeratorString;
1560 for(auto const& string : strings)
1561 {
1562 enumeratorString += string;
1563
1564 if(string != strings.back())
1565 {
1566 enumeratorString += '|';
1567 }
1568 }
1569
1570 return enumeratorString;
1571}
1572
1573static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001574bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001575{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001576 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1577 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1578 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001579 if(enumerator & (~allFlags))
1580 {
1581 return false;
1582 }
1583
1584 return true;
1585}
1586
1587static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001588std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001589{
1590 if(!ValidateEnumerator(enumerator))
1591 {
1592 return "unrecognized enumerator";
1593 }
1594
1595 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001596 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001597 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001598 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001599 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001600 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001601 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001602 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001603 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001604 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001605 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001606 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001607 }
1608
1609 std::string enumeratorString;
1610 for(auto const& string : strings)
1611 {
1612 enumeratorString += string;
1613
1614 if(string != strings.back())
1615 {
1616 enumeratorString += '|';
1617 }
1618 }
1619
1620 return enumeratorString;
1621}
1622
1623static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001624bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001625{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001626 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001627 if(enumerator & (~allFlags))
1628 {
1629 return false;
1630 }
1631
1632 return true;
1633}
1634
1635static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001636std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001637{
1638 if(!ValidateEnumerator(enumerator))
1639 {
1640 return "unrecognized enumerator";
1641 }
1642
1643 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001644 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001645 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001646 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001647 }
1648
1649 std::string enumeratorString;
1650 for(auto const& string : strings)
1651 {
1652 enumeratorString += string;
1653
1654 if(string != strings.back())
1655 {
1656 enumeratorString += '|';
1657 }
1658 }
1659
1660 return enumeratorString;
1661}
1662
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001663static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001664bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001665{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001666 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1667 VK_IMAGE_ASPECT_STENCIL_BIT |
1668 VK_IMAGE_ASPECT_DEPTH_BIT |
1669 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001670 if(enumerator & (~allFlags))
1671 {
1672 return false;
1673 }
1674
1675 return true;
1676}
1677
1678static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001679std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001680{
1681 if(!ValidateEnumerator(enumerator))
1682 {
1683 return "unrecognized enumerator";
1684 }
1685
1686 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001687 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001688 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001689 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1690 }
1691 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1692 {
1693 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1694 }
1695 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1696 {
1697 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1698 }
1699 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1700 {
1701 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1702 }
1703
1704 std::string enumeratorString;
1705 for(auto const& string : strings)
1706 {
1707 enumeratorString += string;
1708
1709 if(string != strings.back())
1710 {
1711 enumeratorString += '|';
1712 }
1713 }
1714
1715 return enumeratorString;
1716}
1717
1718static
1719bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1720{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001721 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001722 if(enumerator & (~allFlags))
1723 {
1724 return false;
1725 }
1726
1727 return true;
1728}
1729
1730static
1731std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1732{
1733 if(!ValidateEnumerator(enumerator))
1734 {
1735 return "unrecognized enumerator";
1736 }
1737
1738 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001739 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001740 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001741 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001742 }
1743
1744 std::string enumeratorString;
1745 for(auto const& string : strings)
1746 {
1747 enumeratorString += string;
1748
1749 if(string != strings.back())
1750 {
1751 enumeratorString += '|';
1752 }
1753 }
1754
1755 return enumeratorString;
1756}
1757
Chia-I Wu9ab61502015-11-06 06:42:02 +08001758VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001759 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001760 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001761 VkInstance* pInstance)
1762{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001763 VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001764
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001765 assert(chain_info->u.pLayerInfo);
1766 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
1767 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance) fpGetInstanceProcAddr(NULL, "vkCreateInstance");
1768 if (fpCreateInstance == NULL) {
1769 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770 }
1771
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001772 // Advance the link info for the next element on the chain
1773 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
1774
1775 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
1776 if (result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001777 return result;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001778
1779 layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1780 VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
1781
1782 my_data->report_data = debug_report_create_instance(
1783 pTable,
1784 *pInstance,
1785 pCreateInfo->enabledExtensionCount,
1786 pCreateInfo->ppEnabledExtensionNames);
1787
1788 InitParamChecker(my_data, pAllocator);
1789
1790 return result;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001791}
1792
Chia-I Wu9ab61502015-11-06 06:42:02 +08001793VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001794 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001795 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001796{
1797 // Grab the key before the instance is destroyed.
1798 dispatch_key key = get_dispatch_key(instance);
1799 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001800 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001801
1802 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001803 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1804 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001805 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001806 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001807 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001808 }
1809
1810 layer_debug_report_destroy_instance(mid(instance));
1811 layer_data_map.erase(pTable);
1812
1813 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001814}
1815
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001816bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001817 VkInstance instance,
1818 uint32_t* pPhysicalDeviceCount,
1819 VkPhysicalDevice* pPhysicalDevices,
1820 VkResult result)
1821{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001822
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001823 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001824 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001825 }
1826
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001827 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829 }
1830
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001831 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001832 {
1833 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001834 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 -06001835 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001836 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001837
1838 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001839}
1840
Chia-I Wu9ab61502015-11-06 06:42:02 +08001841VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001842 VkInstance instance,
1843 uint32_t* pPhysicalDeviceCount,
1844 VkPhysicalDevice* pPhysicalDevices)
1845{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001846 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1847
1848 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1849
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001850 return result;
1851}
1852
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001853bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001854 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001855 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001856{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001857
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001858 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001859 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001860 }
1861
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001862 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001863}
1864
Chia-I Wu9ab61502015-11-06 06:42:02 +08001865VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001866 VkPhysicalDevice physicalDevice,
1867 VkPhysicalDeviceFeatures* pFeatures)
1868{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001869 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001870
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001871 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001872}
1873
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001874bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001875 VkPhysicalDevice physicalDevice,
1876 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001877 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001878{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001879
1880 if(format < VK_FORMAT_BEGIN_RANGE ||
1881 format > VK_FORMAT_END_RANGE)
1882 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001883 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001884 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001885 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886 }
1887
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001888 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001889 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001890 }
1891
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001892 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001893}
1894
Chia-I Wu9ab61502015-11-06 06:42:02 +08001895VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001896 VkPhysicalDevice physicalDevice,
1897 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001898 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001899{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001900 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001901
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001902 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001903}
1904
1905bool PostGetPhysicalDeviceImageFormatProperties(
1906 VkPhysicalDevice physicalDevice,
1907 VkFormat format,
1908 VkImageType type,
1909 VkImageTiling tiling,
1910 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001911 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001912 VkImageFormatProperties* pImageFormatProperties,
1913 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001914{
1915
1916 if(format < VK_FORMAT_BEGIN_RANGE ||
1917 format > VK_FORMAT_END_RANGE)
1918 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001919 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001920 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1921 return false;
1922 }
1923
1924 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1925 type > VK_IMAGE_TYPE_END_RANGE)
1926 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001927 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001928 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1929 return false;
1930 }
1931
1932 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1933 tiling > VK_IMAGE_TILING_END_RANGE)
1934 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001935 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001936 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1937 return false;
1938 }
1939
1940
1941 if(pImageFormatProperties != nullptr)
1942 {
1943 }
1944
Chia-I Wu17241042015-10-31 00:31:16 +08001945 if(result < VK_SUCCESS)
1946 {
1947 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001948 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 +08001949 return false;
1950 }
1951
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001952 return true;
1953}
1954
Chia-I Wu9ab61502015-11-06 06:42:02 +08001955VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001956 VkPhysicalDevice physicalDevice,
1957 VkFormat format,
1958 VkImageType type,
1959 VkImageTiling tiling,
1960 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001961 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001962 VkImageFormatProperties* pImageFormatProperties)
1963{
Chia-I Wu17241042015-10-31 00:31:16 +08001964 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 -06001965
Chia-I Wu17241042015-10-31 00:31:16 +08001966 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1967
1968 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001969}
1970
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001971bool PostGetPhysicalDeviceProperties(
1972 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001973 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001974{
1975
1976 if(pProperties != nullptr)
1977 {
1978 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1979 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1980 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001981 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001982 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1983 return false;
1984 }
1985 }
1986
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001987 return true;
1988}
1989
Chia-I Wu9ab61502015-11-06 06:42:02 +08001990VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001991 VkPhysicalDevice physicalDevice,
1992 VkPhysicalDeviceProperties* pProperties)
1993{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001994 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001995
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001996 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001997}
1998
Cody Northropd0802882015-08-03 17:04:53 -06001999bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002000 VkPhysicalDevice physicalDevice,
2001 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002002 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002003{
2004
Cody Northropd0802882015-08-03 17:04:53 -06002005 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002006 {
2007 }
2008
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002009 if(pQueueProperties != nullptr)
2010 {
2011 }
2012
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002013 return true;
2014}
2015
Chia-I Wu9ab61502015-11-06 06:42:02 +08002016VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002017 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002018 uint32_t* pCount,
2019 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002020{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002021 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002022
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002023 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002024}
2025
2026bool PostGetPhysicalDeviceMemoryProperties(
2027 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002028 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029{
2030
2031 if(pMemoryProperties != nullptr)
2032 {
2033 }
2034
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002035 return true;
2036}
2037
Chia-I Wu9ab61502015-11-06 06:42:02 +08002038VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002039 VkPhysicalDevice physicalDevice,
2040 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2041{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002042 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002043
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002044 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002045}
2046
Chia-I Wu9ab61502015-11-06 06:42:02 +08002047VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002048 VkPhysicalDevice physicalDevice,
2049 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002050 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002051 VkDevice* pDevice)
2052{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002053 /*
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002054 * NOTE: We do not validate physicalDevice or any dispatchable
2055 * object as the first parameter. We couldn't get here if it was wrong!
2056 */
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002057 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
2058
2059 assert(chain_info->u.pLayerInfo);
2060 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
2061 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
2062 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice) fpGetInstanceProcAddr(NULL, "vkCreateDevice");
2063 if (fpCreateDevice == NULL) {
2064 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002065 }
2066
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002067 // Advance the link info for the next element on the chain
2068 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
2069
2070 VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
2071 if (result != VK_SUCCESS) {
2072 return result;
2073 }
2074
2075 layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2076 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2077 my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
2078 initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
2079
Jeremy Hayes99a96322015-06-26 12:48:09 -06002080 return result;
2081}
2082
Chia-I Wu9ab61502015-11-06 06:42:02 +08002083VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002084 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002085 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002086{
2087 layer_debug_report_destroy_device(device);
2088
2089 dispatch_key key = get_dispatch_key(device);
2090#if DISPATCH_MAP_DEBUG
2091 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2092#endif
2093
Chia-I Wuf7458c52015-10-26 21:10:41 +08002094 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002095 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002096}
2097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002098bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002099 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002100 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002102 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104
2105
2106
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002107 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002108 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002109 }
2110
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002111 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002112}
2113
Chia-I Wu9ab61502015-11-06 06:42:02 +08002114VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002115 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002116 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117 uint32_t queueIndex,
2118 VkQueue* pQueue)
2119{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002120 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002121
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002122 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002123}
2124
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002125bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002127 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002128{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002129 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002130 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002131 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002132 return false;
2133 }
2134
2135 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002136 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002138
2139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002140}
2141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002142bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002143 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002144 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002145 VkFence fence,
2146 VkResult result)
2147{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002148
2149
Jeremy Hayes99a96322015-06-26 12:48:09 -06002150
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002151 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002152 {
2153 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002154 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 -06002155 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002156 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002157
2158 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159}
2160
Chia-I Wu9ab61502015-11-06 06:42:02 +08002161VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002162 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002163 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002164 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002165 VkFence fence)
2166{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002167 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002168 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002169 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002170
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002171 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002172
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002173 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002174
2175 return result;
2176}
2177
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002178bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179 VkQueue queue,
2180 VkResult result)
2181{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002183 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 {
2185 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002186 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 -06002187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002188 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002189
2190 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002191}
2192
Chia-I Wu9ab61502015-11-06 06:42:02 +08002193VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002194 VkQueue queue)
2195{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2197
2198 PostQueueWaitIdle(queue, result);
2199
2200 return result;
2201}
2202
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002203bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204 VkDevice device,
2205 VkResult result)
2206{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002207
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002208 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002209 {
2210 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002211 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 -06002212 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002213 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002214
2215 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002216}
2217
Chia-I Wu9ab61502015-11-06 06:42:02 +08002218VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219 VkDevice device)
2220{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2222
2223 PostDeviceWaitIdle(device, result);
2224
2225 return result;
2226}
2227
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002228bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002229 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002230 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002231{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002232 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002233 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002234 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002236 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002237 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002239 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002241
2242 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002243}
2244
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002245bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002247 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248 VkResult result)
2249{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002250
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002251 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002252 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002253 }
2254
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002255 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002257 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002258 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 -06002259 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002261
2262 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002263}
2264
Chia-I Wu9ab61502015-11-06 06:42:02 +08002265VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002266 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002267 const VkMemoryAllocateInfo* pAllocateInfo,
2268 const VkAllocationCallbacks* pAllocator,
2269 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002271 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002272
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002273 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002275 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002276
2277 return result;
2278}
2279
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002280bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281 VkDevice device,
2282 VkDeviceMemory mem,
2283 VkDeviceSize offset,
2284 VkDeviceSize size,
2285 VkMemoryMapFlags flags,
2286 void** ppData,
2287 VkResult result)
2288{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002289
Jeremy Hayes99a96322015-06-26 12:48:09 -06002290
2291
2292
2293
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002294 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002295 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296 }
2297
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002298 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299 {
2300 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002301 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 -06002302 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002303 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002304
2305 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002306}
2307
Chia-I Wu9ab61502015-11-06 06:42:02 +08002308VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309 VkDevice device,
2310 VkDeviceMemory mem,
2311 VkDeviceSize offset,
2312 VkDeviceSize size,
2313 VkMemoryMapFlags flags,
2314 void** ppData)
2315{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2317
2318 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2319
2320 return result;
2321}
2322
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002323bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002324 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002325 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002327 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002328 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002329 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002331 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002332 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002333 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002334 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002335 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002336
2337 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002338}
2339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002340bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002341 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002342 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002343 VkResult result)
2344{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345
2346
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002347 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002348 {
2349 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002350 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 -06002351 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002352 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002353
2354 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002355}
2356
Chia-I Wu9ab61502015-11-06 06:42:02 +08002357VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002358 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002359 uint32_t memoryRangeCount,
2360 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002361{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002362 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002363
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002364 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002365
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002366 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002367
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002368 return result;
2369}
2370
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002371bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002373 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002375 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002376 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002377 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002379 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002380 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002381 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002382 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002383 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002384
2385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386}
2387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002388bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002390 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391 VkResult result)
2392{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002393
2394
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002395 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002396 {
2397 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002398 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 -06002399 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002400 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002401
2402 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002403}
2404
Chia-I Wu9ab61502015-11-06 06:42:02 +08002405VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002406 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002407 uint32_t memoryRangeCount,
2408 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002409{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002410 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002411
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002412 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002413
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002414 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002415
Tony Barbourb1250542015-04-16 19:23:13 -06002416 return result;
2417}
2418
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002419bool PostGetDeviceMemoryCommitment(
2420 VkDevice device,
2421 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002422 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002423{
2424
2425
2426 if(pCommittedMemoryInBytes != nullptr)
2427 {
2428 }
2429
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002430 return true;
2431}
2432
Chia-I Wu9ab61502015-11-06 06:42:02 +08002433VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002434 VkDevice device,
2435 VkDeviceMemory memory,
2436 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002437{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002438 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002439
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002440 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002441}
2442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002443bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002444 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002445 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002446 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002447 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002448 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002449{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002451
Jeremy Hayes99a96322015-06-26 12:48:09 -06002452
2453
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002454 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002455 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002456 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002457 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 -06002458 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002459 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002460
2461 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002462}
2463
Chia-I Wu9ab61502015-11-06 06:42:02 +08002464VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002465 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002466 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002467 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002468 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002469{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002470 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002471
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002472 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002473
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002474 return result;
2475}
2476
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002477bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002478 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002479 VkImage image,
2480 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002481 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002482 VkResult result)
2483{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002484
2485
2486
2487
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002488 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002489 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002490 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002491 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 -06002492 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493 }
2494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002495 return true;
2496}
2497
Chia-I Wu9ab61502015-11-06 06:42:02 +08002498VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002499 VkDevice device,
2500 VkImage image,
2501 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002502 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002503{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002504 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002505
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002506 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002507
2508 return result;
2509}
2510
2511bool PostGetBufferMemoryRequirements(
2512 VkDevice device,
2513 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002514 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002515{
2516
2517
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002518 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002519 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002520 }
2521
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002522 return true;
2523}
2524
Chia-I Wu9ab61502015-11-06 06:42:02 +08002525VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002526 VkDevice device,
2527 VkBuffer buffer,
2528 VkMemoryRequirements* pMemoryRequirements)
2529{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002530 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002531
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002532 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002533}
2534
2535bool PostGetImageMemoryRequirements(
2536 VkDevice device,
2537 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002538 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002539{
2540
2541
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002542 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002543 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002544 }
2545
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002546 return true;
2547}
2548
Chia-I Wu9ab61502015-11-06 06:42:02 +08002549VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002550 VkDevice device,
2551 VkImage image,
2552 VkMemoryRequirements* pMemoryRequirements)
2553{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002554 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002555
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002556 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557}
2558
2559bool PostGetImageSparseMemoryRequirements(
2560 VkDevice device,
2561 VkImage image,
2562 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002563 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002564{
2565
2566
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002567 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002568 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569 }
2570
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002571 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002572 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002573 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002574 (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 -06002575 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002576 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002577 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578 return false;
2579 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002580 }
2581
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002582 return true;
2583}
2584
Chia-I Wu9ab61502015-11-06 06:42:02 +08002585VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002586 VkDevice device,
2587 VkImage image,
2588 uint32_t* pNumRequirements,
2589 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2590{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002591 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002593 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002594}
2595
2596bool PostGetPhysicalDeviceSparseImageFormatProperties(
2597 VkPhysicalDevice physicalDevice,
2598 VkFormat format,
2599 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002600 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002601 VkImageUsageFlags usage,
2602 VkImageTiling tiling,
2603 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002604 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605{
2606
2607 if(format < VK_FORMAT_BEGIN_RANGE ||
2608 format > VK_FORMAT_END_RANGE)
2609 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002610 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002611 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002612 return false;
2613 }
2614
2615 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2616 type > VK_IMAGE_TYPE_END_RANGE)
2617 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002618 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002619 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002620 return false;
2621 }
2622
2623
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002624
2625 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2626 tiling > VK_IMAGE_TILING_END_RANGE)
2627 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002628 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002629 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002630 return false;
2631 }
2632
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002633 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002634 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635 }
2636
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002637 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002638 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002639 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002640 (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 -06002641 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002642 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002643 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002644 return false;
2645 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002646 }
2647
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002648 return true;
2649}
2650
Chia-I Wu9ab61502015-11-06 06:42:02 +08002651VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652 VkPhysicalDevice physicalDevice,
2653 VkFormat format,
2654 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002655 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002656 VkImageUsageFlags usage,
2657 VkImageTiling tiling,
2658 uint32_t* pNumProperties,
2659 VkSparseImageFormatProperties* pProperties)
2660{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002661 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002662
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002663 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664}
2665
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002666bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002667 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002668 uint32_t bindInfoCount,
2669 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002670{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002671 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002673 }
2674
2675 return true;
2676}
2677
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002678bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002679 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002680 uint32_t bindInfoCount,
2681 const VkBindSparseInfo* pBindInfo,
2682 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002683 VkResult result)
2684{
2685
2686
2687
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002688 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002689 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002690 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002691 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 -06002692 return false;
2693 }
2694
2695 return true;
2696}
2697
Chia-I Wu9ab61502015-11-06 06:42:02 +08002698VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002699 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002700 uint32_t bindInfoCount,
2701 const VkBindSparseInfo* pBindInfo,
2702 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002703{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002704 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002705
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002706 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002707
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002708 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002709
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002710 return result;
2711}
2712
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002713bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002714 VkDevice device,
2715 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002716{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002717 if(pCreateInfo != nullptr)
2718 {
2719 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002720 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002721 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002722 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002723 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002724 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002725 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002726
2727 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002728}
2729
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002730bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002731 VkDevice device,
2732 VkFence* pFence,
2733 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002734{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002735
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002736 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002737 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002738 }
2739
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002740 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002741 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002742 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002743 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 -06002744 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002745 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002746
2747 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002748}
2749
Chia-I Wu9ab61502015-11-06 06:42:02 +08002750VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002751 VkDevice device,
2752 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002753 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002754 VkFence* pFence)
2755{
2756 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002757
Chia-I Wuf7458c52015-10-26 21:10:41 +08002758 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002759
2760 PostCreateFence(device, pFence, result);
2761
2762 return result;
2763}
2764
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002765bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766 VkDevice device,
2767 const VkFence* pFences)
2768{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002769 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002770 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002771 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002772
2773 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002774}
2775
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002776bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002777 VkDevice device,
2778 uint32_t fenceCount,
2779 VkResult result)
2780{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002781
2782
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002783 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002784 {
2785 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002786 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 -06002787 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002789
2790 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002791}
2792
Chia-I Wu9ab61502015-11-06 06:42:02 +08002793VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002794 VkDevice device,
2795 uint32_t fenceCount,
2796 const VkFence* pFences)
2797{
2798 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002799
Jeremy Hayes99a96322015-06-26 12:48:09 -06002800 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2801
2802 PostResetFences(device, fenceCount, result);
2803
2804 return result;
2805}
2806
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002807bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002808 VkDevice device,
2809 VkFence fence,
2810 VkResult result)
2811{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002812
Jeremy Hayes99a96322015-06-26 12:48:09 -06002813
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002814 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002815 {
2816 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002817 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 -06002818 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002819 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002820
2821 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002822}
2823
Chia-I Wu9ab61502015-11-06 06:42:02 +08002824VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 VkDevice device,
2826 VkFence fence)
2827{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2829
2830 PostGetFenceStatus(device, fence, result);
2831
2832 return result;
2833}
2834
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002835bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002836 VkDevice device,
2837 const VkFence* pFences)
2838{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002839 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002840 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002841 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002842
2843 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002844}
2845
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002846bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002847 VkDevice device,
2848 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002849 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002850 uint64_t timeout,
2851 VkResult result)
2852{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002853
2854
2855
2856
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002857 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002858 {
2859 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002860 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 -06002861 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002862 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002863
2864 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002865}
2866
Chia-I Wu9ab61502015-11-06 06:42:02 +08002867VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002868 VkDevice device,
2869 uint32_t fenceCount,
2870 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002871 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002872 uint64_t timeout)
2873{
2874 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002875
Jeremy Hayes99a96322015-06-26 12:48:09 -06002876 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2877
2878 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2879
2880 return result;
2881}
2882
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002883bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002884 VkDevice device,
2885 const VkSemaphoreCreateInfo* pCreateInfo)
2886{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002887 if(pCreateInfo != nullptr)
2888 {
2889 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002891 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002892 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002893 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002894 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002895 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002896
2897 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898}
2899
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002900bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002901 VkDevice device,
2902 VkSemaphore* pSemaphore,
2903 VkResult result)
2904{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002905
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002906 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002907 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002908 }
2909
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002910 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002911 {
2912 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002913 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 -06002914 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002915 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002916
2917 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002918}
2919
Chia-I Wu9ab61502015-11-06 06:42:02 +08002920VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 VkDevice device,
2922 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002923 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002924 VkSemaphore* pSemaphore)
2925{
2926 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002927
Chia-I Wuf7458c52015-10-26 21:10:41 +08002928 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002929
2930 PostCreateSemaphore(device, pSemaphore, result);
2931
2932 return result;
2933}
2934
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002935bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002936 VkDevice device,
2937 const VkEventCreateInfo* pCreateInfo)
2938{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002939 if(pCreateInfo != nullptr)
2940 {
2941 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002942 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002943 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002944 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002945 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002946 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002947 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002948
2949 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002950}
2951
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002952bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002953 VkDevice device,
2954 VkEvent* pEvent,
2955 VkResult result)
2956{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002957
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002958 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002959 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002960 }
2961
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002962 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002963 {
2964 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002965 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 -06002966 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002967 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002968
2969 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002970}
2971
Chia-I Wu9ab61502015-11-06 06:42:02 +08002972VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 VkDevice device,
2974 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002975 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002976 VkEvent* pEvent)
2977{
2978 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002979
Chia-I Wuf7458c52015-10-26 21:10:41 +08002980 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981
2982 PostCreateEvent(device, pEvent, result);
2983
2984 return result;
2985}
2986
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002987bool PostGetEventStatus(
2988 VkDevice device,
2989 VkEvent event,
2990 VkResult result)
2991{
2992
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002994 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002995 {
2996 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002997 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 -06002998 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002999 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003000
3001 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003002}
3003
Chia-I Wu9ab61502015-11-06 06:42:02 +08003004VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003005 VkDevice device,
3006 VkEvent event)
3007{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3009
3010 PostGetEventStatus(device, event, result);
3011
3012 return result;
3013}
3014
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003015bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003016 VkDevice device,
3017 VkEvent event,
3018 VkResult result)
3019{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003020
Jeremy Hayes99a96322015-06-26 12:48:09 -06003021
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003022 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023 {
3024 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003025 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 -06003026 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003027 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003028
3029 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030}
3031
Chia-I Wu9ab61502015-11-06 06:42:02 +08003032VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033 VkDevice device,
3034 VkEvent event)
3035{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3037
3038 PostSetEvent(device, event, result);
3039
3040 return result;
3041}
3042
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003043bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003044 VkDevice device,
3045 VkEvent event,
3046 VkResult result)
3047{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003048
Jeremy Hayes99a96322015-06-26 12:48:09 -06003049
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003050 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003051 {
3052 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003053 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 -06003054 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003055 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003056
3057 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003058}
3059
Chia-I Wu9ab61502015-11-06 06:42:02 +08003060VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003061 VkDevice device,
3062 VkEvent event)
3063{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3065
3066 PostResetEvent(device, event, result);
3067
3068 return result;
3069}
3070
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003071bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003072 VkDevice device,
3073 const VkQueryPoolCreateInfo* pCreateInfo)
3074{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003075 if(pCreateInfo != nullptr)
3076 {
3077 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003079 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003080 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003081 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003082 }
3083 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3084 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3085 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003086 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003087 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003088 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003089 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003090 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003091
3092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003093}
3094
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003095bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003096 VkDevice device,
3097 VkQueryPool* pQueryPool,
3098 VkResult result)
3099{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003100
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003101 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003102 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103 }
3104
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003105 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106 {
3107 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003108 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003111
3112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113}
3114
Chia-I Wu9ab61502015-11-06 06:42:02 +08003115VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116 VkDevice device,
3117 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003118 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003119 VkQueryPool* pQueryPool)
3120{
3121 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122
Chia-I Wuf7458c52015-10-26 21:10:41 +08003123 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124
3125 PostCreateQueryPool(device, pQueryPool, result);
3126
3127 return result;
3128}
3129
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131 VkDevice device,
3132 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003133 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003135 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003137 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003138 VkQueryResultFlags flags,
3139 VkResult result)
3140{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142
3143
3144
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003145 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003147 }
3148
Jeremy Hayes99a96322015-06-26 12:48:09 -06003149
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003150 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 {
3152 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003153 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 -06003154 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003155 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003156
3157 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158}
3159
Chia-I Wu9ab61502015-11-06 06:42:02 +08003160VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003161 VkDevice device,
3162 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003163 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003164 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003165 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003167 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003168 VkQueryResultFlags flags)
3169{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003170 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 -06003171
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003172 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173
3174 return result;
3175}
3176
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003177bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178 VkDevice device,
3179 const VkBufferCreateInfo* pCreateInfo)
3180{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003181 if(pCreateInfo != nullptr)
3182 {
3183 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003185 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003186 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003188 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003189 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3190 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003192 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003193 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003194 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003195 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003196 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003198 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003199 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003200
3201 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202}
3203
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003204bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003205 VkDevice device,
3206 VkBuffer* pBuffer,
3207 VkResult result)
3208{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003209
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003210 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003212 }
3213
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003214 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215 {
3216 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003217 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 -06003218 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003220
3221 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003222}
3223
Chia-I Wu9ab61502015-11-06 06:42:02 +08003224VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 VkDevice device,
3226 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003227 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003228 VkBuffer* pBuffer)
3229{
3230 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003231
Chia-I Wuf7458c52015-10-26 21:10:41 +08003232 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003233
3234 PostCreateBuffer(device, pBuffer, result);
3235
3236 return result;
3237}
3238
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003240 VkDevice device,
3241 const VkBufferViewCreateInfo* pCreateInfo)
3242{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003243 if(pCreateInfo != nullptr)
3244 {
3245 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003247 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003248 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003249 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003250 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3252 pCreateInfo->format > VK_FORMAT_END_RANGE)
3253 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003254 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003255 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003256 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003257 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003258 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259
3260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261}
3262
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003263bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003264 VkDevice device,
3265 VkBufferView* pView,
3266 VkResult result)
3267{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003269 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003270 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003271 }
3272
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003273 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274 {
3275 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003276 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 -06003277 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003278 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003279
3280 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003281}
3282
Chia-I Wu9ab61502015-11-06 06:42:02 +08003283VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 VkDevice device,
3285 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003286 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003287 VkBufferView* pView)
3288{
3289 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003290
Chia-I Wuf7458c52015-10-26 21:10:41 +08003291 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292
3293 PostCreateBufferView(device, pView, result);
3294
3295 return result;
3296}
3297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003298bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003299 VkDevice device,
3300 const VkImageCreateInfo* pCreateInfo)
3301{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003302 if(pCreateInfo != nullptr)
3303 {
3304 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003306 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003307 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003308 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003309 }
3310 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3311 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3312 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003313 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003314 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003315 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 }
3317 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3318 pCreateInfo->format > VK_FORMAT_END_RANGE)
3319 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003320 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003321 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003322 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003323 }
3324 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3325 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3326 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003327 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003328 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003329 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003330 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003331 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3332 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003334 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003335 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003336 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003338 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003339 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003340 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003341 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003342
3343 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344}
3345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003346bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003347 VkDevice device,
3348 VkImage* pImage,
3349 VkResult result)
3350{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003351
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003352 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003353 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354 }
3355
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003356 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 {
3358 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003359 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003360 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003361 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003362
3363 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003364}
3365
Chia-I Wu9ab61502015-11-06 06:42:02 +08003366VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 VkDevice device,
3368 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003369 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003370 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003371{
3372 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003373
Chia-I Wuf7458c52015-10-26 21:10:41 +08003374 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375
3376 PostCreateImage(device, pImage, result);
3377
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003378 return result;
3379}
3380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003381bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 VkDevice device,
3383 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003384{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003385 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003386 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003387 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003388 (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 -06003389 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003390 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003391 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003392 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003393 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003394 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003395
3396 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003397}
3398
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003399bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003400 VkDevice device,
3401 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003402 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003403{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003404
Jeremy Hayes99a96322015-06-26 12:48:09 -06003405
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003406 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003407 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003408 }
3409
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003411}
3412
Chia-I Wu9ab61502015-11-06 06:42:02 +08003413VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003414 VkDevice device,
3415 VkImage image,
3416 const VkImageSubresource* pSubresource,
3417 VkSubresourceLayout* pLayout)
3418{
3419 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003420
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003421 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003423 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424}
3425
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003426bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427 VkDevice device,
3428 const VkImageViewCreateInfo* pCreateInfo)
3429{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003430 if(pCreateInfo != nullptr)
3431 {
3432 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003433 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003434 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003435 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003436 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437 }
3438 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3439 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3440 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003441 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003442 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003443 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003444 }
3445 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3446 pCreateInfo->format > VK_FORMAT_END_RANGE)
3447 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003448 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003449 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003450 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003451 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003452 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3453 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003454 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003455 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003456 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003457 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003458 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003459 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3460 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003461 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003462 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003463 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003464 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003465 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003466 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3467 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003468 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003469 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003470 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003471 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003472 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003473 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3474 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003475 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003476 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003477 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003478 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003479 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003480 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003481
3482 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003483}
3484
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003485bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003486 VkDevice device,
3487 VkImageView* pView,
3488 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003489{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003490
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003491 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003492 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003493 }
3494
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003495 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003496 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003497 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003498 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 -06003499 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003500 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003501
3502 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003503}
3504
Chia-I Wu9ab61502015-11-06 06:42:02 +08003505VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003506 VkDevice device,
3507 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003508 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003509 VkImageView* pView)
3510{
3511 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003512
Chia-I Wuf7458c52015-10-26 21:10:41 +08003513 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003514
3515 PostCreateImageView(device, pView, result);
3516
3517 return result;
3518}
3519
Michael Lentine03d8e572015-09-15 14:59:14 -05003520bool PreCreateShaderModule(
3521 VkDevice device,
3522 const VkShaderModuleCreateInfo* pCreateInfo)
3523{
3524 if(pCreateInfo) {
3525 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003526 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003527 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3528 return false;
3529 }
3530 if(!pCreateInfo->pCode) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003531 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003532 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3533 return false;
3534 }
3535 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003536 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003537 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3538 return false;
3539 }
3540
3541 return true;
3542}
3543
3544bool PostCreateShaderModule(
3545 VkDevice device,
3546 VkShaderModule* pShaderModule,
3547 VkResult result)
3548{
3549 if(result < VK_SUCCESS) {
3550 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003551 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 -05003552 return false;
3553 }
3554
3555 return true;
3556}
3557
Chia-I Wu9ab61502015-11-06 06:42:02 +08003558VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003559 VkDevice device,
3560 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003561 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003562 VkShaderModule* pShaderModule)
3563{
3564 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003565 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003566 PostCreateShaderModule(device, pShaderModule, result);
3567 return result;
3568}
3569
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003570bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003571 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003572 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003574 if(pCreateInfo != nullptr)
3575 {
3576 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003577 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003578 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003579 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003580 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003581 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003582 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003584 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003585 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003586
3587 return true;
3588}
3589
3590bool PostCreatePipelineCache(
3591 VkDevice device,
3592 VkPipelineCache* pPipelineCache,
3593 VkResult result)
3594{
3595
3596 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003597 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003598 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003599
3600 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003601 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003602 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003603 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 -06003604 return false;
3605 }
3606
3607 return true;
3608}
3609
Chia-I Wu9ab61502015-11-06 06:42:02 +08003610VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003611 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003612 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003613 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003614 VkPipelineCache* pPipelineCache)
3615{
3616 PreCreatePipelineCache(device, pCreateInfo);
3617
Chia-I Wuf7458c52015-10-26 21:10:41 +08003618 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619
3620 PostCreatePipelineCache(device, pPipelineCache, result);
3621
3622 return result;
3623}
3624
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003625bool PostGetPipelineCacheData(
3626 VkDevice device,
3627 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003628 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003629 void* pData,
3630 VkResult result)
3631{
3632
3633
Chia-I Wub16facd2015-10-26 19:17:06 +08003634 if(pDataSize != nullptr)
3635 {
3636 }
3637
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003638 if(pData != nullptr)
3639 {
3640 }
3641
3642 if(result < VK_SUCCESS)
3643 {
3644 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003645 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 -06003646 return false;
3647 }
3648
3649 return true;
3650}
3651
Chia-I Wu9ab61502015-11-06 06:42:02 +08003652VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003653 VkDevice device,
3654 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003655 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003656 void* pData)
3657{
Chia-I Wub16facd2015-10-26 19:17:06 +08003658 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003659
Chia-I Wub16facd2015-10-26 19:17:06 +08003660 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003661
3662 return result;
3663}
3664
3665bool PreMergePipelineCaches(
3666 VkDevice device,
3667 const VkPipelineCache* pSrcCaches)
3668{
3669 if(pSrcCaches != nullptr)
3670 {
3671 }
3672
3673 return true;
3674}
3675
3676bool PostMergePipelineCaches(
3677 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003678 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679 uint32_t srcCacheCount,
3680 VkResult result)
3681{
3682
3683
3684
3685 if(result < VK_SUCCESS)
3686 {
3687 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003688 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 -06003689 return false;
3690 }
3691
3692 return true;
3693}
3694
Chia-I Wu9ab61502015-11-06 06:42:02 +08003695VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003696 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003697 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003698 uint32_t srcCacheCount,
3699 const VkPipelineCache* pSrcCaches)
3700{
3701 PreMergePipelineCaches(device, pSrcCaches);
3702
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003703 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003704
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003705 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003706
3707 return result;
3708}
3709
3710bool PreCreateGraphicsPipelines(
3711 VkDevice device,
3712 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3713{
3714 if(pCreateInfos != nullptr)
3715 {
3716 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3717 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003718 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003719 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3720 return false;
3721 }
3722 if(pCreateInfos->pStages != nullptr)
3723 {
3724 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3725 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003726 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003727 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3728 return false;
3729 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003730 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3731 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003732 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003733 {
3734 }
3735 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3736 {
3737 }
3738 }
3739 }
3740 if(pCreateInfos->pVertexInputState != nullptr)
3741 {
3742 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3743 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003744 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003745 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3746 return false;
3747 }
3748 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3749 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003750 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3751 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003752 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003753 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003754 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003755 return false;
3756 }
3757 }
3758 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3759 {
3760 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3761 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3762 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003763 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003764 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3765 return false;
3766 }
3767 }
3768 }
3769 if(pCreateInfos->pInputAssemblyState != nullptr)
3770 {
3771 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3772 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003773 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003774 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3775 return false;
3776 }
3777 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3778 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3779 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003780 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003781 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3782 return false;
3783 }
3784 }
3785 if(pCreateInfos->pTessellationState != nullptr)
3786 {
3787 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3788 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003789 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003790 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3791 return false;
3792 }
3793 }
3794 if(pCreateInfos->pViewportState != nullptr)
3795 {
3796 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3797 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003798 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003799 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3800 return false;
3801 }
3802 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003803 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003804 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003805 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003806 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003807 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003808 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003809 return false;
3810 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003811 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3812 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003813 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003814 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003815 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003816 return false;
3817 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003818 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003819 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003820 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003821 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003822 return false;
3823 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003824 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3825 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003827 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003828 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003829 return false;
3830 }
3831 }
3832 if(pCreateInfos->pMultisampleState != nullptr)
3833 {
3834 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3835 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003836 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003837 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3838 return false;
3839 }
3840 }
3841 if(pCreateInfos->pDepthStencilState != nullptr)
3842 {
3843 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3844 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003845 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003846 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3847 return false;
3848 }
3849 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3850 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3851 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003852 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003853 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3854 return false;
3855 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003856 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3857 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003858 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003859 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003860 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003861 return false;
3862 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003863 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3864 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003865 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003866 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003867 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003868 return false;
3869 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003870 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3871 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003872 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003873 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003874 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003875 return false;
3876 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003877 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3878 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003879 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003880 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003881 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003882 return false;
3883 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003884 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3885 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003886 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003887 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003888 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003889 return false;
3890 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003891 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3892 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003893 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003894 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003895 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003896 return false;
3897 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003898 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3899 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003900 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003901 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003902 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003903 return false;
3904 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003905 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3906 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003907 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003908 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003909 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003910 return false;
3911 }
3912 }
3913 if(pCreateInfos->pColorBlendState != nullptr)
3914 {
3915 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3916 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003917 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003918 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3919 return false;
3920 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003921 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3922 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3924 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003925 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003926 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3927 return false;
3928 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003929 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003930 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003931 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3932 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003933 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003934 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003935 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003936 return false;
3937 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003938 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3939 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003940 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003941 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003942 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003943 return false;
3944 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003945 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3946 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003947 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003948 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003949 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003950 return false;
3951 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003952 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3953 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003954 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003955 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003956 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003957 return false;
3958 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003959 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3960 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003961 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003962 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003963 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003964 return false;
3965 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003966 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3967 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003968 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003969 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003970 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003971 return false;
3972 }
3973 }
3974 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003975 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3976 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003977 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003978 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3979 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003980 }
3981
3982 return true;
3983}
3984
3985bool PostCreateGraphicsPipelines(
3986 VkDevice device,
3987 VkPipelineCache pipelineCache,
3988 uint32_t count,
3989 VkPipeline* pPipelines,
3990 VkResult result)
3991{
3992
3993
3994
3995 if(pPipelines != nullptr)
3996 {
3997 }
3998
3999 if(result < VK_SUCCESS)
4000 {
4001 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004002 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 -06004003 return false;
4004 }
4005
4006 return true;
4007}
4008
Chia-I Wu9ab61502015-11-06 06:42:02 +08004009VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004010 VkDevice device,
4011 VkPipelineCache pipelineCache,
4012 uint32_t count,
4013 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004014 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004015 VkPipeline* pPipelines)
4016{
4017 PreCreateGraphicsPipelines(device, pCreateInfos);
4018
Chia-I Wuf7458c52015-10-26 21:10:41 +08004019 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020
4021 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4022
4023 return result;
4024}
4025
4026bool PreCreateComputePipelines(
4027 VkDevice device,
4028 const VkComputePipelineCreateInfo* pCreateInfos)
4029{
4030 if(pCreateInfos != nullptr)
4031 {
4032 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4033 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004034 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004035 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4036 return false;
4037 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004038 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
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",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004041 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4042 return false;
4043 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004044 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004045 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004046 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004047 {
4048 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004049 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004050 {
4051 }
4052 }
4053 }
4054
4055 return true;
4056}
4057
4058bool PostCreateComputePipelines(
4059 VkDevice device,
4060 VkPipelineCache pipelineCache,
4061 uint32_t count,
4062 VkPipeline* pPipelines,
4063 VkResult result)
4064{
4065
4066
4067
4068 if(pPipelines != nullptr)
4069 {
4070 }
4071
4072 if(result < VK_SUCCESS)
4073 {
4074 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004075 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 -06004076 return false;
4077 }
4078
4079 return true;
4080}
4081
Chia-I Wu9ab61502015-11-06 06:42:02 +08004082VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004083 VkDevice device,
4084 VkPipelineCache pipelineCache,
4085 uint32_t count,
4086 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004087 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 VkPipeline* pPipelines)
4089{
4090 PreCreateComputePipelines(device, pCreateInfos);
4091
Chia-I Wuf7458c52015-10-26 21:10:41 +08004092 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093
4094 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4095
4096 return result;
4097}
4098
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004099bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004100 VkDevice device,
4101 const VkPipelineLayoutCreateInfo* pCreateInfo)
4102{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103 if(pCreateInfo != nullptr)
4104 {
4105 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004106 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004107 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004108 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004110 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004111 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004112 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004113 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004114 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004116 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004117 }
4118
4119 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004120}
4121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004122bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004123 VkDevice device,
4124 VkPipelineLayout* pPipelineLayout,
4125 VkResult result)
4126{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004127
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004128 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004129 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004130 }
4131
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004132 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004133 {
4134 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004135 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 -06004136 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004137 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004138
4139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004140}
4141
Chia-I Wu9ab61502015-11-06 06:42:02 +08004142VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004143 VkDevice device,
4144 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004145 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004146 VkPipelineLayout* pPipelineLayout)
4147{
4148 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004149
Chia-I Wuf7458c52015-10-26 21:10:41 +08004150 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004151
4152 PostCreatePipelineLayout(device, pPipelineLayout, result);
4153
4154 return result;
4155}
4156
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004157bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004158 VkDevice device,
4159 const VkSamplerCreateInfo* pCreateInfo)
4160{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004161 if(pCreateInfo != nullptr)
4162 {
4163 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004164 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004165 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004166 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004167 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004168 }
Chia-I Wub99df442015-10-26 16:49:32 +08004169 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4170 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004171 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004172 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004173 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004174 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004175 }
Chia-I Wub99df442015-10-26 16:49:32 +08004176 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4177 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004179 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004180 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004181 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004182 }
Chia-I Wub99df442015-10-26 16:49:32 +08004183 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4184 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004185 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004186 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004187 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004188 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004189 }
Chia-I Wub99df442015-10-26 16:49:32 +08004190 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4191 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004192 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004193 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004194 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004195 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004196 }
Chia-I Wub99df442015-10-26 16:49:32 +08004197 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4198 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004199 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004200 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004201 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004202 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004203 }
Chia-I Wub99df442015-10-26 16:49:32 +08004204 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4205 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004206 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004207 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004208 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004209 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004210 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004211 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004212 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004213 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4214 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4215 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004216 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004217 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4218 return false;
4219 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004220 }
4221 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4222 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4223 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004224 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004225 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004226 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004227 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004228 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004229
4230 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004231}
4232
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004233bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004234 VkDevice device,
4235 VkSampler* pSampler,
4236 VkResult result)
4237{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004238
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004239 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004240 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004241 }
4242
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004243 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004244 {
4245 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004246 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 -06004247 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004248 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004249
4250 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004251}
4252
Chia-I Wu9ab61502015-11-06 06:42:02 +08004253VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 VkDevice device,
4255 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004256 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004257 VkSampler* pSampler)
4258{
4259 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004260
Chia-I Wuf7458c52015-10-26 21:10:41 +08004261 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004262
4263 PostCreateSampler(device, pSampler, result);
4264
4265 return result;
4266}
4267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004268bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004269 VkDevice device,
4270 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4271{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004272 if(pCreateInfo != nullptr)
4273 {
4274 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004275 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004276 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004277 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004278 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004279 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004280 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004282 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4283 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_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",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004286 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004287 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004289 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004290 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004291 }
4292 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004293 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004294
4295 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004296}
4297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004298bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004299 VkDevice device,
4300 VkDescriptorSetLayout* pSetLayout,
4301 VkResult result)
4302{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004303
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004304 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004305 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004306 }
4307
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004308 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004309 {
4310 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004311 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 -06004312 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004313 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004314
4315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004316}
4317
Chia-I Wu9ab61502015-11-06 06:42:02 +08004318VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 VkDevice device,
4320 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004321 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004322 VkDescriptorSetLayout* pSetLayout)
4323{
4324 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004325
Chia-I Wuf7458c52015-10-26 21:10:41 +08004326 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004327
4328 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4329
4330 return result;
4331}
4332
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004333bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004334 VkDevice device,
4335 const VkDescriptorPoolCreateInfo* pCreateInfo)
4336{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004337 if(pCreateInfo != nullptr)
4338 {
4339 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004341 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004342 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004343 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004344 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004345 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004347 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4348 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004349 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004350 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004351 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004352 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004353 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004354 }
4355 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004356
4357 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358}
4359
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004360bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004361 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362 uint32_t maxSets,
4363 VkDescriptorPool* pDescriptorPool,
4364 VkResult result)
4365{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004367 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004369 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004370 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371 }
4372
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004373 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004374 {
4375 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004376 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 -06004377 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004378 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004379
4380 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381}
4382
Chia-I Wu9ab61502015-11-06 06:42:02 +08004383VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004385 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004386 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004387 VkDescriptorPool* pDescriptorPool)
4388{
4389 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004390
Chia-I Wuf7458c52015-10-26 21:10:41 +08004391 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004393 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004394
4395 return result;
4396}
4397
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004398bool PostResetDescriptorPool(
4399 VkDevice device,
4400 VkDescriptorPool descriptorPool,
4401 VkResult result)
4402{
4403
Jeremy Hayes99a96322015-06-26 12:48:09 -06004404
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004405 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004406 {
4407 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004408 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 -06004409 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004410 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004411
4412 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004413}
4414
Chia-I Wu9ab61502015-11-06 06:42:02 +08004415VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004417 VkDescriptorPool descriptorPool,
4418 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004419{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004420 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421
4422 PostResetDescriptorPool(device, descriptorPool, result);
4423
4424 return result;
4425}
4426
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004427bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004428 VkDevice device,
4429 const VkDescriptorSetLayout* pSetLayouts)
4430{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004431 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004432 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004433 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004434
4435 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436}
4437
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004438bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004439 VkDevice device,
4440 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441 uint32_t count,
4442 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004443 VkResult result)
4444{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004445
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004447 if(pDescriptorSets != 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 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004453 std::string reason = "vkAllocateDescriptorSets 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 vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004462 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004463 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004464 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004465{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004466 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004467
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004468 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004469
Jon Ashburnf19916e2016-01-11 13:12:43 -07004470 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004471
4472 return result;
4473}
4474
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004475bool PreFreeDescriptorSets(
4476 VkDevice device,
4477 const VkDescriptorSet* pDescriptorSets)
4478{
4479 if(pDescriptorSets != nullptr)
4480 {
4481 }
4482
4483 return true;
4484}
4485
4486bool PostFreeDescriptorSets(
4487 VkDevice device,
4488 VkDescriptorPool descriptorPool,
4489 uint32_t count,
4490 VkResult result)
4491{
4492
4493
4494
4495 if(result < VK_SUCCESS)
4496 {
4497 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004498 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 -06004499 return false;
4500 }
4501
4502 return true;
4503}
4504
Chia-I Wu9ab61502015-11-06 06:42:02 +08004505VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004506 VkDevice device,
4507 VkDescriptorPool descriptorPool,
4508 uint32_t count,
4509 const VkDescriptorSet* pDescriptorSets)
4510{
4511 PreFreeDescriptorSets(device, pDescriptorSets);
4512
4513 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4514
4515 PostFreeDescriptorSets(device, descriptorPool, count, result);
4516
4517 return result;
4518}
4519
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004520bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004521 VkDevice device,
4522 const VkWriteDescriptorSet* pDescriptorWrites,
4523 const VkCopyDescriptorSet* pDescriptorCopies)
4524{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004525 if(pDescriptorWrites != nullptr)
4526 {
4527 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004528 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004529 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004530 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004531 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 }
4533 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4534 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4535 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004536 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004537 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004538 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004540 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4541 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4542 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004544 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4545 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4546 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004547 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004548 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004549 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004550 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004551 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004552 }
4553 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004554
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004555 if(pDescriptorCopies != nullptr)
4556 {
4557 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004558 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004559 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004560 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004561 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004562 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004563 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004564
4565 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004566}
4567
Chia-I Wu9ab61502015-11-06 06:42:02 +08004568VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004569 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004570 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004571 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004572 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004573 const VkCopyDescriptorSet* pDescriptorCopies)
4574{
4575 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004576
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004577 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004578}
4579
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004580bool PreCreateFramebuffer(
4581 VkDevice device,
4582 const VkFramebufferCreateInfo* pCreateInfo)
4583{
4584 if(pCreateInfo != nullptr)
4585 {
4586 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4587 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004588 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004589 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4590 return false;
4591 }
4592 if(pCreateInfo->pAttachments != nullptr)
4593 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004594 }
4595 }
4596
4597 return true;
4598}
4599
4600bool PostCreateFramebuffer(
4601 VkDevice device,
4602 VkFramebuffer* pFramebuffer,
4603 VkResult result)
4604{
4605
4606 if(pFramebuffer != nullptr)
4607 {
4608 }
4609
4610 if(result < VK_SUCCESS)
4611 {
4612 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004613 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 -06004614 return false;
4615 }
4616
4617 return true;
4618}
4619
Chia-I Wu9ab61502015-11-06 06:42:02 +08004620VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004621 VkDevice device,
4622 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004623 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004624 VkFramebuffer* pFramebuffer)
4625{
4626 PreCreateFramebuffer(device, pCreateInfo);
4627
Chia-I Wuf7458c52015-10-26 21:10:41 +08004628 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004629
4630 PostCreateFramebuffer(device, pFramebuffer, result);
4631
4632 return result;
4633}
4634
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004635bool PreCreateRenderPass(
4636 VkDevice device,
4637 const VkRenderPassCreateInfo* pCreateInfo)
4638{
4639 if(pCreateInfo != nullptr)
4640 {
4641 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4642 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004643 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004644 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4645 return false;
4646 }
4647 if(pCreateInfo->pAttachments != nullptr)
4648 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004649 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4650 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4651 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004652 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004653 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4654 return false;
4655 }
4656 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4657 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4658 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004659 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004660 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4661 return false;
4662 }
4663 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4664 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
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 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4668 return false;
4669 }
4670 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4671 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4672 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004673 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004674 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4675 return false;
4676 }
4677 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4678 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4679 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004680 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004681 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4682 return false;
4683 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004684 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4685 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4686 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004687 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004688 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004689 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4690 return false;
4691 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004692 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4693 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4694 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004695 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004696 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004697 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4698 return false;
4699 }
4700 }
4701 if(pCreateInfo->pSubpasses != nullptr)
4702 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004703 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4704 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4705 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004706 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004707 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4708 return false;
4709 }
Cody Northropa505dda2015-08-04 11:16:41 -06004710 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004711 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004712 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4713 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4714 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004715 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004716 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004717 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004718 return false;
4719 }
4720 }
Cody Northropa505dda2015-08-04 11:16:41 -06004721 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004722 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004723 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4724 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4725 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004726 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004727 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004728 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004729 return false;
4730 }
4731 }
Cody Northropa505dda2015-08-04 11:16:41 -06004732 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004733 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004734 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4735 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4736 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004737 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004738 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004739 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004740 return false;
4741 }
4742 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004743 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004744 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4745 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4746 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004747 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004748 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004749 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004750 return false;
4751 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004752 }
4753 if(pCreateInfo->pDependencies != nullptr)
4754 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004755 }
4756 }
4757
4758 return true;
4759}
4760
4761bool PostCreateRenderPass(
4762 VkDevice device,
4763 VkRenderPass* pRenderPass,
4764 VkResult result)
4765{
4766
4767 if(pRenderPass != nullptr)
4768 {
4769 }
4770
4771 if(result < VK_SUCCESS)
4772 {
4773 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004774 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 -06004775 return false;
4776 }
4777
4778 return true;
4779}
4780
Chia-I Wu9ab61502015-11-06 06:42:02 +08004781VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004782 VkDevice device,
4783 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004784 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004785 VkRenderPass* pRenderPass)
4786{
4787 PreCreateRenderPass(device, pCreateInfo);
4788
Chia-I Wuf7458c52015-10-26 21:10:41 +08004789 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004790
4791 PostCreateRenderPass(device, pRenderPass, result);
4792
4793 return result;
4794}
4795
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796bool PostGetRenderAreaGranularity(
4797 VkDevice device,
4798 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004799 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004800{
4801
4802
4803 if(pGranularity != nullptr)
4804 {
4805 }
4806
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004807 return true;
4808}
4809
Chia-I Wu9ab61502015-11-06 06:42:02 +08004810VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004811 VkDevice device,
4812 VkRenderPass renderPass,
4813 VkExtent2D* pGranularity)
4814{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004815 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004816
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004817 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004818}
4819
4820bool PreCreateCommandPool(
4821 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004822 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004823{
4824 if(pCreateInfo != nullptr)
4825 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004826 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004827 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004828 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004829 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4830 return false;
4831 }
4832 }
4833
4834 return true;
4835}
4836
4837bool PostCreateCommandPool(
4838 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004839 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004840 VkResult result)
4841{
4842
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004843 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004844 {
4845 }
4846
4847 if(result < VK_SUCCESS)
4848 {
4849 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004850 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 -06004851 return false;
4852 }
4853
4854 return true;
4855}
4856
Chia-I Wu9ab61502015-11-06 06:42:02 +08004857VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004858 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004859 const VkCommandPoolCreateInfo* pCreateInfo,
4860 const VkAllocationCallbacks* pAllocator,
4861 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004862{
4863 PreCreateCommandPool(device, pCreateInfo);
4864
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004865 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004866
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004867 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004868
4869 return result;
4870}
4871
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004872bool PostResetCommandPool(
4873 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004874 VkCommandPool commandPool,
4875 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004876 VkResult result)
4877{
4878
4879
4880
4881 if(result < VK_SUCCESS)
4882 {
4883 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004884 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 -06004885 return false;
4886 }
4887
4888 return true;
4889}
4890
Chia-I Wu9ab61502015-11-06 06:42:02 +08004891VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004892 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004893 VkCommandPool commandPool,
4894 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004895{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004896 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004897
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004898 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004899
4900 return result;
4901}
4902
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004903bool PreCreateCommandBuffer(
4904 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004905 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004906{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004907 if(pCreateInfo != nullptr)
4908 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004909 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004910 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004911 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004912 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004913 return false;
4914 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004915 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4916 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004917 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004918 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004919 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004920 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004921 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004922 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004923
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004924 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004925}
4926
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004927bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004928 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004929 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004931{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004932
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004933 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004934 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004935 }
4936
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004937 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004938 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004939 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004940 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 -06004941 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004942 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004943
4944 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004945}
4946
Chia-I Wu9ab61502015-11-06 06:42:02 +08004947VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004948 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004949 const VkCommandBufferAllocateInfo* pCreateInfo,
4950 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004951{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004952 PreCreateCommandBuffer(device, pCreateInfo);
4953
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004954 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004955
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004956 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004958 return result;
4959}
4960
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004962 VkCommandBuffer commandBuffer,
4963 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004964{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004965 if(pBeginInfo != nullptr)
4966 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004967 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004968 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004969 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004970 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004971 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004972 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004974
4975 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004976}
4977
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004978bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004979 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004980 VkResult result)
4981{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004982
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004983 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004984 {
4985 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004986 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 -06004987 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004989
4990 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004991}
4992
Chia-I Wu9ab61502015-11-06 06:42:02 +08004993VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004994 VkCommandBuffer commandBuffer,
4995 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004996{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004997 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004998
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005001 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005003 return result;
5004}
5005
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005006bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005007 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008 VkResult result)
5009{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005010
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005011 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005012 {
5013 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005014 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 -06005015 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005017
5018 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019}
5020
Chia-I Wu9ab61502015-11-06 06:42:02 +08005021VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005022 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005023{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005024 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005025
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005026 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005027
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005028 return result;
5029}
5030
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005031bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032 VkCommandBuffer commandBuffer,
5033 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005034 VkResult result)
5035{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005037
5038 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039 {
5040 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005041 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 -06005042 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005043 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005044
5045 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005046}
5047
Chia-I Wu9ab61502015-11-06 06:42:02 +08005048VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005049 VkCommandBuffer commandBuffer,
5050 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005051{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005052 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005053
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005054 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005055
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005056 return result;
5057}
5058
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005059bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005060 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005061 VkPipelineBindPoint pipelineBindPoint,
5062 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005063{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005064
5065 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5066 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5067 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005068 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005069 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005070 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071 }
5072
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005073
5074 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005075}
5076
Chia-I Wu9ab61502015-11-06 06:42:02 +08005077VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005078 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005079 VkPipelineBindPoint pipelineBindPoint,
5080 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005081{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005082 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005085}
5086
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005087VK_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 -06005088{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005089 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005090}
5091
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005092VK_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 -06005093{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005095}
5096
Chia-I Wu9ab61502015-11-06 06:42:02 +08005097VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005098{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005099 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005100}
5101
Chia-I Wu9ab61502015-11-06 06:42:02 +08005102VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005103{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005104 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005105}
5106
Chia-I Wu9ab61502015-11-06 06:42:02 +08005107VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005108{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005109 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005110}
5111
Chia-I Wu9ab61502015-11-06 06:42:02 +08005112VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005113{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005114 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005115}
5116
Chia-I Wu9ab61502015-11-06 06:42:02 +08005117VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005118{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005119 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005120}
5121
Chia-I Wu9ab61502015-11-06 06:42:02 +08005122VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005123{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005124 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005125}
5126
Chia-I Wu9ab61502015-11-06 06:42:02 +08005127VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005128{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005129 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005130}
5131
5132bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005133 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005134 const VkDescriptorSet* pDescriptorSets,
5135 const uint32_t* pDynamicOffsets)
5136{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005137 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005138 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005139 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005140
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005141 if(pDynamicOffsets != nullptr)
5142 {
5143 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005144
5145 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005146}
5147
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005148bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005149 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005150 VkPipelineBindPoint pipelineBindPoint,
5151 VkPipelineLayout layout,
5152 uint32_t firstSet,
5153 uint32_t setCount,
5154 uint32_t dynamicOffsetCount)
5155{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005156
5157 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5158 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5159 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005160 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005161 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005163 }
5164
5165
5166
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005167
5168
5169 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170}
5171
Chia-I Wu9ab61502015-11-06 06:42:02 +08005172VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005173 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005174 VkPipelineBindPoint pipelineBindPoint,
5175 VkPipelineLayout layout,
5176 uint32_t firstSet,
5177 uint32_t setCount,
5178 const VkDescriptorSet* pDescriptorSets,
5179 uint32_t dynamicOffsetCount,
5180 const uint32_t* pDynamicOffsets)
5181{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005182 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005183
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005184 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005185
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005186 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005187}
5188
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005189bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005190 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005191 VkBuffer buffer,
5192 VkDeviceSize offset,
5193 VkIndexType indexType)
5194{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005195
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196
5197
5198 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5199 indexType > VK_INDEX_TYPE_END_RANGE)
5200 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005201 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005202 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005203 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005205
5206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207}
5208
Chia-I Wu9ab61502015-11-06 06:42:02 +08005209VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005210 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005211 VkBuffer buffer,
5212 VkDeviceSize offset,
5213 VkIndexType indexType)
5214{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005215 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005217 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005218}
5219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005220bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005221 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005222 const VkBuffer* pBuffers,
5223 const VkDeviceSize* pOffsets)
5224{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005225 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005226 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005227 }
5228
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005229 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005230 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005231 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005232
5233 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005234}
5235
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005236bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005237 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005238 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005239 uint32_t bindingCount)
5240{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005241
5242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005243
5244 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005245}
5246
Chia-I Wu9ab61502015-11-06 06:42:02 +08005247VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005248 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005249 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005250 uint32_t bindingCount,
5251 const VkBuffer* pBuffers,
5252 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005253{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005254 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005255
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005256 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005257
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005258 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005259}
5260
Michael Lentine55a913f2015-11-24 09:48:23 -06005261bool PreCmdDraw(
5262 VkCommandBuffer commandBuffer,
5263 uint32_t vertexCount,
5264 uint32_t instanceCount,
5265 uint32_t firstVertex,
5266 uint32_t firstInstance)
5267{
5268 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005269 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5270 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005271 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005272 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5273 return false;
5274 }
5275
5276 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005277 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5278 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005279 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005280 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5281 return false;
5282 }
5283
5284 return true;
5285}
5286
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005287bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005288 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005289 uint32_t firstVertex,
5290 uint32_t vertexCount,
5291 uint32_t firstInstance,
5292 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005293{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005294
5295
5296
5297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005298
5299 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005300}
5301
Chia-I Wu9ab61502015-11-06 06:42:02 +08005302VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005303 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005304 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005305 uint32_t instanceCount,
5306 uint32_t firstVertex,
5307 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005308{
Michael Lentine55a913f2015-11-24 09:48:23 -06005309 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5310
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005311 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005312
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005313 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005314}
5315
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005316bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005317 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005318 uint32_t firstIndex,
5319 uint32_t indexCount,
5320 int32_t vertexOffset,
5321 uint32_t firstInstance,
5322 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005323{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005324
5325
5326
5327
5328
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005329
5330 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005331}
5332
Chia-I Wu9ab61502015-11-06 06:42:02 +08005333VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005334 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005335 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005336 uint32_t instanceCount,
5337 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005338 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005339 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005340{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005341 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005342
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005343 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005344}
5345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005346bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005347 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005348 VkBuffer buffer,
5349 VkDeviceSize offset,
5350 uint32_t count,
5351 uint32_t stride)
5352{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005353
5354
5355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005356
5357
5358 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005359}
5360
Chia-I Wu9ab61502015-11-06 06:42:02 +08005361VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005362 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005363 VkBuffer buffer,
5364 VkDeviceSize offset,
5365 uint32_t count,
5366 uint32_t stride)
5367{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005368 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005369
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005370 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005371}
5372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005373bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005374 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005375 VkBuffer buffer,
5376 VkDeviceSize offset,
5377 uint32_t count,
5378 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005379{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005380
5381
5382
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005383
5384
5385 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005386}
5387
Chia-I Wu9ab61502015-11-06 06:42:02 +08005388VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005389 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005390 VkBuffer buffer,
5391 VkDeviceSize offset,
5392 uint32_t count,
5393 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005394{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005395 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005396
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005397 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005398}
5399
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005400bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005401 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005402 uint32_t x,
5403 uint32_t y,
5404 uint32_t z)
5405{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005406
5407
5408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005409
5410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005411}
5412
Chia-I Wu9ab61502015-11-06 06:42:02 +08005413VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005414 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005415 uint32_t x,
5416 uint32_t y,
5417 uint32_t z)
5418{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005419 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005421 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005422}
5423
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005424bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005425 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426 VkBuffer buffer,
5427 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005428{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005429
Jeremy Hayes99a96322015-06-26 12:48:09 -06005430
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005431
5432 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005433}
5434
Chia-I Wu9ab61502015-11-06 06:42:02 +08005435VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005436 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437 VkBuffer buffer,
5438 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005439{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005440 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005441
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005442 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005443}
5444
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005445bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005446 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005448{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005449 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005450 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005451 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005452
5453 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005454}
5455
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005456bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005457 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005458 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005459 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005460 uint32_t regionCount)
5461{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005462
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463
Jeremy Hayes99a96322015-06-26 12:48:09 -06005464
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005465
5466 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467}
5468
Chia-I Wu9ab61502015-11-06 06:42:02 +08005469VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005470 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005471 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005472 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005473 uint32_t regionCount,
5474 const VkBufferCopy* pRegions)
5475{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005476 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005477
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005478 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005479
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005480 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481}
5482
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005483bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005484 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005485 const VkImageCopy* pRegions)
5486{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005487 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005488 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005489 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005490 (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 -06005491 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005492 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005493 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005494 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005495 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005496 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005497 (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 -06005498 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005499 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005500 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005501 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005502 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005503 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005504
5505 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005506}
5507
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005508bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005509 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005510 VkImage srcImage,
5511 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005512 VkImage dstImage,
5513 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005514 uint32_t regionCount)
5515{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005516 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5517 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5518 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005519 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005520 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005521 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005522 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523 }
5524
Jeremy Hayes99a96322015-06-26 12:48:09 -06005525
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005526 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5527 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5528 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005529 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005530 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005531 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005532 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005533 }
5534
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005535
5536 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005537}
5538
Chia-I Wu9ab61502015-11-06 06:42:02 +08005539VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005540 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005541 VkImage srcImage,
5542 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005543 VkImage dstImage,
5544 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545 uint32_t regionCount,
5546 const VkImageCopy* pRegions)
5547{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005548 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005549
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005550 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005552 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005553}
5554
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005555bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005556 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557 const VkImageBlit* pRegions)
5558{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005559 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005560 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005561 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005562 (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 -06005563 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005564 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005565 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005566 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005567 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005568 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005569 (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 -06005570 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005571 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005572 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005573 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005574 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005575 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005576
5577 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578}
5579
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005580bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005581 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005582 VkImage srcImage,
5583 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005584 VkImage dstImage,
5585 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005586 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005587 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005588{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005589
Jeremy Hayes99a96322015-06-26 12:48:09 -06005590
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005591 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5592 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5593 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005594 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005595 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005596 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005597 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005598 }
5599
Jeremy Hayes99a96322015-06-26 12:48:09 -06005600
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005601 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5602 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5603 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005604 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005605 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005606 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005607 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005608 }
5609
5610
Chia-I Wub99df442015-10-26 16:49:32 +08005611 if(filter < VK_FILTER_BEGIN_RANGE ||
5612 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005613 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005614 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005615 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005616 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005618
5619 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620}
5621
Chia-I Wu9ab61502015-11-06 06:42:02 +08005622VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005623 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005624 VkImage srcImage,
5625 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005626 VkImage dstImage,
5627 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628 uint32_t regionCount,
5629 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005630 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005631{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005632 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005633
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005634 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005635
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005636 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005637}
5638
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005639bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005640 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005641 const VkBufferImageCopy* pRegions)
5642{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005643 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005644 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005645 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005646 (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 -06005647 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005648 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005649 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005650 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005651 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005652 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005653
5654 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005655}
5656
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005657bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005658 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005659 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005660 VkImage dstImage,
5661 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005662 uint32_t regionCount)
5663{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664
Jeremy Hayes99a96322015-06-26 12:48:09 -06005665
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005667 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5668 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5669 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005670 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005671 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005672 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005673 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005674 }
5675
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005676
5677 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005678}
5679
Chia-I Wu9ab61502015-11-06 06:42:02 +08005680VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005681 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005682 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005683 VkImage dstImage,
5684 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005685 uint32_t regionCount,
5686 const VkBufferImageCopy* pRegions)
5687{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005688 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005689
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005690 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005692 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005693}
5694
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005695bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005696 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005697 const VkBufferImageCopy* pRegions)
5698{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005699 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005701 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005702 (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 -06005703 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005704 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005705 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005706 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005707 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005708 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005709
5710 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005711}
5712
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005713bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005714 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005715 VkImage srcImage,
5716 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005717 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005718 uint32_t regionCount)
5719{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005722 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5723 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5724 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
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",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005727 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005728 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005729 }
5730
Jeremy Hayes99a96322015-06-26 12:48:09 -06005731
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005732
5733 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005734}
5735
Chia-I Wu9ab61502015-11-06 06:42:02 +08005736VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005737 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738 VkImage srcImage,
5739 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005740 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741 uint32_t regionCount,
5742 const VkBufferImageCopy* pRegions)
5743{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005744 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005745
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005746 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005748 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749}
5750
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005751bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005752 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 const uint32_t* pData)
5754{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005755 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005756 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005757 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005758
5759 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760}
5761
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005762bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005763 VkCommandBuffer commandBuffer,
5764 VkBuffer dstBuffer,
5765 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005766 VkDeviceSize dataSize)
5767{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768
5769
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005770
5771
5772 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773}
5774
Chia-I Wu9ab61502015-11-06 06:42:02 +08005775VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005776 VkCommandBuffer commandBuffer,
5777 VkBuffer dstBuffer,
5778 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005779 VkDeviceSize dataSize,
5780 const uint32_t* pData)
5781{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005782 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005783
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005784 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005785
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005786 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005787}
5788
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005789bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005790 VkCommandBuffer commandBuffer,
5791 VkBuffer dstBuffer,
5792 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005793 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005794 uint32_t data)
5795{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796
5797
5798
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005799
5800
5801 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005802}
5803
Chia-I Wu9ab61502015-11-06 06:42:02 +08005804VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005805 VkCommandBuffer commandBuffer,
5806 VkBuffer dstBuffer,
5807 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005808 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005809 uint32_t data)
5810{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005811 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005812
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005813 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814}
5815
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005816bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005817 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005818 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819 const VkImageSubresourceRange* pRanges)
5820{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005821 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005822 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005823 }
5824
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005825 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005826 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005827 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005828 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005829
5830 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831}
5832
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005833bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005834 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005835 VkImage image,
5836 VkImageLayout imageLayout,
5837 uint32_t rangeCount)
5838{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005841 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5842 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5843 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005845 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005846 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005847 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005848 }
5849
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005850
5851 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005852}
5853
Chia-I Wu9ab61502015-11-06 06:42:02 +08005854VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005855 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005856 VkImage image,
5857 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005858 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005859 uint32_t rangeCount,
5860 const VkImageSubresourceRange* pRanges)
5861{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005862 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005863
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005864 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005866 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005867}
5868
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005869bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005870 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005871 const VkImageSubresourceRange* pRanges)
5872{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005873 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005874 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005875 /*
5876 * TODO: How do we validation pRanges->aspectMask?
5877 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5878 * VK_IMAGE_ASPECT_STENCIL_BIT.
5879 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005880 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005881
5882 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005883}
5884
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005885bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005886 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887 VkImage image,
5888 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005889 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005890 uint32_t rangeCount)
5891{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892
Jeremy Hayes99a96322015-06-26 12:48:09 -06005893
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005894 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5895 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5896 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005898 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005899 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005900 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005901 }
5902
5903
5904
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005905
5906 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005907}
5908
Chia-I Wu9ab61502015-11-06 06:42:02 +08005909VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005910 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005911 VkImage image,
5912 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005913 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005914 uint32_t rangeCount,
5915 const VkImageSubresourceRange* pRanges)
5916{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005917 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005918
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005919 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005920
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005921 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005922}
5923
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005924bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005925 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005926 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005927 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005928{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005929 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005930 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005931 }
5932
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005933 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005934 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005935 }
5936
5937 return true;
5938}
5939
Chia-I Wu9ab61502015-11-06 06:42:02 +08005940VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005941 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005942 uint32_t attachmentCount,
5943 const VkClearAttachment* pAttachments,
5944 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005945 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005946{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005947 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005948 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005949 }
5950
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005951 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005952}
5953
5954bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005955 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005956 const VkImageResolve* pRegions)
5957{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005958 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005959 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005960 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005961 (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 -06005962 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005963 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005964 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005965 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005967 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005968 (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 -06005969 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005970 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005971 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005972 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005974 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005975
5976 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005977}
5978
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005979bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005980 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005981 VkImage srcImage,
5982 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005983 VkImage dstImage,
5984 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005985 uint32_t regionCount)
5986{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005987
Jeremy Hayes99a96322015-06-26 12:48:09 -06005988
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005989 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5990 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5991 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005992 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005993 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005994 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005995 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996 }
5997
Jeremy Hayes99a96322015-06-26 12:48:09 -06005998
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005999 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6000 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6001 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006002 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006003 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006004 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006005 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006006 }
6007
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006008
6009 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006010}
6011
Chia-I Wu9ab61502015-11-06 06:42:02 +08006012VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006013 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006014 VkImage srcImage,
6015 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006016 VkImage dstImage,
6017 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018 uint32_t regionCount,
6019 const VkImageResolve* pRegions)
6020{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006021 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006022
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006023 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006024
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006025 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026}
6027
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006028bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006029 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006031 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006032{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033
Jeremy Hayes99a96322015-06-26 12:48:09 -06006034
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035
6036 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037}
6038
Chia-I Wu9ab61502015-11-06 06:42:02 +08006039VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006040 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006042 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006043{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006044 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006045
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006046 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047}
6048
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006049bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006050 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006052 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006053{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054
Jeremy Hayes99a96322015-06-26 12:48:09 -06006055
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006056
6057 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058}
6059
Chia-I Wu9ab61502015-11-06 06:42:02 +08006060VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006061 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006062 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006063 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006065 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006066
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006067 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006068}
6069
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006070bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006071 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006072 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006073 uint32_t memoryBarrierCount,
6074 const VkMemoryBarrier *pMemoryBarriers,
6075 uint32_t bufferMemoryBarrierCount,
6076 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6077 uint32_t imageMemoryBarrierCount,
6078 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006079{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006080 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006081 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082 }
6083
Jon Ashburnf19916e2016-01-11 13:12:43 -07006084 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006085 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006087
6088 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006089}
6090
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006091bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006092 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006094 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006095 VkPipelineStageFlags dstStageMask,
6096 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006099
Jeremy Hayes99a96322015-06-26 12:48:09 -06006100
6101
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006102
6103 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006104}
6105
Chia-I Wu9ab61502015-11-06 06:42:02 +08006106VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006107 VkCommandBuffer commandBuffer,
6108 uint32_t eventCount,
6109 const VkEvent *pEvents,
6110 VkPipelineStageFlags srcStageMask,
6111 VkPipelineStageFlags dstStageMask,
6112 uint32_t memoryBarrierCount,
6113 const VkMemoryBarrier *pMemoryBarriers,
6114 uint32_t bufferMemoryBarrierCount,
6115 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6116 uint32_t imageMemoryBarrierCount,
6117 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006118{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006119 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006120
Jon Ashburnf19916e2016-01-11 13:12:43 -07006121 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 -06006122
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006123 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124}
6125
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006126bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006127 VkCommandBuffer commandBuffer,
6128 uint32_t memoryBarrierCount,
6129 const VkMemoryBarrier *pMemoryBarriers,
6130 uint32_t bufferMemoryBarrierCount,
6131 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6132 uint32_t imageMemoryBarrierCount,
6133 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006134{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006135 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006136 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006137 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006138
6139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006140}
6141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006142bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006143 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006144 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006145 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006146 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006147 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006148{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006150
Jeremy Hayes99a96322015-06-26 12:48:09 -06006151
6152
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006153
6154 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006155}
6156
Chia-I Wu9ab61502015-11-06 06:42:02 +08006157VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006158 VkCommandBuffer commandBuffer,
6159 VkPipelineStageFlags srcStageMask,
6160 VkPipelineStageFlags dstStageMask,
6161 VkDependencyFlags dependencyFlags,
6162 uint32_t memoryBarrierCount,
6163 const VkMemoryBarrier *pMemoryBarriers,
6164 uint32_t bufferMemoryBarrierCount,
6165 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6166 uint32_t imageMemoryBarrierCount,
6167 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006168{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006169 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006170
Jon Ashburnf19916e2016-01-11 13:12:43 -07006171 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 -06006172
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006173 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006174}
6175
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006176bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006177 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178 VkQueryPool queryPool,
6179 uint32_t slot,
6180 VkQueryControlFlags flags)
6181{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183
6184
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006185
6186 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187}
6188
Chia-I Wu9ab61502015-11-06 06:42:02 +08006189VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006190 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006191 VkQueryPool queryPool,
6192 uint32_t slot,
6193 VkQueryControlFlags flags)
6194{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006195 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006196
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006197 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198}
6199
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006200bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006201 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202 VkQueryPool queryPool,
6203 uint32_t slot)
6204{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006205
Jeremy Hayes99a96322015-06-26 12:48:09 -06006206
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006207
6208 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006209}
6210
Chia-I Wu9ab61502015-11-06 06:42:02 +08006211VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006212 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006213 VkQueryPool queryPool,
6214 uint32_t slot)
6215{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006216 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006217
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006218 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006219}
6220
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006221bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006222 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006224 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006225 uint32_t queryCount)
6226{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006227
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006228
6229
6230
6231 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232}
6233
Chia-I Wu9ab61502015-11-06 06:42:02 +08006234VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006235 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006236 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006237 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238 uint32_t queryCount)
6239{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006240 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006242 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243}
6244
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006245bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006246 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006247 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006248 VkQueryPool queryPool,
6249 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006250{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006252 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006253
6254 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255}
6256
Chia-I Wu9ab61502015-11-06 06:42:02 +08006257VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006258 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006259 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006260 VkQueryPool queryPool,
6261 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006262{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006263 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006265 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006266}
6267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006268bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006269 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006271 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006272 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006273 VkBuffer dstBuffer,
6274 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006275 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006276 VkQueryResultFlags flags)
6277{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006278
6279
6280
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006281
Jeremy Hayes99a96322015-06-26 12:48:09 -06006282
6283
6284
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006285
6286 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006287}
6288
Chia-I Wu9ab61502015-11-06 06:42:02 +08006289VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006290 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006291 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006292 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006294 VkBuffer dstBuffer,
6295 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006296 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006297 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006298{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006299 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006300
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006301 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006302}
6303
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006304bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006305 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006306 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006307{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006308 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006309 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006310 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006311
6312 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006313}
6314
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006315bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006316 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006317 VkPipelineLayout layout,
6318 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006319 uint32_t offset,
6320 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006321{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006322
Jeremy Hayes99a96322015-06-26 12:48:09 -06006323
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006324
6325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006326
6327 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006328}
6329
Chia-I Wu9ab61502015-11-06 06:42:02 +08006330VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006331 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006332 VkPipelineLayout layout,
6333 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006334 uint32_t offset,
6335 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006336 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006337{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006338 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006339
Chia-I Wuce9b1772015-11-12 06:09:22 +08006340 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006341
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006342 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006343}
6344
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006345bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006346 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006347 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006348{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006349 if(pRenderPassBegin != nullptr)
6350 {
6351 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006352 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006353 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006354 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006355 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006356 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006357 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006358 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006359 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006360 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006361
6362 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006363}
6364
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006365bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006366 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006367 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006368{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006369
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006370 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6371 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006372 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006373 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006374 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006375 return false;
6376 }
6377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006378 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006379}
6380
Chia-I Wu9ab61502015-11-06 06:42:02 +08006381VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006382 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006383 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006384 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006385{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006386 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006387
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006388 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006389
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006390 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006391}
6392
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006393bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006394 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006395 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006396{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006397
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006398 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6399 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006400 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006401 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006402 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006403 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006404 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006405
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006406 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006407}
6408
Chia-I Wu9ab61502015-11-06 06:42:02 +08006409VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006410 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006411 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006412{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006413 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006414
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006415 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006416}
6417
6418bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006419 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006420{
6421
6422 return true;
6423}
6424
Chia-I Wu9ab61502015-11-06 06:42:02 +08006425VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006426 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006427{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006428 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006429
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006430 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006431}
6432
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006433bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006434 VkCommandBuffer commandBuffer,
6435 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006436{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006437 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006438 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006439 }
6440
6441 return true;
6442}
6443
6444bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006445 VkCommandBuffer commandBuffer,
6446 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006447{
6448
6449
6450 return true;
6451}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006452
Chia-I Wu9ab61502015-11-06 06:42:02 +08006453VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006454 VkCommandBuffer commandBuffer,
6455 uint32_t commandBuffersCount,
6456 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006457{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006458 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006459
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006460 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006461
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006462 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006463}
6464
Chia-I Wu9ab61502015-11-06 06:42:02 +08006465VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006466{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006467 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006468 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006470 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006471 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006472 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006473 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006474 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006476 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006477 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006478 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006479 if (!strcmp(funcName, "vkAllocateMemory"))
6480 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006481 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006482 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006483 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006484 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006485 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006486 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006487 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006493 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006494 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006495 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006496 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006497 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006498 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006499 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006500 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006501 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006502 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006504 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006505 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006506 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006507 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006508 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006509 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006510 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006511 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006512 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006513 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006514 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006515 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006516 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006517 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006518 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006519 if (!strcmp(funcName, "vkCreateShaderModule"))
6520 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006521 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006522 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006523 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006524 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006525 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006526 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006528 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006531 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006532 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006534 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006535 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6536 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006537 if (!strcmp(funcName, "vkCmdSetViewport"))
6538 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006539 if (!strcmp(funcName, "vkCmdSetScissor"))
6540 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006541 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6542 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6543 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6544 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6545 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6546 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6547 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6548 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6549 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6550 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6551 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6552 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6553 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6554 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006555 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6556 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006558 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006559 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006560 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006562 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006563 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006564 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006566 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006567 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006568 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006570 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006571 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006572 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006574 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006575 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006576 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006580 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006583 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006584 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006585 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006586 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006587 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006588 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006589 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006590 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006591 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006592 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006593 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006594 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006595 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006596 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006597 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006598 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006599 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006600 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006602 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006604 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006606 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006607 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006608 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006610 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006613 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006614 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006615 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006616 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006617 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006618 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006619 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006620 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006621 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006622 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006623 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006624 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006625 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006626 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006627
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006628 if (device == NULL) {
6629 return NULL;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006630 }
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006631
6632 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
6633 return NULL;
6634 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006635}
6636
Chia-I Wu9ab61502015-11-06 06:42:02 +08006637VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006638{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006639 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006640 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006641 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006642 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006643 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006644 return (PFN_vkVoidFunction) vkDestroyInstance;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006645 if (!strcmp(funcName, "vkCreateDevice"))
6646 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006647 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006648 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006649 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006650 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006651 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006652 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006653 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006654 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006655 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6656 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6657 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6658 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6659 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6660 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6661 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6662 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006663
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006664 if (instance == NULL) {
6665 return NULL;
6666 }
6667
Jeremy Hayes99a96322015-06-26 12:48:09 -06006668 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006669 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006670 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006671 return fptr;
6672
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006673 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6674 return NULL;
6675 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006676}