blob: 58999acbf3fb47ccbee09f872f4815d0a725f4aa [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002 *
Courtney Goeltzenleuchterfcbe16f2015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Michael Lentine03d8e572015-09-15 14:59:14 -05004 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060023 *
24 * Author: Jeremy Hayes <jeremy@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060026 */
27
28#include <stdio.h>
29#include <stdlib.h>
30#include <string.h>
31
32#include <iostream>
33#include <string>
34#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050035#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060036#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060037
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060038#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070039#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060040#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060041#include "vk_enum_validate_helper.h"
42#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060043
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060044#include "vk_layer_table.h"
45#include "vk_layer_data.h"
46#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060047#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060048
Cody Northrop55443ef2015-09-28 15:09:32 -060049struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060050 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070051 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060052
53 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060054 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060055 {};
56};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050057
Jeremy Hayes99a96322015-06-26 12:48:09 -060058static std::unordered_map<void*, layer_data*> layer_data_map;
59static device_table_map pc_device_table_map;
60static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060061
Jeremy Hayes99a96322015-06-26 12:48:09 -060062// "my instance data"
63debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060064{
Jeremy Hayes99a96322015-06-26 12:48:09 -060065 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060066 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060067#if DISPATCH_MAP_DEBUG
68 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
69#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060070 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060071
72 return data->report_data;
73}
74
75// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060076debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060077{
78 dispatch_key key = get_dispatch_key(object);
79 layer_data *data = get_my_data_ptr(key, layer_data_map);
80#if DISPATCH_MAP_DEBUG
81 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
82#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060083 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060084 return data->report_data;
85}
86
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -070087static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -060088{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070089 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060090 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
91
92 uint32_t debug_action = 0;
93 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
94 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
95 {
96 FILE *log_output = NULL;
97 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060098 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070099 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700100 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700101 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700102 dbgCreateInfo.flags = report_flags;
103 dbgCreateInfo.pfnCallback = log_callback;
104 dbgCreateInfo.pUserData = log_output;
105
106 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600107 data->logging_callback.push_back(callback);
108 }
109
110 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700111 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700112 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700113 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700114 dbgCreateInfo.flags = report_flags;
115 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
116 dbgCreateInfo.pUserData = NULL;
117
118 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600119 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600120 }
121}
122
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700123VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600124 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700125 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700126 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700127 VkDebugReportCallbackEXT* pMsgCallback)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700130 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600131
132 if (result == VK_SUCCESS)
133 {
134 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700135 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600136 }
137
138 return result;
139}
140
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700141VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600142 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700143 VkDebugReportCallbackEXT msgCallback,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700144 const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600145{
146 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700147 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600148
149 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700150 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600151}
152
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700153VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700154 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700155 VkDebugReportFlagsEXT flags,
156 VkDebugReportObjectTypeEXT objType,
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700157 uint64_t object,
158 size_t location,
159 int32_t msgCode,
160 const char* pLayerPrefix,
161 const char* pMsg)
162{
163 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700164 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700165}
166
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700167static const VkExtensionProperties instance_extensions[] = {
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600168 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700169 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
170 VK_EXT_DEBUG_REPORT_REVISION
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600171 }
172};
Tony Barbour59a47322015-06-24 16:06:58 -0600173
Chia-I Wu9ab61502015-11-06 06:42:02 +0800174VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600175 const char *pLayerName,
176 uint32_t *pCount,
177 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600178{
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700179 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600180}
181
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700182static const VkLayerProperties pc_global_layers[] = {
183 {
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700184 "param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700185 VK_API_VERSION,
186 VK_MAKE_VERSION(0, 1, 0),
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700187 "Validation layer: param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700188 }
189};
190
Chia-I Wu9ab61502015-11-06 06:42:02 +0800191VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600192 uint32_t *pCount,
193 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600194{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600195 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
196 pc_global_layers,
197 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600198}
199
Chia-I Wu9ab61502015-11-06 06:42:02 +0800200VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600201 VkPhysicalDevice physicalDevice,
202 const char* pLayerName,
203 uint32_t* pCount,
204 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600205{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600206 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700207 if (pLayerName == NULL) {
208 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
209 physicalDevice,
210 NULL,
211 pCount,
212 pProperties);
213 } else {
214 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
215 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600216}
217
Chia-I Wu9ab61502015-11-06 06:42:02 +0800218VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600219 VkPhysicalDevice physicalDevice,
220 uint32_t* pCount,
221 VkLayerProperties* pProperties)
222{
223 /* ParamChecker's physical device layers are the same as global */
224 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
225 pCount, pProperties);
226}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600228// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600229
Jeremy Hayes99a96322015-06-26 12:48:09 -0600230static
231std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600232{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600233 switch(enumerator)
234 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600235 case VK_RESULT_MAX_ENUM:
236 {
237 return "VK_RESULT_MAX_ENUM";
238 break;
239 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600240 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600241 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600242 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600243 break;
244 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600245 case VK_ERROR_INCOMPATIBLE_DRIVER:
246 {
247 return "VK_ERROR_INCOMPATIBLE_DRIVER";
248 break;
249 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600250 case VK_ERROR_MEMORY_MAP_FAILED:
251 {
252 return "VK_ERROR_MEMORY_MAP_FAILED";
253 break;
254 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600255 case VK_INCOMPLETE:
256 {
257 return "VK_INCOMPLETE";
258 break;
259 }
260 case VK_ERROR_OUT_OF_HOST_MEMORY:
261 {
262 return "VK_ERROR_OUT_OF_HOST_MEMORY";
263 break;
264 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600265 case VK_ERROR_INITIALIZATION_FAILED:
266 {
267 return "VK_ERROR_INITIALIZATION_FAILED";
268 break;
269 }
270 case VK_NOT_READY:
271 {
272 return "VK_NOT_READY";
273 break;
274 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600275 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
276 {
277 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
278 break;
279 }
280 case VK_EVENT_SET:
281 {
282 return "VK_EVENT_SET";
283 break;
284 }
285 case VK_TIMEOUT:
286 {
287 return "VK_TIMEOUT";
288 break;
289 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600290 case VK_EVENT_RESET:
291 {
292 return "VK_EVENT_RESET";
293 break;
294 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600295 case VK_SUCCESS:
296 {
297 return "VK_SUCCESS";
298 break;
299 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600300 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600301 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600302 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600303 break;
304 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600305 case VK_ERROR_DEVICE_LOST:
306 {
307 return "VK_ERROR_DEVICE_LOST";
308 break;
309 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600310 default:
311 {
312 return "unrecognized enumerator";
313 break;
314 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600316}
317
318static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600319bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
320{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600321 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600322 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
323 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
324 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
325 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
326 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
327 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
328 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
329 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
330 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600331 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800332 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
333 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600334 if(enumerator & (~allFlags))
335 {
336 return false;
337 }
338
339 return true;
340}
341
342static
343std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
344{
345 if(!ValidateEnumerator(enumerator))
346 {
347 return "unrecognized enumerator";
348 }
349
350 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600351 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
352 {
353 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
354 }
355 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
356 {
357 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
358 }
359 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
360 {
361 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
362 }
363 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
364 {
365 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
366 }
367 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
368 {
369 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
370 }
371 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
372 {
373 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
374 }
375 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
376 {
377 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
378 }
379 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
380 {
381 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
382 }
383 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
384 {
385 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
386 }
387 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
388 {
389 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
390 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800391 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600392 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800393 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600394 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800395 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600396 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800397 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600398 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600399
400 std::string enumeratorString;
401 for(auto const& string : strings)
402 {
403 enumeratorString += string;
404
405 if(string != strings.back())
406 {
407 enumeratorString += '|';
408 }
409 }
410
411 return enumeratorString;
412}
413
414static
415bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
416{
417 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600418 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600419 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
420 VK_IMAGE_USAGE_STORAGE_BIT |
421 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800422 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600423 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800424 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600425 if(enumerator & (~allFlags))
426 {
427 return false;
428 }
429
430 return true;
431}
432
433static
434std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
435{
436 if(!ValidateEnumerator(enumerator))
437 {
438 return "unrecognized enumerator";
439 }
440
441 std::vector<std::string> strings;
442 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
443 {
444 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
445 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600446 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600447 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600448 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600449 }
450 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
451 {
452 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
453 }
454 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
455 {
456 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
457 }
458 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
459 {
460 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
461 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800462 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600463 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800464 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600465 }
466 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
467 {
468 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
469 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800470 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600471 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800472 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600473 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600474
475 std::string enumeratorString;
476 for(auto const& string : strings)
477 {
478 enumeratorString += string;
479
480 if(string != strings.back())
481 {
482 enumeratorString += '|';
483 }
484 }
485
486 return enumeratorString;
487}
488
489static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600490bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
491{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800492 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800493 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600494 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800495 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600496 VK_QUEUE_GRAPHICS_BIT);
497 if(enumerator & (~allFlags))
498 {
499 return false;
500 }
501
502 return true;
503}
504
505static
506std::string EnumeratorString(VkQueueFlagBits const& enumerator)
507{
508 if(!ValidateEnumerator(enumerator))
509 {
510 return "unrecognized enumerator";
511 }
512
513 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800514 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600515 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800516 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600517 }
518 if(enumerator & VK_QUEUE_COMPUTE_BIT)
519 {
520 strings.push_back("VK_QUEUE_COMPUTE_BIT");
521 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800522 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600523 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800524 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600525 }
526 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
527 {
528 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
529 }
530
531 std::string enumeratorString;
532 for(auto const& string : strings)
533 {
534 enumeratorString += string;
535
536 if(string != strings.back())
537 {
538 enumeratorString += '|';
539 }
540 }
541
542 return enumeratorString;
543}
544
545static
546bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
547{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600548 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800549 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600550 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800551 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
552 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600553 if(enumerator & (~allFlags))
554 {
555 return false;
556 }
557
558 return true;
559}
560
561static
562std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
563{
564 if(!ValidateEnumerator(enumerator))
565 {
566 return "unrecognized enumerator";
567 }
568
569 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600570 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
571 {
572 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
573 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800574 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600575 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800576 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600577 }
578 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
579 {
580 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
581 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800582 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600583 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800584 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800586 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600587 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800588 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600589 }
590
591 std::string enumeratorString;
592 for(auto const& string : strings)
593 {
594 enumeratorString += string;
595
596 if(string != strings.back())
597 {
598 enumeratorString += '|';
599 }
600 }
601
602 return enumeratorString;
603}
604
605static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600606bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600607{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800608 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600609 if(enumerator & (~allFlags))
610 {
611 return false;
612 }
613
614 return true;
615}
616
617static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600618std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600619{
620 if(!ValidateEnumerator(enumerator))
621 {
622 return "unrecognized enumerator";
623 }
624
625 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800626 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800628 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600629 }
630
631 std::string enumeratorString;
632 for(auto const& string : strings)
633 {
634 enumeratorString += string;
635
636 if(string != strings.back())
637 {
638 enumeratorString += '|';
639 }
640 }
641
642 return enumeratorString;
643}
644
645static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
647{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800648 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
649 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
650 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600651 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600652 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600653 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600654 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600655
656 return true;
657}
658
659static
660std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
661{
662 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600663 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600664 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600665 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600666
667 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800668 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600669 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800670 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600671 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800672 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600673 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800674 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600675 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800676 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600677 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800678 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600679 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600680
681 std::string enumeratorString;
682 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600683 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600684 enumeratorString += string;
685
686 if(string != strings.back())
687 {
688 enumeratorString += '|';
689 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600690 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600691
692 return enumeratorString;
693}
694
695static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600696bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
697{
698 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
699 if(enumerator & (~allFlags))
700 {
701 return false;
702 }
703
704 return true;
705}
706
707static
708std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
709{
710 if(!ValidateEnumerator(enumerator))
711 {
712 return "unrecognized enumerator";
713 }
714
715 std::vector<std::string> strings;
716 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
717 {
718 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
719 }
720
721 std::string enumeratorString;
722 for(auto const& string : strings)
723 {
724 enumeratorString += string;
725
726 if(string != strings.back())
727 {
728 enumeratorString += '|';
729 }
730 }
731
732 return enumeratorString;
733}
734
735static
736bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
737{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600738 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
739 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
740 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600749 if(enumerator & (~allFlags))
750 {
751 return false;
752 }
753
754 return true;
755}
756
757static
758std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
759{
760 if(!ValidateEnumerator(enumerator))
761 {
762 return "unrecognized enumerator";
763 }
764
765 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600766 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600771 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600773 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600774 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600776 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600777 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600778 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600779 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600780 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600781 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600806 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600808 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 }
810
811 std::string enumeratorString;
812 for(auto const& string : strings)
813 {
814 enumeratorString += string;
815
816 if(string != strings.back())
817 {
818 enumeratorString += '|';
819 }
820 }
821
822 return enumeratorString;
823}
824
825static
826bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
827{
828 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
829 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
830 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700831 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600832 if(enumerator & (~allFlags))
833 {
834 return false;
835 }
836
837 return true;
838}
839
840static
841std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
842{
843 if(!ValidateEnumerator(enumerator))
844 {
845 return "unrecognized enumerator";
846 }
847
848 std::vector<std::string> strings;
849 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
850 {
851 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
852 }
853 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
854 {
855 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
856 }
857 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
858 {
859 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
860 }
861 if(enumerator & VK_QUERY_RESULT_64_BIT)
862 {
863 strings.push_back("VK_QUERY_RESULT_64_BIT");
864 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600865
866 std::string enumeratorString;
867 for(auto const& string : strings)
868 {
869 enumeratorString += string;
870
871 if(string != strings.back())
872 {
873 enumeratorString += '|';
874 }
875 }
876
877 return enumeratorString;
878}
879
880static
881bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
882{
883 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
884 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
885 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
886 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
887 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800888 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600889 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800890 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600891 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600892 if(enumerator & (~allFlags))
893 {
894 return false;
895 }
896
897 return true;
898}
899
900static
901std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
902{
903 if(!ValidateEnumerator(enumerator))
904 {
905 return "unrecognized enumerator";
906 }
907
908 std::vector<std::string> strings;
909 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
910 {
911 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
912 }
913 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
914 {
915 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
916 }
917 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
918 {
919 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
920 }
921 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
922 {
923 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
924 }
925 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
928 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800929 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600930 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800931 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600932 }
933 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
936 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800937 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600938 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800939 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600940 }
941 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
944 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600945
946 std::string enumeratorString;
947 for(auto const& string : strings)
948 {
949 enumeratorString += string;
950
951 if(string != strings.back())
952 {
953 enumeratorString += '|';
954 }
955 }
956
957 return enumeratorString;
958}
959
960static
961bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
962{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600963 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
964 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600965 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600966 if(enumerator & (~allFlags))
967 {
968 return false;
969 }
970
971 return true;
972}
973
974static
975std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
976{
977 if(!ValidateEnumerator(enumerator))
978 {
979 return "unrecognized enumerator";
980 }
981
982 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600983 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
984 {
985 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
986 }
987 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
988 {
989 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
990 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600991 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600992 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600993 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600994 }
995
996 std::string enumeratorString;
997 for(auto const& string : strings)
998 {
999 enumeratorString += string;
1000
1001 if(string != strings.back())
1002 {
1003 enumeratorString += '|';
1004 }
1005 }
1006
1007 return enumeratorString;
1008}
1009
1010static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001011bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1012{
1013 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001014 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1015 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001016 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001017 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018 if(enumerator & (~allFlags))
1019 {
1020 return false;
1021 }
1022
1023 return true;
1024}
1025
1026static
1027std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1028{
1029 if(!ValidateEnumerator(enumerator))
1030 {
1031 return "unrecognized enumerator";
1032 }
1033
1034 std::vector<std::string> strings;
1035 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1036 {
1037 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1038 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001039 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1040 {
1041 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1042 }
1043 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1044 {
1045 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1046 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001047 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1048 {
1049 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1050 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001051 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001052 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001053 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001054 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001055
1056 std::string enumeratorString;
1057 for(auto const& string : strings)
1058 {
1059 enumeratorString += string;
1060
1061 if(string != strings.back())
1062 {
1063 enumeratorString += '|';
1064 }
1065 }
1066
1067 return enumeratorString;
1068}
1069
1070static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001071bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001072{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001073 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1074 VK_COLOR_COMPONENT_B_BIT |
1075 VK_COLOR_COMPONENT_G_BIT |
1076 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001077 if(enumerator & (~allFlags))
1078 {
1079 return false;
1080 }
1081
1082 return true;
1083}
1084
1085static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001086std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001087{
1088 if(!ValidateEnumerator(enumerator))
1089 {
1090 return "unrecognized enumerator";
1091 }
1092
1093 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001094 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001095 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001096 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001097 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001098 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001099 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001100 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001101 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001102 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001103 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001104 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001105 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001106 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001107 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001108 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001109 }
1110
1111 std::string enumeratorString;
1112 for(auto const& string : strings)
1113 {
1114 enumeratorString += string;
1115
1116 if(string != strings.back())
1117 {
1118 enumeratorString += '|';
1119 }
1120 }
1121
1122 return enumeratorString;
1123}
1124
1125static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001126bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001127{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001128 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1129 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1130 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001131 if(enumerator & (~allFlags))
1132 {
1133 return false;
1134 }
1135
1136 return true;
1137}
1138
1139static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001140std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001141{
1142 if(!ValidateEnumerator(enumerator))
1143 {
1144 return "unrecognized enumerator";
1145 }
1146
1147 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001148 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001149 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001150 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1151 }
1152 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1153 {
1154 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1155 }
1156 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1157 {
1158 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001159 }
1160
1161 std::string enumeratorString;
1162 for(auto const& string : strings)
1163 {
1164 enumeratorString += string;
1165
1166 if(string != strings.back())
1167 {
1168 enumeratorString += '|';
1169 }
1170 }
1171
1172 return enumeratorString;
1173}
1174
1175static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001176bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001177{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001178 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1179 VK_SHADER_STAGE_FRAGMENT_BIT |
1180 VK_SHADER_STAGE_GEOMETRY_BIT |
1181 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001182 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1183 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001184 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001185 if(enumerator & (~allFlags))
1186 {
1187 return false;
1188 }
1189
1190 return true;
1191}
1192
1193static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001194std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001195{
1196 if(!ValidateEnumerator(enumerator))
1197 {
1198 return "unrecognized enumerator";
1199 }
1200
1201 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001202 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001203 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001204 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001205 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001206 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001207 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001208 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001209 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001210 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001211 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001212 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1213 }
1214 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1215 {
1216 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1217 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001218 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001220 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001221 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001222 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001223 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001224 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001225 }
1226 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1227 {
1228 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001229 }
1230
1231 std::string enumeratorString;
1232 for(auto const& string : strings)
1233 {
1234 enumeratorString += string;
1235
1236 if(string != strings.back())
1237 {
1238 enumeratorString += '|';
1239 }
1240 }
1241
1242 return enumeratorString;
1243}
1244
1245static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001246bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001247{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001248 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001249 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001250 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1251 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001252 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001253 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001255 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001257 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1258 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1259 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1260 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1261 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1262 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1263 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1264 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1265 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001266 if(enumerator & (~allFlags))
1267 {
1268 return false;
1269 }
1270
1271 return true;
1272}
1273
1274static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001275std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001276{
1277 if(!ValidateEnumerator(enumerator))
1278 {
1279 return "unrecognized enumerator";
1280 }
1281
1282 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001283 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001284 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001285 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1286 }
1287 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1288 {
1289 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001290 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001291 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001292 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001293 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001294 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001295 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001296 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001297 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001298 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001299 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001300 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001301 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001302 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001303 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001304 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001305 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001306 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001307 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001308 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001309 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001311 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001312 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001314 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001315 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001316 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001317 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001318 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001319 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001320 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001321 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001322 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001323 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001324 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1326 }
1327 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1328 {
1329 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1330 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001331 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001332 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001333 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001334 }
1335 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1336 {
1337 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1338 }
1339 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1340 {
1341 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1342 }
1343 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1344 {
1345 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1346 }
1347 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1348 {
1349 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001350 }
1351
1352 std::string enumeratorString;
1353 for(auto const& string : strings)
1354 {
1355 enumeratorString += string;
1356
1357 if(string != strings.back())
1358 {
1359 enumeratorString += '|';
1360 }
1361 }
1362
1363 return enumeratorString;
1364}
1365
1366static
Chia-I Wua4594202015-10-27 19:54:37 +08001367bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001368{
Chia-I Wua4594202015-10-27 19:54:37 +08001369 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1370 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1371 VK_ACCESS_INDEX_READ_BIT |
1372 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1373 VK_ACCESS_UNIFORM_READ_BIT |
1374 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1375 VK_ACCESS_SHADER_READ_BIT |
1376 VK_ACCESS_SHADER_WRITE_BIT |
1377 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1378 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1379 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1380 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1381 VK_ACCESS_TRANSFER_READ_BIT |
1382 VK_ACCESS_TRANSFER_WRITE_BIT |
1383 VK_ACCESS_HOST_READ_BIT |
1384 VK_ACCESS_HOST_WRITE_BIT |
1385 VK_ACCESS_MEMORY_READ_BIT |
1386 VK_ACCESS_MEMORY_WRITE_BIT);
1387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001388 if(enumerator & (~allFlags))
1389 {
1390 return false;
1391 }
1392
1393 return true;
1394}
1395
1396static
Chia-I Wua4594202015-10-27 19:54:37 +08001397std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001398{
1399 if(!ValidateEnumerator(enumerator))
1400 {
1401 return "unrecognized enumerator";
1402 }
1403
1404 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001405 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001406 {
Chia-I Wua4594202015-10-27 19:54:37 +08001407 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001408 }
Chia-I Wua4594202015-10-27 19:54:37 +08001409 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001410 {
Chia-I Wua4594202015-10-27 19:54:37 +08001411 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001412 }
Chia-I Wua4594202015-10-27 19:54:37 +08001413 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001414 {
Chia-I Wua4594202015-10-27 19:54:37 +08001415 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001416 }
Chia-I Wua4594202015-10-27 19:54:37 +08001417 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001418 {
Chia-I Wua4594202015-10-27 19:54:37 +08001419 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001420 }
Chia-I Wua4594202015-10-27 19:54:37 +08001421 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001422 {
Chia-I Wua4594202015-10-27 19:54:37 +08001423 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001424 }
Chia-I Wua4594202015-10-27 19:54:37 +08001425 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001426 {
Chia-I Wua4594202015-10-27 19:54:37 +08001427 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001428 }
Chia-I Wua4594202015-10-27 19:54:37 +08001429 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001430 {
Chia-I Wua4594202015-10-27 19:54:37 +08001431 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001432 }
Chia-I Wua4594202015-10-27 19:54:37 +08001433 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001434 {
Chia-I Wua4594202015-10-27 19:54:37 +08001435 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001436 }
Chia-I Wua4594202015-10-27 19:54:37 +08001437 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001438 {
Chia-I Wua4594202015-10-27 19:54:37 +08001439 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001440 }
Chia-I Wua4594202015-10-27 19:54:37 +08001441 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001442 {
Chia-I Wua4594202015-10-27 19:54:37 +08001443 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001444 }
Chia-I Wua4594202015-10-27 19:54:37 +08001445 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001446 {
Chia-I Wua4594202015-10-27 19:54:37 +08001447 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001448 }
Chia-I Wua4594202015-10-27 19:54:37 +08001449 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001450 {
Chia-I Wua4594202015-10-27 19:54:37 +08001451 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001452 }
Chia-I Wua4594202015-10-27 19:54:37 +08001453 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001454 {
Chia-I Wua4594202015-10-27 19:54:37 +08001455 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001456 }
Chia-I Wua4594202015-10-27 19:54:37 +08001457 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001458 {
Chia-I Wua4594202015-10-27 19:54:37 +08001459 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001460 }
Chia-I Wua4594202015-10-27 19:54:37 +08001461 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001462 {
Chia-I Wua4594202015-10-27 19:54:37 +08001463 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001464 }
Chia-I Wua4594202015-10-27 19:54:37 +08001465 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001466 {
Chia-I Wua4594202015-10-27 19:54:37 +08001467 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001468 }
Chia-I Wua4594202015-10-27 19:54:37 +08001469 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001470 {
Chia-I Wua4594202015-10-27 19:54:37 +08001471 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001472 }
1473
1474 std::string enumeratorString;
1475 for(auto const& string : strings)
1476 {
1477 enumeratorString += string;
1478
1479 if(string != strings.back())
1480 {
1481 enumeratorString += '|';
1482 }
1483 }
1484
1485 return enumeratorString;
1486}
1487
1488static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001489bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001490{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001491 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1492 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 if(enumerator & (~allFlags))
1494 {
1495 return false;
1496 }
1497
1498 return true;
1499}
1500
1501static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001502std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001503{
1504 if(!ValidateEnumerator(enumerator))
1505 {
1506 return "unrecognized enumerator";
1507 }
1508
1509 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001510 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001511 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001512 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001513 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001514 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001515 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001516 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001517 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001518
1519 std::string enumeratorString;
1520 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001521 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001522 enumeratorString += string;
1523
1524 if(string != strings.back())
1525 {
1526 enumeratorString += '|';
1527 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001528 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001529
1530 return enumeratorString;
1531}
1532
1533static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001534bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001535{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001536 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001537 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001538 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001539 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001540 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001541
1542 return true;
1543}
1544
1545static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001546std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001547{
1548 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001549 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001550 return "unrecognized enumerator";
1551 }
1552
1553 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001554 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001556 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001557 }
1558
1559 std::string enumeratorString;
1560 for(auto const& string : strings)
1561 {
1562 enumeratorString += string;
1563
1564 if(string != strings.back())
1565 {
1566 enumeratorString += '|';
1567 }
1568 }
1569
1570 return enumeratorString;
1571}
1572
1573static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001574bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001575{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001576 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1577 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1578 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001579 if(enumerator & (~allFlags))
1580 {
1581 return false;
1582 }
1583
1584 return true;
1585}
1586
1587static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001588std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001589{
1590 if(!ValidateEnumerator(enumerator))
1591 {
1592 return "unrecognized enumerator";
1593 }
1594
1595 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001596 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001597 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001598 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001599 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001600 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001601 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001602 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001603 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001604 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001605 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001606 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001607 }
1608
1609 std::string enumeratorString;
1610 for(auto const& string : strings)
1611 {
1612 enumeratorString += string;
1613
1614 if(string != strings.back())
1615 {
1616 enumeratorString += '|';
1617 }
1618 }
1619
1620 return enumeratorString;
1621}
1622
1623static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001624bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001625{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001626 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001627 if(enumerator & (~allFlags))
1628 {
1629 return false;
1630 }
1631
1632 return true;
1633}
1634
1635static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001636std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001637{
1638 if(!ValidateEnumerator(enumerator))
1639 {
1640 return "unrecognized enumerator";
1641 }
1642
1643 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001644 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001645 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001646 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001647 }
1648
1649 std::string enumeratorString;
1650 for(auto const& string : strings)
1651 {
1652 enumeratorString += string;
1653
1654 if(string != strings.back())
1655 {
1656 enumeratorString += '|';
1657 }
1658 }
1659
1660 return enumeratorString;
1661}
1662
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001663static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001664bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001665{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001666 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1667 VK_IMAGE_ASPECT_STENCIL_BIT |
1668 VK_IMAGE_ASPECT_DEPTH_BIT |
1669 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001670 if(enumerator & (~allFlags))
1671 {
1672 return false;
1673 }
1674
1675 return true;
1676}
1677
1678static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001679std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001680{
1681 if(!ValidateEnumerator(enumerator))
1682 {
1683 return "unrecognized enumerator";
1684 }
1685
1686 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001687 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001688 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001689 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1690 }
1691 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1692 {
1693 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1694 }
1695 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1696 {
1697 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1698 }
1699 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1700 {
1701 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1702 }
1703
1704 std::string enumeratorString;
1705 for(auto const& string : strings)
1706 {
1707 enumeratorString += string;
1708
1709 if(string != strings.back())
1710 {
1711 enumeratorString += '|';
1712 }
1713 }
1714
1715 return enumeratorString;
1716}
1717
1718static
1719bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1720{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001721 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001722 if(enumerator & (~allFlags))
1723 {
1724 return false;
1725 }
1726
1727 return true;
1728}
1729
1730static
1731std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1732{
1733 if(!ValidateEnumerator(enumerator))
1734 {
1735 return "unrecognized enumerator";
1736 }
1737
1738 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001739 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001740 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001741 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001742 }
1743
1744 std::string enumeratorString;
1745 for(auto const& string : strings)
1746 {
1747 enumeratorString += string;
1748
1749 if(string != strings.back())
1750 {
1751 enumeratorString += '|';
1752 }
1753 }
1754
1755 return enumeratorString;
1756}
1757
Chia-I Wu9ab61502015-11-06 06:42:02 +08001758VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001759 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001760 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001761 VkInstance* pInstance)
1762{
1763 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001764 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001765
1766 if (result == VK_SUCCESS) {
1767 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Jon Ashburnf19916e2016-01-11 13:12:43 -07001768 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001769 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -07001771 InitParamChecker(data, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001772 }
1773
1774 return result;
1775}
1776
Chia-I Wu9ab61502015-11-06 06:42:02 +08001777VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001778 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001779 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001780{
1781 // Grab the key before the instance is destroyed.
1782 dispatch_key key = get_dispatch_key(instance);
1783 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001784 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001785
1786 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001787 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1788 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001789 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001790 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001791 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001792 }
1793
1794 layer_debug_report_destroy_instance(mid(instance));
1795 layer_data_map.erase(pTable);
1796
1797 pc_instance_table_map.erase(key);
1798 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001799}
1800
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001801bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001802 VkInstance instance,
1803 uint32_t* pPhysicalDeviceCount,
1804 VkPhysicalDevice* pPhysicalDevices,
1805 VkResult result)
1806{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001808 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001809 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001810 }
1811
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001812 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001814 }
1815
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001816 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001817 {
1818 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001819 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 -06001820 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001821 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001822
1823 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001824}
1825
Chia-I Wu9ab61502015-11-06 06:42:02 +08001826VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001827 VkInstance instance,
1828 uint32_t* pPhysicalDeviceCount,
1829 VkPhysicalDevice* pPhysicalDevices)
1830{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001831 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1832
1833 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1834
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001835 return result;
1836}
1837
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001838bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001839 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001840 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001842
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001843 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001845 }
1846
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001847 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001848}
1849
Chia-I Wu9ab61502015-11-06 06:42:02 +08001850VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851 VkPhysicalDevice physicalDevice,
1852 VkPhysicalDeviceFeatures* pFeatures)
1853{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001854 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001855
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001856 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001857}
1858
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001859bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001860 VkPhysicalDevice physicalDevice,
1861 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001862 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001863{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001864
1865 if(format < VK_FORMAT_BEGIN_RANGE ||
1866 format > VK_FORMAT_END_RANGE)
1867 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001868 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001869 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001870 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001871 }
1872
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001873 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001874 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001875 }
1876
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001877 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001878}
1879
Chia-I Wu9ab61502015-11-06 06:42:02 +08001880VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001881 VkPhysicalDevice physicalDevice,
1882 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001883 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001885 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001887 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001888}
1889
1890bool PostGetPhysicalDeviceImageFormatProperties(
1891 VkPhysicalDevice physicalDevice,
1892 VkFormat format,
1893 VkImageType type,
1894 VkImageTiling tiling,
1895 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001896 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001897 VkImageFormatProperties* pImageFormatProperties,
1898 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001899{
1900
1901 if(format < VK_FORMAT_BEGIN_RANGE ||
1902 format > VK_FORMAT_END_RANGE)
1903 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001904 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001905 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1906 return false;
1907 }
1908
1909 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1910 type > VK_IMAGE_TYPE_END_RANGE)
1911 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001912 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001913 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1914 return false;
1915 }
1916
1917 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1918 tiling > VK_IMAGE_TILING_END_RANGE)
1919 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001920 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001921 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1922 return false;
1923 }
1924
1925
1926 if(pImageFormatProperties != nullptr)
1927 {
1928 }
1929
Chia-I Wu17241042015-10-31 00:31:16 +08001930 if(result < VK_SUCCESS)
1931 {
1932 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001933 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 +08001934 return false;
1935 }
1936
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001937 return true;
1938}
1939
Chia-I Wu9ab61502015-11-06 06:42:02 +08001940VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001941 VkPhysicalDevice physicalDevice,
1942 VkFormat format,
1943 VkImageType type,
1944 VkImageTiling tiling,
1945 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001946 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001947 VkImageFormatProperties* pImageFormatProperties)
1948{
Chia-I Wu17241042015-10-31 00:31:16 +08001949 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 -06001950
Chia-I Wu17241042015-10-31 00:31:16 +08001951 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1952
1953 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001954}
1955
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001956bool PostGetPhysicalDeviceProperties(
1957 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001958 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001959{
1960
1961 if(pProperties != nullptr)
1962 {
1963 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1964 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1965 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001966 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001967 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1968 return false;
1969 }
1970 }
1971
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001972 return true;
1973}
1974
Chia-I Wu9ab61502015-11-06 06:42:02 +08001975VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001976 VkPhysicalDevice physicalDevice,
1977 VkPhysicalDeviceProperties* pProperties)
1978{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001979 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001980
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001981 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001982}
1983
Cody Northropd0802882015-08-03 17:04:53 -06001984bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001985 VkPhysicalDevice physicalDevice,
1986 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001987 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001988{
1989
Cody Northropd0802882015-08-03 17:04:53 -06001990 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001991 {
1992 }
1993
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001994 if(pQueueProperties != nullptr)
1995 {
1996 }
1997
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001998 return true;
1999}
2000
Chia-I Wu9ab61502015-11-06 06:42:02 +08002001VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002002 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002003 uint32_t* pCount,
2004 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002005{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002006 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002007
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002008 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002009}
2010
2011bool PostGetPhysicalDeviceMemoryProperties(
2012 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002013 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002014{
2015
2016 if(pMemoryProperties != nullptr)
2017 {
2018 }
2019
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002020 return true;
2021}
2022
Chia-I Wu9ab61502015-11-06 06:42:02 +08002023VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002024 VkPhysicalDevice physicalDevice,
2025 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2026{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002027 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002028
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002029 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002030}
2031
Chia-I Wu9ab61502015-11-06 06:42:02 +08002032VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002033 VkPhysicalDevice physicalDevice,
2034 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002035 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002036 VkDevice* pDevice)
2037{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002038 /*
2039 * NOTE: The loader fills in the ICD's device object in *pDevice.
2040 * Use that object to get the dispatch table.
2041 *
2042 * NOTE: We do not validate physicalDevice or any dispatchable
2043 * object as the first parameter. We couldn't get here if it was wrong!
2044 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002045 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002046 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002047 if(result == VK_SUCCESS)
2048 {
2049 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2050 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2051 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2052 }
2053
2054 return result;
2055}
2056
Chia-I Wu9ab61502015-11-06 06:42:02 +08002057VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002058 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002059 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002060{
2061 layer_debug_report_destroy_device(device);
2062
2063 dispatch_key key = get_dispatch_key(device);
2064#if DISPATCH_MAP_DEBUG
2065 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2066#endif
2067
Chia-I Wuf7458c52015-10-26 21:10:41 +08002068 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002069 pc_device_table_map.erase(key);
2070 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002071}
2072
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002073bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002074 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002075 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002076 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002077 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002078{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002079
2080
2081
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002082 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002083 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002084 }
2085
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002086 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002087}
2088
Chia-I Wu9ab61502015-11-06 06:42:02 +08002089VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002090 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002091 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002092 uint32_t queueIndex,
2093 VkQueue* pQueue)
2094{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002095 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002096
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002097 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002098}
2099
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002100bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002102 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002103{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002104 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002105 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002106 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002107 return false;
2108 }
2109
2110 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002111 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002112 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002113
2114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002115}
2116
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002117bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002119 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002120 VkFence fence,
2121 VkResult result)
2122{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002123
2124
Jeremy Hayes99a96322015-06-26 12:48:09 -06002125
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002126 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002127 {
2128 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002129 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 -06002130 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002131 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002132
2133 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002134}
2135
Chia-I Wu9ab61502015-11-06 06:42:02 +08002136VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002138 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002139 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002140 VkFence fence)
2141{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002142 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002143 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002144 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002145
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002146 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002147
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002148 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002149
2150 return result;
2151}
2152
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002153bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002154 VkQueue queue,
2155 VkResult result)
2156{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002158 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159 {
2160 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002161 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 -06002162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002163 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002164
2165 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002166}
2167
Chia-I Wu9ab61502015-11-06 06:42:02 +08002168VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002169 VkQueue queue)
2170{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002171 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2172
2173 PostQueueWaitIdle(queue, result);
2174
2175 return result;
2176}
2177
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002178bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179 VkDevice device,
2180 VkResult result)
2181{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002183 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 {
2185 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002186 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 -06002187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002188 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002189
2190 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002191}
2192
Chia-I Wu9ab61502015-11-06 06:42:02 +08002193VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002194 VkDevice device)
2195{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2197
2198 PostDeviceWaitIdle(device, result);
2199
2200 return result;
2201}
2202
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002203bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002205 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002207 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002208 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002209 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002210 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002211 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002212 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002213 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002214 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002215 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002216
2217 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218}
2219
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002220bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002222 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223 VkResult result)
2224{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002226 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002227 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228 }
2229
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002230 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002231 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002232 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002233 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 -06002234 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002236
2237 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002238}
2239
Chia-I Wu9ab61502015-11-06 06:42:02 +08002240VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002241 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002242 const VkMemoryAllocateInfo* pAllocateInfo,
2243 const VkAllocationCallbacks* pAllocator,
2244 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002245{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002246 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002247
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002248 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002249
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002250 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002251
2252 return result;
2253}
2254
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002255bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256 VkDevice device,
2257 VkDeviceMemory mem,
2258 VkDeviceSize offset,
2259 VkDeviceSize size,
2260 VkMemoryMapFlags flags,
2261 void** ppData,
2262 VkResult result)
2263{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265
2266
2267
2268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002269 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 }
2272
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002273 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274 {
2275 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002276 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 -06002277 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002278 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002279
2280 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281}
2282
Chia-I Wu9ab61502015-11-06 06:42:02 +08002283VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002284 VkDevice device,
2285 VkDeviceMemory mem,
2286 VkDeviceSize offset,
2287 VkDeviceSize size,
2288 VkMemoryMapFlags flags,
2289 void** ppData)
2290{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002291 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2292
2293 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2294
2295 return result;
2296}
2297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002298bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002300 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002301{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002302 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002303 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002304 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002305 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002306 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002307 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002308 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002310 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002311
2312 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313}
2314
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002315bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002317 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318 VkResult result)
2319{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002320
2321
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002322 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323 {
2324 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002325 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 -06002326 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002327 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002328
2329 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330}
2331
Chia-I Wu9ab61502015-11-06 06:42:02 +08002332VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002334 uint32_t memoryRangeCount,
2335 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002336{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002337 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002338
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002339 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002340
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002341 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002342
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002343 return result;
2344}
2345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002346bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002348 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002349{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002350 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002351 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002352 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002353 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002354 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002355 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002358 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002359
2360 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002361}
2362
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002363bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002364 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002365 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002366 VkResult result)
2367{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368
2369
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002370 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002371 {
2372 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002373 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 -06002374 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002375 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002376
2377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378}
2379
Chia-I Wu9ab61502015-11-06 06:42:02 +08002380VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002382 uint32_t memoryRangeCount,
2383 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002384{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002385 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002387 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002388
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002389 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002390
Tony Barbourb1250542015-04-16 19:23:13 -06002391 return result;
2392}
2393
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002394bool PostGetDeviceMemoryCommitment(
2395 VkDevice device,
2396 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002397 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002398{
2399
2400
2401 if(pCommittedMemoryInBytes != nullptr)
2402 {
2403 }
2404
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002405 return true;
2406}
2407
Chia-I Wu9ab61502015-11-06 06:42:02 +08002408VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002409 VkDevice device,
2410 VkDeviceMemory memory,
2411 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002412{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002413 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002414
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002415 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002416}
2417
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002418bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002420 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002422 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002424{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002425
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002426
Jeremy Hayes99a96322015-06-26 12:48:09 -06002427
2428
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002429 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002430 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002431 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002432 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 -06002433 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002434 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002435
2436 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002437}
2438
Chia-I Wu9ab61502015-11-06 06:42:02 +08002439VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002440 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002441 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002442 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002443 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002444{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002445 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002446
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002447 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002448
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002449 return result;
2450}
2451
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002452bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002453 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002454 VkImage image,
2455 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002456 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002457 VkResult result)
2458{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002459
2460
2461
2462
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002463 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002465 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002466 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 -06002467 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002468 }
2469
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002470 return true;
2471}
2472
Chia-I Wu9ab61502015-11-06 06:42:02 +08002473VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002474 VkDevice device,
2475 VkImage image,
2476 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002477 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002478{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002479 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002481 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002482
2483 return result;
2484}
2485
2486bool PostGetBufferMemoryRequirements(
2487 VkDevice device,
2488 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002489 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002490{
2491
2492
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002493 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002494 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002495 }
2496
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002497 return true;
2498}
2499
Chia-I Wu9ab61502015-11-06 06:42:02 +08002500VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002501 VkDevice device,
2502 VkBuffer buffer,
2503 VkMemoryRequirements* pMemoryRequirements)
2504{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002505 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002506
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002507 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508}
2509
2510bool PostGetImageMemoryRequirements(
2511 VkDevice device,
2512 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002513 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002514{
2515
2516
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002517 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002518 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519 }
2520
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002521 return true;
2522}
2523
Chia-I Wu9ab61502015-11-06 06:42:02 +08002524VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002525 VkDevice device,
2526 VkImage image,
2527 VkMemoryRequirements* pMemoryRequirements)
2528{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002529 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002530
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002531 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002532}
2533
2534bool PostGetImageSparseMemoryRequirements(
2535 VkDevice device,
2536 VkImage image,
2537 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002538 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002539{
2540
2541
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002542 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002543 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002544 }
2545
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002546 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002547 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002548 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002549 (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 -06002550 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002551 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002552 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553 return false;
2554 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002555 }
2556
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557 return true;
2558}
2559
Chia-I Wu9ab61502015-11-06 06:42:02 +08002560VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002561 VkDevice device,
2562 VkImage image,
2563 uint32_t* pNumRequirements,
2564 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2565{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002566 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002568 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569}
2570
2571bool PostGetPhysicalDeviceSparseImageFormatProperties(
2572 VkPhysicalDevice physicalDevice,
2573 VkFormat format,
2574 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002575 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002576 VkImageUsageFlags usage,
2577 VkImageTiling tiling,
2578 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002579 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002580{
2581
2582 if(format < VK_FORMAT_BEGIN_RANGE ||
2583 format > VK_FORMAT_END_RANGE)
2584 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002585 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002586 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002587 return false;
2588 }
2589
2590 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2591 type > VK_IMAGE_TYPE_END_RANGE)
2592 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002593 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002594 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002595 return false;
2596 }
2597
2598
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002599
2600 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2601 tiling > VK_IMAGE_TILING_END_RANGE)
2602 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002603 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002604 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 return false;
2606 }
2607
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002608 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002610 }
2611
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002612 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002613 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002614 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002615 (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 -06002616 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002617 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002618 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002619 return false;
2620 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 }
2622
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002623 return true;
2624}
2625
Chia-I Wu9ab61502015-11-06 06:42:02 +08002626VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002627 VkPhysicalDevice physicalDevice,
2628 VkFormat format,
2629 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002630 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002631 VkImageUsageFlags usage,
2632 VkImageTiling tiling,
2633 uint32_t* pNumProperties,
2634 VkSparseImageFormatProperties* pProperties)
2635{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002636 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002637
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002638 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002639}
2640
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002641bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002642 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002643 uint32_t bindInfoCount,
2644 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002645{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002646 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002648 }
2649
2650 return true;
2651}
2652
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002653bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002654 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002655 uint32_t bindInfoCount,
2656 const VkBindSparseInfo* pBindInfo,
2657 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 VkResult result)
2659{
2660
2661
2662
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002663 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002665 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002666 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 -06002667 return false;
2668 }
2669
2670 return true;
2671}
2672
Chia-I Wu9ab61502015-11-06 06:42:02 +08002673VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002674 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002675 uint32_t bindInfoCount,
2676 const VkBindSparseInfo* pBindInfo,
2677 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002678{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002679 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002680
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002681 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002682
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002683 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002684
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002685 return result;
2686}
2687
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002688bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002689 VkDevice device,
2690 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002691{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002692 if(pCreateInfo != nullptr)
2693 {
2694 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002695 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002696 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002697 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002698 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002699 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002700 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002701
2702 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002703}
2704
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002705bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002706 VkDevice device,
2707 VkFence* pFence,
2708 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002709{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002710
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002711 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002712 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002713 }
2714
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002715 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002716 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002717 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002718 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 -06002719 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002720 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002721
2722 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002723}
2724
Chia-I Wu9ab61502015-11-06 06:42:02 +08002725VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002726 VkDevice device,
2727 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002728 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002729 VkFence* pFence)
2730{
2731 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002732
Chia-I Wuf7458c52015-10-26 21:10:41 +08002733 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002734
2735 PostCreateFence(device, pFence, result);
2736
2737 return result;
2738}
2739
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002740bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002741 VkDevice device,
2742 const VkFence* pFences)
2743{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002744 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002745 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002746 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002747
2748 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002749}
2750
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002751bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002752 VkDevice device,
2753 uint32_t fenceCount,
2754 VkResult result)
2755{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002756
2757
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002758 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002759 {
2760 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002761 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 -06002762 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002763 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002764
2765 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766}
2767
Chia-I Wu9ab61502015-11-06 06:42:02 +08002768VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002769 VkDevice device,
2770 uint32_t fenceCount,
2771 const VkFence* pFences)
2772{
2773 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002774
Jeremy Hayes99a96322015-06-26 12:48:09 -06002775 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2776
2777 PostResetFences(device, fenceCount, result);
2778
2779 return result;
2780}
2781
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002782bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002783 VkDevice device,
2784 VkFence fence,
2785 VkResult result)
2786{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002787
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002789 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002790 {
2791 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002792 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 -06002793 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002794 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002795
2796 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002797}
2798
Chia-I Wu9ab61502015-11-06 06:42:02 +08002799VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002800 VkDevice device,
2801 VkFence fence)
2802{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002803 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2804
2805 PostGetFenceStatus(device, fence, result);
2806
2807 return result;
2808}
2809
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002810bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002811 VkDevice device,
2812 const VkFence* pFences)
2813{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002814 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002815 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002816 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002817
2818 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002819}
2820
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002821bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002822 VkDevice device,
2823 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002824 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 uint64_t timeout,
2826 VkResult result)
2827{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828
2829
2830
2831
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002832 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002833 {
2834 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002835 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 -06002836 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002838
2839 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002840}
2841
Chia-I Wu9ab61502015-11-06 06:42:02 +08002842VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002843 VkDevice device,
2844 uint32_t fenceCount,
2845 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002846 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002847 uint64_t timeout)
2848{
2849 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002850
Jeremy Hayes99a96322015-06-26 12:48:09 -06002851 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2852
2853 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2854
2855 return result;
2856}
2857
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002858bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002859 VkDevice device,
2860 const VkSemaphoreCreateInfo* pCreateInfo)
2861{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002862 if(pCreateInfo != nullptr)
2863 {
2864 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002865 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002866 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002867 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002868 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002869 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002870 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002871
2872 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002873}
2874
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002875bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002876 VkDevice device,
2877 VkSemaphore* pSemaphore,
2878 VkResult result)
2879{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002881 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002882 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883 }
2884
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002885 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002886 {
2887 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002888 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 -06002889 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002891
2892 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893}
2894
Chia-I Wu9ab61502015-11-06 06:42:02 +08002895VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002896 VkDevice device,
2897 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002898 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002899 VkSemaphore* pSemaphore)
2900{
2901 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002902
Chia-I Wuf7458c52015-10-26 21:10:41 +08002903 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002904
2905 PostCreateSemaphore(device, pSemaphore, result);
2906
2907 return result;
2908}
2909
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002910bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002911 VkDevice device,
2912 const VkEventCreateInfo* pCreateInfo)
2913{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002914 if(pCreateInfo != nullptr)
2915 {
2916 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002917 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002918 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002919 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002920 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002922 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002923
2924 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925}
2926
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002927bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002928 VkDevice device,
2929 VkEvent* pEvent,
2930 VkResult result)
2931{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002933 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002934 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002935 }
2936
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002937 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938 {
2939 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002940 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 -06002941 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002942 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002943
2944 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945}
2946
Chia-I Wu9ab61502015-11-06 06:42:02 +08002947VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002948 VkDevice device,
2949 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002950 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951 VkEvent* pEvent)
2952{
2953 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002954
Chia-I Wuf7458c52015-10-26 21:10:41 +08002955 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002956
2957 PostCreateEvent(device, pEvent, result);
2958
2959 return result;
2960}
2961
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002962bool PostGetEventStatus(
2963 VkDevice device,
2964 VkEvent event,
2965 VkResult result)
2966{
2967
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002969 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002970 {
2971 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002972 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 -06002973 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002974 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002975
2976 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002977}
2978
Chia-I Wu9ab61502015-11-06 06:42:02 +08002979VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002980 VkDevice device,
2981 VkEvent event)
2982{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002983 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2984
2985 PostGetEventStatus(device, event, result);
2986
2987 return result;
2988}
2989
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002990bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002991 VkDevice device,
2992 VkEvent event,
2993 VkResult result)
2994{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002995
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002997 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002998 {
2999 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003000 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 -06003001 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003002 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003003
3004 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003005}
3006
Chia-I Wu9ab61502015-11-06 06:42:02 +08003007VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 VkDevice device,
3009 VkEvent event)
3010{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003011 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3012
3013 PostSetEvent(device, event, result);
3014
3015 return result;
3016}
3017
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003019 VkDevice device,
3020 VkEvent event,
3021 VkResult result)
3022{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003025 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003026 {
3027 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003028 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 -06003029 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003031
3032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033}
3034
Chia-I Wu9ab61502015-11-06 06:42:02 +08003035VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 VkDevice device,
3037 VkEvent event)
3038{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003039 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3040
3041 PostResetEvent(device, event, result);
3042
3043 return result;
3044}
3045
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003046bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003047 VkDevice device,
3048 const VkQueryPoolCreateInfo* pCreateInfo)
3049{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003050 if(pCreateInfo != nullptr)
3051 {
3052 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003054 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003055 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003056 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003057 }
3058 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3059 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3060 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003061 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003062 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003063 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003065 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003066
3067 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068}
3069
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003070bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071 VkDevice device,
3072 VkQueryPool* pQueryPool,
3073 VkResult result)
3074{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003076 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078 }
3079
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003080 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 {
3082 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003083 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 -06003084 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003086
3087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088}
3089
Chia-I Wu9ab61502015-11-06 06:42:02 +08003090VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003091 VkDevice device,
3092 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003093 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094 VkQueryPool* pQueryPool)
3095{
3096 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003097
Chia-I Wuf7458c52015-10-26 21:10:41 +08003098 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099
3100 PostCreateQueryPool(device, pQueryPool, result);
3101
3102 return result;
3103}
3104
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003105bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106 VkDevice device,
3107 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003108 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003109 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003110 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003112 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113 VkQueryResultFlags flags,
3114 VkResult result)
3115{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116
Jeremy Hayes99a96322015-06-26 12:48:09 -06003117
3118
3119
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003120 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122 }
3123
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003125 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126 {
3127 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003128 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003129 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003130 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003131
3132 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133}
3134
Chia-I Wu9ab61502015-11-06 06:42:02 +08003135VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
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{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003145 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 -06003146
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003147 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003148
3149 return result;
3150}
3151
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003152bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003153 VkDevice device,
3154 const VkBufferCreateInfo* pCreateInfo)
3155{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003156 if(pCreateInfo != nullptr)
3157 {
3158 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003159 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003160 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003161 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003164 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3165 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003167 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003168 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003169 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003171 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003172 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003174 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003175
3176 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003177}
3178
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003179bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003180 VkDevice device,
3181 VkBuffer* pBuffer,
3182 VkResult result)
3183{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003185 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003186 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187 }
3188
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003189 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003190 {
3191 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003192 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 -06003193 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003195
3196 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197}
3198
Chia-I Wu9ab61502015-11-06 06:42:02 +08003199VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 VkDevice device,
3201 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003202 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003203 VkBuffer* pBuffer)
3204{
3205 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003206
Chia-I Wuf7458c52015-10-26 21:10:41 +08003207 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208
3209 PostCreateBuffer(device, pBuffer, result);
3210
3211 return result;
3212}
3213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003214bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215 VkDevice device,
3216 const VkBufferViewCreateInfo* pCreateInfo)
3217{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003218 if(pCreateInfo != nullptr)
3219 {
3220 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003221 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003222 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003223 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003224 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003226 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3227 pCreateInfo->format > VK_FORMAT_END_RANGE)
3228 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003229 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003230 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003231 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003232 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003234
3235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003236}
3237
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003238bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 VkDevice device,
3240 VkBufferView* pView,
3241 VkResult result)
3242{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003243
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003244 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003245 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246 }
3247
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003248 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003249 {
3250 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003251 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 -06003252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003254
3255 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256}
3257
Chia-I Wu9ab61502015-11-06 06:42:02 +08003258VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003259 VkDevice device,
3260 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003261 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003262 VkBufferView* pView)
3263{
3264 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003265
Chia-I Wuf7458c52015-10-26 21:10:41 +08003266 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267
3268 PostCreateBufferView(device, pView, result);
3269
3270 return result;
3271}
3272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003273bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274 VkDevice device,
3275 const VkImageCreateInfo* pCreateInfo)
3276{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003277 if(pCreateInfo != nullptr)
3278 {
3279 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003281 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003282 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003283 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 }
3285 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3286 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3287 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003288 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003289 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003290 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003291 }
3292 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3293 pCreateInfo->format > VK_FORMAT_END_RANGE)
3294 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003295 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003296 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003297 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003298 }
3299 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3300 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3301 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003302 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003303 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003304 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003306 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3307 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003309 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003310 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003311 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003313 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003314 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003317
3318 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319}
3320
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003321bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003322 VkDevice device,
3323 VkImage* pImage,
3324 VkResult result)
3325{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003326
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003327 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003328 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 }
3330
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003331 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003332 {
3333 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003334 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 -06003335 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003336 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003337
3338 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003339}
3340
Chia-I Wu9ab61502015-11-06 06:42:02 +08003341VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003342 VkDevice device,
3343 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003344 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003345 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003346{
3347 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003348
Chia-I Wuf7458c52015-10-26 21:10:41 +08003349 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003350
3351 PostCreateImage(device, pImage, result);
3352
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003353 return result;
3354}
3355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003356bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 VkDevice device,
3358 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003359{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003360 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003361 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003362 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003363 (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 -06003364 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003365 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003366 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003367 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003368 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003369 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003370
3371 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372}
3373
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003374bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375 VkDevice device,
3376 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003377 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003378{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003379
Jeremy Hayes99a96322015-06-26 12:48:09 -06003380
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003381 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383 }
3384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003386}
3387
Chia-I Wu9ab61502015-11-06 06:42:02 +08003388VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389 VkDevice device,
3390 VkImage image,
3391 const VkImageSubresource* pSubresource,
3392 VkSubresourceLayout* pLayout)
3393{
3394 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003395
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003396 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003397
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003398 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003399}
3400
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003401bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 VkDevice device,
3403 const VkImageViewCreateInfo* pCreateInfo)
3404{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003405 if(pCreateInfo != nullptr)
3406 {
3407 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003408 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003409 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003410 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003411 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003412 }
3413 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3414 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3415 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003416 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003417 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003418 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003419 }
3420 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3421 pCreateInfo->format > VK_FORMAT_END_RANGE)
3422 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003423 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003424 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003426 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003427 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3428 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003429 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003430 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003431 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003432 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003433 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003434 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3435 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003436 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003437 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003438 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003439 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003440 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003441 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3442 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003443 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003444 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003445 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003446 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003447 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003448 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3449 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003451 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003452 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003453 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003454 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003455 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003456
3457 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003458}
3459
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003460bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003461 VkDevice device,
3462 VkImageView* pView,
3463 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003464{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003465
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003466 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003467 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003468 }
3469
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003470 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003471 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003472 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003473 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 -06003474 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003475 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003476
3477 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478}
3479
Chia-I Wu9ab61502015-11-06 06:42:02 +08003480VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003481 VkDevice device,
3482 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003483 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003484 VkImageView* pView)
3485{
3486 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003487
Chia-I Wuf7458c52015-10-26 21:10:41 +08003488 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003489
3490 PostCreateImageView(device, pView, result);
3491
3492 return result;
3493}
3494
Michael Lentine03d8e572015-09-15 14:59:14 -05003495bool PreCreateShaderModule(
3496 VkDevice device,
3497 const VkShaderModuleCreateInfo* pCreateInfo)
3498{
3499 if(pCreateInfo) {
3500 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003501 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003502 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3503 return false;
3504 }
3505 if(!pCreateInfo->pCode) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003506 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003507 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3508 return false;
3509 }
3510 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003512 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3513 return false;
3514 }
3515
3516 return true;
3517}
3518
3519bool PostCreateShaderModule(
3520 VkDevice device,
3521 VkShaderModule* pShaderModule,
3522 VkResult result)
3523{
3524 if(result < VK_SUCCESS) {
3525 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003526 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 -05003527 return false;
3528 }
3529
3530 return true;
3531}
3532
Chia-I Wu9ab61502015-11-06 06:42:02 +08003533VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003534 VkDevice device,
3535 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003536 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003537 VkShaderModule* pShaderModule)
3538{
3539 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003540 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003541 PostCreateShaderModule(device, pShaderModule, result);
3542 return result;
3543}
3544
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003545bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003546 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003547 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003548{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003549 if(pCreateInfo != nullptr)
3550 {
3551 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003552 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003553 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003554 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003555 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003556 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003557 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003559 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003560 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003561
3562 return true;
3563}
3564
3565bool PostCreatePipelineCache(
3566 VkDevice device,
3567 VkPipelineCache* pPipelineCache,
3568 VkResult result)
3569{
3570
3571 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003572 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003574
3575 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003577 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003578 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 -06003579 return false;
3580 }
3581
3582 return true;
3583}
3584
Chia-I Wu9ab61502015-11-06 06:42:02 +08003585VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003586 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003587 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003588 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003589 VkPipelineCache* pPipelineCache)
3590{
3591 PreCreatePipelineCache(device, pCreateInfo);
3592
Chia-I Wuf7458c52015-10-26 21:10:41 +08003593 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003594
3595 PostCreatePipelineCache(device, pPipelineCache, result);
3596
3597 return result;
3598}
3599
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003600bool PostGetPipelineCacheData(
3601 VkDevice device,
3602 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003603 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003604 void* pData,
3605 VkResult result)
3606{
3607
3608
Chia-I Wub16facd2015-10-26 19:17:06 +08003609 if(pDataSize != nullptr)
3610 {
3611 }
3612
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003613 if(pData != nullptr)
3614 {
3615 }
3616
3617 if(result < VK_SUCCESS)
3618 {
3619 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003620 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 -06003621 return false;
3622 }
3623
3624 return true;
3625}
3626
Chia-I Wu9ab61502015-11-06 06:42:02 +08003627VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003628 VkDevice device,
3629 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003630 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003631 void* pData)
3632{
Chia-I Wub16facd2015-10-26 19:17:06 +08003633 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003634
Chia-I Wub16facd2015-10-26 19:17:06 +08003635 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003636
3637 return result;
3638}
3639
3640bool PreMergePipelineCaches(
3641 VkDevice device,
3642 const VkPipelineCache* pSrcCaches)
3643{
3644 if(pSrcCaches != nullptr)
3645 {
3646 }
3647
3648 return true;
3649}
3650
3651bool PostMergePipelineCaches(
3652 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003653 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003654 uint32_t srcCacheCount,
3655 VkResult result)
3656{
3657
3658
3659
3660 if(result < VK_SUCCESS)
3661 {
3662 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003663 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 -06003664 return false;
3665 }
3666
3667 return true;
3668}
3669
Chia-I Wu9ab61502015-11-06 06:42:02 +08003670VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003671 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003672 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003673 uint32_t srcCacheCount,
3674 const VkPipelineCache* pSrcCaches)
3675{
3676 PreMergePipelineCaches(device, pSrcCaches);
3677
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003678 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003680 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003681
3682 return result;
3683}
3684
3685bool PreCreateGraphicsPipelines(
3686 VkDevice device,
3687 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3688{
3689 if(pCreateInfos != nullptr)
3690 {
3691 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3692 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003693 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003694 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3695 return false;
3696 }
3697 if(pCreateInfos->pStages != nullptr)
3698 {
3699 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3700 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003701 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003702 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3703 return false;
3704 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003705 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3706 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003707 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003708 {
3709 }
3710 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3711 {
3712 }
3713 }
3714 }
3715 if(pCreateInfos->pVertexInputState != nullptr)
3716 {
3717 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3718 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003719 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003720 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3721 return false;
3722 }
3723 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3724 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003725 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3726 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003727 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003728 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003729 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003730 return false;
3731 }
3732 }
3733 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3734 {
3735 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3736 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3737 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003738 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3740 return false;
3741 }
3742 }
3743 }
3744 if(pCreateInfos->pInputAssemblyState != nullptr)
3745 {
3746 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3747 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003748 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003749 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3750 return false;
3751 }
3752 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3753 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3754 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003755 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003756 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3757 return false;
3758 }
3759 }
3760 if(pCreateInfos->pTessellationState != nullptr)
3761 {
3762 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3763 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003764 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003765 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3766 return false;
3767 }
3768 }
3769 if(pCreateInfos->pViewportState != nullptr)
3770 {
3771 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3772 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003773 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003774 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3775 return false;
3776 }
3777 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003778 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003780 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003781 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003782 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003783 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003784 return false;
3785 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003786 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3787 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003788 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003789 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003790 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003791 return false;
3792 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003793 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003794 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003795 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003796 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003797 return false;
3798 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003799 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3800 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003801 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003802 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003803 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003804 return false;
3805 }
3806 }
3807 if(pCreateInfos->pMultisampleState != nullptr)
3808 {
3809 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3810 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003811 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003812 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3813 return false;
3814 }
3815 }
3816 if(pCreateInfos->pDepthStencilState != nullptr)
3817 {
3818 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3819 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003820 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003821 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3822 return false;
3823 }
3824 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3825 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3826 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003827 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003828 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3829 return false;
3830 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003831 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3832 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003833 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003834 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003835 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003836 return false;
3837 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003838 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3839 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003840 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003841 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003842 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003843 return false;
3844 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003845 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3846 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003847 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003848 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003849 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003850 return false;
3851 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003852 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3853 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003854 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003855 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003856 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003857 return false;
3858 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003859 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3860 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003861 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003862 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003863 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003864 return false;
3865 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003866 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3867 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003868 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003869 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003870 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003871 return false;
3872 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003873 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3874 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003875 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003876 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003877 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003878 return false;
3879 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003880 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3881 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003882 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003883 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003884 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003885 return false;
3886 }
3887 }
3888 if(pCreateInfos->pColorBlendState != nullptr)
3889 {
3890 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3891 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003892 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003893 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3894 return false;
3895 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003896 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3897 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003898 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3899 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003900 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003901 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3902 return false;
3903 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003904 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003905 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003906 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3907 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003908 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003909 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003910 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003911 return false;
3912 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003913 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3914 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003915 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003916 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003917 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003918 return false;
3919 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003920 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3921 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003922 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003923 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003924 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003925 return false;
3926 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003927 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3928 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003929 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003930 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003931 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003932 return false;
3933 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003934 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3935 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003936 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003937 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003938 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003939 return false;
3940 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003941 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3942 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003943 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003944 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003945 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003946 return false;
3947 }
3948 }
3949 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003950 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3951 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003952 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003953 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3954 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003955 }
3956
3957 return true;
3958}
3959
3960bool PostCreateGraphicsPipelines(
3961 VkDevice device,
3962 VkPipelineCache pipelineCache,
3963 uint32_t count,
3964 VkPipeline* pPipelines,
3965 VkResult result)
3966{
3967
3968
3969
3970 if(pPipelines != nullptr)
3971 {
3972 }
3973
3974 if(result < VK_SUCCESS)
3975 {
3976 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003977 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 -06003978 return false;
3979 }
3980
3981 return true;
3982}
3983
Chia-I Wu9ab61502015-11-06 06:42:02 +08003984VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003985 VkDevice device,
3986 VkPipelineCache pipelineCache,
3987 uint32_t count,
3988 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003989 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003990 VkPipeline* pPipelines)
3991{
3992 PreCreateGraphicsPipelines(device, pCreateInfos);
3993
Chia-I Wuf7458c52015-10-26 21:10:41 +08003994 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003995
3996 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3997
3998 return result;
3999}
4000
4001bool PreCreateComputePipelines(
4002 VkDevice device,
4003 const VkComputePipelineCreateInfo* pCreateInfos)
4004{
4005 if(pCreateInfos != nullptr)
4006 {
4007 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4008 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004009 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004010 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4011 return false;
4012 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004013 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004014 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004015 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004016 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4017 return false;
4018 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004019 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004021 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004022 {
4023 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004024 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004025 {
4026 }
4027 }
4028 }
4029
4030 return true;
4031}
4032
4033bool PostCreateComputePipelines(
4034 VkDevice device,
4035 VkPipelineCache pipelineCache,
4036 uint32_t count,
4037 VkPipeline* pPipelines,
4038 VkResult result)
4039{
4040
4041
4042
4043 if(pPipelines != nullptr)
4044 {
4045 }
4046
4047 if(result < VK_SUCCESS)
4048 {
4049 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004050 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 -06004051 return false;
4052 }
4053
4054 return true;
4055}
4056
Chia-I Wu9ab61502015-11-06 06:42:02 +08004057VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004058 VkDevice device,
4059 VkPipelineCache pipelineCache,
4060 uint32_t count,
4061 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004062 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004063 VkPipeline* pPipelines)
4064{
4065 PreCreateComputePipelines(device, pCreateInfos);
4066
Chia-I Wuf7458c52015-10-26 21:10:41 +08004067 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004068
4069 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4070
4071 return result;
4072}
4073
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004074bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004075 VkDevice device,
4076 const VkPipelineLayoutCreateInfo* pCreateInfo)
4077{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004078 if(pCreateInfo != nullptr)
4079 {
4080 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004081 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004082 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004083 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4084 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004085 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004086 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004087 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004088 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004089 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004090 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004091 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004092 }
4093
4094 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004095}
4096
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004097bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004098 VkDevice device,
4099 VkPipelineLayout* pPipelineLayout,
4100 VkResult result)
4101{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004102
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004104 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004105 }
4106
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004107 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004108 {
4109 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004110 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 -06004111 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004112 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004113
4114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115}
4116
Chia-I Wu9ab61502015-11-06 06:42:02 +08004117VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004118 VkDevice device,
4119 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004120 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004121 VkPipelineLayout* pPipelineLayout)
4122{
4123 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004124
Chia-I Wuf7458c52015-10-26 21:10:41 +08004125 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004126
4127 PostCreatePipelineLayout(device, pPipelineLayout, result);
4128
4129 return result;
4130}
4131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004132bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004133 VkDevice device,
4134 const VkSamplerCreateInfo* pCreateInfo)
4135{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004136 if(pCreateInfo != nullptr)
4137 {
4138 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004139 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004140 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004141 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004142 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004143 }
Chia-I Wub99df442015-10-26 16:49:32 +08004144 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4145 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004146 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004147 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004148 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004149 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004150 }
Chia-I Wub99df442015-10-26 16:49:32 +08004151 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4152 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004153 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004154 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004155 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004156 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004157 }
Chia-I Wub99df442015-10-26 16:49:32 +08004158 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4159 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004160 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004161 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004162 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004163 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004164 }
Chia-I Wub99df442015-10-26 16:49:32 +08004165 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4166 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004167 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004168 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004169 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004170 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004171 }
Chia-I Wub99df442015-10-26 16:49:32 +08004172 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4173 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004174 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004175 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004176 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004177 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178 }
Chia-I Wub99df442015-10-26 16:49:32 +08004179 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4180 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004181 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004182 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004183 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004184 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004185 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004186 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004187 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004188 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4189 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4190 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004191 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004192 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4193 return false;
4194 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004195 }
4196 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4197 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4198 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004199 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004200 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004201 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004202 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004203 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004204
4205 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004206}
4207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004208bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004209 VkDevice device,
4210 VkSampler* pSampler,
4211 VkResult result)
4212{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004213
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004214 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004216 }
4217
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004218 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004219 {
4220 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004221 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 -06004222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004224
4225 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004226}
4227
Chia-I Wu9ab61502015-11-06 06:42:02 +08004228VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004229 VkDevice device,
4230 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004231 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004232 VkSampler* pSampler)
4233{
4234 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004235
Chia-I Wuf7458c52015-10-26 21:10:41 +08004236 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004237
4238 PostCreateSampler(device, pSampler, result);
4239
4240 return result;
4241}
4242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004243bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004244 VkDevice device,
4245 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4246{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004247 if(pCreateInfo != nullptr)
4248 {
4249 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004250 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004251 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004252 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004253 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004255 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004256 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004257 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4258 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004259 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004260 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004261 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004262 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004263 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004264 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004265 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004266 }
4267 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004268 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004269
4270 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004271}
4272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004273bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 VkDevice device,
4275 VkDescriptorSetLayout* pSetLayout,
4276 VkResult result)
4277{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004278
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004279 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004280 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 }
4282
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004283 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004284 {
4285 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004286 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 -06004287 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004289
4290 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004291}
4292
Chia-I Wu9ab61502015-11-06 06:42:02 +08004293VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004294 VkDevice device,
4295 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004296 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004297 VkDescriptorSetLayout* pSetLayout)
4298{
4299 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004300
Chia-I Wuf7458c52015-10-26 21:10:41 +08004301 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004302
4303 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4304
4305 return result;
4306}
4307
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004308bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004309 VkDevice device,
4310 const VkDescriptorPoolCreateInfo* pCreateInfo)
4311{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004312 if(pCreateInfo != nullptr)
4313 {
4314 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004315 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004316 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004317 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004318 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004320 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004322 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4323 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004325 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004326 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004327 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004328 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004329 }
4330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004331
4332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004333}
4334
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004335bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004336 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004337 uint32_t maxSets,
4338 VkDescriptorPool* pDescriptorPool,
4339 VkResult result)
4340{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004341
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004342 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004343
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004344 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346 }
4347
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004348 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004349 {
4350 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004351 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 -06004352 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004353 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004354
4355 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004356}
4357
Chia-I Wu9ab61502015-11-06 06:42:02 +08004358VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004360 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004361 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362 VkDescriptorPool* pDescriptorPool)
4363{
4364 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004365
Chia-I Wuf7458c52015-10-26 21:10:41 +08004366 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004368 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004369
4370 return result;
4371}
4372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004373bool PostResetDescriptorPool(
4374 VkDevice device,
4375 VkDescriptorPool descriptorPool,
4376 VkResult result)
4377{
4378
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004380 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381 {
4382 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004383 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 -06004384 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004385 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004386
4387 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388}
4389
Chia-I Wu9ab61502015-11-06 06:42:02 +08004390VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004392 VkDescriptorPool descriptorPool,
4393 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004394{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004395 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004396
4397 PostResetDescriptorPool(device, descriptorPool, result);
4398
4399 return result;
4400}
4401
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004402bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004403 VkDevice device,
4404 const VkDescriptorSetLayout* pSetLayouts)
4405{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004406 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004407 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004409
4410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004411}
4412
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004413bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004414 VkDevice device,
4415 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416 uint32_t count,
4417 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418 VkResult result)
4419{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004420
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004422 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004424 }
4425
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004426 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004427 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004428 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004429 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 -06004430 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004432
4433 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004434}
4435
Chia-I Wu9ab61502015-11-06 06:42:02 +08004436VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004437 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004438 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004439 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004440{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004441 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004442
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004443 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444
Jon Ashburnf19916e2016-01-11 13:12:43 -07004445 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446
4447 return result;
4448}
4449
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004450bool PreFreeDescriptorSets(
4451 VkDevice device,
4452 const VkDescriptorSet* pDescriptorSets)
4453{
4454 if(pDescriptorSets != nullptr)
4455 {
4456 }
4457
4458 return true;
4459}
4460
4461bool PostFreeDescriptorSets(
4462 VkDevice device,
4463 VkDescriptorPool descriptorPool,
4464 uint32_t count,
4465 VkResult result)
4466{
4467
4468
4469
4470 if(result < VK_SUCCESS)
4471 {
4472 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004473 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 -06004474 return false;
4475 }
4476
4477 return true;
4478}
4479
Chia-I Wu9ab61502015-11-06 06:42:02 +08004480VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004481 VkDevice device,
4482 VkDescriptorPool descriptorPool,
4483 uint32_t count,
4484 const VkDescriptorSet* pDescriptorSets)
4485{
4486 PreFreeDescriptorSets(device, pDescriptorSets);
4487
4488 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4489
4490 PostFreeDescriptorSets(device, descriptorPool, count, result);
4491
4492 return result;
4493}
4494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004495bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004496 VkDevice device,
4497 const VkWriteDescriptorSet* pDescriptorWrites,
4498 const VkCopyDescriptorSet* pDescriptorCopies)
4499{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004500 if(pDescriptorWrites != nullptr)
4501 {
4502 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004503 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004504 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004505 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004506 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004507 }
4508 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4509 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4510 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004512 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004513 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004514 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004515 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4516 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4517 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004518 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004519 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4520 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4521 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004522 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004523 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004524 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004525 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004527 }
4528 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004529
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004530 if(pDescriptorCopies != nullptr)
4531 {
4532 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_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 pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004536 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004538 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004539
4540 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004541}
4542
Chia-I Wu9ab61502015-11-06 06:42:02 +08004543VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004544 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004545 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004546 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004547 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548 const VkCopyDescriptorSet* pDescriptorCopies)
4549{
4550 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004551
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004552 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004553}
4554
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004555bool PreCreateFramebuffer(
4556 VkDevice device,
4557 const VkFramebufferCreateInfo* pCreateInfo)
4558{
4559 if(pCreateInfo != nullptr)
4560 {
4561 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4562 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004563 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004564 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4565 return false;
4566 }
4567 if(pCreateInfo->pAttachments != nullptr)
4568 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004569 }
4570 }
4571
4572 return true;
4573}
4574
4575bool PostCreateFramebuffer(
4576 VkDevice device,
4577 VkFramebuffer* pFramebuffer,
4578 VkResult result)
4579{
4580
4581 if(pFramebuffer != nullptr)
4582 {
4583 }
4584
4585 if(result < VK_SUCCESS)
4586 {
4587 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004588 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 -06004589 return false;
4590 }
4591
4592 return true;
4593}
4594
Chia-I Wu9ab61502015-11-06 06:42:02 +08004595VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004596 VkDevice device,
4597 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004598 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004599 VkFramebuffer* pFramebuffer)
4600{
4601 PreCreateFramebuffer(device, pCreateInfo);
4602
Chia-I Wuf7458c52015-10-26 21:10:41 +08004603 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004604
4605 PostCreateFramebuffer(device, pFramebuffer, result);
4606
4607 return result;
4608}
4609
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004610bool PreCreateRenderPass(
4611 VkDevice device,
4612 const VkRenderPassCreateInfo* pCreateInfo)
4613{
4614 if(pCreateInfo != nullptr)
4615 {
4616 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4617 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004618 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004619 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4620 return false;
4621 }
4622 if(pCreateInfo->pAttachments != nullptr)
4623 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004624 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4625 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4626 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004627 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004628 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4629 return false;
4630 }
4631 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4632 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4633 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004634 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004635 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4636 return false;
4637 }
4638 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4639 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4640 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004641 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004642 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4643 return false;
4644 }
4645 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4646 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
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, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4650 return false;
4651 }
4652 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4653 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4654 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004655 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004656 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4657 return false;
4658 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004659 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4660 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4661 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004662 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004663 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004664 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4665 return false;
4666 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004667 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4668 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4669 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004670 {
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, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4673 return false;
4674 }
4675 }
4676 if(pCreateInfo->pSubpasses != nullptr)
4677 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004678 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4679 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4680 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004681 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004682 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4683 return false;
4684 }
Cody Northropa505dda2015-08-04 11:16:41 -06004685 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004686 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004687 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4688 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4689 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004690 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004691 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004692 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004693 return false;
4694 }
4695 }
Cody Northropa505dda2015-08-04 11:16:41 -06004696 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004697 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004698 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4699 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4700 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004701 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004702 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004703 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004704 return false;
4705 }
4706 }
Cody Northropa505dda2015-08-04 11:16:41 -06004707 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004708 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004709 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4710 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4711 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004712 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004713 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004714 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004715 return false;
4716 }
4717 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004718 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004719 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4720 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4721 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004722 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004723 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004724 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004725 return false;
4726 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004727 }
4728 if(pCreateInfo->pDependencies != nullptr)
4729 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004730 }
4731 }
4732
4733 return true;
4734}
4735
4736bool PostCreateRenderPass(
4737 VkDevice device,
4738 VkRenderPass* pRenderPass,
4739 VkResult result)
4740{
4741
4742 if(pRenderPass != nullptr)
4743 {
4744 }
4745
4746 if(result < VK_SUCCESS)
4747 {
4748 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004749 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 -06004750 return false;
4751 }
4752
4753 return true;
4754}
4755
Chia-I Wu9ab61502015-11-06 06:42:02 +08004756VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004757 VkDevice device,
4758 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004759 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004760 VkRenderPass* pRenderPass)
4761{
4762 PreCreateRenderPass(device, pCreateInfo);
4763
Chia-I Wuf7458c52015-10-26 21:10:41 +08004764 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004765
4766 PostCreateRenderPass(device, pRenderPass, result);
4767
4768 return result;
4769}
4770
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004771bool PostGetRenderAreaGranularity(
4772 VkDevice device,
4773 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004774 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004775{
4776
4777
4778 if(pGranularity != nullptr)
4779 {
4780 }
4781
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004782 return true;
4783}
4784
Chia-I Wu9ab61502015-11-06 06:42:02 +08004785VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004786 VkDevice device,
4787 VkRenderPass renderPass,
4788 VkExtent2D* pGranularity)
4789{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004790 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004791
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004792 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004793}
4794
4795bool PreCreateCommandPool(
4796 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004797 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004798{
4799 if(pCreateInfo != nullptr)
4800 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004801 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004802 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004803 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004804 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4805 return false;
4806 }
4807 }
4808
4809 return true;
4810}
4811
4812bool PostCreateCommandPool(
4813 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004814 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004815 VkResult result)
4816{
4817
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004818 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004819 {
4820 }
4821
4822 if(result < VK_SUCCESS)
4823 {
4824 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004825 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 -06004826 return false;
4827 }
4828
4829 return true;
4830}
4831
Chia-I Wu9ab61502015-11-06 06:42:02 +08004832VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004833 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004834 const VkCommandPoolCreateInfo* pCreateInfo,
4835 const VkAllocationCallbacks* pAllocator,
4836 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004837{
4838 PreCreateCommandPool(device, pCreateInfo);
4839
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004840 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004841
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004842 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004843
4844 return result;
4845}
4846
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004847bool PostResetCommandPool(
4848 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004849 VkCommandPool commandPool,
4850 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004851 VkResult result)
4852{
4853
4854
4855
4856 if(result < VK_SUCCESS)
4857 {
4858 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004859 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 -06004860 return false;
4861 }
4862
4863 return true;
4864}
4865
Chia-I Wu9ab61502015-11-06 06:42:02 +08004866VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004867 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004868 VkCommandPool commandPool,
4869 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004870{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004871 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004872
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004873 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004874
4875 return result;
4876}
4877
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004878bool PreCreateCommandBuffer(
4879 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004880 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004881{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004882 if(pCreateInfo != nullptr)
4883 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004884 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004885 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004886 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004887 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004888 return false;
4889 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004890 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4891 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004892 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004893 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004894 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004895 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004896 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004897 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004898
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004899 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004900}
4901
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004902bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004903 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004904 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004905 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004906{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004907
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004908 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004909 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004910 }
4911
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004912 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004913 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004914 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004915 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 -06004916 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004917 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004918
4919 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004920}
4921
Chia-I Wu9ab61502015-11-06 06:42:02 +08004922VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004923 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004924 const VkCommandBufferAllocateInfo* pCreateInfo,
4925 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004926{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004927 PreCreateCommandBuffer(device, pCreateInfo);
4928
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004929 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004931 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004932
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004933 return result;
4934}
4935
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004936bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004937 VkCommandBuffer commandBuffer,
4938 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004939{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004940 if(pBeginInfo != nullptr)
4941 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004942 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004943 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004944 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004945 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004946 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004947 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004948 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004949
4950 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004951}
4952
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004953bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004954 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004955 VkResult result)
4956{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004958 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004959 {
4960 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004961 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 -06004962 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004963 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004964
4965 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004966}
4967
Chia-I Wu9ab61502015-11-06 06:42:02 +08004968VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004969 VkCommandBuffer commandBuffer,
4970 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004971{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004972 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004973
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004974 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004975
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004976 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004977
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004978 return result;
4979}
4980
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004981bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004982 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004983 VkResult result)
4984{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004986 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004987 {
4988 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004989 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 -06004990 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004991 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004992
4993 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004994}
4995
Chia-I Wu9ab61502015-11-06 06:42:02 +08004996VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004997 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004998{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005001 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005003 return result;
5004}
5005
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005006bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005007 VkCommandBuffer commandBuffer,
5008 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005009 VkResult result)
5010{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005011
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005012
5013 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005014 {
5015 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005016 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 -06005017 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005018 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005019
5020 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005021}
5022
Chia-I Wu9ab61502015-11-06 06:42:02 +08005023VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005024 VkCommandBuffer commandBuffer,
5025 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005026{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005029 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005030
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005031 return result;
5032}
5033
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005034bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005035 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036 VkPipelineBindPoint pipelineBindPoint,
5037 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005038{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039
5040 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5041 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5042 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005043 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005044 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005045 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005046 }
5047
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005048
5049 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005050}
5051
Chia-I Wu9ab61502015-11-06 06:42:02 +08005052VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005053 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005054 VkPipelineBindPoint pipelineBindPoint,
5055 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005056{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005057 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005058
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005059 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005060}
5061
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005062VK_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 -06005063{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005064 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005065}
5066
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005067VK_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 -06005068{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005069 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005070}
5071
Chia-I Wu9ab61502015-11-06 06:42:02 +08005072VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005073{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005074 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005075}
5076
Chia-I Wu9ab61502015-11-06 06:42:02 +08005077VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005078{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005079 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005080}
5081
Chia-I Wu9ab61502015-11-06 06:42:02 +08005082VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005083{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005085}
5086
Chia-I Wu9ab61502015-11-06 06:42:02 +08005087VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005088{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005089 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005090}
5091
Chia-I Wu9ab61502015-11-06 06:42:02 +08005092VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005093{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005095}
5096
Chia-I Wu9ab61502015-11-06 06:42:02 +08005097VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005098{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005099 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005100}
5101
Chia-I Wu9ab61502015-11-06 06:42:02 +08005102VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005103{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005104 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005105}
5106
5107bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005108 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005109 const VkDescriptorSet* pDescriptorSets,
5110 const uint32_t* pDynamicOffsets)
5111{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005112 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005113 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005114 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005115
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005116 if(pDynamicOffsets != nullptr)
5117 {
5118 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005119
5120 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005121}
5122
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005123bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005124 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005125 VkPipelineBindPoint pipelineBindPoint,
5126 VkPipelineLayout layout,
5127 uint32_t firstSet,
5128 uint32_t setCount,
5129 uint32_t dynamicOffsetCount)
5130{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005131
5132 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5133 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5134 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005135 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005136 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005137 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005138 }
5139
5140
5141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005142
5143
5144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005145}
5146
Chia-I Wu9ab61502015-11-06 06:42:02 +08005147VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005148 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005149 VkPipelineBindPoint pipelineBindPoint,
5150 VkPipelineLayout layout,
5151 uint32_t firstSet,
5152 uint32_t setCount,
5153 const VkDescriptorSet* pDescriptorSets,
5154 uint32_t dynamicOffsetCount,
5155 const uint32_t* pDynamicOffsets)
5156{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005157 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005158
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005159 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005160
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005161 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005162}
5163
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005164bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005165 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005166 VkBuffer buffer,
5167 VkDeviceSize offset,
5168 VkIndexType indexType)
5169{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170
Jeremy Hayes99a96322015-06-26 12:48:09 -06005171
5172
5173 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5174 indexType > VK_INDEX_TYPE_END_RANGE)
5175 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005176 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005177 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005178 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005180
5181 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005182}
5183
Chia-I Wu9ab61502015-11-06 06:42:02 +08005184VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005185 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005186 VkBuffer buffer,
5187 VkDeviceSize offset,
5188 VkIndexType indexType)
5189{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005190 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005191
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005192 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005193}
5194
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005195bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005196 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005197 const VkBuffer* pBuffers,
5198 const VkDeviceSize* pOffsets)
5199{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005200 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005201 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005202 }
5203
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005204 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005205 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005206 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005207
5208 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005209}
5210
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005211bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005212 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005213 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005214 uint32_t bindingCount)
5215{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216
5217
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005218
5219 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005220}
5221
Chia-I Wu9ab61502015-11-06 06:42:02 +08005222VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005223 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005224 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005225 uint32_t bindingCount,
5226 const VkBuffer* pBuffers,
5227 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005228{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005229 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005230
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005231 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005232
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005233 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005234}
5235
Michael Lentine55a913f2015-11-24 09:48:23 -06005236bool PreCmdDraw(
5237 VkCommandBuffer commandBuffer,
5238 uint32_t vertexCount,
5239 uint32_t instanceCount,
5240 uint32_t firstVertex,
5241 uint32_t firstInstance)
5242{
5243 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005244 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5245 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005246 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005247 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5248 return false;
5249 }
5250
5251 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005252 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5253 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005254 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005255 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5256 return false;
5257 }
5258
5259 return true;
5260}
5261
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005262bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005263 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005264 uint32_t firstVertex,
5265 uint32_t vertexCount,
5266 uint32_t firstInstance,
5267 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005268{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005269
5270
5271
5272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005273
5274 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005275}
5276
Chia-I Wu9ab61502015-11-06 06:42:02 +08005277VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005278 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005279 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005280 uint32_t instanceCount,
5281 uint32_t firstVertex,
5282 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005283{
Michael Lentine55a913f2015-11-24 09:48:23 -06005284 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5285
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005286 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005287
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005288 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005289}
5290
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005291bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005292 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005293 uint32_t firstIndex,
5294 uint32_t indexCount,
5295 int32_t vertexOffset,
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
5303
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005304
5305 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005306}
5307
Chia-I Wu9ab61502015-11-06 06:42:02 +08005308VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005309 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005311 uint32_t instanceCount,
5312 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005313 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005314 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005315{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005316 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005318 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005319}
5320
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005321bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005322 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005323 VkBuffer buffer,
5324 VkDeviceSize offset,
5325 uint32_t count,
5326 uint32_t stride)
5327{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005328
5329
5330
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005331
5332
5333 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005334}
5335
Chia-I Wu9ab61502015-11-06 06:42:02 +08005336VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005337 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005338 VkBuffer buffer,
5339 VkDeviceSize offset,
5340 uint32_t count,
5341 uint32_t stride)
5342{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005343 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005344
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005345 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005346}
5347
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005348bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005349 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005350 VkBuffer buffer,
5351 VkDeviceSize offset,
5352 uint32_t count,
5353 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005354{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005355
5356
5357
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005358
5359
5360 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005361}
5362
Chia-I Wu9ab61502015-11-06 06:42:02 +08005363VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005364 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005365 VkBuffer buffer,
5366 VkDeviceSize offset,
5367 uint32_t count,
5368 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005369{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005370 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005371
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005372 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005373}
5374
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005375bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005376 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005377 uint32_t x,
5378 uint32_t y,
5379 uint32_t z)
5380{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005381
5382
5383
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005384
5385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005386}
5387
Chia-I Wu9ab61502015-11-06 06:42:02 +08005388VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005389 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005390 uint32_t x,
5391 uint32_t y,
5392 uint32_t z)
5393{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005394 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005396 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005397}
5398
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005399bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005400 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005401 VkBuffer buffer,
5402 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005403{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005404
Jeremy Hayes99a96322015-06-26 12:48:09 -06005405
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005406
5407 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005408}
5409
Chia-I Wu9ab61502015-11-06 06:42:02 +08005410VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005411 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005412 VkBuffer buffer,
5413 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005414{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005415 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005416
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005417 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005418}
5419
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005420bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005421 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005422 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005423{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005424 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005427
5428 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005429}
5430
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005431bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005432 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005433 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005434 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435 uint32_t regionCount)
5436{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437
Jeremy Hayes99a96322015-06-26 12:48:09 -06005438
Jeremy Hayes99a96322015-06-26 12:48:09 -06005439
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005440
5441 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442}
5443
Chia-I Wu9ab61502015-11-06 06:42:02 +08005444VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005445 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005447 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005448 uint32_t regionCount,
5449 const VkBufferCopy* pRegions)
5450{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005451 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005452
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005453 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005454
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005455 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005456}
5457
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005458bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005459 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005460 const VkImageCopy* pRegions)
5461{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005462 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005464 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005465 (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 -06005466 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005467 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005468 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005469 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005470 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005471 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005472 (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 -06005473 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005474 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005475 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005476 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005477 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005478 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005479
5480 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481}
5482
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005483bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005484 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005485 VkImage srcImage,
5486 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005487 VkImage dstImage,
5488 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005489 uint32_t regionCount)
5490{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005491 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5492 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5493 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005495 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005496 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005497 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005498 }
5499
Jeremy Hayes99a96322015-06-26 12:48:09 -06005500
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005501 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5502 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5503 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005504 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005505 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005506 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005507 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508 }
5509
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005510
5511 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005512}
5513
Chia-I Wu9ab61502015-11-06 06:42:02 +08005514VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005515 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005516 VkImage srcImage,
5517 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005518 VkImage dstImage,
5519 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005520 uint32_t regionCount,
5521 const VkImageCopy* pRegions)
5522{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005523 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005524
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005525 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005526
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005527 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528}
5529
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005530bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005531 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005532 const VkImageBlit* pRegions)
5533{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005534 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005535 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005536 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005537 (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 -06005538 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005539 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005540 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005541 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005542 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005543 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005544 (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 -06005545 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005546 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005547 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005548 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005549 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005550 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005551
5552 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005553}
5554
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005555bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005556 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557 VkImage srcImage,
5558 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005559 VkImage dstImage,
5560 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005561 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005562 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005563{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564
Jeremy Hayes99a96322015-06-26 12:48:09 -06005565
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005566 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5567 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5568 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005569 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005570 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005571 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005572 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573 }
5574
Jeremy Hayes99a96322015-06-26 12:48:09 -06005575
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005576 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5577 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5578 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005579 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005580 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005581 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005582 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005583 }
5584
5585
Chia-I Wub99df442015-10-26 16:49:32 +08005586 if(filter < VK_FILTER_BEGIN_RANGE ||
5587 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005588 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005589 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005590 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005591 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005592 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005593
5594 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005595}
5596
Chia-I Wu9ab61502015-11-06 06:42:02 +08005597VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005598 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005599 VkImage srcImage,
5600 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005601 VkImage dstImage,
5602 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005603 uint32_t regionCount,
5604 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005605 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005607 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005608
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005609 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005610
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005611 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005612}
5613
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005614bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005615 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005616 const VkBufferImageCopy* pRegions)
5617{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005618 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005619 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005620 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005621 (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 -06005622 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005623 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005624 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005625 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005626 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005627 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005628
5629 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005630}
5631
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005632bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005633 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005635 VkImage dstImage,
5636 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005637 uint32_t regionCount)
5638{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640
Jeremy Hayes99a96322015-06-26 12:48:09 -06005641
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005642 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5643 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5644 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005646 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005647 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005648 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005649 }
5650
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005651
5652 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005653}
5654
Chia-I Wu9ab61502015-11-06 06:42:02 +08005655VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005656 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005658 VkImage dstImage,
5659 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005660 uint32_t regionCount,
5661 const VkBufferImageCopy* pRegions)
5662{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005663 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005664
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005665 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005667 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005668}
5669
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005670bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005671 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005672 const VkBufferImageCopy* pRegions)
5673{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005674 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005676 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005677 (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 -06005678 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005679 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005680 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005682 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005683 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005684
5685 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005686}
5687
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005688bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005689 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005690 VkImage srcImage,
5691 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005692 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005693 uint32_t regionCount)
5694{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005695
Jeremy Hayes99a96322015-06-26 12:48:09 -06005696
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005697 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5698 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5699 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005701 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005702 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005703 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005704 }
5705
Jeremy Hayes99a96322015-06-26 12:48:09 -06005706
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005707
5708 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709}
5710
Chia-I Wu9ab61502015-11-06 06:42:02 +08005711VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005712 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713 VkImage srcImage,
5714 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005715 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005716 uint32_t regionCount,
5717 const VkBufferImageCopy* pRegions)
5718{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005719 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005720
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005721 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005722
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005723 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005724}
5725
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005726bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005727 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005728 const uint32_t* pData)
5729{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005730 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005731 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005733
5734 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005735}
5736
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005737bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005738 VkCommandBuffer commandBuffer,
5739 VkBuffer dstBuffer,
5740 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741 VkDeviceSize dataSize)
5742{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005743
5744
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005745
5746
5747 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005748}
5749
Chia-I Wu9ab61502015-11-06 06:42:02 +08005750VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005751 VkCommandBuffer commandBuffer,
5752 VkBuffer dstBuffer,
5753 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754 VkDeviceSize dataSize,
5755 const uint32_t* pData)
5756{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005757 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005758
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005759 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005761 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762}
5763
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005764bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005765 VkCommandBuffer commandBuffer,
5766 VkBuffer dstBuffer,
5767 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005768 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005769 uint32_t data)
5770{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771
5772
5773
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005774
5775
5776 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005777}
5778
Chia-I Wu9ab61502015-11-06 06:42:02 +08005779VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005780 VkCommandBuffer commandBuffer,
5781 VkBuffer dstBuffer,
5782 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005783 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784 uint32_t data)
5785{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005786 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005787
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005788 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005789}
5790
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005792 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005793 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005794 const VkImageSubresourceRange* pRanges)
5795{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005796 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005797 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798 }
5799
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005800 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005801 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005802 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005803 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005804
5805 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005806}
5807
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005808bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005809 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810 VkImage image,
5811 VkImageLayout imageLayout,
5812 uint32_t rangeCount)
5813{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814
Jeremy Hayes99a96322015-06-26 12:48:09 -06005815
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005816 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5817 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5818 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005820 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005821 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005822 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005823 }
5824
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005825
5826 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005827}
5828
Chia-I Wu9ab61502015-11-06 06:42:02 +08005829VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005830 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 VkImage image,
5832 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005833 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834 uint32_t rangeCount,
5835 const VkImageSubresourceRange* pRanges)
5836{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005837 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005838
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005839 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005841 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005842}
5843
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005844bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005845 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005846 const VkImageSubresourceRange* pRanges)
5847{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005848 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005849 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005850 /*
5851 * TODO: How do we validation pRanges->aspectMask?
5852 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5853 * VK_IMAGE_ASPECT_STENCIL_BIT.
5854 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005855 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005856
5857 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005858}
5859
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005860bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005861 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005862 VkImage image,
5863 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005864 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865 uint32_t rangeCount)
5866{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005867
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005869 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5870 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5871 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005872 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005873 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005874 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005875 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005876 }
5877
5878
5879
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005880
5881 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005882}
5883
Chia-I Wu9ab61502015-11-06 06:42:02 +08005884VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005885 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005886 VkImage image,
5887 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005888 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005889 uint32_t rangeCount,
5890 const VkImageSubresourceRange* pRanges)
5891{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005892 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005893
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005894 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005896 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897}
5898
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005899bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005900 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005901 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005902 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005904 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005905 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005906 }
5907
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005908 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005909 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005910 }
5911
5912 return true;
5913}
5914
Chia-I Wu9ab61502015-11-06 06:42:02 +08005915VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005916 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005917 uint32_t attachmentCount,
5918 const VkClearAttachment* pAttachments,
5919 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005920 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005921{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005922 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005923 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005924 }
5925
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005926 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005927}
5928
5929bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005930 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931 const VkImageResolve* pRegions)
5932{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005933 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005934 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005935 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005936 (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 -06005937 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005938 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005939 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005940 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005941 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005942 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005943 (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 -06005944 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005945 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005946 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005947 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005948 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005949 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005950
5951 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005952}
5953
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005954bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005955 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005956 VkImage srcImage,
5957 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005958 VkImage dstImage,
5959 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005960 uint32_t regionCount)
5961{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005962
Jeremy Hayes99a96322015-06-26 12:48:09 -06005963
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005964 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5965 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5966 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
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",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005969 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005970 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971 }
5972
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005974 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5975 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5976 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005977 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005978 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005979 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005980 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005981 }
5982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983
5984 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005985}
5986
Chia-I Wu9ab61502015-11-06 06:42:02 +08005987VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005988 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005989 VkImage srcImage,
5990 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005991 VkImage dstImage,
5992 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993 uint32_t regionCount,
5994 const VkImageResolve* pRegions)
5995{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005996 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005997
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005998 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005999
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006000 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001}
6002
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006003bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006004 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006006 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006008
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006010
6011 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006012}
6013
Chia-I Wu9ab61502015-11-06 06:42:02 +08006014VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006015 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006016 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006017 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006019 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006020
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006021 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022}
6023
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006024bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006025 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006027 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006031
6032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033}
6034
Chia-I Wu9ab61502015-11-06 06:42:02 +08006035VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006036 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006038 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006040 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006042 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006043}
6044
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006045bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006046 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006048 uint32_t memoryBarrierCount,
6049 const VkMemoryBarrier *pMemoryBarriers,
6050 uint32_t bufferMemoryBarrierCount,
6051 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6052 uint32_t imageMemoryBarrierCount,
6053 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006055 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006057 }
6058
Jon Ashburnf19916e2016-01-11 13:12:43 -07006059 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006061 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006062
6063 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064}
6065
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006066bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006067 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006068 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006069 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006070 VkPipelineStageFlags dstStageMask,
6071 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006072{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006074
Jeremy Hayes99a96322015-06-26 12:48:09 -06006075
6076
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006077
6078 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006079}
6080
Chia-I Wu9ab61502015-11-06 06:42:02 +08006081VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006082 VkCommandBuffer commandBuffer,
6083 uint32_t eventCount,
6084 const VkEvent *pEvents,
6085 VkPipelineStageFlags srcStageMask,
6086 VkPipelineStageFlags dstStageMask,
6087 uint32_t memoryBarrierCount,
6088 const VkMemoryBarrier *pMemoryBarriers,
6089 uint32_t bufferMemoryBarrierCount,
6090 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6091 uint32_t imageMemoryBarrierCount,
6092 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006094 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006095
Jon Ashburnf19916e2016-01-11 13:12:43 -07006096 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 -06006097
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006098 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099}
6100
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006101bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006102 VkCommandBuffer commandBuffer,
6103 uint32_t memoryBarrierCount,
6104 const VkMemoryBarrier *pMemoryBarriers,
6105 uint32_t bufferMemoryBarrierCount,
6106 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6107 uint32_t imageMemoryBarrierCount,
6108 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006110 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006111 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006113
6114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006115}
6116
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006117bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006118 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006119 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006120 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006121 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006122 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006123{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006125
Jeremy Hayes99a96322015-06-26 12:48:09 -06006126
6127
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006128
6129 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006130}
6131
Chia-I Wu9ab61502015-11-06 06:42:02 +08006132VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006133 VkCommandBuffer commandBuffer,
6134 VkPipelineStageFlags srcStageMask,
6135 VkPipelineStageFlags dstStageMask,
6136 VkDependencyFlags dependencyFlags,
6137 uint32_t memoryBarrierCount,
6138 const VkMemoryBarrier *pMemoryBarriers,
6139 uint32_t bufferMemoryBarrierCount,
6140 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6141 uint32_t imageMemoryBarrierCount,
6142 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006143{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006144 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006145
Jon Ashburnf19916e2016-01-11 13:12:43 -07006146 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 -06006147
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006148 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149}
6150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006151bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006152 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006153 VkQueryPool queryPool,
6154 uint32_t slot,
6155 VkQueryControlFlags flags)
6156{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006157
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158
6159
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006160
6161 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006162}
6163
Chia-I Wu9ab61502015-11-06 06:42:02 +08006164VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006165 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006166 VkQueryPool queryPool,
6167 uint32_t slot,
6168 VkQueryControlFlags flags)
6169{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006170 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006172 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173}
6174
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006175bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006176 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006177 VkQueryPool queryPool,
6178 uint32_t slot)
6179{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006180
Jeremy Hayes99a96322015-06-26 12:48:09 -06006181
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006182
6183 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006184}
6185
Chia-I Wu9ab61502015-11-06 06:42:02 +08006186VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006187 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006188 VkQueryPool queryPool,
6189 uint32_t slot)
6190{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006191 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006192
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006193 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006194}
6195
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006196bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006197 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006199 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006200 uint32_t queryCount)
6201{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006203
6204
6205
6206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207}
6208
Chia-I Wu9ab61502015-11-06 06:42:02 +08006209VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006210 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006212 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006213 uint32_t queryCount)
6214{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006215 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006217 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218}
6219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006220bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006221 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006222 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006223 VkQueryPool queryPool,
6224 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006225{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006226
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006227 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006228
6229 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230}
6231
Chia-I Wu9ab61502015-11-06 06:42:02 +08006232VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006233 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006234 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006235 VkQueryPool queryPool,
6236 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006237{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006238 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006239
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006240 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241}
6242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006243bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006244 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006246 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006247 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006248 VkBuffer dstBuffer,
6249 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006250 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251 VkQueryResultFlags flags)
6252{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006253
6254
6255
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006256
Jeremy Hayes99a96322015-06-26 12:48:09 -06006257
6258
6259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006260
6261 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006262}
6263
Chia-I Wu9ab61502015-11-06 06:42:02 +08006264VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006265 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006266 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006267 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006269 VkBuffer dstBuffer,
6270 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006271 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006272 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006273{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006274 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006276 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006277}
6278
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006279bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006280 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006281 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006282{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006283 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006284 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006285 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006286
6287 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006288}
6289
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006290bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006291 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006292 VkPipelineLayout layout,
6293 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006294 uint32_t offset,
6295 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006297
Jeremy Hayes99a96322015-06-26 12:48:09 -06006298
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006299
6300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006301
6302 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006303}
6304
Chia-I Wu9ab61502015-11-06 06:42:02 +08006305VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006306 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006307 VkPipelineLayout layout,
6308 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006309 uint32_t offset,
6310 uint32_t size,
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 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006314
Chia-I Wuce9b1772015-11-12 06:09:22 +08006315 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006316
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006317 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006318}
6319
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006320bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006321 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006322 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006323{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006324 if(pRenderPassBegin != nullptr)
6325 {
6326 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006328 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006329 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006330 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006331 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006332 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006333 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006334 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006335 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006336
6337 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006338}
6339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006340bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006341 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006342 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006343{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006344
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006345 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6346 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006347 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006348 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006349 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006350 return false;
6351 }
6352
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006353 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006354}
6355
Chia-I Wu9ab61502015-11-06 06:42:02 +08006356VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006357 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006358 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006359 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006360{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006361 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006362
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006363 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006364
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006365 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006366}
6367
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006368bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006369 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006370 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006371{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006372
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006373 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6374 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006375 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006376 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006377 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006378 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006379 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006380
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006381 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006382}
6383
Chia-I Wu9ab61502015-11-06 06:42:02 +08006384VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006385 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006386 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006387{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006388 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006389
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006390 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006391}
6392
6393bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006394 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006395{
6396
6397 return true;
6398}
6399
Chia-I Wu9ab61502015-11-06 06:42:02 +08006400VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006401 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006402{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006403 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006404
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006405 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006406}
6407
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006408bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006409 VkCommandBuffer commandBuffer,
6410 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006411{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006412 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006413 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006414 }
6415
6416 return true;
6417}
6418
6419bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006420 VkCommandBuffer commandBuffer,
6421 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006422{
6423
6424
6425 return true;
6426}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006427
Chia-I Wu9ab61502015-11-06 06:42:02 +08006428VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006429 VkCommandBuffer commandBuffer,
6430 uint32_t commandBuffersCount,
6431 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006432{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006433 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006434
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006435 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006436
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006437 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006438}
6439
Chia-I Wu9ab61502015-11-06 06:42:02 +08006440VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006441{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006442 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006443 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006444 }
6445
Jon Ashburn8fd08252015-05-28 16:25:02 -06006446 /* loader uses this to force layer initialization; device object is wrapped */
6447 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006449 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006450 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006451
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006452 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006455 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006456 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006458 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006462 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006463 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006464 if (!strcmp(funcName, "vkAllocateMemory"))
6465 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006466 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006467 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006469 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006470 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006471 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006472 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006473 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006474 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006475 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006477 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006478 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006479 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006481 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006482 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006483 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006484 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006485 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006486 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006487 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006488 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006489 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006490 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006491 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006493 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006495 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006497 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006499 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006502 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006503 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006504 if (!strcmp(funcName, "vkCreateShaderModule"))
6505 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006506 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006508 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006518 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006519 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006520 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6521 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006522 if (!strcmp(funcName, "vkCmdSetViewport"))
6523 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006524 if (!strcmp(funcName, "vkCmdSetScissor"))
6525 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006526 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6527 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6528 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6529 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6530 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6531 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6532 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6533 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6534 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6535 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6536 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6537 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6538 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6539 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006540 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6541 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006571 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006573 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006577 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006581 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006600 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006602 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006603 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006604 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006605 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006607 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006608 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006609 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006610 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006611 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006612
Jon Ashburneab34492015-06-01 09:37:38 -06006613 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006615 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006617 }
6618}
6619
Chia-I Wu9ab61502015-11-06 06:42:02 +08006620VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006621{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006622 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006623 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006624 }
6625
Jon Ashburn8fd08252015-05-28 16:25:02 -06006626 /* loader uses this to force layer initialization; instance object is wrapped */
6627 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006628 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006629 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006630 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006631
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006633 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006634 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006635 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006636 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006637 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006638 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006639 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006641 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006642 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006643 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006644 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6645 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6646 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6647 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6648 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6649 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6650 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6651 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006652
Jeremy Hayes99a96322015-06-26 12:48:09 -06006653 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006654 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006655 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006656 return fptr;
6657
Jeremy Hayes99a96322015-06-26 12:48:09 -06006658 {
6659 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6660 return NULL;
6661 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6662 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006663}