blob: 5f17cf47419a1d8dbc9f8425f5ba8eb9cf0b3640 [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,
Courtney Goeltzenleuchterb69cd592016-01-19 16:08:39 -0700170 VK_EXT_DEBUG_REPORT_SPEC_VERSION
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 |
Jon Ashburn766866a2016-01-22 15:39:20 -0700333 VK_FORMAT_FEATURE_BLIT_DST_BIT |
334 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600335 if(enumerator & (~allFlags))
336 {
337 return false;
338 }
339
340 return true;
341}
342
343static
344std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
345{
346 if(!ValidateEnumerator(enumerator))
347 {
348 return "unrecognized enumerator";
349 }
350
351 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600352 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
353 {
354 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
355 }
356 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
357 {
358 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
359 }
360 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
361 {
362 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
363 }
364 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
365 {
366 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
367 }
368 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
369 {
370 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
371 }
372 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
373 {
374 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
375 }
376 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
377 {
378 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
379 }
380 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
381 {
382 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
383 }
384 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
385 {
386 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
387 }
388 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
389 {
390 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
391 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800392 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600393 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800394 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600395 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800396 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600397 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800398 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600399 }
Jon Ashburn766866a2016-01-22 15:39:20 -0700400 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
401 {
402 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT");
403 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600404
405 std::string enumeratorString;
406 for(auto const& string : strings)
407 {
408 enumeratorString += string;
409
410 if(string != strings.back())
411 {
412 enumeratorString += '|';
413 }
414 }
415
416 return enumeratorString;
417}
418
419static
420bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
421{
422 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600423 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600424 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
425 VK_IMAGE_USAGE_STORAGE_BIT |
426 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800427 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600428 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800429 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600430 if(enumerator & (~allFlags))
431 {
432 return false;
433 }
434
435 return true;
436}
437
438static
439std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
440{
441 if(!ValidateEnumerator(enumerator))
442 {
443 return "unrecognized enumerator";
444 }
445
446 std::vector<std::string> strings;
447 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
448 {
449 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
450 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600451 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600452 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600453 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600454 }
455 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
456 {
457 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
458 }
459 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
460 {
461 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
462 }
463 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
464 {
465 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
466 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800467 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600468 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800469 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600470 }
471 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
472 {
473 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
474 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800475 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600476 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800477 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600478 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600479
480 std::string enumeratorString;
481 for(auto const& string : strings)
482 {
483 enumeratorString += string;
484
485 if(string != strings.back())
486 {
487 enumeratorString += '|';
488 }
489 }
490
491 return enumeratorString;
492}
493
494static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600495bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
496{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800497 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800498 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600499 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800500 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600501 VK_QUEUE_GRAPHICS_BIT);
502 if(enumerator & (~allFlags))
503 {
504 return false;
505 }
506
507 return true;
508}
509
510static
511std::string EnumeratorString(VkQueueFlagBits const& enumerator)
512{
513 if(!ValidateEnumerator(enumerator))
514 {
515 return "unrecognized enumerator";
516 }
517
518 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800519 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600520 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800521 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600522 }
523 if(enumerator & VK_QUEUE_COMPUTE_BIT)
524 {
525 strings.push_back("VK_QUEUE_COMPUTE_BIT");
526 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800527 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600528 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800529 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600530 }
531 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
532 {
533 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
534 }
535
536 std::string enumeratorString;
537 for(auto const& string : strings)
538 {
539 enumeratorString += string;
540
541 if(string != strings.back())
542 {
543 enumeratorString += '|';
544 }
545 }
546
547 return enumeratorString;
548}
549
550static
551bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
552{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600553 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800554 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600555 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800556 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
557 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600558 if(enumerator & (~allFlags))
559 {
560 return false;
561 }
562
563 return true;
564}
565
566static
567std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
568{
569 if(!ValidateEnumerator(enumerator))
570 {
571 return "unrecognized enumerator";
572 }
573
574 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600575 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
576 {
577 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
578 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800579 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600580 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800581 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600582 }
583 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
584 {
585 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
586 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800587 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600588 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800589 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600590 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800591 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600592 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800593 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600594 }
595
596 std::string enumeratorString;
597 for(auto const& string : strings)
598 {
599 enumeratorString += string;
600
601 if(string != strings.back())
602 {
603 enumeratorString += '|';
604 }
605 }
606
607 return enumeratorString;
608}
609
610static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600611bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600612{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800613 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600614 if(enumerator & (~allFlags))
615 {
616 return false;
617 }
618
619 return true;
620}
621
622static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600623std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600624{
625 if(!ValidateEnumerator(enumerator))
626 {
627 return "unrecognized enumerator";
628 }
629
630 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800631 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600632 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800633 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600634 }
635
636 std::string enumeratorString;
637 for(auto const& string : strings)
638 {
639 enumeratorString += string;
640
641 if(string != strings.back())
642 {
643 enumeratorString += '|';
644 }
645 }
646
647 return enumeratorString;
648}
649
650static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600651bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
652{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800653 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
654 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
655 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600656 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600657 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600658 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600659 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600660
661 return true;
662}
663
664static
665std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
666{
667 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600668 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600669 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600670 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600671
672 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800673 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600674 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800675 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600676 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800677 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600678 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800679 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600680 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800681 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600682 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800683 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600684 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600685
686 std::string enumeratorString;
687 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600688 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600689 enumeratorString += string;
690
691 if(string != strings.back())
692 {
693 enumeratorString += '|';
694 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600695 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600696
697 return enumeratorString;
698}
699
700static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600701bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
702{
703 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
704 if(enumerator & (~allFlags))
705 {
706 return false;
707 }
708
709 return true;
710}
711
712static
713std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
714{
715 if(!ValidateEnumerator(enumerator))
716 {
717 return "unrecognized enumerator";
718 }
719
720 std::vector<std::string> strings;
721 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
722 {
723 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
724 }
725
726 std::string enumeratorString;
727 for(auto const& string : strings)
728 {
729 enumeratorString += string;
730
731 if(string != strings.back())
732 {
733 enumeratorString += '|';
734 }
735 }
736
737 return enumeratorString;
738}
739
740static
741bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
742{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600743 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600754 if(enumerator & (~allFlags))
755 {
756 return false;
757 }
758
759 return true;
760}
761
762static
763std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
764{
765 if(!ValidateEnumerator(enumerator))
766 {
767 return "unrecognized enumerator";
768 }
769
770 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600771 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600772 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600773 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600774 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600775 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600776 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600777 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600778 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600779 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600780 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600781 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600782 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600783 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600784 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600785 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600786 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600787 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600788 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600789 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600790 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600791 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600792 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600793 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600794 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600795 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600796 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600797 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600798 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600799 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600800 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600801 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600802 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600803 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600804 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600805 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600806 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600807 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600808 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600809 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600810 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600811 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600812 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600813 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600814 }
815
816 std::string enumeratorString;
817 for(auto const& string : strings)
818 {
819 enumeratorString += string;
820
821 if(string != strings.back())
822 {
823 enumeratorString += '|';
824 }
825 }
826
827 return enumeratorString;
828}
829
830static
831bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
832{
833 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
834 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
835 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700836 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600837 if(enumerator & (~allFlags))
838 {
839 return false;
840 }
841
842 return true;
843}
844
845static
846std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
847{
848 if(!ValidateEnumerator(enumerator))
849 {
850 return "unrecognized enumerator";
851 }
852
853 std::vector<std::string> strings;
854 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
855 {
856 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
857 }
858 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
859 {
860 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
861 }
862 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
863 {
864 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
865 }
866 if(enumerator & VK_QUERY_RESULT_64_BIT)
867 {
868 strings.push_back("VK_QUERY_RESULT_64_BIT");
869 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600870
871 std::string enumeratorString;
872 for(auto const& string : strings)
873 {
874 enumeratorString += string;
875
876 if(string != strings.back())
877 {
878 enumeratorString += '|';
879 }
880 }
881
882 return enumeratorString;
883}
884
885static
886bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
887{
888 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
889 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
890 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
891 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
892 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800893 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600894 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800895 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600896 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600897 if(enumerator & (~allFlags))
898 {
899 return false;
900 }
901
902 return true;
903}
904
905static
906std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
907{
908 if(!ValidateEnumerator(enumerator))
909 {
910 return "unrecognized enumerator";
911 }
912
913 std::vector<std::string> strings;
914 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
915 {
916 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
917 }
918 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
919 {
920 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
921 }
922 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
923 {
924 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
925 }
926 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
927 {
928 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
929 }
930 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
931 {
932 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
933 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800934 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600935 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800936 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600937 }
938 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
939 {
940 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
941 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800942 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600943 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800944 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600945 }
946 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
947 {
948 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
949 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600950
951 std::string enumeratorString;
952 for(auto const& string : strings)
953 {
954 enumeratorString += string;
955
956 if(string != strings.back())
957 {
958 enumeratorString += '|';
959 }
960 }
961
962 return enumeratorString;
963}
964
965static
966bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
967{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600968 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
969 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600970 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600971 if(enumerator & (~allFlags))
972 {
973 return false;
974 }
975
976 return true;
977}
978
979static
980std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
981{
982 if(!ValidateEnumerator(enumerator))
983 {
984 return "unrecognized enumerator";
985 }
986
987 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600988 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
989 {
990 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
991 }
992 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
993 {
994 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
995 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600996 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600997 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600998 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600999 }
1000
1001 std::string enumeratorString;
1002 for(auto const& string : strings)
1003 {
1004 enumeratorString += string;
1005
1006 if(string != strings.back())
1007 {
1008 enumeratorString += '|';
1009 }
1010 }
1011
1012 return enumeratorString;
1013}
1014
1015static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001016bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1017{
1018 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001019 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1020 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001021 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001022 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 if(enumerator & (~allFlags))
1024 {
1025 return false;
1026 }
1027
1028 return true;
1029}
1030
1031static
1032std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1033{
1034 if(!ValidateEnumerator(enumerator))
1035 {
1036 return "unrecognized enumerator";
1037 }
1038
1039 std::vector<std::string> strings;
1040 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1041 {
1042 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1043 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001044 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1045 {
1046 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1047 }
1048 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1049 {
1050 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1051 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001052 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1053 {
1054 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1055 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001056 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001057 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001058 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001059 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001060
1061 std::string enumeratorString;
1062 for(auto const& string : strings)
1063 {
1064 enumeratorString += string;
1065
1066 if(string != strings.back())
1067 {
1068 enumeratorString += '|';
1069 }
1070 }
1071
1072 return enumeratorString;
1073}
1074
1075static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001076bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001077{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001078 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1079 VK_COLOR_COMPONENT_B_BIT |
1080 VK_COLOR_COMPONENT_G_BIT |
1081 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001082 if(enumerator & (~allFlags))
1083 {
1084 return false;
1085 }
1086
1087 return true;
1088}
1089
1090static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001091std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001092{
1093 if(!ValidateEnumerator(enumerator))
1094 {
1095 return "unrecognized enumerator";
1096 }
1097
1098 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001099 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001100 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001101 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001102 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001103 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001104 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001105 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001107 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001108 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001109 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001110 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001111 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001112 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001113 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001114 }
1115
1116 std::string enumeratorString;
1117 for(auto const& string : strings)
1118 {
1119 enumeratorString += string;
1120
1121 if(string != strings.back())
1122 {
1123 enumeratorString += '|';
1124 }
1125 }
1126
1127 return enumeratorString;
1128}
1129
1130static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001131bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001132{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001133 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1134 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1135 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001136 if(enumerator & (~allFlags))
1137 {
1138 return false;
1139 }
1140
1141 return true;
1142}
1143
1144static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001145std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001146{
1147 if(!ValidateEnumerator(enumerator))
1148 {
1149 return "unrecognized enumerator";
1150 }
1151
1152 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001153 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001154 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001155 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1156 }
1157 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1158 {
1159 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1160 }
1161 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1162 {
1163 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001164 }
1165
1166 std::string enumeratorString;
1167 for(auto const& string : strings)
1168 {
1169 enumeratorString += string;
1170
1171 if(string != strings.back())
1172 {
1173 enumeratorString += '|';
1174 }
1175 }
1176
1177 return enumeratorString;
1178}
1179
1180static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001181bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001182{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001183 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1184 VK_SHADER_STAGE_FRAGMENT_BIT |
1185 VK_SHADER_STAGE_GEOMETRY_BIT |
1186 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001187 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1188 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001189 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001190 if(enumerator & (~allFlags))
1191 {
1192 return false;
1193 }
1194
1195 return true;
1196}
1197
1198static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001199std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001200{
1201 if(!ValidateEnumerator(enumerator))
1202 {
1203 return "unrecognized enumerator";
1204 }
1205
1206 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001207 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001208 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001209 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001210 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001211 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001212 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001213 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001214 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001215 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001216 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001217 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1218 }
1219 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1220 {
1221 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1222 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001223 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001224 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001225 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001226 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001227 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001229 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001230 }
1231 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1232 {
1233 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001234 }
1235
1236 std::string enumeratorString;
1237 for(auto const& string : strings)
1238 {
1239 enumeratorString += string;
1240
1241 if(string != strings.back())
1242 {
1243 enumeratorString += '|';
1244 }
1245 }
1246
1247 return enumeratorString;
1248}
1249
1250static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001251bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001252{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001253 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001254 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001255 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1256 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001257 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001258 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001259 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001260 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001261 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001262 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1263 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1264 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1265 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1266 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1267 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1268 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1269 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1270 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001271 if(enumerator & (~allFlags))
1272 {
1273 return false;
1274 }
1275
1276 return true;
1277}
1278
1279static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001280std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001281{
1282 if(!ValidateEnumerator(enumerator))
1283 {
1284 return "unrecognized enumerator";
1285 }
1286
1287 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001288 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001289 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001290 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1291 }
1292 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1293 {
1294 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001295 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001296 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001297 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001298 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001299 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001300 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001301 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001302 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001303 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001304 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001305 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001306 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001307 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001308 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001309 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001310 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001311 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001312 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001313 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001314 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001315 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001316 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001317 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001318 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001319 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001320 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001321 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001322 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001323 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001324 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001325 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001326 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001327 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001328 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001329 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001330 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1331 }
1332 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1333 {
1334 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1335 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001336 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001337 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001338 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001339 }
1340 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1341 {
1342 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1343 }
1344 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1345 {
1346 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1347 }
1348 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1349 {
1350 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1351 }
1352 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1353 {
1354 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001355 }
1356
1357 std::string enumeratorString;
1358 for(auto const& string : strings)
1359 {
1360 enumeratorString += string;
1361
1362 if(string != strings.back())
1363 {
1364 enumeratorString += '|';
1365 }
1366 }
1367
1368 return enumeratorString;
1369}
1370
1371static
Chia-I Wua4594202015-10-27 19:54:37 +08001372bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001373{
Chia-I Wua4594202015-10-27 19:54:37 +08001374 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1375 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1376 VK_ACCESS_INDEX_READ_BIT |
1377 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1378 VK_ACCESS_UNIFORM_READ_BIT |
1379 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1380 VK_ACCESS_SHADER_READ_BIT |
1381 VK_ACCESS_SHADER_WRITE_BIT |
1382 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1383 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1384 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1385 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1386 VK_ACCESS_TRANSFER_READ_BIT |
1387 VK_ACCESS_TRANSFER_WRITE_BIT |
1388 VK_ACCESS_HOST_READ_BIT |
1389 VK_ACCESS_HOST_WRITE_BIT |
1390 VK_ACCESS_MEMORY_READ_BIT |
1391 VK_ACCESS_MEMORY_WRITE_BIT);
1392
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001393 if(enumerator & (~allFlags))
1394 {
1395 return false;
1396 }
1397
1398 return true;
1399}
1400
1401static
Chia-I Wua4594202015-10-27 19:54:37 +08001402std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001403{
1404 if(!ValidateEnumerator(enumerator))
1405 {
1406 return "unrecognized enumerator";
1407 }
1408
1409 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001411 {
Chia-I Wua4594202015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001413 }
Chia-I Wua4594202015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001415 {
Chia-I Wua4594202015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001417 }
Chia-I Wua4594202015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001419 {
Chia-I Wua4594202015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001421 }
Chia-I Wua4594202015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001423 {
Chia-I Wua4594202015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001425 }
Chia-I Wua4594202015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001427 {
Chia-I Wua4594202015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001429 }
Chia-I Wua4594202015-10-27 19:54:37 +08001430 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001431 {
Chia-I Wua4594202015-10-27 19:54:37 +08001432 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001433 }
Chia-I Wua4594202015-10-27 19:54:37 +08001434 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001435 {
Chia-I Wua4594202015-10-27 19:54:37 +08001436 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001437 }
Chia-I Wua4594202015-10-27 19:54:37 +08001438 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001439 {
Chia-I Wua4594202015-10-27 19:54:37 +08001440 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001441 }
Chia-I Wua4594202015-10-27 19:54:37 +08001442 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001443 {
Chia-I Wua4594202015-10-27 19:54:37 +08001444 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001445 }
Chia-I Wua4594202015-10-27 19:54:37 +08001446 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001447 {
Chia-I Wua4594202015-10-27 19:54:37 +08001448 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001449 }
Chia-I Wua4594202015-10-27 19:54:37 +08001450 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001451 {
Chia-I Wua4594202015-10-27 19:54:37 +08001452 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001453 }
Chia-I Wua4594202015-10-27 19:54:37 +08001454 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001455 {
Chia-I Wua4594202015-10-27 19:54:37 +08001456 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001457 }
Chia-I Wua4594202015-10-27 19:54:37 +08001458 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001459 {
Chia-I Wua4594202015-10-27 19:54:37 +08001460 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001461 }
Chia-I Wua4594202015-10-27 19:54:37 +08001462 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001463 {
Chia-I Wua4594202015-10-27 19:54:37 +08001464 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001465 }
Chia-I Wua4594202015-10-27 19:54:37 +08001466 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001467 {
Chia-I Wua4594202015-10-27 19:54:37 +08001468 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001469 }
Chia-I Wua4594202015-10-27 19:54:37 +08001470 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001471 {
Chia-I Wua4594202015-10-27 19:54:37 +08001472 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001473 }
Chia-I Wua4594202015-10-27 19:54:37 +08001474 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001475 {
Chia-I Wua4594202015-10-27 19:54:37 +08001476 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001477 }
1478
1479 std::string enumeratorString;
1480 for(auto const& string : strings)
1481 {
1482 enumeratorString += string;
1483
1484 if(string != strings.back())
1485 {
1486 enumeratorString += '|';
1487 }
1488 }
1489
1490 return enumeratorString;
1491}
1492
1493static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001494bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001495{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001496 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1497 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001498 if(enumerator & (~allFlags))
1499 {
1500 return false;
1501 }
1502
1503 return true;
1504}
1505
1506static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001507std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001508{
1509 if(!ValidateEnumerator(enumerator))
1510 {
1511 return "unrecognized enumerator";
1512 }
1513
1514 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001515 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001516 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001517 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001518 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001519 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001520 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001521 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001522 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001523
1524 std::string enumeratorString;
1525 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001526 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001527 enumeratorString += string;
1528
1529 if(string != strings.back())
1530 {
1531 enumeratorString += '|';
1532 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001533 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001534
1535 return enumeratorString;
1536}
1537
1538static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001539bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001540{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001541 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001542 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001543 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001544 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001545 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001546
1547 return true;
1548}
1549
1550static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001551std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001552{
1553 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001554 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 return "unrecognized enumerator";
1556 }
1557
1558 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001559 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001560 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001561 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001562 }
1563
1564 std::string enumeratorString;
1565 for(auto const& string : strings)
1566 {
1567 enumeratorString += string;
1568
1569 if(string != strings.back())
1570 {
1571 enumeratorString += '|';
1572 }
1573 }
1574
1575 return enumeratorString;
1576}
1577
1578static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001579bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001580{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001581 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1582 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1583 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001584 if(enumerator & (~allFlags))
1585 {
1586 return false;
1587 }
1588
1589 return true;
1590}
1591
1592static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001593std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001594{
1595 if(!ValidateEnumerator(enumerator))
1596 {
1597 return "unrecognized enumerator";
1598 }
1599
1600 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001601 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001602 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001603 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001604 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001605 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001606 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001607 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001608 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001609 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001610 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001611 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612 }
1613
1614 std::string enumeratorString;
1615 for(auto const& string : strings)
1616 {
1617 enumeratorString += string;
1618
1619 if(string != strings.back())
1620 {
1621 enumeratorString += '|';
1622 }
1623 }
1624
1625 return enumeratorString;
1626}
1627
1628static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001629bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001630{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001631 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001632 if(enumerator & (~allFlags))
1633 {
1634 return false;
1635 }
1636
1637 return true;
1638}
1639
1640static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001641std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001642{
1643 if(!ValidateEnumerator(enumerator))
1644 {
1645 return "unrecognized enumerator";
1646 }
1647
1648 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001649 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001650 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001651 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001652 }
1653
1654 std::string enumeratorString;
1655 for(auto const& string : strings)
1656 {
1657 enumeratorString += string;
1658
1659 if(string != strings.back())
1660 {
1661 enumeratorString += '|';
1662 }
1663 }
1664
1665 return enumeratorString;
1666}
1667
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001668static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001669bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001670{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001671 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1672 VK_IMAGE_ASPECT_STENCIL_BIT |
1673 VK_IMAGE_ASPECT_DEPTH_BIT |
1674 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001675 if(enumerator & (~allFlags))
1676 {
1677 return false;
1678 }
1679
1680 return true;
1681}
1682
1683static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001684std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001685{
1686 if(!ValidateEnumerator(enumerator))
1687 {
1688 return "unrecognized enumerator";
1689 }
1690
1691 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001692 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001693 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001694 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1695 }
1696 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1697 {
1698 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1699 }
1700 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1701 {
1702 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1703 }
1704 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1705 {
1706 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1707 }
1708
1709 std::string enumeratorString;
1710 for(auto const& string : strings)
1711 {
1712 enumeratorString += string;
1713
1714 if(string != strings.back())
1715 {
1716 enumeratorString += '|';
1717 }
1718 }
1719
1720 return enumeratorString;
1721}
1722
1723static
1724bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1725{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001726 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001727 if(enumerator & (~allFlags))
1728 {
1729 return false;
1730 }
1731
1732 return true;
1733}
1734
1735static
1736std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1737{
1738 if(!ValidateEnumerator(enumerator))
1739 {
1740 return "unrecognized enumerator";
1741 }
1742
1743 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001744 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001745 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001746 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001747 }
1748
1749 std::string enumeratorString;
1750 for(auto const& string : strings)
1751 {
1752 enumeratorString += string;
1753
1754 if(string != strings.back())
1755 {
1756 enumeratorString += '|';
1757 }
1758 }
1759
1760 return enumeratorString;
1761}
1762
Chia-I Wu9ab61502015-11-06 06:42:02 +08001763VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001764 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001765 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001766 VkInstance* pInstance)
1767{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001768 VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001769
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001770 assert(chain_info->u.pLayerInfo);
1771 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
1772 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance) fpGetInstanceProcAddr(NULL, "vkCreateInstance");
1773 if (fpCreateInstance == NULL) {
1774 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775 }
1776
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001777 // Advance the link info for the next element on the chain
1778 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
1779
1780 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
1781 if (result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001782 return result;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001783
1784 layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1785 VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
1786
1787 my_data->report_data = debug_report_create_instance(
1788 pTable,
1789 *pInstance,
1790 pCreateInfo->enabledExtensionCount,
1791 pCreateInfo->ppEnabledExtensionNames);
1792
1793 InitParamChecker(my_data, pAllocator);
1794
1795 return result;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001796}
1797
Chia-I Wu9ab61502015-11-06 06:42:02 +08001798VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001799 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001800 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001801{
1802 // Grab the key before the instance is destroyed.
1803 dispatch_key key = get_dispatch_key(instance);
1804 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001805 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001806
1807 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001808 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1809 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001810 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001811 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001812 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813 }
1814
1815 layer_debug_report_destroy_instance(mid(instance));
1816 layer_data_map.erase(pTable);
1817
1818 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001819}
1820
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001821bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001822 VkInstance instance,
1823 uint32_t* pPhysicalDeviceCount,
1824 VkPhysicalDevice* pPhysicalDevices,
1825 VkResult result)
1826{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001827
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001828 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001830 }
1831
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001832 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001833 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001834 }
1835
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001836 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001837 {
1838 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001839 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 -06001840 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001842
1843 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844}
1845
Chia-I Wu9ab61502015-11-06 06:42:02 +08001846VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001847 VkInstance instance,
1848 uint32_t* pPhysicalDeviceCount,
1849 VkPhysicalDevice* pPhysicalDevices)
1850{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1852
1853 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1854
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001855 return result;
1856}
1857
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001858bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001859 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001860 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001861{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001862
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001863 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001864 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001865 }
1866
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001867 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001868}
1869
Chia-I Wu9ab61502015-11-06 06:42:02 +08001870VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001871 VkPhysicalDevice physicalDevice,
1872 VkPhysicalDeviceFeatures* pFeatures)
1873{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001874 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001875
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001876 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001877}
1878
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001879bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001880 VkPhysicalDevice physicalDevice,
1881 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001882 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001883{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884
1885 if(format < VK_FORMAT_BEGIN_RANGE ||
1886 format > VK_FORMAT_END_RANGE)
1887 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001888 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001889 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001890 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001891 }
1892
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001893 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001894 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001895 }
1896
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001897 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001898}
1899
Chia-I Wu9ab61502015-11-06 06:42:02 +08001900VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001901 VkPhysicalDevice physicalDevice,
1902 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001903 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001904{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001905 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001907 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001908}
1909
1910bool PostGetPhysicalDeviceImageFormatProperties(
1911 VkPhysicalDevice physicalDevice,
1912 VkFormat format,
1913 VkImageType type,
1914 VkImageTiling tiling,
1915 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001916 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001917 VkImageFormatProperties* pImageFormatProperties,
1918 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001919{
1920
1921 if(format < VK_FORMAT_BEGIN_RANGE ||
1922 format > VK_FORMAT_END_RANGE)
1923 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001924 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001925 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1926 return false;
1927 }
1928
1929 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1930 type > VK_IMAGE_TYPE_END_RANGE)
1931 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001932 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001933 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1934 return false;
1935 }
1936
1937 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1938 tiling > VK_IMAGE_TILING_END_RANGE)
1939 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001940 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001941 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1942 return false;
1943 }
1944
1945
1946 if(pImageFormatProperties != nullptr)
1947 {
1948 }
1949
Chia-I Wu17241042015-10-31 00:31:16 +08001950 if(result < VK_SUCCESS)
1951 {
1952 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001953 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 +08001954 return false;
1955 }
1956
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001957 return true;
1958}
1959
Chia-I Wu9ab61502015-11-06 06:42:02 +08001960VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001961 VkPhysicalDevice physicalDevice,
1962 VkFormat format,
1963 VkImageType type,
1964 VkImageTiling tiling,
1965 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001966 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001967 VkImageFormatProperties* pImageFormatProperties)
1968{
Chia-I Wu17241042015-10-31 00:31:16 +08001969 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 -06001970
Chia-I Wu17241042015-10-31 00:31:16 +08001971 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1972
1973 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001974}
1975
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001976bool PostGetPhysicalDeviceProperties(
1977 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001978 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001979{
1980
1981 if(pProperties != nullptr)
1982 {
1983 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1984 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1985 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001986 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001987 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1988 return false;
1989 }
1990 }
1991
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001992 return true;
1993}
1994
Chia-I Wu9ab61502015-11-06 06:42:02 +08001995VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001996 VkPhysicalDevice physicalDevice,
1997 VkPhysicalDeviceProperties* pProperties)
1998{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001999 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002000
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002001 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002002}
2003
Cody Northropd0802882015-08-03 17:04:53 -06002004bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002005 VkPhysicalDevice physicalDevice,
2006 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002007 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002008{
2009
Cody Northropd0802882015-08-03 17:04:53 -06002010 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002011 {
2012 }
2013
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002014 if(pQueueProperties != nullptr)
2015 {
2016 }
2017
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002018 return true;
2019}
2020
Chia-I Wu9ab61502015-11-06 06:42:02 +08002021VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002022 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002023 uint32_t* pCount,
2024 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002025{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002026 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002027
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002028 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029}
2030
2031bool PostGetPhysicalDeviceMemoryProperties(
2032 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002033 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002034{
2035
2036 if(pMemoryProperties != nullptr)
2037 {
2038 }
2039
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002040 return true;
2041}
2042
Chia-I Wu9ab61502015-11-06 06:42:02 +08002043VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002044 VkPhysicalDevice physicalDevice,
2045 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2046{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002047 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002048
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002049 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002050}
2051
Chia-I Wu9ab61502015-11-06 06:42:02 +08002052VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002053 VkPhysicalDevice physicalDevice,
2054 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002055 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002056 VkDevice* pDevice)
2057{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002058 /*
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002059 * NOTE: We do not validate physicalDevice or any dispatchable
2060 * object as the first parameter. We couldn't get here if it was wrong!
2061 */
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002062 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
2063
2064 assert(chain_info->u.pLayerInfo);
2065 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
2066 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
2067 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice) fpGetInstanceProcAddr(NULL, "vkCreateDevice");
2068 if (fpCreateDevice == NULL) {
2069 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002070 }
2071
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002072 // Advance the link info for the next element on the chain
2073 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
2074
2075 VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
2076 if (result != VK_SUCCESS) {
2077 return result;
2078 }
2079
2080 layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2081 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2082 my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
2083 initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
2084
Jeremy Hayes99a96322015-06-26 12:48:09 -06002085 return result;
2086}
2087
Chia-I Wu9ab61502015-11-06 06:42:02 +08002088VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002089 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002090 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002091{
2092 layer_debug_report_destroy_device(device);
2093
2094 dispatch_key key = get_dispatch_key(device);
2095#if DISPATCH_MAP_DEBUG
2096 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2097#endif
2098
Chia-I Wuf7458c52015-10-26 21:10:41 +08002099 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002100 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101}
2102
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002103bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002105 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002106 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002107 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002108{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002109
2110
2111
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002112 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002113 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002114 }
2115
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002116 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117}
2118
Chia-I Wu9ab61502015-11-06 06:42:02 +08002119VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002120 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002121 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002122 uint32_t queueIndex,
2123 VkQueue* pQueue)
2124{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002125 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002127 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002128}
2129
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002130bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002131 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002132 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002133{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002134 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002135 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002136 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002137 return false;
2138 }
2139
2140 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002142 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002143
2144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002145}
2146
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002147bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002148 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002149 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002150 VkFence fence,
2151 VkResult result)
2152{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002153
2154
Jeremy Hayes99a96322015-06-26 12:48:09 -06002155
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002156 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157 {
2158 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002159 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 -06002160 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002162
2163 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002164}
2165
Chia-I Wu9ab61502015-11-06 06:42:02 +08002166VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002167 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002168 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002169 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002170 VkFence fence)
2171{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002172 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002173 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002174 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002175
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002176 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002177
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002178 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179
2180 return result;
2181}
2182
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002183bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 VkQueue queue,
2185 VkResult result)
2186{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002187
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002188 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189 {
2190 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002191 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 -06002192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002194
2195 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196}
2197
Chia-I Wu9ab61502015-11-06 06:42:02 +08002198VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002199 VkQueue queue)
2200{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002201 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2202
2203 PostQueueWaitIdle(queue, result);
2204
2205 return result;
2206}
2207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002208bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002209 VkDevice device,
2210 VkResult result)
2211{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002212
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002213 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002214 {
2215 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002216 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 -06002217 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002219
2220 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221}
2222
Chia-I Wu9ab61502015-11-06 06:42:02 +08002223VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002224 VkDevice device)
2225{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2227
2228 PostDeviceWaitIdle(device, result);
2229
2230 return result;
2231}
2232
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002233bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002234 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002235 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002236{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002237 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002238 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002239 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002241 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002242 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002243 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002244 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002245 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002246
2247 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248}
2249
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002250bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002251 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002252 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002253 VkResult result)
2254{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002255
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002256 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002257 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002258 }
2259
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002260 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002261 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002262 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002263 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 -06002264 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002266
2267 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268}
2269
Chia-I Wu9ab61502015-11-06 06:42:02 +08002270VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002272 const VkMemoryAllocateInfo* pAllocateInfo,
2273 const VkAllocationCallbacks* pAllocator,
2274 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002276 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002277
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002278 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002280 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281
2282 return result;
2283}
2284
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002285bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002286 VkDevice device,
2287 VkDeviceMemory mem,
2288 VkDeviceSize offset,
2289 VkDeviceSize size,
2290 VkMemoryMapFlags flags,
2291 void** ppData,
2292 VkResult result)
2293{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002294
Jeremy Hayes99a96322015-06-26 12:48:09 -06002295
2296
2297
2298
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002299 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002300 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002301 }
2302
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002303 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304 {
2305 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002306 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 -06002307 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002308 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002309
2310 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002311}
2312
Chia-I Wu9ab61502015-11-06 06:42:02 +08002313VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002314 VkDevice device,
2315 VkDeviceMemory mem,
2316 VkDeviceSize offset,
2317 VkDeviceSize size,
2318 VkMemoryMapFlags flags,
2319 void** ppData)
2320{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2322
2323 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2324
2325 return result;
2326}
2327
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002328bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002329 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002330 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002331{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002332 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002333 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002334 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002335 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002336 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002337 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002338 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002339 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002340 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002341
2342 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002343}
2344
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002345bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002346 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002347 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002348 VkResult result)
2349{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002350
2351
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002352 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002353 {
2354 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002355 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 -06002356 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002358
2359 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002360}
2361
Chia-I Wu9ab61502015-11-06 06:42:02 +08002362VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002363 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002364 uint32_t memoryRangeCount,
2365 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002366{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002367 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002368
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002369 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002370
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002371 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002373 return result;
2374}
2375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002376bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002377 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002378 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002380 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002381 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002382 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002383 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002384 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002385 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002387 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002388 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002389
2390 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391}
2392
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002393bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002394 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002395 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002396 VkResult result)
2397{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002398
2399
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002400 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002401 {
2402 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002403 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 -06002404 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002405 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002406
2407 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002408}
2409
Chia-I Wu9ab61502015-11-06 06:42:02 +08002410VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002411 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002412 uint32_t memoryRangeCount,
2413 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002414{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002415 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002416
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002417 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002418
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002419 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002420
Tony Barbourb1250542015-04-16 19:23:13 -06002421 return result;
2422}
2423
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002424bool PostGetDeviceMemoryCommitment(
2425 VkDevice device,
2426 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002427 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002428{
2429
2430
2431 if(pCommittedMemoryInBytes != nullptr)
2432 {
2433 }
2434
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002435 return true;
2436}
2437
Chia-I Wu9ab61502015-11-06 06:42:02 +08002438VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002439 VkDevice device,
2440 VkDeviceMemory memory,
2441 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002442{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002443 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002444
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002445 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002446}
2447
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002448bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002449 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002450 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002451 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002452 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002453 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002454{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002455
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002456
Jeremy Hayes99a96322015-06-26 12:48:09 -06002457
2458
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002459 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002460 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002461 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002462 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 -06002463 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002465
2466 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002467}
2468
Chia-I Wu9ab61502015-11-06 06:42:02 +08002469VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002470 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002471 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002472 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002473 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002474{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002475 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002476
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002477 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002478
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002479 return result;
2480}
2481
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002482bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002483 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002484 VkImage image,
2485 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002486 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002487 VkResult result)
2488{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002489
2490
2491
2492
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002493 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002494 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002495 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002496 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 -06002497 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002498 }
2499
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002500 return true;
2501}
2502
Chia-I Wu9ab61502015-11-06 06:42:02 +08002503VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002504 VkDevice device,
2505 VkImage image,
2506 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002507 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002509 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002510
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002511 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002512
2513 return result;
2514}
2515
2516bool PostGetBufferMemoryRequirements(
2517 VkDevice device,
2518 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002519 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002520{
2521
2522
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002523 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002524 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002525 }
2526
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002527 return true;
2528}
2529
Chia-I Wu9ab61502015-11-06 06:42:02 +08002530VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002531 VkDevice device,
2532 VkBuffer buffer,
2533 VkMemoryRequirements* pMemoryRequirements)
2534{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002535 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002536
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002537 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002538}
2539
2540bool PostGetImageMemoryRequirements(
2541 VkDevice device,
2542 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002543 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002544{
2545
2546
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002547 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002548 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002549 }
2550
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002551 return true;
2552}
2553
Chia-I Wu9ab61502015-11-06 06:42:02 +08002554VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002555 VkDevice device,
2556 VkImage image,
2557 VkMemoryRequirements* pMemoryRequirements)
2558{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002559 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002561 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002562}
2563
2564bool PostGetImageSparseMemoryRequirements(
2565 VkDevice device,
2566 VkImage image,
2567 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002568 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569{
2570
2571
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002572 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002573 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002574 }
2575
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002576 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002577 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002578 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002579 (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 -06002580 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002581 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002582 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002583 return false;
2584 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002585 }
2586
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002587 return true;
2588}
2589
Chia-I Wu9ab61502015-11-06 06:42:02 +08002590VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002591 VkDevice device,
2592 VkImage image,
2593 uint32_t* pNumRequirements,
2594 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2595{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002596 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002597
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002598 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002599}
2600
2601bool PostGetPhysicalDeviceSparseImageFormatProperties(
2602 VkPhysicalDevice physicalDevice,
2603 VkFormat format,
2604 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002605 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002606 VkImageUsageFlags usage,
2607 VkImageTiling tiling,
2608 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002609 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002610{
2611
2612 if(format < VK_FORMAT_BEGIN_RANGE ||
2613 format > VK_FORMAT_END_RANGE)
2614 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002615 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002616 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002617 return false;
2618 }
2619
2620 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2621 type > VK_IMAGE_TYPE_END_RANGE)
2622 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002623 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002624 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002625 return false;
2626 }
2627
2628
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629
2630 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2631 tiling > VK_IMAGE_TILING_END_RANGE)
2632 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002633 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002634 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635 return false;
2636 }
2637
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002638 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002639 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002640 }
2641
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002642 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002644 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002645 (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 -06002646 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002647 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002648 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002649 return false;
2650 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002651 }
2652
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002653 return true;
2654}
2655
Chia-I Wu9ab61502015-11-06 06:42:02 +08002656VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002657 VkPhysicalDevice physicalDevice,
2658 VkFormat format,
2659 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002660 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002661 VkImageUsageFlags usage,
2662 VkImageTiling tiling,
2663 uint32_t* pNumProperties,
2664 VkSparseImageFormatProperties* pProperties)
2665{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002666 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002667
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002668 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002669}
2670
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002671bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002673 uint32_t bindInfoCount,
2674 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002675{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002676 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002677 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002678 }
2679
2680 return true;
2681}
2682
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002683bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002684 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002685 uint32_t bindInfoCount,
2686 const VkBindSparseInfo* pBindInfo,
2687 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002688 VkResult result)
2689{
2690
2691
2692
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002693 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002694 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002695 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002696 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 -06002697 return false;
2698 }
2699
2700 return true;
2701}
2702
Chia-I Wu9ab61502015-11-06 06:42:02 +08002703VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002704 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002705 uint32_t bindInfoCount,
2706 const VkBindSparseInfo* pBindInfo,
2707 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002708{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002709 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002710
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002711 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002712
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002713 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002714
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002715 return result;
2716}
2717
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002718bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002719 VkDevice device,
2720 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002721{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002722 if(pCreateInfo != nullptr)
2723 {
2724 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002725 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002726 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002727 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002728 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002729 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002730 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002731
2732 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002733}
2734
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002735bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002736 VkDevice device,
2737 VkFence* pFence,
2738 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002739{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002740
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002741 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002742 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002743 }
2744
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002745 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002746 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002747 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002748 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 -06002749 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002750 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002751
2752 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002753}
2754
Chia-I Wu9ab61502015-11-06 06:42:02 +08002755VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002756 VkDevice device,
2757 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002758 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002759 VkFence* pFence)
2760{
2761 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002762
Chia-I Wuf7458c52015-10-26 21:10:41 +08002763 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002764
2765 PostCreateFence(device, pFence, result);
2766
2767 return result;
2768}
2769
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002770bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002771 VkDevice device,
2772 const VkFence* pFences)
2773{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002774 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002775 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002776 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002777
2778 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002779}
2780
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002781bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002782 VkDevice device,
2783 uint32_t fenceCount,
2784 VkResult result)
2785{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002786
2787
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002788 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002789 {
2790 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002791 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 -06002792 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002793 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002794
2795 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002796}
2797
Chia-I Wu9ab61502015-11-06 06:42:02 +08002798VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002799 VkDevice device,
2800 uint32_t fenceCount,
2801 const VkFence* pFences)
2802{
2803 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002804
Jeremy Hayes99a96322015-06-26 12:48:09 -06002805 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2806
2807 PostResetFences(device, fenceCount, result);
2808
2809 return result;
2810}
2811
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002812bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002813 VkDevice device,
2814 VkFence fence,
2815 VkResult result)
2816{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002817
Jeremy Hayes99a96322015-06-26 12:48:09 -06002818
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002819 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 {
2821 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002822 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 -06002823 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002824 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002825
2826 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002827}
2828
Chia-I Wu9ab61502015-11-06 06:42:02 +08002829VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002830 VkDevice device,
2831 VkFence fence)
2832{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002833 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2834
2835 PostGetFenceStatus(device, fence, result);
2836
2837 return result;
2838}
2839
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002840bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002841 VkDevice device,
2842 const VkFence* pFences)
2843{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002844 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002845 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002846 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002847
2848 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002849}
2850
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002851bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002852 VkDevice device,
2853 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002854 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002855 uint64_t timeout,
2856 VkResult result)
2857{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002858
2859
2860
2861
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002862 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002863 {
2864 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002865 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 -06002866 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002867 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002868
2869 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002870}
2871
Chia-I Wu9ab61502015-11-06 06:42:02 +08002872VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002873 VkDevice device,
2874 uint32_t fenceCount,
2875 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002876 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002877 uint64_t timeout)
2878{
2879 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002880
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2882
2883 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2884
2885 return result;
2886}
2887
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002888bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002889 VkDevice device,
2890 const VkSemaphoreCreateInfo* pCreateInfo)
2891{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002892 if(pCreateInfo != nullptr)
2893 {
2894 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002895 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002896 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002897 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002898 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002899 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002900 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002901
2902 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002903}
2904
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002905bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002906 VkDevice device,
2907 VkSemaphore* pSemaphore,
2908 VkResult result)
2909{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002910
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002911 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002912 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002913 }
2914
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002915 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002916 {
2917 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002918 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 -06002919 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002920 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002921
2922 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002923}
2924
Chia-I Wu9ab61502015-11-06 06:42:02 +08002925VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002926 VkDevice device,
2927 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002928 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002929 VkSemaphore* pSemaphore)
2930{
2931 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002932
Chia-I Wuf7458c52015-10-26 21:10:41 +08002933 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002934
2935 PostCreateSemaphore(device, pSemaphore, result);
2936
2937 return result;
2938}
2939
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002940bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002941 VkDevice device,
2942 const VkEventCreateInfo* pCreateInfo)
2943{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002944 if(pCreateInfo != nullptr)
2945 {
2946 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002947 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002948 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002949 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002950 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002952 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002953
2954 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002955}
2956
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002957bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002958 VkDevice device,
2959 VkEvent* pEvent,
2960 VkResult result)
2961{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002962
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002963 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002964 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002965 }
2966
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002967 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968 {
2969 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002970 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 -06002971 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002972 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002973
2974 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002975}
2976
Chia-I Wu9ab61502015-11-06 06:42:02 +08002977VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978 VkDevice device,
2979 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002980 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981 VkEvent* pEvent)
2982{
2983 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002984
Chia-I Wuf7458c52015-10-26 21:10:41 +08002985 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002986
2987 PostCreateEvent(device, pEvent, result);
2988
2989 return result;
2990}
2991
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002992bool PostGetEventStatus(
2993 VkDevice device,
2994 VkEvent event,
2995 VkResult result)
2996{
2997
Jeremy Hayes99a96322015-06-26 12:48:09 -06002998
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002999 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003000 {
3001 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003002 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 -06003003 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003004 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003005
3006 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003007}
3008
Chia-I Wu9ab61502015-11-06 06:42:02 +08003009VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003010 VkDevice device,
3011 VkEvent event)
3012{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003013 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3014
3015 PostGetEventStatus(device, event, result);
3016
3017 return result;
3018}
3019
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003020bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003021 VkDevice device,
3022 VkEvent event,
3023 VkResult result)
3024{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025
Jeremy Hayes99a96322015-06-26 12:48:09 -06003026
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003027 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028 {
3029 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003030 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 -06003031 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003032 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003033
3034 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003035}
3036
Chia-I Wu9ab61502015-11-06 06:42:02 +08003037VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003038 VkDevice device,
3039 VkEvent event)
3040{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003041 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3042
3043 PostSetEvent(device, event, result);
3044
3045 return result;
3046}
3047
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003048bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003049 VkDevice device,
3050 VkEvent event,
3051 VkResult result)
3052{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053
Jeremy Hayes99a96322015-06-26 12:48:09 -06003054
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003055 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003056 {
3057 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003058 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 -06003059 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003060 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003061
3062 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003063}
3064
Chia-I Wu9ab61502015-11-06 06:42:02 +08003065VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003066 VkDevice device,
3067 VkEvent event)
3068{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3070
3071 PostResetEvent(device, event, result);
3072
3073 return result;
3074}
3075
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003076bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 VkDevice device,
3078 const VkQueryPoolCreateInfo* pCreateInfo)
3079{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003080 if(pCreateInfo != nullptr)
3081 {
3082 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003084 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003085 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003086 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003087 }
3088 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3089 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3090 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003091 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003092 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003093 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003095 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003096
3097 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003098}
3099
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003100bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003101 VkDevice device,
3102 VkQueryPool* pQueryPool,
3103 VkResult result)
3104{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003105
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003106 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003107 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003108 }
3109
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003110 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 {
3112 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003113 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 -06003114 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003115 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003116
3117 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003118}
3119
Chia-I Wu9ab61502015-11-06 06:42:02 +08003120VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 VkDevice device,
3122 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003123 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124 VkQueryPool* pQueryPool)
3125{
3126 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003127
Chia-I Wuf7458c52015-10-26 21:10:41 +08003128 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129
3130 PostCreateQueryPool(device, pQueryPool, result);
3131
3132 return result;
3133}
3134
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003135bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136 VkDevice device,
3137 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003138 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003140 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003142 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003143 VkQueryResultFlags flags,
3144 VkResult result)
3145{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146
Jeremy Hayes99a96322015-06-26 12:48:09 -06003147
3148
3149
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003150 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003152 }
3153
Jeremy Hayes99a96322015-06-26 12:48:09 -06003154
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003155 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003156 {
3157 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003158 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 -06003159 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003160 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003161
3162 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163}
3164
Chia-I Wu9ab61502015-11-06 06:42:02 +08003165VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 VkDevice device,
3167 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003168 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003169 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003170 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003171 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003172 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 VkQueryResultFlags flags)
3174{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003175 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 -06003176
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003177 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178
3179 return result;
3180}
3181
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003182bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003183 VkDevice device,
3184 const VkBufferCreateInfo* pCreateInfo)
3185{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003186 if(pCreateInfo != nullptr)
3187 {
3188 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003189 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003190 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003191 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003193 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003194 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3195 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003196 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003197 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003198 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003199 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003201 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003203 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003205
3206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207}
3208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003209bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003210 VkDevice device,
3211 VkBuffer* pBuffer,
3212 VkResult result)
3213{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003214
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003215 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003216 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 }
3218
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003219 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003220 {
3221 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003222 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 -06003223 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003225
3226 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003227}
3228
Chia-I Wu9ab61502015-11-06 06:42:02 +08003229VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 VkDevice device,
3231 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003232 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003233 VkBuffer* pBuffer)
3234{
3235 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003236
Chia-I Wuf7458c52015-10-26 21:10:41 +08003237 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003238
3239 PostCreateBuffer(device, pBuffer, result);
3240
3241 return result;
3242}
3243
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003244bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003245 VkDevice device,
3246 const VkBufferViewCreateInfo* pCreateInfo)
3247{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003248 if(pCreateInfo != nullptr)
3249 {
3250 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003252 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003253 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003254 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003255 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3257 pCreateInfo->format > VK_FORMAT_END_RANGE)
3258 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003259 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003260 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003261 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003262 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003263 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003264
3265 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003266}
3267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003268bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003269 VkDevice device,
3270 VkBufferView* pView,
3271 VkResult result)
3272{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003273
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003274 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003275 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003276 }
3277
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003278 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003279 {
3280 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003281 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 -06003282 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003283 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003284
3285 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003286}
3287
Chia-I Wu9ab61502015-11-06 06:42:02 +08003288VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289 VkDevice device,
3290 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003291 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292 VkBufferView* pView)
3293{
3294 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003295
Chia-I Wuf7458c52015-10-26 21:10:41 +08003296 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003297
3298 PostCreateBufferView(device, pView, result);
3299
3300 return result;
3301}
3302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003304 VkDevice device,
3305 const VkImageCreateInfo* pCreateInfo)
3306{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003307 if(pCreateInfo != nullptr)
3308 {
3309 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003310 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003311 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003312 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003313 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003314 }
3315 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3316 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3317 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003318 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003319 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003320 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003321 }
3322 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3323 pCreateInfo->format > VK_FORMAT_END_RANGE)
3324 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003325 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003326 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003327 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003328 }
3329 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3330 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3331 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003332 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003333 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003334 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003335 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003336 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3337 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003338 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003339 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003340 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003341 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003342 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003343 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003345 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003346 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003347
3348 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003349}
3350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003351bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003352 VkDevice device,
3353 VkImage* pImage,
3354 VkResult result)
3355{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003356
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003357 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003358 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359 }
3360
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003361 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003362 {
3363 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003364 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 -06003365 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003366 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003367
3368 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003369}
3370
Chia-I Wu9ab61502015-11-06 06:42:02 +08003371VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372 VkDevice device,
3373 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003374 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003376{
3377 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003378
Chia-I Wuf7458c52015-10-26 21:10:41 +08003379 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003380
3381 PostCreateImage(device, pImage, result);
3382
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003383 return result;
3384}
3385
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003386bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 VkDevice device,
3388 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003389{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003390 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003391 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003392 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003393 (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 -06003394 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003395 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003396 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003397 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003398 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003399 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003400
3401 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402}
3403
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003404bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003405 VkDevice device,
3406 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003407 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003408{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003409
Jeremy Hayes99a96322015-06-26 12:48:09 -06003410
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003411 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003412 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003413 }
3414
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003415 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003416}
3417
Chia-I Wu9ab61502015-11-06 06:42:02 +08003418VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003419 VkDevice device,
3420 VkImage image,
3421 const VkImageSubresource* pSubresource,
3422 VkSubresourceLayout* pLayout)
3423{
3424 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003426 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003428 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003429}
3430
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003431bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003432 VkDevice device,
3433 const VkImageViewCreateInfo* pCreateInfo)
3434{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003435 if(pCreateInfo != nullptr)
3436 {
3437 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003438 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003439 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003440 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003441 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003442 }
3443 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3444 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3445 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003446 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003447 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003448 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003449 }
3450 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3451 pCreateInfo->format > VK_FORMAT_END_RANGE)
3452 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003453 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003454 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003455 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003456 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003457 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3458 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003460 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003461 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003462 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003463 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003464 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3465 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003466 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003467 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003468 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003469 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003470 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003471 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3472 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003473 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003474 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003475 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003476 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003478 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3479 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003480 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003481 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003482 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003483 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003484 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003485 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003486
3487 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003488}
3489
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003490bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003491 VkDevice device,
3492 VkImageView* pView,
3493 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003494{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003495
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003496 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003497 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003498 }
3499
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003500 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003501 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003502 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003503 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 -06003504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003505 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003506
3507 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003508}
3509
Chia-I Wu9ab61502015-11-06 06:42:02 +08003510VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003511 VkDevice device,
3512 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003513 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003514 VkImageView* pView)
3515{
3516 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003517
Chia-I Wuf7458c52015-10-26 21:10:41 +08003518 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003519
3520 PostCreateImageView(device, pView, result);
3521
3522 return result;
3523}
3524
Michael Lentine03d8e572015-09-15 14:59:14 -05003525bool PreCreateShaderModule(
3526 VkDevice device,
3527 const VkShaderModuleCreateInfo* pCreateInfo)
3528{
3529 if(pCreateInfo) {
3530 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
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 parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3533 return false;
3534 }
3535 if(!pCreateInfo->pCode) {
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 paramter, void* pCreateInfo->pCode, is null");
3538 return false;
3539 }
3540 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003541 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003542 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3543 return false;
3544 }
3545
3546 return true;
3547}
3548
3549bool PostCreateShaderModule(
3550 VkDevice device,
3551 VkShaderModule* pShaderModule,
3552 VkResult result)
3553{
3554 if(result < VK_SUCCESS) {
3555 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003556 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 -05003557 return false;
3558 }
3559
3560 return true;
3561}
3562
Chia-I Wu9ab61502015-11-06 06:42:02 +08003563VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003564 VkDevice device,
3565 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003566 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003567 VkShaderModule* pShaderModule)
3568{
3569 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003570 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003571 PostCreateShaderModule(device, pShaderModule, result);
3572 return result;
3573}
3574
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003575bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003577 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003578{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003579 if(pCreateInfo != nullptr)
3580 {
3581 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003582 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003583 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003584 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003585 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003586 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003587 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003588 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003589 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003590 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003591
3592 return true;
3593}
3594
3595bool PostCreatePipelineCache(
3596 VkDevice device,
3597 VkPipelineCache* pPipelineCache,
3598 VkResult result)
3599{
3600
3601 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003602 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003603 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003604
3605 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003606 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003607 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003608 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 -06003609 return false;
3610 }
3611
3612 return true;
3613}
3614
Chia-I Wu9ab61502015-11-06 06:42:02 +08003615VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003616 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003617 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003618 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619 VkPipelineCache* pPipelineCache)
3620{
3621 PreCreatePipelineCache(device, pCreateInfo);
3622
Chia-I Wuf7458c52015-10-26 21:10:41 +08003623 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003624
3625 PostCreatePipelineCache(device, pPipelineCache, result);
3626
3627 return result;
3628}
3629
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003630bool PostGetPipelineCacheData(
3631 VkDevice device,
3632 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003633 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003634 void* pData,
3635 VkResult result)
3636{
3637
3638
Chia-I Wub16facd2015-10-26 19:17:06 +08003639 if(pDataSize != nullptr)
3640 {
3641 }
3642
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003643 if(pData != nullptr)
3644 {
3645 }
3646
3647 if(result < VK_SUCCESS)
3648 {
3649 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003650 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 -06003651 return false;
3652 }
3653
3654 return true;
3655}
3656
Chia-I Wu9ab61502015-11-06 06:42:02 +08003657VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003658 VkDevice device,
3659 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003660 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003661 void* pData)
3662{
Chia-I Wub16facd2015-10-26 19:17:06 +08003663 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003664
Chia-I Wub16facd2015-10-26 19:17:06 +08003665 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003666
3667 return result;
3668}
3669
3670bool PreMergePipelineCaches(
3671 VkDevice device,
3672 const VkPipelineCache* pSrcCaches)
3673{
3674 if(pSrcCaches != nullptr)
3675 {
3676 }
3677
3678 return true;
3679}
3680
3681bool PostMergePipelineCaches(
3682 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003683 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003684 uint32_t srcCacheCount,
3685 VkResult result)
3686{
3687
3688
3689
3690 if(result < VK_SUCCESS)
3691 {
3692 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003693 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 -06003694 return false;
3695 }
3696
3697 return true;
3698}
3699
Chia-I Wu9ab61502015-11-06 06:42:02 +08003700VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003701 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003702 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003703 uint32_t srcCacheCount,
3704 const VkPipelineCache* pSrcCaches)
3705{
3706 PreMergePipelineCaches(device, pSrcCaches);
3707
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003708 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003709
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003710 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003711
3712 return result;
3713}
3714
3715bool PreCreateGraphicsPipelines(
3716 VkDevice device,
3717 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3718{
3719 if(pCreateInfos != nullptr)
3720 {
3721 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3722 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003723 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003724 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3725 return false;
3726 }
3727 if(pCreateInfos->pStages != nullptr)
3728 {
3729 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3730 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003731 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003732 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3733 return false;
3734 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003735 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3736 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003737 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003738 {
3739 }
3740 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3741 {
3742 }
3743 }
3744 }
3745 if(pCreateInfos->pVertexInputState != nullptr)
3746 {
3747 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3748 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003749 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003750 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3751 return false;
3752 }
3753 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3754 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003755 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3756 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003757 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003758 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003759 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003760 return false;
3761 }
3762 }
3763 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3764 {
3765 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3766 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3767 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003768 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003769 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3770 return false;
3771 }
3772 }
3773 }
3774 if(pCreateInfos->pInputAssemblyState != nullptr)
3775 {
3776 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3777 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003778 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3780 return false;
3781 }
3782 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3783 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3784 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003785 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003786 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3787 return false;
3788 }
3789 }
3790 if(pCreateInfos->pTessellationState != nullptr)
3791 {
3792 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3793 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003794 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003795 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3796 return false;
3797 }
3798 }
3799 if(pCreateInfos->pViewportState != nullptr)
3800 {
3801 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3802 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003803 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003804 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3805 return false;
3806 }
3807 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003808 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003809 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003810 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003811 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003812 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003813 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003814 return false;
3815 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003816 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3817 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003818 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003819 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003820 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003821 return false;
3822 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003823 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003824 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003825 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003826 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003827 return false;
3828 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003829 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3830 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003831 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003832 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003833 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003834 return false;
3835 }
3836 }
3837 if(pCreateInfos->pMultisampleState != nullptr)
3838 {
3839 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3840 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003841 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003842 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3843 return false;
3844 }
3845 }
3846 if(pCreateInfos->pDepthStencilState != nullptr)
3847 {
3848 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3849 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003850 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003851 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3852 return false;
3853 }
3854 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3855 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3856 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003857 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003858 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3859 return false;
3860 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003861 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3862 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003863 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003864 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003865 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003866 return false;
3867 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003868 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3869 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003870 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003871 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003872 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 return false;
3874 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003875 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3876 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003878 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003879 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003880 return false;
3881 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003882 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3883 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003884 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003885 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003886 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003887 return false;
3888 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003889 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3890 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003891 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003892 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003893 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003894 return false;
3895 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003896 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3897 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003898 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003899 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003900 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003901 return false;
3902 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003903 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3904 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003905 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003906 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003907 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003908 return false;
3909 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003910 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3911 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003912 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003913 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003914 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003915 return false;
3916 }
3917 }
3918 if(pCreateInfos->pColorBlendState != nullptr)
3919 {
3920 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3921 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003922 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3924 return false;
3925 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003926 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3927 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003928 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3929 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003930 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003931 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3932 return false;
3933 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003934 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003935 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003936 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3937 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003938 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003939 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003940 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003941 return false;
3942 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003943 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3944 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003945 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003946 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003947 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003948 return false;
3949 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003950 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3951 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003952 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003953 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003954 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003955 return false;
3956 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003957 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3958 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003959 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003960 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003961 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003962 return false;
3963 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003964 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3965 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003966 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003967 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003968 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003969 return false;
3970 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003971 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3972 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003973 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003974 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003975 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003976 return false;
3977 }
3978 }
3979 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003980 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3981 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003982 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003983 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3984 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003985 }
3986
3987 return true;
3988}
3989
3990bool PostCreateGraphicsPipelines(
3991 VkDevice device,
3992 VkPipelineCache pipelineCache,
3993 uint32_t count,
3994 VkPipeline* pPipelines,
3995 VkResult result)
3996{
3997
3998
3999
4000 if(pPipelines != nullptr)
4001 {
4002 }
4003
4004 if(result < VK_SUCCESS)
4005 {
4006 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004007 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 -06004008 return false;
4009 }
4010
4011 return true;
4012}
4013
Chia-I Wu9ab61502015-11-06 06:42:02 +08004014VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004015 VkDevice device,
4016 VkPipelineCache pipelineCache,
4017 uint32_t count,
4018 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004019 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020 VkPipeline* pPipelines)
4021{
4022 PreCreateGraphicsPipelines(device, pCreateInfos);
4023
Chia-I Wuf7458c52015-10-26 21:10:41 +08004024 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004025
4026 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4027
4028 return result;
4029}
4030
4031bool PreCreateComputePipelines(
4032 VkDevice device,
4033 const VkComputePipelineCreateInfo* pCreateInfos)
4034{
4035 if(pCreateInfos != nullptr)
4036 {
4037 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4038 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004039 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004040 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4041 return false;
4042 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004043 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004044 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004045 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004046 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4047 return false;
4048 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004049 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004050 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004051 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004052 {
4053 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004054 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004055 {
4056 }
4057 }
4058 }
4059
4060 return true;
4061}
4062
4063bool PostCreateComputePipelines(
4064 VkDevice device,
4065 VkPipelineCache pipelineCache,
4066 uint32_t count,
4067 VkPipeline* pPipelines,
4068 VkResult result)
4069{
4070
4071
4072
4073 if(pPipelines != nullptr)
4074 {
4075 }
4076
4077 if(result < VK_SUCCESS)
4078 {
4079 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004080 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004081 return false;
4082 }
4083
4084 return true;
4085}
4086
Chia-I Wu9ab61502015-11-06 06:42:02 +08004087VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 VkDevice device,
4089 VkPipelineCache pipelineCache,
4090 uint32_t count,
4091 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004092 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093 VkPipeline* pPipelines)
4094{
4095 PreCreateComputePipelines(device, pCreateInfos);
4096
Chia-I Wuf7458c52015-10-26 21:10:41 +08004097 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004098
4099 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4100
4101 return result;
4102}
4103
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004104bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004105 VkDevice device,
4106 const VkPipelineLayoutCreateInfo* pCreateInfo)
4107{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004108 if(pCreateInfo != nullptr)
4109 {
4110 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004111 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004112 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004113 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4114 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004116 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004117 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004118 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004119 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004120 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004121 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004122 }
4123
4124 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004125}
4126
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004127bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004128 VkDevice device,
4129 VkPipelineLayout* pPipelineLayout,
4130 VkResult result)
4131{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004132
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004133 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004134 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004135 }
4136
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004137 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004138 {
4139 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004140 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 -06004141 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004142 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004143
4144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004145}
4146
Chia-I Wu9ab61502015-11-06 06:42:02 +08004147VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004148 VkDevice device,
4149 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004150 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004151 VkPipelineLayout* pPipelineLayout)
4152{
4153 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004154
Chia-I Wuf7458c52015-10-26 21:10:41 +08004155 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004156
4157 PostCreatePipelineLayout(device, pPipelineLayout, result);
4158
4159 return result;
4160}
4161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004162bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004163 VkDevice device,
4164 const VkSamplerCreateInfo* pCreateInfo)
4165{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004166 if(pCreateInfo != nullptr)
4167 {
4168 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004169 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004170 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004171 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004172 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004173 }
Chia-I Wub99df442015-10-26 16:49:32 +08004174 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4175 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004176 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004177 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004178 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004179 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004180 }
Chia-I Wub99df442015-10-26 16:49:32 +08004181 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4182 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004183 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004184 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004185 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004186 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004187 }
Chia-I Wub99df442015-10-26 16:49:32 +08004188 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4189 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004190 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004191 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004192 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004193 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004194 }
Chia-I Wub99df442015-10-26 16:49:32 +08004195 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4196 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004197 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004198 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004199 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004200 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004201 }
Chia-I Wub99df442015-10-26 16:49:32 +08004202 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4203 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004204 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004205 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004206 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004207 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004208 }
Chia-I Wub99df442015-10-26 16:49:32 +08004209 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4210 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004211 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004212 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004213 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004214 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004216 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004217 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004218 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4219 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4220 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004221 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004222 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4223 return false;
4224 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004225 }
4226 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4227 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4228 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004229 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004230 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004231 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004232 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004234
4235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004236}
4237
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004238bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004239 VkDevice device,
4240 VkSampler* pSampler,
4241 VkResult result)
4242{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004243
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004244 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004245 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004246 }
4247
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004248 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004249 {
4250 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004251 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 -06004252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004253 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004254
4255 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004256}
4257
Chia-I Wu9ab61502015-11-06 06:42:02 +08004258VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004259 VkDevice device,
4260 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004261 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004262 VkSampler* pSampler)
4263{
4264 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004265
Chia-I Wuf7458c52015-10-26 21:10:41 +08004266 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004267
4268 PostCreateSampler(device, pSampler, result);
4269
4270 return result;
4271}
4272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004273bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 VkDevice device,
4275 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4276{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004277 if(pCreateInfo != nullptr)
4278 {
4279 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004280 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004281 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004282 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004283 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004284 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004285 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004286 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004287 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4288 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004289 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004290 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004291 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004292 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004293 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004294 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004295 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004296 }
4297 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004298 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004299
4300 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004301}
4302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004303bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004304 VkDevice device,
4305 VkDescriptorSetLayout* pSetLayout,
4306 VkResult result)
4307{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004308
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004309 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004310 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004311 }
4312
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004313 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004314 {
4315 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004316 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 -06004317 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004318 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004319
4320 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321}
4322
Chia-I Wu9ab61502015-11-06 06:42:02 +08004323VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 VkDevice device,
4325 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004326 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004327 VkDescriptorSetLayout* pSetLayout)
4328{
4329 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004330
Chia-I Wuf7458c52015-10-26 21:10:41 +08004331 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004332
4333 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4334
4335 return result;
4336}
4337
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004338bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004339 VkDevice device,
4340 const VkDescriptorPoolCreateInfo* pCreateInfo)
4341{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004342 if(pCreateInfo != nullptr)
4343 {
4344 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004346 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004347 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004348 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004349 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004350 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004351 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004352 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4353 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004354 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004355 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004356 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004357 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004359 }
4360 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004361
4362 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004363}
4364
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004365bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367 uint32_t maxSets,
4368 VkDescriptorPool* pDescriptorPool,
4369 VkResult result)
4370{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004372 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004373
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004374 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004375 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004376 }
4377
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004378 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379 {
4380 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004381 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 -06004382 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004383 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004384
4385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386}
4387
Chia-I Wu9ab61502015-11-06 06:42:02 +08004388VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004389 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004390 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004391 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392 VkDescriptorPool* pDescriptorPool)
4393{
4394 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004395
Chia-I Wuf7458c52015-10-26 21:10:41 +08004396 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004397
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004398 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004399
4400 return result;
4401}
4402
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004403bool PostResetDescriptorPool(
4404 VkDevice device,
4405 VkDescriptorPool descriptorPool,
4406 VkResult result)
4407{
4408
Jeremy Hayes99a96322015-06-26 12:48:09 -06004409
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004410 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004411 {
4412 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004413 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 -06004414 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004415 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004416
4417 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418}
4419
Chia-I Wu9ab61502015-11-06 06:42:02 +08004420VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004422 VkDescriptorPool descriptorPool,
4423 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004424{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004425 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004426
4427 PostResetDescriptorPool(device, descriptorPool, result);
4428
4429 return result;
4430}
4431
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004432bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004433 VkDevice device,
4434 const VkDescriptorSetLayout* pSetLayouts)
4435{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004436 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004437 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004438 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004439
4440 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441}
4442
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004443bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444 VkDevice device,
4445 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446 uint32_t count,
4447 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004448 VkResult result)
4449{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004450
Jeremy Hayes99a96322015-06-26 12:48:09 -06004451
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004452 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004453 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004454 }
4455
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004456 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004457 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004458 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004459 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004460 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004461 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004462
4463 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004464}
4465
Chia-I Wu9ab61502015-11-06 06:42:02 +08004466VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004467 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004468 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004469 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004470{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004471 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004472
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004473 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004474
Jon Ashburnf19916e2016-01-11 13:12:43 -07004475 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004476
4477 return result;
4478}
4479
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004480bool PreFreeDescriptorSets(
4481 VkDevice device,
4482 const VkDescriptorSet* pDescriptorSets)
4483{
4484 if(pDescriptorSets != nullptr)
4485 {
4486 }
4487
4488 return true;
4489}
4490
4491bool PostFreeDescriptorSets(
4492 VkDevice device,
4493 VkDescriptorPool descriptorPool,
4494 uint32_t count,
4495 VkResult result)
4496{
4497
4498
4499
4500 if(result < VK_SUCCESS)
4501 {
4502 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004503 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 -06004504 return false;
4505 }
4506
4507 return true;
4508}
4509
Chia-I Wu9ab61502015-11-06 06:42:02 +08004510VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004511 VkDevice device,
4512 VkDescriptorPool descriptorPool,
4513 uint32_t count,
4514 const VkDescriptorSet* pDescriptorSets)
4515{
4516 PreFreeDescriptorSets(device, pDescriptorSets);
4517
4518 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4519
4520 PostFreeDescriptorSets(device, descriptorPool, count, result);
4521
4522 return result;
4523}
4524
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004525bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 VkDevice device,
4527 const VkWriteDescriptorSet* pDescriptorWrites,
4528 const VkCopyDescriptorSet* pDescriptorCopies)
4529{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004530 if(pDescriptorWrites != nullptr)
4531 {
4532 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004533 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004534 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004535 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004536 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537 }
4538 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4539 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4540 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004541 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004542 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004543 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004544 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004545 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4546 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4547 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004549 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4550 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4551 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004553 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004554 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004555 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004556 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004557 }
4558 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004560 if(pDescriptorCopies != nullptr)
4561 {
4562 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004563 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004564 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004565 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004566 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004567 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004568 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004569
4570 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004571}
4572
Chia-I Wu9ab61502015-11-06 06:42:02 +08004573VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004574 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004575 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004576 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004577 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004578 const VkCopyDescriptorSet* pDescriptorCopies)
4579{
4580 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004581
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004582 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004583}
4584
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004585bool PreCreateFramebuffer(
4586 VkDevice device,
4587 const VkFramebufferCreateInfo* pCreateInfo)
4588{
4589 if(pCreateInfo != nullptr)
4590 {
4591 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4592 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004593 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004594 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4595 return false;
4596 }
4597 if(pCreateInfo->pAttachments != nullptr)
4598 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004599 }
4600 }
4601
4602 return true;
4603}
4604
4605bool PostCreateFramebuffer(
4606 VkDevice device,
4607 VkFramebuffer* pFramebuffer,
4608 VkResult result)
4609{
4610
4611 if(pFramebuffer != nullptr)
4612 {
4613 }
4614
4615 if(result < VK_SUCCESS)
4616 {
4617 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004618 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 -06004619 return false;
4620 }
4621
4622 return true;
4623}
4624
Chia-I Wu9ab61502015-11-06 06:42:02 +08004625VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004626 VkDevice device,
4627 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004628 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004629 VkFramebuffer* pFramebuffer)
4630{
4631 PreCreateFramebuffer(device, pCreateInfo);
4632
Chia-I Wuf7458c52015-10-26 21:10:41 +08004633 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004634
4635 PostCreateFramebuffer(device, pFramebuffer, result);
4636
4637 return result;
4638}
4639
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004640bool PreCreateRenderPass(
4641 VkDevice device,
4642 const VkRenderPassCreateInfo* pCreateInfo)
4643{
4644 if(pCreateInfo != nullptr)
4645 {
4646 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4647 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004648 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004649 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4650 return false;
4651 }
4652 if(pCreateInfo->pAttachments != nullptr)
4653 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004654 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4655 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4656 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004657 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004658 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4659 return false;
4660 }
4661 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4662 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4663 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004664 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004665 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4666 return false;
4667 }
4668 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4669 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4670 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004671 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004672 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4673 return false;
4674 }
4675 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4676 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4677 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004678 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004679 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4680 return false;
4681 }
4682 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4683 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4684 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004685 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004686 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4687 return false;
4688 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004689 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4690 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4691 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004692 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004693 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004694 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4695 return false;
4696 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004697 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4698 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4699 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004700 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004701 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004702 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4703 return false;
4704 }
4705 }
4706 if(pCreateInfo->pSubpasses != nullptr)
4707 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004708 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4709 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4710 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004711 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004712 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4713 return false;
4714 }
Cody Northropa505dda2015-08-04 11:16:41 -06004715 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004716 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004717 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4718 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4719 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004720 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004721 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004722 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004723 return false;
4724 }
4725 }
Cody Northropa505dda2015-08-04 11:16:41 -06004726 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004727 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004728 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4729 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4730 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004731 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004732 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004733 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004734 return false;
4735 }
4736 }
Cody Northropa505dda2015-08-04 11:16:41 -06004737 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004738 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004739 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4740 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4741 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004742 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004743 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004744 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004745 return false;
4746 }
4747 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004748 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004749 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4750 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4751 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004752 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004753 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004754 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004755 return false;
4756 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004757 }
4758 if(pCreateInfo->pDependencies != nullptr)
4759 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004760 }
4761 }
4762
4763 return true;
4764}
4765
4766bool PostCreateRenderPass(
4767 VkDevice device,
4768 VkRenderPass* pRenderPass,
4769 VkResult result)
4770{
4771
4772 if(pRenderPass != nullptr)
4773 {
4774 }
4775
4776 if(result < VK_SUCCESS)
4777 {
4778 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004779 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 -06004780 return false;
4781 }
4782
4783 return true;
4784}
4785
Chia-I Wu9ab61502015-11-06 06:42:02 +08004786VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004787 VkDevice device,
4788 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004789 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004790 VkRenderPass* pRenderPass)
4791{
4792 PreCreateRenderPass(device, pCreateInfo);
4793
Chia-I Wuf7458c52015-10-26 21:10:41 +08004794 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004795
4796 PostCreateRenderPass(device, pRenderPass, result);
4797
4798 return result;
4799}
4800
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004801bool PostGetRenderAreaGranularity(
4802 VkDevice device,
4803 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004804 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004805{
4806
4807
4808 if(pGranularity != nullptr)
4809 {
4810 }
4811
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004812 return true;
4813}
4814
Chia-I Wu9ab61502015-11-06 06:42:02 +08004815VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004816 VkDevice device,
4817 VkRenderPass renderPass,
4818 VkExtent2D* pGranularity)
4819{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004820 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004821
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004822 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004823}
4824
4825bool PreCreateCommandPool(
4826 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004827 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004828{
4829 if(pCreateInfo != nullptr)
4830 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004831 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004832 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004833 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004834 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4835 return false;
4836 }
4837 }
4838
4839 return true;
4840}
4841
4842bool PostCreateCommandPool(
4843 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004844 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004845 VkResult result)
4846{
4847
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004848 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004849 {
4850 }
4851
4852 if(result < VK_SUCCESS)
4853 {
4854 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004855 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 -06004856 return false;
4857 }
4858
4859 return true;
4860}
4861
Chia-I Wu9ab61502015-11-06 06:42:02 +08004862VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004863 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004864 const VkCommandPoolCreateInfo* pCreateInfo,
4865 const VkAllocationCallbacks* pAllocator,
4866 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004867{
4868 PreCreateCommandPool(device, pCreateInfo);
4869
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004870 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004871
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004872 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873
4874 return result;
4875}
4876
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004877bool PostResetCommandPool(
4878 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004879 VkCommandPool commandPool,
4880 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004881 VkResult result)
4882{
4883
4884
4885
4886 if(result < VK_SUCCESS)
4887 {
4888 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004889 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 -06004890 return false;
4891 }
4892
4893 return true;
4894}
4895
Chia-I Wu9ab61502015-11-06 06:42:02 +08004896VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004897 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004898 VkCommandPool commandPool,
4899 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004900{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004901 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004902
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004903 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004904
4905 return result;
4906}
4907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004908bool PreCreateCommandBuffer(
4909 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004910 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004911{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004912 if(pCreateInfo != nullptr)
4913 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004914 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004915 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004916 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004917 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004918 return false;
4919 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004920 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4921 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004922 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004923 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004924 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004925 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004926 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004927 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004928
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004929 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004930}
4931
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004932bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004933 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004934 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004935 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004936{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004937
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004938 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004939 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004940 }
4941
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004942 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004943 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004944 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004945 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 -06004946 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004947 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004948
4949 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004950}
4951
Chia-I Wu9ab61502015-11-06 06:42:02 +08004952VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004953 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004954 const VkCommandBufferAllocateInfo* pCreateInfo,
4955 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004956{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004957 PreCreateCommandBuffer(device, pCreateInfo);
4958
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004959 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004960
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004961 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004962
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004963 return result;
4964}
4965
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004966bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004967 VkCommandBuffer commandBuffer,
4968 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004969{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004970 if(pBeginInfo != nullptr)
4971 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004972 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004974 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004975 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004976 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004977 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004978 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004979
4980 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004981}
4982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004983bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004984 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985 VkResult result)
4986{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004987
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004988 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004989 {
4990 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004991 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 -06004992 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004993 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004994
4995 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004996}
4997
Chia-I Wu9ab61502015-11-06 06:42:02 +08004998VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 VkCommandBuffer commandBuffer,
5000 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005001{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005002 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005003
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005004 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005005
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005006 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005007
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005008 return result;
5009}
5010
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005011bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005012 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013 VkResult result)
5014{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005015
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005016 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005017 {
5018 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005019 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 -06005020 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005021 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005022
5023 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005024}
5025
Chia-I Wu9ab61502015-11-06 06:42:02 +08005026VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005029 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005030
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005031 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005032
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005033 return result;
5034}
5035
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005036bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005037 VkCommandBuffer commandBuffer,
5038 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039 VkResult result)
5040{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005041
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005042
5043 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005044 {
5045 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005046 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 -06005047 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005048 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005049
5050 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005051}
5052
Chia-I Wu9ab61502015-11-06 06:42:02 +08005053VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005054 VkCommandBuffer commandBuffer,
5055 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005057 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005058
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005059 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005060
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005061 return result;
5062}
5063
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005064bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005065 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005066 VkPipelineBindPoint pipelineBindPoint,
5067 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005068{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005069
5070 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5071 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5072 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005073 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005074 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005075 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005076 }
5077
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005078
5079 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005080}
5081
Chia-I Wu9ab61502015-11-06 06:42:02 +08005082VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005083 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005084 VkPipelineBindPoint pipelineBindPoint,
5085 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005086{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005087 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005088
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005089 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005090}
5091
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005092VK_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 -06005093{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005095}
5096
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005097VK_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 -06005098{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005099 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
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 vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005103{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005104 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005105}
5106
Chia-I Wu9ab61502015-11-06 06:42:02 +08005107VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
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)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005110}
5111
Chia-I Wu9ab61502015-11-06 06:42:02 +08005112VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005113{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005114 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
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 vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005118{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005119 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005120}
5121
Chia-I Wu9ab61502015-11-06 06:42:02 +08005122VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005123{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005124 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
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 vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
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)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005130}
5131
Chia-I Wu9ab61502015-11-06 06:42:02 +08005132VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005133{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005134 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005135}
5136
5137bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005138 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005139 const VkDescriptorSet* pDescriptorSets,
5140 const uint32_t* pDynamicOffsets)
5141{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005142 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005143 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005144 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005145
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005146 if(pDynamicOffsets != nullptr)
5147 {
5148 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005149
5150 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005151}
5152
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005153bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005154 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005155 VkPipelineBindPoint pipelineBindPoint,
5156 VkPipelineLayout layout,
5157 uint32_t firstSet,
5158 uint32_t setCount,
5159 uint32_t dynamicOffsetCount)
5160{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005161
5162 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5163 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5164 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005165 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005166 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005167 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168 }
5169
5170
5171
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005172
5173
5174 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005175}
5176
Chia-I Wu9ab61502015-11-06 06:42:02 +08005177VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005178 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179 VkPipelineBindPoint pipelineBindPoint,
5180 VkPipelineLayout layout,
5181 uint32_t firstSet,
5182 uint32_t setCount,
5183 const VkDescriptorSet* pDescriptorSets,
5184 uint32_t dynamicOffsetCount,
5185 const uint32_t* pDynamicOffsets)
5186{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005187 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005189 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005190
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005191 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005192}
5193
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005194bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005195 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196 VkBuffer buffer,
5197 VkDeviceSize offset,
5198 VkIndexType indexType)
5199{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005200
Jeremy Hayes99a96322015-06-26 12:48:09 -06005201
5202
5203 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5204 indexType > VK_INDEX_TYPE_END_RANGE)
5205 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005206 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005207 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005208 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005209 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005210
5211 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005212}
5213
Chia-I Wu9ab61502015-11-06 06:42:02 +08005214VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005215 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216 VkBuffer buffer,
5217 VkDeviceSize offset,
5218 VkIndexType indexType)
5219{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005220 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005221
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005222 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005223}
5224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005225bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005226 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005227 const VkBuffer* pBuffers,
5228 const VkDeviceSize* pOffsets)
5229{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005230 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005231 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005232 }
5233
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005234 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005235 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005236 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005237
5238 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005239}
5240
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005241bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005242 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005243 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005244 uint32_t bindingCount)
5245{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005246
5247
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005248
5249 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005250}
5251
Chia-I Wu9ab61502015-11-06 06:42:02 +08005252VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005253 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005254 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005255 uint32_t bindingCount,
5256 const VkBuffer* pBuffers,
5257 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005258{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005259 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005260
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005261 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005262
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005263 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005264}
5265
Michael Lentine55a913f2015-11-24 09:48:23 -06005266bool PreCmdDraw(
5267 VkCommandBuffer commandBuffer,
5268 uint32_t vertexCount,
5269 uint32_t instanceCount,
5270 uint32_t firstVertex,
5271 uint32_t firstInstance)
5272{
5273 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005274 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5275 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005276 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005277 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5278 return false;
5279 }
5280
5281 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005282 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5283 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005284 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005285 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5286 return false;
5287 }
5288
5289 return true;
5290}
5291
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005292bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005293 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005294 uint32_t firstVertex,
5295 uint32_t vertexCount,
5296 uint32_t firstInstance,
5297 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005298{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005299
5300
5301
5302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005303
5304 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005305}
5306
Chia-I Wu9ab61502015-11-06 06:42:02 +08005307VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005308 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005310 uint32_t instanceCount,
5311 uint32_t firstVertex,
5312 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005313{
Michael Lentine55a913f2015-11-24 09:48:23 -06005314 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5315
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005316 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005318 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005319}
5320
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005321bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005322 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005323 uint32_t firstIndex,
5324 uint32_t indexCount,
5325 int32_t vertexOffset,
5326 uint32_t firstInstance,
5327 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005328{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005329
5330
5331
5332
5333
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005334
5335 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005336}
5337
Chia-I Wu9ab61502015-11-06 06:42:02 +08005338VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005339 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005340 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005341 uint32_t instanceCount,
5342 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005343 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005344 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005345{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005346 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005348 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005349}
5350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005351bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005352 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005353 VkBuffer buffer,
5354 VkDeviceSize offset,
5355 uint32_t count,
5356 uint32_t stride)
5357{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005358
5359
5360
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005361
5362
5363 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005364}
5365
Chia-I Wu9ab61502015-11-06 06:42:02 +08005366VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005367 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368 VkBuffer buffer,
5369 VkDeviceSize offset,
5370 uint32_t count,
5371 uint32_t stride)
5372{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005373 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005374
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005375 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005376}
5377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005378bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005379 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005380 VkBuffer buffer,
5381 VkDeviceSize offset,
5382 uint32_t count,
5383 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005384{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005385
5386
5387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005388
5389
5390 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005391}
5392
Chia-I Wu9ab61502015-11-06 06:42:02 +08005393VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005394 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395 VkBuffer buffer,
5396 VkDeviceSize offset,
5397 uint32_t count,
5398 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005399{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005400 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005401
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005402 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005403}
5404
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005405bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005406 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407 uint32_t x,
5408 uint32_t y,
5409 uint32_t z)
5410{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005411
5412
5413
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005414
5415 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005416}
5417
Chia-I Wu9ab61502015-11-06 06:42:02 +08005418VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005419 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420 uint32_t x,
5421 uint32_t y,
5422 uint32_t z)
5423{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005424 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005426 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005427}
5428
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005429bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005430 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431 VkBuffer buffer,
5432 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005433{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005434
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005436
5437 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005438}
5439
Chia-I Wu9ab61502015-11-06 06:42:02 +08005440VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005441 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442 VkBuffer buffer,
5443 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005444{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005445 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005447 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005448}
5449
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005450bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005451 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005453{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005454 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005455 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005456 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005457
5458 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005459}
5460
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005461bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005462 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005464 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005465 uint32_t regionCount)
5466{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467
Jeremy Hayes99a96322015-06-26 12:48:09 -06005468
Jeremy Hayes99a96322015-06-26 12:48:09 -06005469
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005470
5471 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005472}
5473
Chia-I Wu9ab61502015-11-06 06:42:02 +08005474VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005475 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005476 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005477 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005478 uint32_t regionCount,
5479 const VkBufferCopy* pRegions)
5480{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005481 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005482
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005483 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005484
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005485 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005486}
5487
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005488bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005489 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490 const VkImageCopy* pRegions)
5491{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005492 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005493 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005494 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005495 (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 -06005496 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005497 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005498 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005499 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005500 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005501 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005502 (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 -06005503 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005504 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005505 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005506 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005507 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005508 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005509
5510 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005511}
5512
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005513bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005514 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005515 VkImage srcImage,
5516 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005517 VkImage dstImage,
5518 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005519 uint32_t regionCount)
5520{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005521 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5522 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5523 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005525 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005526 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005527 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528 }
5529
Jeremy Hayes99a96322015-06-26 12:48:09 -06005530
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005531 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5532 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5533 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005535 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005536 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005537 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538 }
5539
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005540
5541 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005542}
5543
Chia-I Wu9ab61502015-11-06 06:42:02 +08005544VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005545 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546 VkImage srcImage,
5547 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005548 VkImage dstImage,
5549 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005550 uint32_t regionCount,
5551 const VkImageCopy* pRegions)
5552{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005553 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005554
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005555 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005556
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005557 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005558}
5559
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005560bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005561 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562 const VkImageBlit* pRegions)
5563{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005564 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005565 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005566 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005567 (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 -06005568 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005569 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005570 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005571 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005572 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005573 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005574 (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 -06005575 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005576 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005577 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005578 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005579 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005580 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005581
5582 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005583}
5584
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005585bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005586 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005587 VkImage srcImage,
5588 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005589 VkImage dstImage,
5590 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005591 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005592 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005594
Jeremy Hayes99a96322015-06-26 12:48:09 -06005595
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005596 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5597 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5598 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005599 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005600 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005601 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005602 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005603 }
5604
Jeremy Hayes99a96322015-06-26 12:48:09 -06005605
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005606 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5607 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5608 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005609 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005610 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005611 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005612 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005613 }
5614
5615
Chia-I Wub99df442015-10-26 16:49:32 +08005616 if(filter < VK_FILTER_BEGIN_RANGE ||
5617 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005618 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005619 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005620 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005621 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005622 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005623
5624 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005625}
5626
Chia-I Wu9ab61502015-11-06 06:42:02 +08005627VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005628 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005629 VkImage srcImage,
5630 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005631 VkImage dstImage,
5632 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005633 uint32_t regionCount,
5634 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005635 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005637 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005638
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005639 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005641 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005642}
5643
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005644bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005645 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005646 const VkBufferImageCopy* pRegions)
5647{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005648 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005649 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005650 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005651 (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 -06005652 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005653 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005654 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005655 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005656 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005657 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005658
5659 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005660}
5661
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005662bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005663 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005665 VkImage dstImage,
5666 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005667 uint32_t regionCount)
5668{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669
Jeremy Hayes99a96322015-06-26 12:48:09 -06005670
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005672 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5673 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5674 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005676 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005677 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005678 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005679 }
5680
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005681
5682 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005683}
5684
Chia-I Wu9ab61502015-11-06 06:42:02 +08005685VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005686 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005687 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005688 VkImage dstImage,
5689 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005690 uint32_t regionCount,
5691 const VkBufferImageCopy* pRegions)
5692{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005693 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005694
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005695 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005696
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005697 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005698}
5699
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005700bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005701 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 const VkBufferImageCopy* pRegions)
5703{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005704 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005705 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005706 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005707 (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 -06005708 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005709 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005710 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005711 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005712 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005713 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005714
5715 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005716}
5717
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005718bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005719 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720 VkImage srcImage,
5721 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005722 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005723 uint32_t regionCount)
5724{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005725
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005727 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5728 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5729 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005730 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005731 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005732 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005733 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005734 }
5735
Jeremy Hayes99a96322015-06-26 12:48:09 -06005736
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005737
5738 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005739}
5740
Chia-I Wu9ab61502015-11-06 06:42:02 +08005741VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005742 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005743 VkImage srcImage,
5744 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005745 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005746 uint32_t regionCount,
5747 const VkBufferImageCopy* pRegions)
5748{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005749 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005750
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005751 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005752
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005753 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754}
5755
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005756bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005757 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005758 const uint32_t* pData)
5759{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005760 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005761 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005763
5764 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005765}
5766
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005767bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005768 VkCommandBuffer commandBuffer,
5769 VkBuffer dstBuffer,
5770 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771 VkDeviceSize dataSize)
5772{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773
5774
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005775
5776
5777 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005778}
5779
Chia-I Wu9ab61502015-11-06 06:42:02 +08005780VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005781 VkCommandBuffer commandBuffer,
5782 VkBuffer dstBuffer,
5783 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784 VkDeviceSize dataSize,
5785 const uint32_t* pData)
5786{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005787 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005788
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005789 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005790
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005791 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005792}
5793
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005794bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005795 VkCommandBuffer commandBuffer,
5796 VkBuffer dstBuffer,
5797 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005798 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799 uint32_t data)
5800{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005801
5802
5803
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005804
5805
5806 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807}
5808
Chia-I Wu9ab61502015-11-06 06:42:02 +08005809VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005810 VkCommandBuffer commandBuffer,
5811 VkBuffer dstBuffer,
5812 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005813 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814 uint32_t data)
5815{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005816 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005818 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819}
5820
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005821bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005822 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005823 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005824 const VkImageSubresourceRange* pRanges)
5825{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005826 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005827 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005828 }
5829
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005830 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005832 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005833 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005834
5835 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005836}
5837
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005838bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005839 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840 VkImage image,
5841 VkImageLayout imageLayout,
5842 uint32_t rangeCount)
5843{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844
Jeremy Hayes99a96322015-06-26 12:48:09 -06005845
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005846 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5847 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5848 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005849 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005850 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005851 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005852 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005853 }
5854
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005855
5856 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005857}
5858
Chia-I Wu9ab61502015-11-06 06:42:02 +08005859VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005860 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005861 VkImage image,
5862 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005863 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005864 uint32_t rangeCount,
5865 const VkImageSubresourceRange* pRanges)
5866{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005867 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005868
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005869 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005871 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005872}
5873
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005874bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005875 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005876 const VkImageSubresourceRange* pRanges)
5877{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005878 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005879 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005880 /*
5881 * TODO: How do we validation pRanges->aspectMask?
5882 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5883 * VK_IMAGE_ASPECT_STENCIL_BIT.
5884 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005885 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005886
5887 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005888}
5889
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005890bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005891 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892 VkImage image,
5893 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005894 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895 uint32_t rangeCount)
5896{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897
Jeremy Hayes99a96322015-06-26 12:48:09 -06005898
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005899 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5900 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5901 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005902 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005903 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005904 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005905 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005906 }
5907
5908
5909
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005910
5911 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005912}
5913
Chia-I Wu9ab61502015-11-06 06:42:02 +08005914VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005915 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005916 VkImage image,
5917 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005918 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005919 uint32_t rangeCount,
5920 const VkImageSubresourceRange* pRanges)
5921{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005922 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005923
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005924 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005925
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005926 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005927}
5928
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005929bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005930 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005931 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005932 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005933{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005934 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005935 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005936 }
5937
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005938 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005939 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005940 }
5941
5942 return true;
5943}
5944
Chia-I Wu9ab61502015-11-06 06:42:02 +08005945VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005946 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005947 uint32_t attachmentCount,
5948 const VkClearAttachment* pAttachments,
5949 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005950 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005951{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005952 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005953 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005954 }
5955
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005956 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005957}
5958
5959bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005960 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961 const VkImageResolve* pRegions)
5962{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005963 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005964 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005965 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005966 (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 -06005967 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005968 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005969 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005970 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005972 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005973 (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 -06005974 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005975 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005976 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005977 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005978 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005979 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005980
5981 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982}
5983
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005984bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005985 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986 VkImage srcImage,
5987 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005988 VkImage dstImage,
5989 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005990 uint32_t regionCount)
5991{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005992
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005994 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5995 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5996 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005998 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005999 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006000 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001 }
6002
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006004 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
6005 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6006 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006008 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006009 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006010 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006011 }
6012
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006013
6014 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015}
6016
Chia-I Wu9ab61502015-11-06 06:42:02 +08006017VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006018 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006019 VkImage srcImage,
6020 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006021 VkImage dstImage,
6022 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023 uint32_t regionCount,
6024 const VkImageResolve* pRegions)
6025{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006026 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006027
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006028 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006030 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006031}
6032
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006033bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006034 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006035 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006036 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006040
6041 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006042}
6043
Chia-I Wu9ab61502015-11-06 06:42:02 +08006044VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006045 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006046 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006047 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006048{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006049 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006050
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006051 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052}
6053
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006054bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006055 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006057 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006061
6062 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063}
6064
Chia-I Wu9ab61502015-11-06 06:42:02 +08006065VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006066 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006068 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006069{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006070 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006072 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073}
6074
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006075bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006076 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006077 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006078 uint32_t memoryBarrierCount,
6079 const VkMemoryBarrier *pMemoryBarriers,
6080 uint32_t bufferMemoryBarrierCount,
6081 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6082 uint32_t imageMemoryBarrierCount,
6083 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006085 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006087 }
6088
Jon Ashburnf19916e2016-01-11 13:12:43 -07006089 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006090 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006092
6093 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006094}
6095
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006096bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006097 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006099 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006100 VkPipelineStageFlags dstStageMask,
6101 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006102{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006103
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006104
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105
6106
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006107
6108 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109}
6110
Chia-I Wu9ab61502015-11-06 06:42:02 +08006111VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006112 VkCommandBuffer commandBuffer,
6113 uint32_t eventCount,
6114 const VkEvent *pEvents,
6115 VkPipelineStageFlags srcStageMask,
6116 VkPipelineStageFlags dstStageMask,
6117 uint32_t memoryBarrierCount,
6118 const VkMemoryBarrier *pMemoryBarriers,
6119 uint32_t bufferMemoryBarrierCount,
6120 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6121 uint32_t imageMemoryBarrierCount,
6122 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006123{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006124 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006125
Jon Ashburnf19916e2016-01-11 13:12:43 -07006126 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 -06006127
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006128 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129}
6130
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006131bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006132 VkCommandBuffer commandBuffer,
6133 uint32_t memoryBarrierCount,
6134 const VkMemoryBarrier *pMemoryBarriers,
6135 uint32_t bufferMemoryBarrierCount,
6136 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6137 uint32_t imageMemoryBarrierCount,
6138 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006139{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006140 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006142 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006143
6144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006145}
6146
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006147bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006148 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006149 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006150 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006151 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006152 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006153{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006155
Jeremy Hayes99a96322015-06-26 12:48:09 -06006156
6157
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006158
6159 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160}
6161
Chia-I Wu9ab61502015-11-06 06:42:02 +08006162VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006163 VkCommandBuffer commandBuffer,
6164 VkPipelineStageFlags srcStageMask,
6165 VkPipelineStageFlags dstStageMask,
6166 VkDependencyFlags dependencyFlags,
6167 uint32_t memoryBarrierCount,
6168 const VkMemoryBarrier *pMemoryBarriers,
6169 uint32_t bufferMemoryBarrierCount,
6170 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6171 uint32_t imageMemoryBarrierCount,
6172 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006174 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006175
Jon Ashburnf19916e2016-01-11 13:12:43 -07006176 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 -06006177
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006178 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006179}
6180
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006181bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006182 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183 VkQueryPool queryPool,
6184 uint32_t slot,
6185 VkQueryControlFlags flags)
6186{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187
Jeremy Hayes99a96322015-06-26 12:48:09 -06006188
6189
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006190
6191 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006192}
6193
Chia-I Wu9ab61502015-11-06 06:42:02 +08006194VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006195 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006196 VkQueryPool queryPool,
6197 uint32_t slot,
6198 VkQueryControlFlags flags)
6199{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006200 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006202 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006203}
6204
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006206 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207 VkQueryPool queryPool,
6208 uint32_t slot)
6209{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006210
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006212
6213 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006214}
6215
Chia-I Wu9ab61502015-11-06 06:42:02 +08006216VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006217 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218 VkQueryPool queryPool,
6219 uint32_t slot)
6220{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006221 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006223 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006224}
6225
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006226bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006227 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006229 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230 uint32_t queryCount)
6231{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006233
6234
6235
6236 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006237}
6238
Chia-I Wu9ab61502015-11-06 06:42:02 +08006239VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006240 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006242 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243 uint32_t queryCount)
6244{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006245 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006246
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006247 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006248}
6249
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006250bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006251 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006252 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006253 VkQueryPool queryPool,
6254 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006256
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006257 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006258
6259 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006260}
6261
Chia-I Wu9ab61502015-11-06 06:42:02 +08006262VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006263 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006264 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006265 VkQueryPool queryPool,
6266 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006268 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006269
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006270 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006271}
6272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006273bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006274 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006276 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006277 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006278 VkBuffer dstBuffer,
6279 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006280 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006281 VkQueryResultFlags flags)
6282{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283
6284
6285
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006286
Jeremy Hayes99a96322015-06-26 12:48:09 -06006287
6288
6289
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006290
6291 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006292}
6293
Chia-I Wu9ab61502015-11-06 06:42:02 +08006294VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006295 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006297 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006298 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006299 VkBuffer dstBuffer,
6300 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006301 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006302 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006303{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006304 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006305
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006306 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006307}
6308
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006309bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006310 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006311 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006312{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006313 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006314 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006315 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006316
6317 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006318}
6319
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006320bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006321 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006322 VkPipelineLayout layout,
6323 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006324 uint32_t offset,
6325 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006326{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327
Jeremy Hayes99a96322015-06-26 12:48:09 -06006328
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006329
6330
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006331
6332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006333}
6334
Chia-I Wu9ab61502015-11-06 06:42:02 +08006335VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006336 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006337 VkPipelineLayout layout,
6338 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006339 uint32_t offset,
6340 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006341 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006342{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006343 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006344
Chia-I Wuce9b1772015-11-12 06:09:22 +08006345 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006346
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006347 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006348}
6349
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006350bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006351 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006352 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006353{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006354 if(pRenderPassBegin != nullptr)
6355 {
6356 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006357 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006358 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006359 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006360 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006361 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006362 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006363 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006364 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006365 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006366
6367 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006368}
6369
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006370bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006371 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006372 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006373{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006374
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006375 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6376 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006377 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006378 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006379 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006380 return false;
6381 }
6382
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006383 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006384}
6385
Chia-I Wu9ab61502015-11-06 06:42:02 +08006386VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006387 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006388 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006389 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006390{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006391 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006392
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006393 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006394
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006395 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006396}
6397
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006398bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006399 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006400 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006401{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006402
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006403 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6404 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006405 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006406 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006407 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006408 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006409 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006410
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006411 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006412}
6413
Chia-I Wu9ab61502015-11-06 06:42:02 +08006414VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006415 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006416 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006417{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006418 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006419
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006420 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006421}
6422
6423bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006424 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006425{
6426
6427 return true;
6428}
6429
Chia-I Wu9ab61502015-11-06 06:42:02 +08006430VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006431 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006432{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006433 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006434
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006435 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006436}
6437
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006438bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006439 VkCommandBuffer commandBuffer,
6440 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006441{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006442 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006443 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006444 }
6445
6446 return true;
6447}
6448
6449bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006450 VkCommandBuffer commandBuffer,
6451 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006452{
6453
6454
6455 return true;
6456}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006457
Chia-I Wu9ab61502015-11-06 06:42:02 +08006458VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006459 VkCommandBuffer commandBuffer,
6460 uint32_t commandBuffersCount,
6461 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006462{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006463 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006464
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006465 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006466
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006467 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006468}
6469
Chia-I Wu9ab61502015-11-06 06:42:02 +08006470VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006471{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006472 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006473 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006474 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006475 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006477 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006478 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006479 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006481 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006482 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006483 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006484 if (!strcmp(funcName, "vkAllocateMemory"))
6485 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006486 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006487 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006488 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006489 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006490 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006491 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006493 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006495 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006497 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006499 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006502 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006503 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006504 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006505 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006508 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006518 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006519 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006520 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006521 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006522 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006523 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006524 if (!strcmp(funcName, "vkCreateShaderModule"))
6525 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006526 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006528 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006540 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6541 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006542 if (!strcmp(funcName, "vkCmdSetViewport"))
6543 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006544 if (!strcmp(funcName, "vkCmdSetScissor"))
6545 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006546 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6547 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6548 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6549 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6550 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6551 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6552 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6553 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6554 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6555 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6556 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6557 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6558 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6559 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006560 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6561 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006571 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006573 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006577 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006581 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006600 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006602 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006603 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006604 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006605 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006607 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006608 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006609 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006610 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006611 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006613 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006615 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006617 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006618 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006619 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006620 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006621 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006622 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006623 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006624 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006625 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006626 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006627 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006628 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006629 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006630 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006631 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006632
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006633 if (device == NULL) {
6634 return NULL;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006635 }
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006636
6637 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
6638 return NULL;
6639 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006640}
6641
Chia-I Wu9ab61502015-11-06 06:42:02 +08006642VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006643{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006644 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006645 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006646 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006647 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006648 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006649 return (PFN_vkVoidFunction) vkDestroyInstance;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006650 if (!strcmp(funcName, "vkCreateDevice"))
6651 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006652 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006653 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006654 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006655 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006657 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006658 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006659 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006660 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6661 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6662 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6663 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6664 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6665 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6666 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6667 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006668
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006669 if (instance == NULL) {
6670 return NULL;
6671 }
6672
Jeremy Hayes99a96322015-06-26 12:48:09 -06006673 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006674 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006675 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006676 return fptr;
6677
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006678 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6679 return NULL;
6680 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006681}