blob: 0514bf18ad5f93683f9af3288967aca1639c9918 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002 *
Courtney Goeltzenleuchter8a17da52015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Michael Lentine6715e522015-09-15 14:59:14 -05004 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesc6cfa572015-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 Goeltzenleuchter96cd7952015-10-30 11:14:30 -060023 *
24 * Author: Jeremy Hayes <jeremy@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesc6cfa572015-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 Lobodzinski3723c512015-05-26 10:58:40 -050035#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060036#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060037
Tobin Ehlis7a51d902015-07-03 10:34:49 -060038#include "vk_loader_platform.h"
David Pinedo329ca9e2015-11-06 12:54:48 -070039#include "vulkan/vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060040#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060041#include "vk_enum_validate_helper.h"
42#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060043
Tobin Ehlis56d204a2015-07-03 10:15:26 -060044#include "vk_layer_table.h"
45#include "vk_layer_data.h"
46#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060047#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060048
Cody Northrop73bb6572015-09-28 15:09:32 -060049struct layer_data {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060050 debug_report_data *report_data;
Courtney Goeltzenleuchterdc9592a2015-11-25 14:07:05 -070051 std::vector<VkDebugReportCallbackLUNARG> logging_callback;
Cody Northrop73bb6572015-09-28 15:09:32 -060052
53 layer_data() :
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060054 report_data(nullptr)
Cody Northrop73bb6572015-09-28 15:09:32 -060055 {};
56};
Mark Lobodzinski3723c512015-05-26 10:58:40 -050057
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -060061
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060062// "my instance data"
63debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060064{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060065 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060066 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-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 Goeltzenleuchtereb456c62015-07-17 10:20:11 -060070 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060071
72 return data->report_data;
73}
74
75// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060076debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-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 Goeltzenleuchtereb456c62015-07-17 10:20:11 -060083 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060084 return data->report_data;
85}
86
Courtney Goeltzenleuchterb03a0bf2015-11-25 14:31:49 -070087static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060088{
Courtney Goeltzenleuchterdc9592a2015-11-25 14:07:05 -070089 VkDebugReportCallbackLUNARG callback;
Jeremy Hayesea53d6f2015-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 Ehlisb4b6e7c2015-09-15 09:55:54 -060098 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -070099 VkDebugReportCallbackCreateInfoLUNARG dbgCreateInfo;
100 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
101 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_LUNARG;
102 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 Goeltzenleuchterb57dd742015-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 Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700111 VkDebugReportCallbackCreateInfoLUNARG dbgCreateInfo;
112 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
113 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_LUNARG;
114 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 Goeltzenleuchterb57dd742015-10-05 15:59:45 -0600119 data->logging_callback.push_back(callback);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600120 }
121}
122
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700123VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackLUNARG(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600124 VkInstance instance,
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700125 VkDebugReportCallbackCreateInfoLUNARG *pCreateInfo,
126 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchterdc9592a2015-11-25 14:07:05 -0700127 VkDebugReportCallbackLUNARG* pMsgCallback)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700130 VkResult result = pTable->CreateDebugReportCallbackLUNARG(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayesea53d6f2015-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 Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700135 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600136 }
137
138 return result;
139}
140
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700141VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackLUNARG(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600142 VkInstance instance,
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700143 VkDebugReportCallbackLUNARG msgCallback,
144 const VkAllocationCallbacks *pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600145{
146 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700147 pTable->DestroyDebugReportCallbackLUNARG(instance, msgCallback, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600148
149 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -0700150 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600151}
152
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600153static const VkLayerProperties pc_global_layers[] = {
154 {
155 "ParamChecker",
156 VK_API_VERSION,
157 VK_MAKE_VERSION(0, 1, 0),
158 "Validation layer: ParamChecker",
159 }
160};
Tony Barbour426b9052015-06-24 16:06:58 -0600161
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800162VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600163 const char *pLayerName,
164 uint32_t *pCount,
165 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600166{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600167 /* ParamChecker does not have any global extensions */
168 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600169}
170
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800171VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600172 uint32_t *pCount,
173 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600174{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600175 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
176 pc_global_layers,
177 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600178}
179
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800180VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600181 VkPhysicalDevice physicalDevice,
182 const char* pLayerName,
183 uint32_t* pCount,
184 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600185{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600186 /* ParamChecker does not have any physical device extensions */
Jon Ashburnaff81ff2015-11-02 17:37:20 -0700187 if (pLayerName == NULL) {
188 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
189 physicalDevice,
190 NULL,
191 pCount,
192 pProperties);
193 } else {
194 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
195 }
Jeremy Hayescf469132015-04-17 10:36:53 -0600196}
197
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800198VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600199 VkPhysicalDevice physicalDevice,
200 uint32_t* pCount,
201 VkLayerProperties* pProperties)
202{
203 /* ParamChecker's physical device layers are the same as global */
204 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
205 pCount, pProperties);
206}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600207
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600208// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600209
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600210static
211std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600212{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600213 switch(enumerator)
214 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600215 case VK_RESULT_MAX_ENUM:
216 {
217 return "VK_RESULT_MAX_ENUM";
218 break;
219 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600220 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600221 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600222 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600223 break;
224 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600225 case VK_ERROR_INCOMPATIBLE_DRIVER:
226 {
227 return "VK_ERROR_INCOMPATIBLE_DRIVER";
228 break;
229 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600230 case VK_ERROR_MEMORY_MAP_FAILED:
231 {
232 return "VK_ERROR_MEMORY_MAP_FAILED";
233 break;
234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600235 case VK_INCOMPLETE:
236 {
237 return "VK_INCOMPLETE";
238 break;
239 }
240 case VK_ERROR_OUT_OF_HOST_MEMORY:
241 {
242 return "VK_ERROR_OUT_OF_HOST_MEMORY";
243 break;
244 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600245 case VK_ERROR_INITIALIZATION_FAILED:
246 {
247 return "VK_ERROR_INITIALIZATION_FAILED";
248 break;
249 }
250 case VK_NOT_READY:
251 {
252 return "VK_NOT_READY";
253 break;
254 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600255 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
256 {
257 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
258 break;
259 }
260 case VK_EVENT_SET:
261 {
262 return "VK_EVENT_SET";
263 break;
264 }
265 case VK_TIMEOUT:
266 {
267 return "VK_TIMEOUT";
268 break;
269 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600270 case VK_EVENT_RESET:
271 {
272 return "VK_EVENT_RESET";
273 break;
274 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600275 case VK_SUCCESS:
276 {
277 return "VK_SUCCESS";
278 break;
279 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600280 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600281 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600282 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600283 break;
284 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600285 case VK_ERROR_DEVICE_LOST:
286 {
287 return "VK_ERROR_DEVICE_LOST";
288 break;
289 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600290 default:
291 {
292 return "unrecognized enumerator";
293 break;
294 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600295 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600296}
297
298static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600299bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
300{
Courtney Goeltzenleuchter75295792015-09-10 16:25:49 -0600301 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600302 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
303 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
304 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
305 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
306 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
307 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
308 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
309 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
310 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600311 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800312 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
313 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600314 if(enumerator & (~allFlags))
315 {
316 return false;
317 }
318
319 return true;
320}
321
322static
323std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
324{
325 if(!ValidateEnumerator(enumerator))
326 {
327 return "unrecognized enumerator";
328 }
329
330 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600331 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
332 {
333 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
334 }
335 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
336 {
337 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
338 }
339 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
340 {
341 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
342 }
343 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
344 {
345 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
346 }
347 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
348 {
349 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
350 }
351 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
352 {
353 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
354 }
355 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
356 {
357 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
358 }
359 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
360 {
361 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
362 }
363 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
364 {
365 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
366 }
367 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
368 {
369 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
370 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800371 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600372 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800373 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600374 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800375 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600376 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800377 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600378 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600379
380 std::string enumeratorString;
381 for(auto const& string : strings)
382 {
383 enumeratorString += string;
384
385 if(string != strings.back())
386 {
387 enumeratorString += '|';
388 }
389 }
390
391 return enumeratorString;
392}
393
394static
395bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
396{
397 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600398 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600399 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
400 VK_IMAGE_USAGE_STORAGE_BIT |
401 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800402 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600403 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800404 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600405 if(enumerator & (~allFlags))
406 {
407 return false;
408 }
409
410 return true;
411}
412
413static
414std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
415{
416 if(!ValidateEnumerator(enumerator))
417 {
418 return "unrecognized enumerator";
419 }
420
421 std::vector<std::string> strings;
422 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
423 {
424 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
425 }
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600426 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600427 {
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600428 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600429 }
430 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
431 {
432 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
433 }
434 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
435 {
436 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
437 }
438 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
439 {
440 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
441 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800442 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600443 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800444 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600445 }
446 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
447 {
448 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
449 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800450 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600451 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800452 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600453 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600454
455 std::string enumeratorString;
456 for(auto const& string : strings)
457 {
458 enumeratorString += string;
459
460 if(string != strings.back())
461 {
462 enumeratorString += '|';
463 }
464 }
465
466 return enumeratorString;
467}
468
469static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600470bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
471{
Chia-I Wub21a51a2015-10-26 20:33:12 +0800472 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wuc51b1212015-10-27 19:25:11 +0800473 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600474 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu7e470702015-10-26 17:24:52 +0800475 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600476 VK_QUEUE_GRAPHICS_BIT);
477 if(enumerator & (~allFlags))
478 {
479 return false;
480 }
481
482 return true;
483}
484
485static
486std::string EnumeratorString(VkQueueFlagBits const& enumerator)
487{
488 if(!ValidateEnumerator(enumerator))
489 {
490 return "unrecognized enumerator";
491 }
492
493 std::vector<std::string> strings;
Chia-I Wuc51b1212015-10-27 19:25:11 +0800494 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600495 {
Chia-I Wuc51b1212015-10-27 19:25:11 +0800496 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600497 }
498 if(enumerator & VK_QUEUE_COMPUTE_BIT)
499 {
500 strings.push_back("VK_QUEUE_COMPUTE_BIT");
501 }
Chia-I Wu7e470702015-10-26 17:24:52 +0800502 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600503 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800504 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600505 }
506 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
507 {
508 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
509 }
510
511 std::string enumeratorString;
512 for(auto const& string : strings)
513 {
514 enumeratorString += string;
515
516 if(string != strings.back())
517 {
518 enumeratorString += '|';
519 }
520 }
521
522 return enumeratorString;
523}
524
525static
526bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
527{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600528 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800529 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600530 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800531 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
532 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600533 if(enumerator & (~allFlags))
534 {
535 return false;
536 }
537
538 return true;
539}
540
541static
542std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
543{
544 if(!ValidateEnumerator(enumerator))
545 {
546 return "unrecognized enumerator";
547 }
548
549 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600550 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
551 {
552 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
553 }
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800554 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600555 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800556 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600557 }
558 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
559 {
560 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
561 }
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800562 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600563 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800564 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600565 }
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800566 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600567 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800568 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600569 }
570
571 std::string enumeratorString;
572 for(auto const& string : strings)
573 {
574 enumeratorString += string;
575
576 if(string != strings.back())
577 {
578 enumeratorString += '|';
579 }
580 }
581
582 return enumeratorString;
583}
584
585static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600586bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600587{
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800588 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600589 if(enumerator & (~allFlags))
590 {
591 return false;
592 }
593
594 return true;
595}
596
597static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600598std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600599{
600 if(!ValidateEnumerator(enumerator))
601 {
602 return "unrecognized enumerator";
603 }
604
605 std::vector<std::string> strings;
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800606 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600607 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800608 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600609 }
610
611 std::string enumeratorString;
612 for(auto const& string : strings)
613 {
614 enumeratorString += string;
615
616 if(string != strings.back())
617 {
618 enumeratorString += '|';
619 }
620 }
621
622 return enumeratorString;
623}
624
625static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600626bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
627{
Chia-I Wu7e470702015-10-26 17:24:52 +0800628 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
629 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
630 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600631 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600632 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600634 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600635
636 return true;
637}
638
639static
640std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
641{
642 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600643 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600644 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600645 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600646
647 std::vector<std::string> strings;
Chia-I Wu7e470702015-10-26 17:24:52 +0800648 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600649 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800650 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600651 }
Chia-I Wu7e470702015-10-26 17:24:52 +0800652 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600653 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800654 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600655 }
Chia-I Wu7e470702015-10-26 17:24:52 +0800656 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600657 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800658 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600659 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600660
661 std::string enumeratorString;
662 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600663 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600664 enumeratorString += string;
665
666 if(string != strings.back())
667 {
668 enumeratorString += '|';
669 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600670 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600671
672 return enumeratorString;
673}
674
675static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600676bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
677{
678 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
679 if(enumerator & (~allFlags))
680 {
681 return false;
682 }
683
684 return true;
685}
686
687static
688std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
689{
690 if(!ValidateEnumerator(enumerator))
691 {
692 return "unrecognized enumerator";
693 }
694
695 std::vector<std::string> strings;
696 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
697 {
698 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
699 }
700
701 std::string enumeratorString;
702 for(auto const& string : strings)
703 {
704 enumeratorString += string;
705
706 if(string != strings.back())
707 {
708 enumeratorString += '|';
709 }
710 }
711
712 return enumeratorString;
713}
714
715static
716bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
717{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600718 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
719 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
720 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
721 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
722 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
723 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
724 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
725 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
726 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
727 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
728 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600729 if(enumerator & (~allFlags))
730 {
731 return false;
732 }
733
734 return true;
735}
736
737static
738std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
739{
740 if(!ValidateEnumerator(enumerator))
741 {
742 return "unrecognized enumerator";
743 }
744
745 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600746 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600747 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600748 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600749 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600750 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600751 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600752 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600753 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600754 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600755 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600756 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600757 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600758 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600759 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600760 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600761 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600762 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600763 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600764 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600765 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600766 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600767 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600768 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600770 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600771 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600772 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600773 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600774 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600776 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600777 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600778 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600780 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600781 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600783 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600787 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600789 }
790
791 std::string enumeratorString;
792 for(auto const& string : strings)
793 {
794 enumeratorString += string;
795
796 if(string != strings.back())
797 {
798 enumeratorString += '|';
799 }
800 }
801
802 return enumeratorString;
803}
804
805static
806bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
807{
808 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
809 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
810 VK_QUERY_RESULT_WAIT_BIT |
811 VK_QUERY_RESULT_64_BIT |
812 VK_QUERY_RESULT_DEFAULT);
813 if(enumerator & (~allFlags))
814 {
815 return false;
816 }
817
818 return true;
819}
820
821static
822std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
823{
824 if(!ValidateEnumerator(enumerator))
825 {
826 return "unrecognized enumerator";
827 }
828
829 std::vector<std::string> strings;
830 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
831 {
832 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
833 }
834 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
835 {
836 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
837 }
838 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
839 {
840 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
841 }
842 if(enumerator & VK_QUERY_RESULT_64_BIT)
843 {
844 strings.push_back("VK_QUERY_RESULT_64_BIT");
845 }
846 if(enumerator & VK_QUERY_RESULT_DEFAULT)
847 {
848 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600849 }
850
851 std::string enumeratorString;
852 for(auto const& string : strings)
853 {
854 enumeratorString += string;
855
856 if(string != strings.back())
857 {
858 enumeratorString += '|';
859 }
860 }
861
862 return enumeratorString;
863}
864
865static
866bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
867{
868 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
869 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
870 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
871 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
872 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800873 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600874 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800875 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600876 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600877 if(enumerator & (~allFlags))
878 {
879 return false;
880 }
881
882 return true;
883}
884
885static
886std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
887{
888 if(!ValidateEnumerator(enumerator))
889 {
890 return "unrecognized enumerator";
891 }
892
893 std::vector<std::string> strings;
894 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
895 {
896 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
897 }
898 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
899 {
900 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
901 }
902 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
903 {
904 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
905 }
906 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
907 {
908 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
909 }
910 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
911 {
912 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
913 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800914 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600915 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800916 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600917 }
918 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
919 {
920 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
921 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800922 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600923 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800924 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600925 }
926 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
927 {
928 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
929 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600930
931 std::string enumeratorString;
932 for(auto const& string : strings)
933 {
934 enumeratorString += string;
935
936 if(string != strings.back())
937 {
938 enumeratorString += '|';
939 }
940 }
941
942 return enumeratorString;
943}
944
945static
946bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
947{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600948 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
949 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600950 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600951 if(enumerator & (~allFlags))
952 {
953 return false;
954 }
955
956 return true;
957}
958
959static
960std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
961{
962 if(!ValidateEnumerator(enumerator))
963 {
964 return "unrecognized enumerator";
965 }
966
967 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600968 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
969 {
970 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
971 }
972 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
973 {
974 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
975 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600976 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600977 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600978 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600979 }
980
981 std::string enumeratorString;
982 for(auto const& string : strings)
983 {
984 enumeratorString += string;
985
986 if(string != strings.back())
987 {
988 enumeratorString += '|';
989 }
990 }
991
992 return enumeratorString;
993}
994
995static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600996bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
997{
998 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600999 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1000 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001001 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001002 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001003 if(enumerator & (~allFlags))
1004 {
1005 return false;
1006 }
1007
1008 return true;
1009}
1010
1011static
1012std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1013{
1014 if(!ValidateEnumerator(enumerator))
1015 {
1016 return "unrecognized enumerator";
1017 }
1018
1019 std::vector<std::string> strings;
1020 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1021 {
1022 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1023 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001024 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1025 {
1026 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1027 }
1028 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1029 {
1030 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1031 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001032 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1033 {
1034 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1035 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001036 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001037 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001038 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001039 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001040
1041 std::string enumeratorString;
1042 for(auto const& string : strings)
1043 {
1044 enumeratorString += string;
1045
1046 if(string != strings.back())
1047 {
1048 enumeratorString += '|';
1049 }
1050 }
1051
1052 return enumeratorString;
1053}
1054
1055static
Chia-I Wuc51b1212015-10-27 19:25:11 +08001056bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001057{
Chia-I Wuc51b1212015-10-27 19:25:11 +08001058 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1059 VK_COLOR_COMPONENT_B_BIT |
1060 VK_COLOR_COMPONENT_G_BIT |
1061 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001062 if(enumerator & (~allFlags))
1063 {
1064 return false;
1065 }
1066
1067 return true;
1068}
1069
1070static
Chia-I Wuc51b1212015-10-27 19:25:11 +08001071std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001072{
1073 if(!ValidateEnumerator(enumerator))
1074 {
1075 return "unrecognized enumerator";
1076 }
1077
1078 std::vector<std::string> strings;
Chia-I Wuc51b1212015-10-27 19:25:11 +08001079 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001080 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001081 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001082 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08001083 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001084 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001085 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001086 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08001087 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001088 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001089 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001090 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08001091 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001092 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001093 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001094 }
1095
1096 std::string enumeratorString;
1097 for(auto const& string : strings)
1098 {
1099 enumeratorString += string;
1100
1101 if(string != strings.back())
1102 {
1103 enumeratorString += '|';
1104 }
1105 }
1106
1107 return enumeratorString;
1108}
1109
1110static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001111bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001112{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001113 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1114 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1115 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001116 if(enumerator & (~allFlags))
1117 {
1118 return false;
1119 }
1120
1121 return true;
1122}
1123
1124static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001125std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001126{
1127 if(!ValidateEnumerator(enumerator))
1128 {
1129 return "unrecognized enumerator";
1130 }
1131
1132 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001133 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001134 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001135 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1136 }
1137 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1138 {
1139 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1140 }
1141 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1142 {
1143 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001144 }
1145
1146 std::string enumeratorString;
1147 for(auto const& string : strings)
1148 {
1149 enumeratorString += string;
1150
1151 if(string != strings.back())
1152 {
1153 enumeratorString += '|';
1154 }
1155 }
1156
1157 return enumeratorString;
1158}
1159
1160static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001161bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001162{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001163 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1164 VK_SHADER_STAGE_FRAGMENT_BIT |
1165 VK_SHADER_STAGE_GEOMETRY_BIT |
1166 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001167 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1168 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001169 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001170 if(enumerator & (~allFlags))
1171 {
1172 return false;
1173 }
1174
1175 return true;
1176}
1177
1178static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001179std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001180{
1181 if(!ValidateEnumerator(enumerator))
1182 {
1183 return "unrecognized enumerator";
1184 }
1185
1186 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001187 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001188 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001189 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001190 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001191 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001192 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001193 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001194 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001195 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001196 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001197 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1198 }
1199 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1200 {
1201 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1202 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001203 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001204 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001205 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001206 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001207 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001208 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001209 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001210 }
1211 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1212 {
1213 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001214 }
1215
1216 std::string enumeratorString;
1217 for(auto const& string : strings)
1218 {
1219 enumeratorString += string;
1220
1221 if(string != strings.back())
1222 {
1223 enumeratorString += '|';
1224 }
1225 }
1226
1227 return enumeratorString;
1228}
1229
1230static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001231bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001232{
Chia-I Wucba6cea2015-10-31 00:31:16 +08001233 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
1234 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT|
1235 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT|
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001236 VK_PIPELINE_STAGE_HOST_BIT |
1237 VK_PIPELINE_STAGE_TRANSFER_BIT |
1238 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Chia-I Wucba6cea2015-10-31 00:31:16 +08001239 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001240 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001241 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001242 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001243 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1244 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1245 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001246 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001247 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1248 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1249 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1250 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001251 if(enumerator & (~allFlags))
1252 {
1253 return false;
1254 }
1255
1256 return true;
1257}
1258
1259static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001260std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001261{
1262 if(!ValidateEnumerator(enumerator))
1263 {
1264 return "unrecognized enumerator";
1265 }
1266
1267 std::vector<std::string> strings;
Chia-I Wucba6cea2015-10-31 00:31:16 +08001268 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001269 {
Chia-I Wucba6cea2015-10-31 00:31:16 +08001270 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1271 }
1272 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1273 {
1274 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001275 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001276 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001277 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001278 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001279 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001280 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001281 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001282 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001283 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001284 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001285 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001286 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001287 }
Chia-I Wucba6cea2015-10-31 00:31:16 +08001288 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001289 {
Chia-I Wucba6cea2015-10-31 00:31:16 +08001290 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001291 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001292 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001293 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001294 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001295 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001296 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001297 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001298 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001299 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001300 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001301 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001302 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001303 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001304 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001305 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001306 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001307 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001308 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001309 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001310 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1311 }
1312 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1313 {
1314 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1315 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001316 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001317 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001318 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001319 }
1320 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1321 {
1322 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1323 }
1324 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1325 {
1326 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1327 }
1328 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1329 {
1330 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1331 }
1332 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1333 {
1334 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001335 }
1336
1337 std::string enumeratorString;
1338 for(auto const& string : strings)
1339 {
1340 enumeratorString += string;
1341
1342 if(string != strings.back())
1343 {
1344 enumeratorString += '|';
1345 }
1346 }
1347
1348 return enumeratorString;
1349}
1350
1351static
Chia-I Wu989de842015-10-27 19:54:37 +08001352bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001353{
Chia-I Wu989de842015-10-27 19:54:37 +08001354 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1355 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1356 VK_ACCESS_INDEX_READ_BIT |
1357 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1358 VK_ACCESS_UNIFORM_READ_BIT |
1359 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1360 VK_ACCESS_SHADER_READ_BIT |
1361 VK_ACCESS_SHADER_WRITE_BIT |
1362 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1363 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1364 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1365 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1366 VK_ACCESS_TRANSFER_READ_BIT |
1367 VK_ACCESS_TRANSFER_WRITE_BIT |
1368 VK_ACCESS_HOST_READ_BIT |
1369 VK_ACCESS_HOST_WRITE_BIT |
1370 VK_ACCESS_MEMORY_READ_BIT |
1371 VK_ACCESS_MEMORY_WRITE_BIT);
1372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001373 if(enumerator & (~allFlags))
1374 {
1375 return false;
1376 }
1377
1378 return true;
1379}
1380
1381static
Chia-I Wu989de842015-10-27 19:54:37 +08001382std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001383{
1384 if(!ValidateEnumerator(enumerator))
1385 {
1386 return "unrecognized enumerator";
1387 }
1388
1389 std::vector<std::string> strings;
Chia-I Wu989de842015-10-27 19:54:37 +08001390 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001391 {
Chia-I Wu989de842015-10-27 19:54:37 +08001392 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001393 }
Chia-I Wu989de842015-10-27 19:54:37 +08001394 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001395 {
Chia-I Wu989de842015-10-27 19:54:37 +08001396 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001397 }
Chia-I Wu989de842015-10-27 19:54:37 +08001398 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001399 {
Chia-I Wu989de842015-10-27 19:54:37 +08001400 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001401 }
Chia-I Wu989de842015-10-27 19:54:37 +08001402 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001403 {
Chia-I Wu989de842015-10-27 19:54:37 +08001404 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001405 }
Chia-I Wu989de842015-10-27 19:54:37 +08001406 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001407 {
Chia-I Wu989de842015-10-27 19:54:37 +08001408 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001409 }
Chia-I Wu989de842015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001411 {
Chia-I Wu989de842015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001413 }
Chia-I Wu989de842015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001415 {
Chia-I Wu989de842015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001417 }
Chia-I Wu989de842015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001419 {
Chia-I Wu989de842015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001421 }
Chia-I Wu989de842015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001423 {
Chia-I Wu989de842015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425 }
Chia-I Wu989de842015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001427 {
Chia-I Wu989de842015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429 }
Chia-I Wu989de842015-10-27 19:54:37 +08001430 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001431 {
Chia-I Wu989de842015-10-27 19:54:37 +08001432 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 }
Chia-I Wu989de842015-10-27 19:54:37 +08001434 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 {
Chia-I Wu989de842015-10-27 19:54:37 +08001436 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 }
Chia-I Wu989de842015-10-27 19:54:37 +08001438 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 {
Chia-I Wu989de842015-10-27 19:54:37 +08001440 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 }
Chia-I Wu989de842015-10-27 19:54:37 +08001442 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 {
Chia-I Wu989de842015-10-27 19:54:37 +08001444 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445 }
Chia-I Wu989de842015-10-27 19:54:37 +08001446 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 {
Chia-I Wu989de842015-10-27 19:54:37 +08001448 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001449 }
Chia-I Wu989de842015-10-27 19:54:37 +08001450 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001451 {
Chia-I Wu989de842015-10-27 19:54:37 +08001452 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001453 }
Chia-I Wu989de842015-10-27 19:54:37 +08001454 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001455 {
Chia-I Wu989de842015-10-27 19:54:37 +08001456 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001457 }
1458
1459 std::string enumeratorString;
1460 for(auto const& string : strings)
1461 {
1462 enumeratorString += string;
1463
1464 if(string != strings.back())
1465 {
1466 enumeratorString += '|';
1467 }
1468 }
1469
1470 return enumeratorString;
1471}
1472
1473static
Chia-I Wu1f851912015-10-27 18:04:07 +08001474bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001475{
Chia-I Wu1f851912015-10-27 18:04:07 +08001476 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1477 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001478 if(enumerator & (~allFlags))
1479 {
1480 return false;
1481 }
1482
1483 return true;
1484}
1485
1486static
Chia-I Wu1f851912015-10-27 18:04:07 +08001487std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001488{
1489 if(!ValidateEnumerator(enumerator))
1490 {
1491 return "unrecognized enumerator";
1492 }
1493
1494 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001495 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001496 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001497 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001498 }
Chia-I Wu1f851912015-10-27 18:04:07 +08001499 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001500 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001501 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001502 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001503
1504 std::string enumeratorString;
1505 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001506 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001507 enumeratorString += string;
1508
1509 if(string != strings.back())
1510 {
1511 enumeratorString += '|';
1512 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001513 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001514
1515 return enumeratorString;
1516}
1517
1518static
Chia-I Wu1f851912015-10-27 18:04:07 +08001519bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001520{
Chia-I Wu1f851912015-10-27 18:04:07 +08001521 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001522 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001523 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001524 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001525 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001526
1527 return true;
1528}
1529
1530static
Chia-I Wu1f851912015-10-27 18:04:07 +08001531std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001532{
1533 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001534 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001535 return "unrecognized enumerator";
1536 }
1537
1538 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001539 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001540 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001541 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001542 }
1543
1544 std::string enumeratorString;
1545 for(auto const& string : strings)
1546 {
1547 enumeratorString += string;
1548
1549 if(string != strings.back())
1550 {
1551 enumeratorString += '|';
1552 }
1553 }
1554
1555 return enumeratorString;
1556}
1557
1558static
Chia-I Wu1f851912015-10-27 18:04:07 +08001559bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001560{
Chia-I Wu1f851912015-10-27 18:04:07 +08001561 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1562 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1563 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001564 if(enumerator & (~allFlags))
1565 {
1566 return false;
1567 }
1568
1569 return true;
1570}
1571
1572static
Chia-I Wu1f851912015-10-27 18:04:07 +08001573std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001574{
1575 if(!ValidateEnumerator(enumerator))
1576 {
1577 return "unrecognized enumerator";
1578 }
1579
1580 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001581 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001582 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001583 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001584 }
Chia-I Wu1f851912015-10-27 18:04:07 +08001585 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001586 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001587 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001588 }
Chia-I Wu1f851912015-10-27 18:04:07 +08001589 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001590 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001591 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001592 }
1593
1594 std::string enumeratorString;
1595 for(auto const& string : strings)
1596 {
1597 enumeratorString += string;
1598
1599 if(string != strings.back())
1600 {
1601 enumeratorString += '|';
1602 }
1603 }
1604
1605 return enumeratorString;
1606}
1607
1608static
Chia-I Wu1f851912015-10-27 18:04:07 +08001609bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001610{
Chia-I Wu1f851912015-10-27 18:04:07 +08001611 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001612 if(enumerator & (~allFlags))
1613 {
1614 return false;
1615 }
1616
1617 return true;
1618}
1619
1620static
Chia-I Wu1f851912015-10-27 18:04:07 +08001621std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001622{
1623 if(!ValidateEnumerator(enumerator))
1624 {
1625 return "unrecognized enumerator";
1626 }
1627
1628 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001629 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001630 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001631 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001632 }
1633
1634 std::string enumeratorString;
1635 for(auto const& string : strings)
1636 {
1637 enumeratorString += string;
1638
1639 if(string != strings.back())
1640 {
1641 enumeratorString += '|';
1642 }
1643 }
1644
1645 return enumeratorString;
1646}
1647
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001648static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001649bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001650{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001651 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1652 VK_IMAGE_ASPECT_STENCIL_BIT |
1653 VK_IMAGE_ASPECT_DEPTH_BIT |
1654 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001655 if(enumerator & (~allFlags))
1656 {
1657 return false;
1658 }
1659
1660 return true;
1661}
1662
1663static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001664std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001665{
1666 if(!ValidateEnumerator(enumerator))
1667 {
1668 return "unrecognized enumerator";
1669 }
1670
1671 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001672 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001673 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001674 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1675 }
1676 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1677 {
1678 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1679 }
1680 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1681 {
1682 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1683 }
1684 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1685 {
1686 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1687 }
1688
1689 std::string enumeratorString;
1690 for(auto const& string : strings)
1691 {
1692 enumeratorString += string;
1693
1694 if(string != strings.back())
1695 {
1696 enumeratorString += '|';
1697 }
1698 }
1699
1700 return enumeratorString;
1701}
1702
1703static
1704bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1705{
Chia-I Wuc51b1212015-10-27 19:25:11 +08001706 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001707 if(enumerator & (~allFlags))
1708 {
1709 return false;
1710 }
1711
1712 return true;
1713}
1714
1715static
1716std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1717{
1718 if(!ValidateEnumerator(enumerator))
1719 {
1720 return "unrecognized enumerator";
1721 }
1722
1723 std::vector<std::string> strings;
Chia-I Wuc51b1212015-10-27 19:25:11 +08001724 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001725 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001726 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001727 }
1728
1729 std::string enumeratorString;
1730 for(auto const& string : strings)
1731 {
1732 enumeratorString += string;
1733
1734 if(string != strings.back())
1735 {
1736 enumeratorString += '|';
1737 }
1738 }
1739
1740 return enumeratorString;
1741}
1742
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001743VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001744 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08001745 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001746 VkInstance* pInstance)
1747{
1748 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wu69f40122015-10-26 21:10:41 +08001749 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001750
1751 if (result == VK_SUCCESS) {
1752 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wu763a7492015-10-26 20:48:51 +08001753 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001754 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001755
Courtney Goeltzenleuchterb03a0bf2015-11-25 14:31:49 -07001756 InitParamChecker(data, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001757 }
1758
1759 return result;
1760}
1761
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001762VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wu69f40122015-10-26 21:10:41 +08001763 VkInstance instance,
Chia-I Wu1f851912015-10-27 18:04:07 +08001764 const VkAllocationCallbacks* pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001765{
1766 // Grab the key before the instance is destroyed.
1767 dispatch_key key = get_dispatch_key(instance);
1768 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wu69f40122015-10-26 21:10:41 +08001769 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001770
1771 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001772 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1773 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchterdc9592a2015-11-25 14:07:05 -07001774 VkDebugReportCallbackLUNARG callback = my_data->logging_callback.back();
Courtney Goeltzenleuchterf6a6e222015-11-30 12:13:14 -07001775 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001776 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001777 }
1778
1779 layer_debug_report_destroy_instance(mid(instance));
1780 layer_data_map.erase(pTable);
1781
1782 pc_instance_table_map.erase(key);
1783 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001784}
1785
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001786bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001787 VkInstance instance,
1788 uint32_t* pPhysicalDeviceCount,
1789 VkPhysicalDevice* pPhysicalDevices,
1790 VkResult result)
1791{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001792
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001793 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001794 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001795 }
1796
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001797 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001798 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001799 }
1800
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001802 {
1803 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001804 log_msg(mid(instance), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001805 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001806 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001807
1808 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001809}
1810
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001811VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001812 VkInstance instance,
1813 uint32_t* pPhysicalDeviceCount,
1814 VkPhysicalDevice* pPhysicalDevices)
1815{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001816 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1817
1818 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1819
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001820 return result;
1821}
1822
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001823bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001824 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001825 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001826{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001827
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001828 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001829 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001830 }
1831
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001832 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001833}
1834
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001835VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001836 VkPhysicalDevice physicalDevice,
1837 VkPhysicalDeviceFeatures* pFeatures)
1838{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001839 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001840
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001841 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001842}
1843
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001844bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001845 VkPhysicalDevice physicalDevice,
1846 VkFormat format,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001847 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001848{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001849
1850 if(format < VK_FORMAT_BEGIN_RANGE ||
1851 format > VK_FORMAT_END_RANGE)
1852 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001853 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001854 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001855 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001856 }
1857
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001858 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001859 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001860 }
1861
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001862 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001863}
1864
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001865VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001866 VkPhysicalDevice physicalDevice,
1867 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001868 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001869{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001870 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001871
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001872 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001873}
1874
1875bool PostGetPhysicalDeviceImageFormatProperties(
1876 VkPhysicalDevice physicalDevice,
1877 VkFormat format,
1878 VkImageType type,
1879 VkImageTiling tiling,
1880 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001881 VkImageCreateFlags flags,
Chia-I Wu5202c542015-10-31 00:31:16 +08001882 VkImageFormatProperties* pImageFormatProperties,
1883 VkResult result)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001884{
1885
1886 if(format < VK_FORMAT_BEGIN_RANGE ||
1887 format > VK_FORMAT_END_RANGE)
1888 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001889 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001890 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1891 return false;
1892 }
1893
1894 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1895 type > VK_IMAGE_TYPE_END_RANGE)
1896 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001897 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001898 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1899 return false;
1900 }
1901
1902 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1903 tiling > VK_IMAGE_TILING_END_RANGE)
1904 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001905 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001906 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1907 return false;
1908 }
1909
1910
1911 if(pImageFormatProperties != nullptr)
1912 {
1913 }
1914
Chia-I Wu5202c542015-10-31 00:31:16 +08001915 if(result < VK_SUCCESS)
1916 {
1917 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001918 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Chia-I Wu5202c542015-10-31 00:31:16 +08001919 return false;
1920 }
1921
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001922 return true;
1923}
1924
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001925VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001926 VkPhysicalDevice physicalDevice,
1927 VkFormat format,
1928 VkImageType type,
1929 VkImageTiling tiling,
1930 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001931 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001932 VkImageFormatProperties* pImageFormatProperties)
1933{
Chia-I Wu5202c542015-10-31 00:31:16 +08001934 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001935
Chia-I Wu5202c542015-10-31 00:31:16 +08001936 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1937
1938 return result;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001939}
1940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001941bool PostGetPhysicalDeviceProperties(
1942 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001943 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001944{
1945
1946 if(pProperties != nullptr)
1947 {
1948 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1949 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1950 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07001951 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001952 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1953 return false;
1954 }
1955 }
1956
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001957 return true;
1958}
1959
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001960VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001961 VkPhysicalDevice physicalDevice,
1962 VkPhysicalDeviceProperties* pProperties)
1963{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001964 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001965
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001966 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001967}
1968
Cody Northropef72e2a2015-08-03 17:04:53 -06001969bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001970 VkPhysicalDevice physicalDevice,
1971 uint32_t* pCount,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001972 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001973{
1974
Cody Northropef72e2a2015-08-03 17:04:53 -06001975 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001976 {
1977 }
1978
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001979 if(pQueueProperties != nullptr)
1980 {
1981 }
1982
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001983 return true;
1984}
1985
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001986VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001987 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06001988 uint32_t* pCount,
1989 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001990{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001991 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001992
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001993 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001994}
1995
1996bool PostGetPhysicalDeviceMemoryProperties(
1997 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001998 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001999{
2000
2001 if(pMemoryProperties != nullptr)
2002 {
2003 }
2004
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002005 return true;
2006}
2007
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002008VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002009 VkPhysicalDevice physicalDevice,
2010 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2011{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002012 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002013
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002014 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002015}
2016
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002017VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002018 VkPhysicalDevice physicalDevice,
2019 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002020 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002021 VkDevice* pDevice)
2022{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002023 /*
2024 * NOTE: The loader fills in the ICD's device object in *pDevice.
2025 * Use that object to get the dispatch table.
2026 *
2027 * NOTE: We do not validate physicalDevice or any dispatchable
2028 * object as the first parameter. We couldn't get here if it was wrong!
2029 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002030 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wu69f40122015-10-26 21:10:41 +08002031 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002032 if(result == VK_SUCCESS)
2033 {
2034 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2035 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2036 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2037 }
2038
2039 return result;
2040}
2041
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002042VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wu69f40122015-10-26 21:10:41 +08002043 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002044 const VkAllocationCallbacks* pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002045{
2046 layer_debug_report_destroy_device(device);
2047
2048 dispatch_key key = get_dispatch_key(device);
2049#if DISPATCH_MAP_DEBUG
2050 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2051#endif
2052
Chia-I Wu69f40122015-10-26 21:10:41 +08002053 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002054 pc_device_table_map.erase(key);
2055 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002056}
2057
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002058bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002059 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002060 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002061 uint32_t queueIndex,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002062 VkQueue* pQueue)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002063{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002064
2065
2066
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002067 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002068 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002069 }
2070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002071 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002072}
2073
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002074VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002075 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002076 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002077 uint32_t queueIndex,
2078 VkQueue* pQueue)
2079{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002080 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002081
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002082 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002083}
2084
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002085bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002086 VkQueue queue,
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002087 const VkSubmitInfo* submit)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002088{
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002089 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002090 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu483e7702015-10-26 17:20:32 +08002091 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002092 return false;
2093 }
2094
2095 if(submit->pCommandBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002096 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002097 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002098
2099 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002100}
2101
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002102bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002103 VkQueue queue,
Chia-I Wu763a7492015-10-26 20:48:51 +08002104 uint32_t commandBufferCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002105 VkFence fence,
2106 VkResult result)
2107{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002108
2109
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002110
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002111 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002112 {
2113 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002114 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002115 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002116 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002117
2118 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002119}
2120
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002121VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002122 VkQueue queue,
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002123 uint32_t submitCount,
Chia-I Wu483e7702015-10-26 17:20:32 +08002124 const VkSubmitInfo* pSubmits,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002125 VkFence fence)
2126{
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002127 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu483e7702015-10-26 17:20:32 +08002128 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002129 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002130
Chia-I Wu483e7702015-10-26 17:20:32 +08002131 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002132
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002133 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002134
2135 return result;
2136}
2137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002138bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139 VkQueue queue,
2140 VkResult result)
2141{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002142
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002143 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002144 {
2145 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002146 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002147 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002148 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002149
2150 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002151}
2152
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002153VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002154 VkQueue queue)
2155{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002156 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2157
2158 PostQueueWaitIdle(queue, result);
2159
2160 return result;
2161}
2162
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002163bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164 VkDevice device,
2165 VkResult result)
2166{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002167
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002168 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002169 {
2170 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002171 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002172 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002173 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002174
2175 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002176}
2177
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002178VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002179 VkDevice device)
2180{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002181 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2182
2183 PostDeviceWaitIdle(device, result);
2184
2185 return result;
2186}
2187
Chia-I Wu1f851912015-10-27 18:04:07 +08002188bool PreAllocateMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002190 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002191{
Chia-I Wu1f851912015-10-27 18:04:07 +08002192 if(pAllocateInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002193 {
Chia-I Wuc1f5e402015-11-10 16:21:09 +08002194 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002195 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002196 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08002197 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002198 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002199 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002200 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002201
2202 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002203}
2204
Chia-I Wu1f851912015-10-27 18:04:07 +08002205bool PostAllocateMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002207 VkDeviceMemory* pMemory,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002208 VkResult result)
2209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002210
Chia-I Wu1f851912015-10-27 18:04:07 +08002211 if(pMemory != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002212 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002213 }
2214
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002215 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002216 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002217 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002218 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002219 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002220 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002221
2222 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002223}
2224
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002225VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002226 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002227 const VkMemoryAllocateInfo* pAllocateInfo,
2228 const VkAllocationCallbacks* pAllocator,
2229 VkDeviceMemory* pMemory)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230{
Chia-I Wu1f851912015-10-27 18:04:07 +08002231 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002232
Chia-I Wu1f851912015-10-27 18:04:07 +08002233 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002234
Chia-I Wu1f851912015-10-27 18:04:07 +08002235 PostAllocateMemory(device, pMemory, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236
2237 return result;
2238}
2239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002240bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241 VkDevice device,
2242 VkDeviceMemory mem,
2243 VkDeviceSize offset,
2244 VkDeviceSize size,
2245 VkMemoryMapFlags flags,
2246 void** ppData,
2247 VkResult result)
2248{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002250
2251
2252
2253
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002254 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002255 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002256 }
2257
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002258 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 {
2260 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002261 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002262 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002263 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002264
2265 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002266}
2267
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002268VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002269 VkDevice device,
2270 VkDeviceMemory mem,
2271 VkDeviceSize offset,
2272 VkDeviceSize size,
2273 VkMemoryMapFlags flags,
2274 void** ppData)
2275{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002276 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2277
2278 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2279
2280 return result;
2281}
2282
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002283bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002284 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002285 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002286{
Chia-I Wu1f851912015-10-27 18:04:07 +08002287 if(pMemoryRanges != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002288 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002289 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002290 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002291 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08002292 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002293 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002294 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002295 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002296
2297 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002298}
2299
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002300bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002301 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002302 uint32_t memoryRangeCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002303 VkResult result)
2304{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002305
2306
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002307 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002308 {
2309 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002310 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002311 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002312 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002313
2314 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002315}
2316
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002317VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002318 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002319 uint32_t memoryRangeCount,
2320 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002321{
Chia-I Wu1f851912015-10-27 18:04:07 +08002322 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002323
Chia-I Wu1f851912015-10-27 18:04:07 +08002324 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002325
Chia-I Wu1f851912015-10-27 18:04:07 +08002326 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002327
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002328 return result;
2329}
2330
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002331bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002332 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002333 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002334{
Chia-I Wu1f851912015-10-27 18:04:07 +08002335 if(pMemoryRanges != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002336 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002337 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002338 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002339 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08002340 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002341 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002342 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002343 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002344
2345 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002346}
2347
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002348bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002349 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002350 uint32_t memoryRangeCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002351 VkResult result)
2352{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002353
2354
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002355 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002356 {
2357 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002358 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002359 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002360 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002361
2362 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363}
2364
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002365VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002366 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002367 uint32_t memoryRangeCount,
2368 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002369{
Chia-I Wu1f851912015-10-27 18:04:07 +08002370 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002371
Chia-I Wu1f851912015-10-27 18:04:07 +08002372 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002373
Chia-I Wu1f851912015-10-27 18:04:07 +08002374 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002375
Tony Barbour859ceab2015-04-16 19:23:13 -06002376 return result;
2377}
2378
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002379bool PostGetDeviceMemoryCommitment(
2380 VkDevice device,
2381 VkDeviceMemory memory,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002382 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002383{
2384
2385
2386 if(pCommittedMemoryInBytes != nullptr)
2387 {
2388 }
2389
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002390 return true;
2391}
2392
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002393VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002394 VkDevice device,
2395 VkDeviceMemory memory,
2396 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002397{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002398 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002399
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002400 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002401}
2402
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002403bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002404 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002405 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002407 VkDeviceSize memoryOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002408 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002409{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002410
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002411
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412
2413
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002414 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002415 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002416 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002417 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002418 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002419 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002420
2421 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002422}
2423
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002424VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002425 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002426 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002428 VkDeviceSize memoryOffset)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002429{
Chia-I Wu1f851912015-10-27 18:04:07 +08002430 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002431
Chia-I Wu1f851912015-10-27 18:04:07 +08002432 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002434 return result;
2435}
2436
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002437bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002438 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002439 VkImage image,
2440 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002441 VkDeviceSize memoryOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002442 VkResult result)
2443{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002444
2445
2446
2447
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002448 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002449 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002450 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002451 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002452 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002453 }
2454
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002455 return true;
2456}
2457
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002458VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002459 VkDevice device,
2460 VkImage image,
2461 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002462 VkDeviceSize memoryOffset)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002463{
Chia-I Wu1f851912015-10-27 18:04:07 +08002464 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002465
Chia-I Wu1f851912015-10-27 18:04:07 +08002466 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002467
2468 return result;
2469}
2470
2471bool PostGetBufferMemoryRequirements(
2472 VkDevice device,
2473 VkBuffer buffer,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002474 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002475{
2476
2477
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002478 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002479 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002480 }
2481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002482 return true;
2483}
2484
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002485VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002486 VkDevice device,
2487 VkBuffer buffer,
2488 VkMemoryRequirements* pMemoryRequirements)
2489{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002490 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002491
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002492 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002493}
2494
2495bool PostGetImageMemoryRequirements(
2496 VkDevice device,
2497 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002498 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002499{
2500
2501
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002502 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002503 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002504 }
2505
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002506 return true;
2507}
2508
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002509VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002510 VkDevice device,
2511 VkImage image,
2512 VkMemoryRequirements* pMemoryRequirements)
2513{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002514 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002515
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002516 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002517}
2518
2519bool PostGetImageSparseMemoryRequirements(
2520 VkDevice device,
2521 VkImage image,
2522 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002523 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002524{
2525
2526
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002527 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002528 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002529 }
2530
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002531 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002532 {
Chia-I Wu195c9e12015-10-27 19:55:05 +08002533 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002534 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002535 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002536 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu195c9e12015-10-27 19:55:05 +08002537 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002538 return false;
2539 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002540 }
2541
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002542 return true;
2543}
2544
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002545VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002546 VkDevice device,
2547 VkImage image,
2548 uint32_t* pNumRequirements,
2549 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2550{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002551 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002552
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002553 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002554}
2555
2556bool PostGetPhysicalDeviceSparseImageFormatProperties(
2557 VkPhysicalDevice physicalDevice,
2558 VkFormat format,
2559 VkImageType type,
Chia-I Wu3138d6a2015-10-31 00:31:16 +08002560 VkSampleCountFlagBits samples,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002561 VkImageUsageFlags usage,
2562 VkImageTiling tiling,
2563 uint32_t* pNumProperties,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002564 VkSparseImageFormatProperties* pProperties)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002565{
2566
2567 if(format < VK_FORMAT_BEGIN_RANGE ||
2568 format > VK_FORMAT_END_RANGE)
2569 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002570 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002571 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002572 return false;
2573 }
2574
2575 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2576 type > VK_IMAGE_TYPE_END_RANGE)
2577 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002578 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002579 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580 return false;
2581 }
2582
2583
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002584
2585 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2586 tiling > VK_IMAGE_TILING_END_RANGE)
2587 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002588 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002589 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002590 return false;
2591 }
2592
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002593 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002594 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002595 }
2596
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002597 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598 {
Chia-I Wu195c9e12015-10-27 19:55:05 +08002599 if ((pProperties->aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002600 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002601 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002602 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu195c9e12015-10-27 19:55:05 +08002603 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002604 return false;
2605 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002606 }
2607
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002608 return true;
2609}
2610
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002611VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002612 VkPhysicalDevice physicalDevice,
2613 VkFormat format,
2614 VkImageType type,
Chia-I Wu3138d6a2015-10-31 00:31:16 +08002615 VkSampleCountFlagBits samples,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002616 VkImageUsageFlags usage,
2617 VkImageTiling tiling,
2618 uint32_t* pNumProperties,
2619 VkSparseImageFormatProperties* pProperties)
2620{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002621 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002622
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002623 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002624}
2625
Chia-I Wu06809d52015-10-26 16:55:27 +08002626bool PreQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002627 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002628 uint32_t bindInfoCount,
2629 const VkBindSparseInfo* pBindInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002630{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002631 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002632 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002633 }
2634
2635 return true;
2636}
2637
Chia-I Wu06809d52015-10-26 16:55:27 +08002638bool PostQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002639 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002640 uint32_t bindInfoCount,
2641 const VkBindSparseInfo* pBindInfo,
2642 VkFence fence,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002643 VkResult result)
2644{
2645
2646
2647
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002648 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002649 {
Chia-I Wu06809d52015-10-26 16:55:27 +08002650 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002651 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002652 return false;
2653 }
2654
2655 return true;
2656}
2657
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002658VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002659 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002660 uint32_t bindInfoCount,
2661 const VkBindSparseInfo* pBindInfo,
2662 VkFence fence)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002663{
Chia-I Wu06809d52015-10-26 16:55:27 +08002664 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002665
Chia-I Wu06809d52015-10-26 16:55:27 +08002666 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002667
Chia-I Wu06809d52015-10-26 16:55:27 +08002668 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002669
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002670 return result;
2671}
2672
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002673bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002674 VkDevice device,
2675 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002676{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002677 if(pCreateInfo != nullptr)
2678 {
2679 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002680 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002681 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002682 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002683 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002684 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002685 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002686
2687 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002688}
2689
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002690bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002691 VkDevice device,
2692 VkFence* pFence,
2693 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002694{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002695
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002696 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002697 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002698 }
2699
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002700 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002701 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002702 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002703 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002704 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002705 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002706
2707 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002708}
2709
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002710VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002711 VkDevice device,
2712 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002713 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002714 VkFence* pFence)
2715{
2716 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002717
Chia-I Wu69f40122015-10-26 21:10:41 +08002718 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002719
2720 PostCreateFence(device, pFence, result);
2721
2722 return result;
2723}
2724
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002725bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002726 VkDevice device,
2727 const VkFence* pFences)
2728{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002729 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002730 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002731 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002732
2733 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002734}
2735
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002736bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002737 VkDevice device,
2738 uint32_t fenceCount,
2739 VkResult result)
2740{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002741
2742
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002743 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002744 {
2745 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002746 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002747 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002748 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002749
2750 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002751}
2752
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002753VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002754 VkDevice device,
2755 uint32_t fenceCount,
2756 const VkFence* pFences)
2757{
2758 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002759
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002760 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2761
2762 PostResetFences(device, fenceCount, result);
2763
2764 return result;
2765}
2766
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002767bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002768 VkDevice device,
2769 VkFence fence,
2770 VkResult result)
2771{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002772
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002773
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002774 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002775 {
2776 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002777 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002778 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002779 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002780
2781 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002782}
2783
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002784VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002785 VkDevice device,
2786 VkFence fence)
2787{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002788 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2789
2790 PostGetFenceStatus(device, fence, result);
2791
2792 return result;
2793}
2794
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002795bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002796 VkDevice device,
2797 const VkFence* pFences)
2798{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002799 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002800 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002801 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002802
2803 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002804}
2805
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002806bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002807 VkDevice device,
2808 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002809 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002810 uint64_t timeout,
2811 VkResult result)
2812{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002813
2814
2815
2816
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002817 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002818 {
2819 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002820 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002821 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002822 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002823
2824 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002825}
2826
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002827VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002828 VkDevice device,
2829 uint32_t fenceCount,
2830 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002831 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002832 uint64_t timeout)
2833{
2834 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002835
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002836 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2837
2838 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2839
2840 return result;
2841}
2842
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002843bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002844 VkDevice device,
2845 const VkSemaphoreCreateInfo* pCreateInfo)
2846{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002847 if(pCreateInfo != nullptr)
2848 {
2849 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002850 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002851 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002852 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002853 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002854 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002855 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002856
2857 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002858}
2859
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002860bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002861 VkDevice device,
2862 VkSemaphore* pSemaphore,
2863 VkResult result)
2864{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002865
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002866 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002867 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002868 }
2869
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002870 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002871 {
2872 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002873 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002874 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002875 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002876
2877 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002878}
2879
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002880VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002881 VkDevice device,
2882 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002883 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002884 VkSemaphore* pSemaphore)
2885{
2886 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002887
Chia-I Wu69f40122015-10-26 21:10:41 +08002888 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002889
2890 PostCreateSemaphore(device, pSemaphore, result);
2891
2892 return result;
2893}
2894
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002895bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002896 VkDevice device,
2897 const VkEventCreateInfo* pCreateInfo)
2898{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002899 if(pCreateInfo != nullptr)
2900 {
2901 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002902 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002903 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002904 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002905 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002906 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002907 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002908
2909 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002910}
2911
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002912bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002913 VkDevice device,
2914 VkEvent* pEvent,
2915 VkResult result)
2916{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002917
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002918 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002919 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002920 }
2921
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002922 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002923 {
2924 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002925 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002926 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002927 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002928
2929 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002930}
2931
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002932VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002933 VkDevice device,
2934 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002935 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002936 VkEvent* pEvent)
2937{
2938 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002939
Chia-I Wu69f40122015-10-26 21:10:41 +08002940 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002941
2942 PostCreateEvent(device, pEvent, result);
2943
2944 return result;
2945}
2946
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002947bool PostGetEventStatus(
2948 VkDevice device,
2949 VkEvent event,
2950 VkResult result)
2951{
2952
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002953
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002954 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002955 {
2956 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002957 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002958 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002959 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002960
2961 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002962}
2963
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002964VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002965 VkDevice device,
2966 VkEvent event)
2967{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002968 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2969
2970 PostGetEventStatus(device, event, result);
2971
2972 return result;
2973}
2974
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002975bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002976 VkDevice device,
2977 VkEvent event,
2978 VkResult result)
2979{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002980
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002981
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002982 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002983 {
2984 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07002985 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002986 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002987 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002988
2989 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002990}
2991
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002992VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 VkDevice device,
2994 VkEvent event)
2995{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002996 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
2997
2998 PostSetEvent(device, event, result);
2999
3000 return result;
3001}
3002
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003003bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003004 VkDevice device,
3005 VkEvent event,
3006 VkResult result)
3007{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003008
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003009
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003010 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003011 {
3012 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003013 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003014 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003015 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003016
3017 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003018}
3019
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003020VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003021 VkDevice device,
3022 VkEvent event)
3023{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003024 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3025
3026 PostResetEvent(device, event, result);
3027
3028 return result;
3029}
3030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003031bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003032 VkDevice device,
3033 const VkQueryPoolCreateInfo* pCreateInfo)
3034{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003035 if(pCreateInfo != nullptr)
3036 {
3037 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003039 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003040 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003041 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003042 }
3043 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3044 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3045 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003046 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003047 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003048 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003049 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003050 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003051
3052 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003053}
3054
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003055bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003056 VkDevice device,
3057 VkQueryPool* pQueryPool,
3058 VkResult result)
3059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003060
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003061 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003062 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 }
3064
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003065 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003066 {
3067 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003068 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003069 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003070 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003071
3072 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003073}
3074
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003075VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003076 VkDevice device,
3077 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003078 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003079 VkQueryPool* pQueryPool)
3080{
3081 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003082
Chia-I Wu69f40122015-10-26 21:10:41 +08003083 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003084
3085 PostCreateQueryPool(device, pQueryPool, result);
3086
3087 return result;
3088}
3089
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003090bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003091 VkDevice device,
3092 VkQueryPool queryPool,
3093 uint32_t startQuery,
3094 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003095 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003096 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003097 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003098 VkQueryResultFlags flags,
3099 VkResult result)
3100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003101
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003102
3103
3104
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003105 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003106 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003107 }
3108
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003109
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003110 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003111 {
3112 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003113 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003114 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003115 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003116
3117 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003118}
3119
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003120VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003121 VkDevice device,
3122 VkQueryPool queryPool,
3123 uint32_t startQuery,
3124 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003125 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003126 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003127 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003128 VkQueryResultFlags flags)
3129{
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003130 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003131
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003132 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003133
3134 return result;
3135}
3136
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003137bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003138 VkDevice device,
3139 const VkBufferCreateInfo* pCreateInfo)
3140{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003141 if(pCreateInfo != nullptr)
3142 {
3143 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003144 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003145 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003146 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003147 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003148 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003149 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3150 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003151 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003152 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003153 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003154 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003155 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003156 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003157 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003158 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003159 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003160
3161 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003162}
3163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003164bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003165 VkDevice device,
3166 VkBuffer* pBuffer,
3167 VkResult result)
3168{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003169
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003170 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003171 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003172 }
3173
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003174 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003175 {
3176 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003177 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003178 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003180
3181 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003182}
3183
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003184VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185 VkDevice device,
3186 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003187 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003188 VkBuffer* pBuffer)
3189{
3190 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003191
Chia-I Wu69f40122015-10-26 21:10:41 +08003192 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003193
3194 PostCreateBuffer(device, pBuffer, result);
3195
3196 return result;
3197}
3198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003199bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003200 VkDevice device,
3201 const VkBufferViewCreateInfo* pCreateInfo)
3202{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003203 if(pCreateInfo != nullptr)
3204 {
3205 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003206 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003207 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003208 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003209 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003210 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003211 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3212 pCreateInfo->format > VK_FORMAT_END_RANGE)
3213 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003214 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003215 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003216 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003217 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003218 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003219
3220 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003221}
3222
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003223bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003224 VkDevice device,
3225 VkBufferView* pView,
3226 VkResult result)
3227{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003228
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003229 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003230 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003231 }
3232
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003233 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003234 {
3235 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003236 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003237 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003238 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003239
3240 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241}
3242
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003243VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003244 VkDevice device,
3245 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003246 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 VkBufferView* pView)
3248{
3249 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250
Chia-I Wu69f40122015-10-26 21:10:41 +08003251 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252
3253 PostCreateBufferView(device, pView, result);
3254
3255 return result;
3256}
3257
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003258bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003259 VkDevice device,
3260 const VkImageCreateInfo* pCreateInfo)
3261{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003262 if(pCreateInfo != nullptr)
3263 {
3264 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003265 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003266 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003267 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003268 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003269 }
3270 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3271 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3272 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003273 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003274 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003275 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003276 }
3277 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3278 pCreateInfo->format > VK_FORMAT_END_RANGE)
3279 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003280 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003281 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003282 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003283 }
3284 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3285 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3286 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003287 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003288 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003290 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003291 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3292 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003293 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003294 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003295 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003296 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003297 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003298 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003299 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003300 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003301 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003302
3303 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003304}
3305
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003306bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003307 VkDevice device,
3308 VkImage* pImage,
3309 VkResult result)
3310{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003311
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003312 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003313 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003314 }
3315
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003316 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317 {
3318 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003319 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003320 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003321 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003322
3323 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003324}
3325
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003326VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003327 VkDevice device,
3328 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003329 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003330 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003331{
3332 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003333
Chia-I Wu69f40122015-10-26 21:10:41 +08003334 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003335
3336 PostCreateImage(device, pImage, result);
3337
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003338 return result;
3339}
3340
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003341bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003342 VkDevice device,
3343 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003344{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003345 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003346 {
Chia-I Wu195c9e12015-10-27 19:55:05 +08003347 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003348 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003349 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003350 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu195c9e12015-10-27 19:55:05 +08003351 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003352 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003354 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003355
3356 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003357}
3358
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003359bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003360 VkDevice device,
3361 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003362 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003363{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003364
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003365
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003366 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368 }
3369
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003370 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003371}
3372
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003373VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003374 VkDevice device,
3375 VkImage image,
3376 const VkImageSubresource* pSubresource,
3377 VkSubresourceLayout* pLayout)
3378{
3379 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003380
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003381 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003383 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384}
3385
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003386bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 VkDevice device,
3388 const VkImageViewCreateInfo* pCreateInfo)
3389{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003390 if(pCreateInfo != nullptr)
3391 {
3392 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003393 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003394 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003395 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003396 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003397 }
3398 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3399 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3400 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003401 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003402 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003403 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404 }
3405 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3406 pCreateInfo->format > VK_FORMAT_END_RANGE)
3407 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003408 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003409 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003410 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003411 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003412 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3413 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003414 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003415 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003416 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003417 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003418 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003419 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3420 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003421 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003422 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003423 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003425 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003426 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3427 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003428 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003429 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003430 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003431 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003433 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3434 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003435 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003436 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003437 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003438 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003439 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003440 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003441
3442 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003443}
3444
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003445bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003446 VkDevice device,
3447 VkImageView* pView,
3448 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003449{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003450
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003451 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003453 }
3454
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003455 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003456 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003458 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003459 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003460 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003461
3462 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003463}
3464
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003465VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003466 VkDevice device,
3467 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003468 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003469 VkImageView* pView)
3470{
3471 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003472
Chia-I Wu69f40122015-10-26 21:10:41 +08003473 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003474
3475 PostCreateImageView(device, pView, result);
3476
3477 return result;
3478}
3479
Michael Lentine6715e522015-09-15 14:59:14 -05003480bool PreCreateShaderModule(
3481 VkDevice device,
3482 const VkShaderModuleCreateInfo* pCreateInfo)
3483{
3484 if(pCreateInfo) {
3485 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003486 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine6715e522015-09-15 14:59:14 -05003487 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3488 return false;
3489 }
3490 if(!pCreateInfo->pCode) {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003491 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine6715e522015-09-15 14:59:14 -05003492 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3493 return false;
3494 }
3495 } else {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003496 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine6715e522015-09-15 14:59:14 -05003497 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3498 return false;
3499 }
3500
3501 return true;
3502}
3503
3504bool PostCreateShaderModule(
3505 VkDevice device,
3506 VkShaderModule* pShaderModule,
3507 VkResult result)
3508{
3509 if(result < VK_SUCCESS) {
3510 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Michael Lentine6715e522015-09-15 14:59:14 -05003512 return false;
3513 }
3514
3515 return true;
3516}
3517
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003518VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine6715e522015-09-15 14:59:14 -05003519 VkDevice device,
3520 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003521 const VkAllocationCallbacks* pAllocator,
Michael Lentine6715e522015-09-15 14:59:14 -05003522 VkShaderModule* pShaderModule)
3523{
3524 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wu69f40122015-10-26 21:10:41 +08003525 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine6715e522015-09-15 14:59:14 -05003526 PostCreateShaderModule(device, pShaderModule, result);
3527 return result;
3528}
3529
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003530bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003531 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003532 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003533{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003534 if(pCreateInfo != nullptr)
3535 {
3536 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003537 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003538 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003539 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003540 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541 }
Chia-I Wu7e470702015-10-26 17:24:52 +08003542 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003543 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003544 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003545 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003546
3547 return true;
3548}
3549
3550bool PostCreatePipelineCache(
3551 VkDevice device,
3552 VkPipelineCache* pPipelineCache,
3553 VkResult result)
3554{
3555
3556 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003557 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003558 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003559
3560 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003561 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003562 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003563 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Tony Barboure307f582015-07-10 15:29:03 -06003564 return false;
3565 }
3566
3567 return true;
3568}
3569
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003570VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003571 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003572 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003573 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003574 VkPipelineCache* pPipelineCache)
3575{
3576 PreCreatePipelineCache(device, pCreateInfo);
3577
Chia-I Wu69f40122015-10-26 21:10:41 +08003578 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003579
3580 PostCreatePipelineCache(device, pPipelineCache, result);
3581
3582 return result;
3583}
3584
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003585bool PostGetPipelineCacheData(
3586 VkDevice device,
3587 VkPipelineCache pipelineCache,
Chia-I Wu28c3c432015-10-26 19:17:06 +08003588 size_t* pDataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003589 void* pData,
3590 VkResult result)
3591{
3592
3593
Chia-I Wu28c3c432015-10-26 19:17:06 +08003594 if(pDataSize != nullptr)
3595 {
3596 }
3597
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003598 if(pData != nullptr)
3599 {
3600 }
3601
3602 if(result < VK_SUCCESS)
3603 {
3604 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003605 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003606 return false;
3607 }
3608
3609 return true;
3610}
3611
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003612VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003613 VkDevice device,
3614 VkPipelineCache pipelineCache,
Chia-I Wu28c3c432015-10-26 19:17:06 +08003615 size_t* pDataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003616 void* pData)
3617{
Chia-I Wu28c3c432015-10-26 19:17:06 +08003618 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003619
Chia-I Wu28c3c432015-10-26 19:17:06 +08003620 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003621
3622 return result;
3623}
3624
3625bool PreMergePipelineCaches(
3626 VkDevice device,
3627 const VkPipelineCache* pSrcCaches)
3628{
3629 if(pSrcCaches != nullptr)
3630 {
3631 }
3632
3633 return true;
3634}
3635
3636bool PostMergePipelineCaches(
3637 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08003638 VkPipelineCache dstCache,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003639 uint32_t srcCacheCount,
3640 VkResult result)
3641{
3642
3643
3644
3645 if(result < VK_SUCCESS)
3646 {
3647 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003648 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003649 return false;
3650 }
3651
3652 return true;
3653}
3654
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003655VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003656 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08003657 VkPipelineCache dstCache,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003658 uint32_t srcCacheCount,
3659 const VkPipelineCache* pSrcCaches)
3660{
3661 PreMergePipelineCaches(device, pSrcCaches);
3662
Chia-I Wu1f851912015-10-27 18:04:07 +08003663 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003664
Chia-I Wu1f851912015-10-27 18:04:07 +08003665 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003666
3667 return result;
3668}
3669
3670bool PreCreateGraphicsPipelines(
3671 VkDevice device,
3672 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3673{
3674 if(pCreateInfos != nullptr)
3675 {
3676 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3677 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003678 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003679 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3680 return false;
3681 }
3682 if(pCreateInfos->pStages != nullptr)
3683 {
3684 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3685 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003686 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003687 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3688 return false;
3689 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003690 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3691 {
Chia-I Wu483e7702015-10-26 17:20:32 +08003692 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003693 {
3694 }
3695 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3696 {
3697 }
3698 }
3699 }
3700 if(pCreateInfos->pVertexInputState != nullptr)
3701 {
3702 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3703 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003704 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003705 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3706 return false;
3707 }
3708 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3709 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08003710 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3711 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003712 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003713 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003714 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003715 return false;
3716 }
3717 }
3718 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3719 {
3720 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3721 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3722 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003723 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003724 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3725 return false;
3726 }
3727 }
3728 }
3729 if(pCreateInfos->pInputAssemblyState != nullptr)
3730 {
3731 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3732 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003733 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003734 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3735 return false;
3736 }
3737 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3738 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3739 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003740 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003741 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3742 return false;
3743 }
3744 }
3745 if(pCreateInfos->pTessellationState != nullptr)
3746 {
3747 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3748 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003749 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003750 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3751 return false;
3752 }
3753 }
3754 if(pCreateInfos->pViewportState != nullptr)
3755 {
3756 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3757 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003758 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003759 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3760 return false;
3761 }
3762 }
Chia-I Wu1f851912015-10-27 18:04:07 +08003763 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003764 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08003765 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003766 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003767 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08003768 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003769 return false;
3770 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003771 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3772 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003773 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003774 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003775 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003776 return false;
3777 }
Chia-I Wu1f851912015-10-27 18:04:07 +08003778 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003779 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003780 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08003781 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003782 return false;
3783 }
Chia-I Wu1f851912015-10-27 18:04:07 +08003784 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3785 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003786 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003787 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08003788 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003789 return false;
3790 }
3791 }
3792 if(pCreateInfos->pMultisampleState != nullptr)
3793 {
3794 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3795 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003796 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003797 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3798 return false;
3799 }
3800 }
3801 if(pCreateInfos->pDepthStencilState != nullptr)
3802 {
3803 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3804 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003805 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003806 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3807 return false;
3808 }
3809 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3810 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3811 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003812 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003813 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3814 return false;
3815 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003816 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3817 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003818 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003819 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003820 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003821 return false;
3822 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003823 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3824 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003825 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003826 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003827 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003828 return false;
3829 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003830 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3831 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003832 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003833 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003834 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003835 return false;
3836 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003837 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3838 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003839 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003840 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003841 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003842 return false;
3843 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003844 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3845 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003846 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003847 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003848 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003849 return false;
3850 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003851 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3852 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003853 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003854 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003855 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003856 return false;
3857 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003858 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3859 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003860 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003861 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003862 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003863 return false;
3864 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003865 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3866 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003867 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003868 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003869 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003870 return false;
3871 }
3872 }
3873 if(pCreateInfos->pColorBlendState != nullptr)
3874 {
3875 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3876 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003877 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003878 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3879 return false;
3880 }
Michael Lentine6d033602015-10-06 14:55:54 -07003881 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3882 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003883 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3884 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003885 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003886 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3887 return false;
3888 }
Michael Lentined833b882015-09-15 14:59:56 -05003889 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003890 {
Chia-I Wu4291d882015-10-27 19:00:15 +08003891 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3892 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003893 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003894 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003895 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003896 return false;
3897 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003898 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3899 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003900 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003901 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003902 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003903 return false;
3904 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003905 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3906 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003907 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003908 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003909 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003910 return false;
3911 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003912 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3913 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003914 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003915 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003916 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003917 return false;
3918 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003919 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3920 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003921 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003922 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003923 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003924 return false;
3925 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003926 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3927 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003928 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003929 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003930 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003931 return false;
3932 }
3933 }
3934 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06003935 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3936 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003937 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes4fc32342015-07-31 14:16:20 -06003938 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3939 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003940 }
3941
3942 return true;
3943}
3944
3945bool PostCreateGraphicsPipelines(
3946 VkDevice device,
3947 VkPipelineCache pipelineCache,
3948 uint32_t count,
3949 VkPipeline* pPipelines,
3950 VkResult result)
3951{
3952
3953
3954
3955 if(pPipelines != nullptr)
3956 {
3957 }
3958
3959 if(result < VK_SUCCESS)
3960 {
3961 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003962 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003963 return false;
3964 }
3965
3966 return true;
3967}
3968
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003969VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003970 VkDevice device,
3971 VkPipelineCache pipelineCache,
3972 uint32_t count,
3973 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu1f851912015-10-27 18:04:07 +08003974 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003975 VkPipeline* pPipelines)
3976{
3977 PreCreateGraphicsPipelines(device, pCreateInfos);
3978
Chia-I Wu69f40122015-10-26 21:10:41 +08003979 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003980
3981 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3982
3983 return result;
3984}
3985
3986bool PreCreateComputePipelines(
3987 VkDevice device,
3988 const VkComputePipelineCreateInfo* pCreateInfos)
3989{
3990 if(pCreateInfos != nullptr)
3991 {
3992 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
3993 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07003994 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003995 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3996 return false;
3997 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06003998 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003999 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004000 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004001 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4002 return false;
4003 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004004 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004005 {
Chia-I Wu483e7702015-10-26 17:20:32 +08004006 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004007 {
4008 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004009 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004010 {
4011 }
4012 }
4013 }
4014
4015 return true;
4016}
4017
4018bool PostCreateComputePipelines(
4019 VkDevice device,
4020 VkPipelineCache pipelineCache,
4021 uint32_t count,
4022 VkPipeline* pPipelines,
4023 VkResult result)
4024{
4025
4026
4027
4028 if(pPipelines != nullptr)
4029 {
4030 }
4031
4032 if(result < VK_SUCCESS)
4033 {
4034 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004035 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004036 return false;
4037 }
4038
4039 return true;
4040}
4041
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004042VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004043 VkDevice device,
4044 VkPipelineCache pipelineCache,
4045 uint32_t count,
4046 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu1f851912015-10-27 18:04:07 +08004047 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004048 VkPipeline* pPipelines)
4049{
4050 PreCreateComputePipelines(device, pCreateInfos);
4051
Chia-I Wu69f40122015-10-26 21:10:41 +08004052 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004053
4054 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4055
4056 return result;
4057}
4058
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004059bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004060 VkDevice device,
4061 const VkPipelineLayoutCreateInfo* pCreateInfo)
4062{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004063 if(pCreateInfo != nullptr)
4064 {
4065 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004066 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004067 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004068 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4069 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004070 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004071 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004072 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004073 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004074 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004075 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004076 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004077 }
4078
4079 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004080}
4081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004082bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004083 VkDevice device,
4084 VkPipelineLayout* pPipelineLayout,
4085 VkResult result)
4086{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004087
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004088 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004089 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004090 }
4091
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004092 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004093 {
4094 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004095 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004096 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004097 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004098
4099 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004100}
4101
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004102VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004103 VkDevice device,
4104 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004105 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004106 VkPipelineLayout* pPipelineLayout)
4107{
4108 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004109
Chia-I Wu69f40122015-10-26 21:10:41 +08004110 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004111
4112 PostCreatePipelineLayout(device, pPipelineLayout, result);
4113
4114 return result;
4115}
4116
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004117bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004118 VkDevice device,
4119 const VkSamplerCreateInfo* pCreateInfo)
4120{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004121 if(pCreateInfo != nullptr)
4122 {
4123 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004124 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004125 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004126 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004127 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004128 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004129 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4130 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004131 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004132 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004133 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004134 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004135 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004136 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4137 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004138 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004139 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004140 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004141 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004142 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004143 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4144 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004145 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004146 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004147 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004148 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004149 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004150 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4151 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004152 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004153 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004154 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004155 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004156 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004157 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4158 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004159 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004160 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004161 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004162 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004163 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004164 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4165 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004166 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004167 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004168 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004169 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004170 }
Jeremy Hayes1982a362015-11-16 17:23:59 -07004171 if(pCreateInfo->compareEnable)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004172 {
Jeremy Hayes1982a362015-11-16 17:23:59 -07004173 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4174 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4175 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004176 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes1982a362015-11-16 17:23:59 -07004177 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4178 return false;
4179 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004180 }
4181 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4182 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4183 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004184 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004185 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004186 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004187 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004188 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004189
4190 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004191}
4192
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004193bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004194 VkDevice device,
4195 VkSampler* pSampler,
4196 VkResult result)
4197{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004198
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004199 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004200 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004201 }
4202
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004203 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004204 {
4205 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004206 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004207 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004208 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004209
4210 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004211}
4212
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004213VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004214 VkDevice device,
4215 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004216 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004217 VkSampler* pSampler)
4218{
4219 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004220
Chia-I Wu69f40122015-10-26 21:10:41 +08004221 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004222
4223 PostCreateSampler(device, pSampler, result);
4224
4225 return result;
4226}
4227
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004228bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004229 VkDevice device,
4230 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4231{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004232 if(pCreateInfo != nullptr)
4233 {
4234 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004235 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004236 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004237 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004238 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004239 }
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004240 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241 {
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004242 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4243 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004244 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004245 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004246 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004247 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004248 }
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004249 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004250 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004251 }
4252 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004253 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004254
4255 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004256}
4257
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004258bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004259 VkDevice device,
4260 VkDescriptorSetLayout* pSetLayout,
4261 VkResult result)
4262{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004263
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004264 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004265 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004266 }
4267
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004268 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004269 {
4270 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004271 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004272 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004273 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004274
4275 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004276}
4277
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004278VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004279 VkDevice device,
4280 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004281 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004282 VkDescriptorSetLayout* pSetLayout)
4283{
4284 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004285
Chia-I Wu69f40122015-10-26 21:10:41 +08004286 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004287
4288 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4289
4290 return result;
4291}
4292
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004293bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004294 VkDevice device,
4295 const VkDescriptorPoolCreateInfo* pCreateInfo)
4296{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004297 if(pCreateInfo != nullptr)
4298 {
4299 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004300 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004301 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004302 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004303 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004304 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08004305 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004306 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08004307 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4308 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004309 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004310 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004312 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004313 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004314 }
4315 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004316
4317 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004318}
4319
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004320bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004321 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004322 uint32_t maxSets,
4323 VkDescriptorPool* pDescriptorPool,
4324 VkResult result)
4325{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004326
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004327 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004328
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004329 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004330 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004331 }
4332
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004333 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004334 {
4335 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004336 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004337 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004338 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004339
4340 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004341}
4342
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004343VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004344 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004345 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004346 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004347 VkDescriptorPool* pDescriptorPool)
4348{
4349 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004350
Chia-I Wu69f40122015-10-26 21:10:41 +08004351 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004352
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004353 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004354
4355 return result;
4356}
4357
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004358bool PostResetDescriptorPool(
4359 VkDevice device,
4360 VkDescriptorPool descriptorPool,
4361 VkResult result)
4362{
4363
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004364
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004365 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366 {
4367 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004368 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004369 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004370 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004371
4372 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373}
4374
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004375VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004377 VkDescriptorPool descriptorPool,
4378 VkDescriptorPoolResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004379{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004380 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004381
4382 PostResetDescriptorPool(device, descriptorPool, result);
4383
4384 return result;
4385}
4386
Chia-I Wu1f851912015-10-27 18:04:07 +08004387bool PreAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004388 VkDevice device,
4389 const VkDescriptorSetLayout* pSetLayouts)
4390{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004391 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004392 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004394
4395 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004396}
4397
Chia-I Wu1f851912015-10-27 18:04:07 +08004398bool PostAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004399 VkDevice device,
4400 VkDescriptorPool descriptorPool,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004401 uint32_t count,
4402 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004403 VkResult result)
4404{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004405
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004406
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004407 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004408 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004409 }
4410
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004411 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004412 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004413 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004414 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004415 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004416 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004417
4418 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004419}
4420
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004421VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004422 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004423 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004424 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004425{
Chia-I Wu1f851912015-10-27 18:04:07 +08004426 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004427
Chia-I Wu1f851912015-10-27 18:04:07 +08004428 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004429
Chia-I Wu1f851912015-10-27 18:04:07 +08004430 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004431
4432 return result;
4433}
4434
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004435bool PreFreeDescriptorSets(
4436 VkDevice device,
4437 const VkDescriptorSet* pDescriptorSets)
4438{
4439 if(pDescriptorSets != nullptr)
4440 {
4441 }
4442
4443 return true;
4444}
4445
4446bool PostFreeDescriptorSets(
4447 VkDevice device,
4448 VkDescriptorPool descriptorPool,
4449 uint32_t count,
4450 VkResult result)
4451{
4452
4453
4454
4455 if(result < VK_SUCCESS)
4456 {
4457 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004458 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004459 return false;
4460 }
4461
4462 return true;
4463}
4464
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004465VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004466 VkDevice device,
4467 VkDescriptorPool descriptorPool,
4468 uint32_t count,
4469 const VkDescriptorSet* pDescriptorSets)
4470{
4471 PreFreeDescriptorSets(device, pDescriptorSets);
4472
4473 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4474
4475 PostFreeDescriptorSets(device, descriptorPool, count, result);
4476
4477 return result;
4478}
4479
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004480bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004481 VkDevice device,
4482 const VkWriteDescriptorSet* pDescriptorWrites,
4483 const VkCopyDescriptorSet* pDescriptorCopies)
4484{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004485 if(pDescriptorWrites != nullptr)
4486 {
4487 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004488 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004489 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004490 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004491 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004492 }
4493 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4494 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4495 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004496 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004497 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004498 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004499 }
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004500 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4501 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4502 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004503 {
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004504 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4505 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004506 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004507 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004508 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004509 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004511 }
4512 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004513
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004514 if(pDescriptorCopies != nullptr)
4515 {
4516 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004517 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004518 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004519 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004520 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004521 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004522 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004523
4524 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004525}
4526
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004527VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004528 VkDevice device,
Chia-I Wu483e7702015-10-26 17:20:32 +08004529 uint32_t descriptorWriteCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu483e7702015-10-26 17:20:32 +08004531 uint32_t descriptorCopyCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004532 const VkCopyDescriptorSet* pDescriptorCopies)
4533{
4534 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004535
Chia-I Wu483e7702015-10-26 17:20:32 +08004536 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004537}
4538
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004539bool PreCreateFramebuffer(
4540 VkDevice device,
4541 const VkFramebufferCreateInfo* pCreateInfo)
4542{
4543 if(pCreateInfo != nullptr)
4544 {
4545 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4546 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004547 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004548 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4549 return false;
4550 }
4551 if(pCreateInfo->pAttachments != nullptr)
4552 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004553 }
4554 }
4555
4556 return true;
4557}
4558
4559bool PostCreateFramebuffer(
4560 VkDevice device,
4561 VkFramebuffer* pFramebuffer,
4562 VkResult result)
4563{
4564
4565 if(pFramebuffer != nullptr)
4566 {
4567 }
4568
4569 if(result < VK_SUCCESS)
4570 {
4571 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004572 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004573 return false;
4574 }
4575
4576 return true;
4577}
4578
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004579VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004580 VkDevice device,
4581 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004582 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004583 VkFramebuffer* pFramebuffer)
4584{
4585 PreCreateFramebuffer(device, pCreateInfo);
4586
Chia-I Wu69f40122015-10-26 21:10:41 +08004587 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004588
4589 PostCreateFramebuffer(device, pFramebuffer, result);
4590
4591 return result;
4592}
4593
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004594bool PreCreateRenderPass(
4595 VkDevice device,
4596 const VkRenderPassCreateInfo* pCreateInfo)
4597{
4598 if(pCreateInfo != nullptr)
4599 {
4600 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4601 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004602 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004603 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4604 return false;
4605 }
4606 if(pCreateInfo->pAttachments != nullptr)
4607 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004608 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4609 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4610 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004611 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004612 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4613 return false;
4614 }
4615 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4616 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4617 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004618 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004619 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4620 return false;
4621 }
4622 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4623 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4624 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004625 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004626 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4627 return false;
4628 }
4629 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4630 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4631 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004632 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004633 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4634 return false;
4635 }
4636 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4637 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4638 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004639 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004640 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4641 return false;
4642 }
4643 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4644 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4645 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004646 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004647 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4648 return false;
4649 }
4650 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4651 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4652 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004653 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004654 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4655 return false;
4656 }
4657 }
4658 if(pCreateInfo->pSubpasses != nullptr)
4659 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004660 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4661 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4662 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004663 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004664 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4665 return false;
4666 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004667 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004668 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004669 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4670 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004671 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004672 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004673 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004674 return false;
4675 }
4676 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004677 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004678 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004679 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4680 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004681 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004682 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004683 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004684 return false;
4685 }
4686 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004687 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004688 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004689 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4690 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004692 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004693 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004694 return false;
4695 }
4696 }
Chia-I Wuce532f72015-10-26 17:32:47 +08004697 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4698 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4699 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004700 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004701 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuce532f72015-10-26 17:32:47 +08004702 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004703 return false;
4704 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004705 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004706 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004707 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4708 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004709 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004710 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004711 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004712 return false;
4713 }
4714 }
4715 }
4716 if(pCreateInfo->pDependencies != nullptr)
4717 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004718 }
4719 }
4720
4721 return true;
4722}
4723
4724bool PostCreateRenderPass(
4725 VkDevice device,
4726 VkRenderPass* pRenderPass,
4727 VkResult result)
4728{
4729
4730 if(pRenderPass != nullptr)
4731 {
4732 }
4733
4734 if(result < VK_SUCCESS)
4735 {
4736 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004737 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004738 return false;
4739 }
4740
4741 return true;
4742}
4743
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004744VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004745 VkDevice device,
4746 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004747 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004748 VkRenderPass* pRenderPass)
4749{
4750 PreCreateRenderPass(device, pCreateInfo);
4751
Chia-I Wu69f40122015-10-26 21:10:41 +08004752 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004753
4754 PostCreateRenderPass(device, pRenderPass, result);
4755
4756 return result;
4757}
4758
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004759bool PostGetRenderAreaGranularity(
4760 VkDevice device,
4761 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004762 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004763{
4764
4765
4766 if(pGranularity != nullptr)
4767 {
4768 }
4769
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004770 return true;
4771}
4772
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004773VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004774 VkDevice device,
4775 VkRenderPass renderPass,
4776 VkExtent2D* pGranularity)
4777{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004778 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004779
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004780 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004781}
4782
4783bool PreCreateCommandPool(
4784 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004785 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004786{
4787 if(pCreateInfo != nullptr)
4788 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004789 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004790 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004791 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004792 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4793 return false;
4794 }
4795 }
4796
4797 return true;
4798}
4799
4800bool PostCreateCommandPool(
4801 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004802 VkCommandPool* pCommandPool,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004803 VkResult result)
4804{
4805
Chia-I Wu1f851912015-10-27 18:04:07 +08004806 if(pCommandPool != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004807 {
4808 }
4809
4810 if(result < VK_SUCCESS)
4811 {
4812 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004813 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004814 return false;
4815 }
4816
4817 return true;
4818}
4819
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004820VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004821 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004822 const VkCommandPoolCreateInfo* pCreateInfo,
4823 const VkAllocationCallbacks* pAllocator,
4824 VkCommandPool* pCommandPool)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004825{
4826 PreCreateCommandPool(device, pCreateInfo);
4827
Chia-I Wu1f851912015-10-27 18:04:07 +08004828 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004829
Chia-I Wu1f851912015-10-27 18:04:07 +08004830 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004831
4832 return result;
4833}
4834
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004835bool PostResetCommandPool(
4836 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004837 VkCommandPool commandPool,
4838 VkCommandPoolResetFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004839 VkResult result)
4840{
4841
4842
4843
4844 if(result < VK_SUCCESS)
4845 {
4846 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004847 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004848 return false;
4849 }
4850
4851 return true;
4852}
4853
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004854VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004855 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004856 VkCommandPool commandPool,
4857 VkCommandPoolResetFlags flags)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004858{
Chia-I Wu1f851912015-10-27 18:04:07 +08004859 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004860
Chia-I Wu1f851912015-10-27 18:04:07 +08004861 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004862
4863 return result;
4864}
4865
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004866bool PreCreateCommandBuffer(
4867 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004868 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004869{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004870 if(pCreateInfo != nullptr)
4871 {
Chia-I Wuc1f5e402015-11-10 16:21:09 +08004872 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004873 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004874 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08004875 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004876 return false;
4877 }
Chia-I Wu1f851912015-10-27 18:04:07 +08004878 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4879 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004880 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004881 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08004882 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004883 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004884 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004885 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004886
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004887 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004888}
4889
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004890bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004891 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004892 VkCommandBuffer* pCommandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004893 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004894{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004895
Chia-I Wu1f851912015-10-27 18:04:07 +08004896 if(pCommandBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004897 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004898 }
4899
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004900 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004901 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004902 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004903 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004904 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004905 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004906
4907 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004908}
4909
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004910VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004911 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004912 const VkCommandBufferAllocateInfo* pCreateInfo,
4913 VkCommandBuffer* pCommandBuffer)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004914{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004915 PreCreateCommandBuffer(device, pCreateInfo);
4916
Chia-I Wu1f851912015-10-27 18:04:07 +08004917 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004918
Chia-I Wu1f851912015-10-27 18:04:07 +08004919 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004920
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004921 return result;
4922}
4923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004924bool PreBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004925 VkCommandBuffer commandBuffer,
4926 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004927{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004928 if(pBeginInfo != nullptr)
4929 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004930 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004931 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004932 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004933 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004934 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004935 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004936 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004937
4938 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004939}
4940
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004941bool PostBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004942 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004943 VkResult result)
4944{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004945
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004946 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004947 {
4948 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004949 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004950 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004951 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004952
4953 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004954}
4955
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004956VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004957 VkCommandBuffer commandBuffer,
4958 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004959{
Chia-I Wu1f851912015-10-27 18:04:07 +08004960 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004961
Chia-I Wu1f851912015-10-27 18:04:07 +08004962 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004963
Chia-I Wu1f851912015-10-27 18:04:07 +08004964 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004965
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004966 return result;
4967}
4968
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004969bool PostEndCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004970 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004971 VkResult result)
4972{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004973
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004974 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004975 {
4976 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07004977 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004978 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004979 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004980
4981 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004982}
4983
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004984VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004985 VkCommandBuffer commandBuffer)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004986{
Chia-I Wu1f851912015-10-27 18:04:07 +08004987 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004988
Chia-I Wu1f851912015-10-27 18:04:07 +08004989 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004990
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004991 return result;
4992}
4993
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004994bool PostResetCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004995 VkCommandBuffer commandBuffer,
4996 VkCommandBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004997 VkResult result)
4998{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004999
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005000
5001 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005002 {
5003 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005004 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005005 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005006 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005007
5008 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005009}
5010
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005011VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005012 VkCommandBuffer commandBuffer,
5013 VkCommandBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005014{
Chia-I Wu1f851912015-10-27 18:04:07 +08005015 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005016
Chia-I Wu1f851912015-10-27 18:04:07 +08005017 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005018
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005019 return result;
5020}
5021
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005022bool PostCmdBindPipeline(
Chia-I Wu1f851912015-10-27 18:04:07 +08005023 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005024 VkPipelineBindPoint pipelineBindPoint,
5025 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005026{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005027
5028 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5029 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5030 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005031 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005032 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005033 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005034 }
5035
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005036
5037 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005038}
5039
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005040VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu1f851912015-10-27 18:04:07 +08005041 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005042 VkPipelineBindPoint pipelineBindPoint,
5043 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005044{
Chia-I Wu1f851912015-10-27 18:04:07 +08005045 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005046
Chia-I Wu1f851912015-10-27 18:04:07 +08005047 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005048}
5049
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005050VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005051{
Chia-I Wu1f851912015-10-27 18:04:07 +08005052 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005053}
5054
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005055VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005056{
Chia-I Wu1f851912015-10-27 18:04:07 +08005057 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005058}
5059
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005060VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005061{
Chia-I Wu1f851912015-10-27 18:04:07 +08005062 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005063}
5064
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005065VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005066{
Chia-I Wu1f851912015-10-27 18:04:07 +08005067 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005068}
5069
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005070VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005071{
Chia-I Wu1f851912015-10-27 18:04:07 +08005072 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northropf5bd2252015-08-17 11:10:49 -06005073}
5074
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005075VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005076{
Chia-I Wu1f851912015-10-27 18:04:07 +08005077 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005078}
5079
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005080VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005081{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005082 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005083}
5084
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005085VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005086{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005087 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005088}
5089
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005090VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005091{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005092 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005093}
5094
5095bool PreCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005096 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005097 const VkDescriptorSet* pDescriptorSets,
5098 const uint32_t* pDynamicOffsets)
5099{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005100 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005101 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005102 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005103
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005104 if(pDynamicOffsets != nullptr)
5105 {
5106 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005107
5108 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005109}
5110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005111bool PostCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005112 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005113 VkPipelineBindPoint pipelineBindPoint,
5114 VkPipelineLayout layout,
5115 uint32_t firstSet,
5116 uint32_t setCount,
5117 uint32_t dynamicOffsetCount)
5118{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005119
5120 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5121 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5122 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005123 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005124 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005125 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005126 }
5127
5128
5129
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005130
5131
5132 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005133}
5134
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005135VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005136 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005137 VkPipelineBindPoint pipelineBindPoint,
5138 VkPipelineLayout layout,
5139 uint32_t firstSet,
5140 uint32_t setCount,
5141 const VkDescriptorSet* pDescriptorSets,
5142 uint32_t dynamicOffsetCount,
5143 const uint32_t* pDynamicOffsets)
5144{
Chia-I Wu1f851912015-10-27 18:04:07 +08005145 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005146
Chia-I Wu1f851912015-10-27 18:04:07 +08005147 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005148
Chia-I Wu1f851912015-10-27 18:04:07 +08005149 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005150}
5151
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005152bool PostCmdBindIndexBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005153 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005154 VkBuffer buffer,
5155 VkDeviceSize offset,
5156 VkIndexType indexType)
5157{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005158
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005159
5160
5161 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5162 indexType > VK_INDEX_TYPE_END_RANGE)
5163 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005164 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005165 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005166 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005168
5169 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005170}
5171
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005172VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005173 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174 VkBuffer buffer,
5175 VkDeviceSize offset,
5176 VkIndexType indexType)
5177{
Chia-I Wu1f851912015-10-27 18:04:07 +08005178 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005179
Chia-I Wu1f851912015-10-27 18:04:07 +08005180 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005181}
5182
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005183bool PreCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005184 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005185 const VkBuffer* pBuffers,
5186 const VkDeviceSize* pOffsets)
5187{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005188 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005189 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005190 }
5191
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005192 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005193 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005194 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005195
5196 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005197}
5198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005199bool PostCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005200 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005201 uint32_t startBinding,
5202 uint32_t bindingCount)
5203{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005204
5205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005206
5207 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005208}
5209
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005210VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005211 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005212 uint32_t startBinding,
5213 uint32_t bindingCount,
5214 const VkBuffer* pBuffers,
5215 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005216{
Chia-I Wu1f851912015-10-27 18:04:07 +08005217 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005218
Chia-I Wu1f851912015-10-27 18:04:07 +08005219 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005220
Chia-I Wu1f851912015-10-27 18:04:07 +08005221 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005222}
5223
Michael Lentine0f480e62015-11-24 09:48:23 -06005224bool PreCmdDraw(
5225 VkCommandBuffer commandBuffer,
5226 uint32_t vertexCount,
5227 uint32_t instanceCount,
5228 uint32_t firstVertex,
5229 uint32_t firstInstance)
5230{
5231 if (vertexCount == 0) {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005232 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine0f480e62015-11-24 09:48:23 -06005233 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5234 return false;
5235 }
5236
5237 if (instanceCount == 0) {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005238 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine0f480e62015-11-24 09:48:23 -06005239 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5240 return false;
5241 }
5242
5243 return true;
5244}
5245
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005246bool PostCmdDraw(
Chia-I Wu1f851912015-10-27 18:04:07 +08005247 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005248 uint32_t firstVertex,
5249 uint32_t vertexCount,
5250 uint32_t firstInstance,
5251 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005252{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005253
5254
5255
5256
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005257
5258 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005259}
5260
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005261VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu1f851912015-10-27 18:04:07 +08005262 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005263 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005264 uint32_t instanceCount,
5265 uint32_t firstVertex,
5266 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005267{
Michael Lentine0f480e62015-11-24 09:48:23 -06005268 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5269
Chia-I Wu1f851912015-10-27 18:04:07 +08005270 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005271
Chia-I Wu1f851912015-10-27 18:04:07 +08005272 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005273}
5274
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005275bool PostCmdDrawIndexed(
Chia-I Wu1f851912015-10-27 18:04:07 +08005276 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005277 uint32_t firstIndex,
5278 uint32_t indexCount,
5279 int32_t vertexOffset,
5280 uint32_t firstInstance,
5281 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005282{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005283
5284
5285
5286
5287
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005288
5289 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005290}
5291
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005292VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu1f851912015-10-27 18:04:07 +08005293 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005294 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005295 uint32_t instanceCount,
5296 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005297 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005298 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005299{
Chia-I Wu1f851912015-10-27 18:04:07 +08005300 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005301
Chia-I Wu1f851912015-10-27 18:04:07 +08005302 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005303}
5304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005305bool PostCmdDrawIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005306 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005307 VkBuffer buffer,
5308 VkDeviceSize offset,
5309 uint32_t count,
5310 uint32_t stride)
5311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005312
5313
5314
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005315
5316
5317 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318}
5319
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005320VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005321 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005322 VkBuffer buffer,
5323 VkDeviceSize offset,
5324 uint32_t count,
5325 uint32_t stride)
5326{
Chia-I Wu1f851912015-10-27 18:04:07 +08005327 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005328
Chia-I Wu1f851912015-10-27 18:04:07 +08005329 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005330}
5331
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005332bool PostCmdDrawIndexedIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005333 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005334 VkBuffer buffer,
5335 VkDeviceSize offset,
5336 uint32_t count,
5337 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005338{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005339
5340
5341
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005342
5343
5344 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005345}
5346
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005347VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005348 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005349 VkBuffer buffer,
5350 VkDeviceSize offset,
5351 uint32_t count,
5352 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005353{
Chia-I Wu1f851912015-10-27 18:04:07 +08005354 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005355
Chia-I Wu1f851912015-10-27 18:04:07 +08005356 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005357}
5358
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005359bool PostCmdDispatch(
Chia-I Wu1f851912015-10-27 18:04:07 +08005360 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361 uint32_t x,
5362 uint32_t y,
5363 uint32_t z)
5364{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005365
5366
5367
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005368
5369 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370}
5371
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005372VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu1f851912015-10-27 18:04:07 +08005373 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374 uint32_t x,
5375 uint32_t y,
5376 uint32_t z)
5377{
Chia-I Wu1f851912015-10-27 18:04:07 +08005378 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005379
Chia-I Wu1f851912015-10-27 18:04:07 +08005380 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381}
5382
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005383bool PostCmdDispatchIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005384 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005385 VkBuffer buffer,
5386 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005387{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005388
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005389
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005390
5391 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005392}
5393
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005394VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005395 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005396 VkBuffer buffer,
5397 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005398{
Chia-I Wu1f851912015-10-27 18:04:07 +08005399 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005400
Chia-I Wu1f851912015-10-27 18:04:07 +08005401 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005402}
5403
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005404bool PreCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005405 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005406 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005407{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005408 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005409 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005411
5412 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413}
5414
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005415bool PostCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005416 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005417 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005418 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005419 uint32_t regionCount)
5420{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005421
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005422
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005423
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005424
5425 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005426}
5427
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005428VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005429 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005430 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005431 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005432 uint32_t regionCount,
5433 const VkBufferCopy* pRegions)
5434{
Chia-I Wu1f851912015-10-27 18:04:07 +08005435 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005436
Chia-I Wu1f851912015-10-27 18:04:07 +08005437 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005438
Chia-I Wu1f851912015-10-27 18:04:07 +08005439 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005440}
5441
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005442bool PreCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005443 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005444 const VkImageCopy* pRegions)
5445{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005446 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005447 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005448 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005449 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005450 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005451 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005452 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005453 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005454 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005455 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005456 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005457 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005458 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005459 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005460 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005461 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005462 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005463
5464 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005465}
5466
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005467bool PostCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005468 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005469 VkImage srcImage,
5470 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005471 VkImage dstImage,
5472 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473 uint32_t regionCount)
5474{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005475
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005476
5477 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5478 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5479 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005480 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005481 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005482 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005483 }
5484
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005485
Chia-I Wu1f851912015-10-27 18:04:07 +08005486 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5487 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005489 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005490 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005491 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005492 }
5493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005494
5495 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005496}
5497
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005498VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005499 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 VkImage srcImage,
5501 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005502 VkImage dstImage,
5503 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005504 uint32_t regionCount,
5505 const VkImageCopy* pRegions)
5506{
Chia-I Wu1f851912015-10-27 18:04:07 +08005507 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005508
Chia-I Wu1f851912015-10-27 18:04:07 +08005509 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005510
Chia-I Wu1f851912015-10-27 18:04:07 +08005511 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005512}
5513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005514bool PreCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005515 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005516 const VkImageBlit* pRegions)
5517{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005518 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005520 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005521 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005523 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005524 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005527 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005528 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005530 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005531 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005532 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005533 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005534 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005535
5536 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005537}
5538
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005539bool PostCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005540 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005541 VkImage srcImage,
5542 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005543 VkImage dstImage,
5544 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005545 uint32_t regionCount,
Chia-I Wu3603b082015-10-26 16:49:32 +08005546 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005547{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005548
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005549
5550 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5551 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5552 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005553 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005554 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005555 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005556 }
5557
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005558
Chia-I Wu1f851912015-10-27 18:04:07 +08005559 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5560 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005561 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005562 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005563 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005564 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005565 }
5566
5567
Chia-I Wu3603b082015-10-26 16:49:32 +08005568 if(filter < VK_FILTER_BEGIN_RANGE ||
5569 filter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005570 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005571 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08005572 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005573 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005574 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005575
5576 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577}
5578
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005579VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005580 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581 VkImage srcImage,
5582 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005583 VkImage dstImage,
5584 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005585 uint32_t regionCount,
5586 const VkImageBlit* pRegions,
Chia-I Wu3603b082015-10-26 16:49:32 +08005587 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005588{
Chia-I Wu1f851912015-10-27 18:04:07 +08005589 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005590
Chia-I Wu1f851912015-10-27 18:04:07 +08005591 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592
Chia-I Wu1f851912015-10-27 18:04:07 +08005593 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594}
5595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596bool PreCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005597 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005598 const VkBufferImageCopy* pRegions)
5599{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005600 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005602 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005603 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005604 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005605 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005606 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005607 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005608 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005609 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005610
5611 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005612}
5613
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005614bool PostCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005615 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005617 VkImage dstImage,
5618 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005619 uint32_t regionCount)
5620{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005621
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005622
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005623
Chia-I Wu1f851912015-10-27 18:04:07 +08005624 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5625 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005626 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005627 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005628 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005629 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005630 }
5631
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005632
5633 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005634}
5635
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005636VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005637 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005638 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005639 VkImage dstImage,
5640 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641 uint32_t regionCount,
5642 const VkBufferImageCopy* pRegions)
5643{
Chia-I Wu1f851912015-10-27 18:04:07 +08005644 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005645
Chia-I Wu1f851912015-10-27 18:04:07 +08005646 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647
Chia-I Wu1f851912015-10-27 18:04:07 +08005648 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005649}
5650
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005651bool PreCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005652 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005653 const VkBufferImageCopy* pRegions)
5654{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005655 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005656 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005657 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005658 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005659 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005660 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005661 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005662 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005664 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005665
5666 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005667}
5668
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005669bool PostCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005670 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005671 VkImage srcImage,
5672 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005673 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005674 uint32_t regionCount)
5675{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005676
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677
5678 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5679 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5680 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005681 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005682 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005683 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684 }
5685
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005686
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005687
5688 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689}
5690
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005691VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005692 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005693 VkImage srcImage,
5694 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005695 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696 uint32_t regionCount,
5697 const VkBufferImageCopy* pRegions)
5698{
Chia-I Wu1f851912015-10-27 18:04:07 +08005699 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005700
Chia-I Wu1f851912015-10-27 18:04:07 +08005701 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005702
Chia-I Wu1f851912015-10-27 18:04:07 +08005703 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005704}
5705
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005706bool PreCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005707 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005708 const uint32_t* pData)
5709{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005710 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005711 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005712 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005713
5714 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005715}
5716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005717bool PostCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005718 VkCommandBuffer commandBuffer,
5719 VkBuffer dstBuffer,
5720 VkDeviceSize dstOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005721 VkDeviceSize dataSize)
5722{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005723
5724
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005725
5726
5727 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005728}
5729
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005730VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005731 VkCommandBuffer commandBuffer,
5732 VkBuffer dstBuffer,
5733 VkDeviceSize dstOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005734 VkDeviceSize dataSize,
5735 const uint32_t* pData)
5736{
Chia-I Wu1f851912015-10-27 18:04:07 +08005737 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005738
Chia-I Wu1f851912015-10-27 18:04:07 +08005739 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005740
Chia-I Wu1f851912015-10-27 18:04:07 +08005741 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742}
5743
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005744bool PostCmdFillBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005745 VkCommandBuffer commandBuffer,
5746 VkBuffer dstBuffer,
5747 VkDeviceSize dstOffset,
Chia-I Wu7e470702015-10-26 17:24:52 +08005748 VkDeviceSize size,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005749 uint32_t data)
5750{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005751
5752
5753
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005754
5755
5756 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005757}
5758
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005759VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005760 VkCommandBuffer commandBuffer,
5761 VkBuffer dstBuffer,
5762 VkDeviceSize dstOffset,
Chia-I Wu7e470702015-10-26 17:24:52 +08005763 VkDeviceSize size,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005764 uint32_t data)
5765{
Chia-I Wu1f851912015-10-27 18:04:07 +08005766 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767
Chia-I Wu1f851912015-10-27 18:04:07 +08005768 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005769}
5770
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005771bool PreCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005772 VkCommandBuffer commandBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12005773 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774 const VkImageSubresourceRange* pRanges)
5775{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005776 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005777 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 }
5779
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005780 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005781 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005782 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005783 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784
5785 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005786}
5787
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005788bool PostCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005789 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005790 VkImage image,
5791 VkImageLayout imageLayout,
5792 uint32_t rangeCount)
5793{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005794
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795
5796 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5797 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5798 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005799 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005800 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005801 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 }
5803
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005804
5805 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005806}
5807
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005808VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005809 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005810 VkImage image,
5811 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12005812 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005813 uint32_t rangeCount,
5814 const VkImageSubresourceRange* pRanges)
5815{
Chia-I Wu1f851912015-10-27 18:04:07 +08005816 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005817
Chia-I Wu1f851912015-10-27 18:04:07 +08005818 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005819
Chia-I Wu1f851912015-10-27 18:04:07 +08005820 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821}
5822
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005823bool PreCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005824 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825 const VkImageSubresourceRange* pRanges)
5826{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005827 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005829 /*
5830 * TODO: How do we validation pRanges->aspectMask?
5831 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5832 * VK_IMAGE_ASPECT_STENCIL_BIT.
5833 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005834 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005835
5836 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005837}
5838
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005839bool PostCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005840 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841 VkImage image,
5842 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005843 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005844 uint32_t rangeCount)
5845{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005846
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005847
5848 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5849 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5850 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005851 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005852 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005853 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005854 }
5855
5856
5857
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858
5859 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005860}
5861
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005862VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005863 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005864 VkImage image,
5865 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005866 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005867 uint32_t rangeCount,
5868 const VkImageSubresourceRange* pRanges)
5869{
Chia-I Wu1f851912015-10-27 18:04:07 +08005870 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005871
Chia-I Wu1f851912015-10-27 18:04:07 +08005872 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005873
Chia-I Wu1f851912015-10-27 18:04:07 +08005874 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005875}
5876
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005877bool PreCmdClearAttachments(
Chia-I Wu1f851912015-10-27 18:04:07 +08005878 VkCommandBuffer commandBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005879 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005880 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005881{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005882 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005883 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005884 }
5885
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005886 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005887 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005888 }
5889
5890 return true;
5891}
5892
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005893VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu1f851912015-10-27 18:04:07 +08005894 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005895 uint32_t attachmentCount,
5896 const VkClearAttachment* pAttachments,
5897 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005898 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005899{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005900 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu1f851912015-10-27 18:04:07 +08005901 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902 }
5903
Chia-I Wu1f851912015-10-27 18:04:07 +08005904 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905}
5906
5907bool PreCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005908 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005909 const VkImageResolve* pRegions)
5910{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005911 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005912 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005913 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005914 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005915 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005916 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005917 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005918 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005919 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005920 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005921 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005923 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005924 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005925 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005927 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005928
5929 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930}
5931
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932bool PostCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005933 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005934 VkImage srcImage,
5935 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005936 VkImage dstImage,
5937 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938 uint32_t regionCount)
5939{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005940
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941
5942 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5943 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5944 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005945 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005946 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005947 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005948 }
5949
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005950
Chia-I Wu1f851912015-10-27 18:04:07 +08005951 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5952 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07005954 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005955 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005956 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 }
5958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005959
5960 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005961}
5962
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005963VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005964 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965 VkImage srcImage,
5966 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005967 VkImage dstImage,
5968 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005969 uint32_t regionCount,
5970 const VkImageResolve* pRegions)
5971{
Chia-I Wu1f851912015-10-27 18:04:07 +08005972 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005973
Chia-I Wu1f851912015-10-27 18:04:07 +08005974 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005975
Chia-I Wu1f851912015-10-27 18:04:07 +08005976 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005977}
5978
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005979bool PostCmdSetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005980 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005981 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005982 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005983{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005984
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005985
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005986
5987 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005988}
5989
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005990VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005991 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005992 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005993 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005994{
Chia-I Wu1f851912015-10-27 18:04:07 +08005995 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005996
Chia-I Wu1f851912015-10-27 18:04:07 +08005997 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005998}
5999
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006000bool PostCmdResetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08006001 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006002 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006003 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006004{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006005
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006006
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006007
6008 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009}
6010
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006011VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08006012 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006013 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006014 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006015{
Chia-I Wu1f851912015-10-27 18:04:07 +08006016 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006017
Chia-I Wu1f851912015-10-27 18:04:07 +08006018 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019}
6020
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006021bool PreCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006022 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006023 const VkEvent* pEvents,
Chia-I Wu1f851912015-10-27 18:04:07 +08006024 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006025{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006026 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006028 }
6029
Chia-I Wu1f851912015-10-27 18:04:07 +08006030 if(ppMemoryBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006031 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006033
6034 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035}
6036
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006037bool PostCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006038 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006039 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006040 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006041 VkPipelineStageFlags dstStageMask,
6042 uint32_t memoryBarrierCount)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006043{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006044
Tony Barbourc2e987e2015-06-29 16:20:35 -06006045
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046
6047
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006048
6049 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006050}
6051
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006052VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006053 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006054 uint32_t eventCount,
6055 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006056 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006057 VkPipelineStageFlags dstStageMask,
6058 uint32_t memoryBarrierCount,
6059 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006060{
Chia-I Wu1f851912015-10-27 18:04:07 +08006061 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006062
Chia-I Wu1f851912015-10-27 18:04:07 +08006063 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006064
Chia-I Wu1f851912015-10-27 18:04:07 +08006065 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006066}
6067
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006068bool PreCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006069 VkCommandBuffer commandBuffer,
6070 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006071{
Chia-I Wu1f851912015-10-27 18:04:07 +08006072 if(ppMemoryBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006074 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006075
6076 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077}
6078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079bool PostCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006080 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006081 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006082 VkPipelineStageFlags dstStageMask,
Chia-I Wu3ffcd732015-10-26 17:08:33 +08006083 VkDependencyFlags dependencyFlags,
Chia-I Wu1f851912015-10-27 18:04:07 +08006084 uint32_t memoryBarrierCount)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006085{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006086
Tony Barbourc2e987e2015-06-29 16:20:35 -06006087
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006088
6089
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006090
6091 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006092}
6093
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006094VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006095 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006096 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006097 VkPipelineStageFlags dstStageMask,
Chia-I Wu3ffcd732015-10-26 17:08:33 +08006098 VkDependencyFlags dependencyFlags,
Chia-I Wu1f851912015-10-27 18:04:07 +08006099 uint32_t memoryBarrierCount,
6100 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101{
Chia-I Wu1f851912015-10-27 18:04:07 +08006102 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006103
Chia-I Wu1f851912015-10-27 18:04:07 +08006104 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006105
Chia-I Wu1f851912015-10-27 18:04:07 +08006106 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006107}
6108
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006109bool PostCmdBeginQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006110 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111 VkQueryPool queryPool,
6112 uint32_t slot,
6113 VkQueryControlFlags flags)
6114{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006115
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006116
6117
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006118
6119 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006120}
6121
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006122VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006123 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006124 VkQueryPool queryPool,
6125 uint32_t slot,
6126 VkQueryControlFlags flags)
6127{
Chia-I Wu1f851912015-10-27 18:04:07 +08006128 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006129
Chia-I Wu1f851912015-10-27 18:04:07 +08006130 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006131}
6132
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006133bool PostCmdEndQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006134 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006135 VkQueryPool queryPool,
6136 uint32_t slot)
6137{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006139
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006140
6141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006142}
6143
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006144VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006145 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006146 VkQueryPool queryPool,
6147 uint32_t slot)
6148{
Chia-I Wu1f851912015-10-27 18:04:07 +08006149 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006150
Chia-I Wu1f851912015-10-27 18:04:07 +08006151 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006152}
6153
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006154bool PostCmdResetQueryPool(
Chia-I Wu1f851912015-10-27 18:04:07 +08006155 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006156 VkQueryPool queryPool,
6157 uint32_t startQuery,
6158 uint32_t queryCount)
6159{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006160
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006161
6162
6163
6164 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006165}
6166
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006167VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu1f851912015-10-27 18:04:07 +08006168 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006169 VkQueryPool queryPool,
6170 uint32_t startQuery,
6171 uint32_t queryCount)
6172{
Chia-I Wu1f851912015-10-27 18:04:07 +08006173 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006174
Chia-I Wu1f851912015-10-27 18:04:07 +08006175 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006176}
6177
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006178bool PostCmdWriteTimestamp(
Chia-I Wu1f851912015-10-27 18:04:07 +08006179 VkCommandBuffer commandBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006180 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006181 VkQueryPool queryPool,
6182 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006183{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006184
Chia-I Wu59c215d2015-10-26 19:40:27 +08006185 ValidateEnumerator(pipelineStage);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006186
6187 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006188}
6189
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006190VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu1f851912015-10-27 18:04:07 +08006191 VkCommandBuffer commandBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006192 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006193 VkQueryPool queryPool,
6194 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006195{
Chia-I Wu1f851912015-10-27 18:04:07 +08006196 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006197
Chia-I Wu1f851912015-10-27 18:04:07 +08006198 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006199}
6200
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006201bool PostCmdCopyQueryPoolResults(
Chia-I Wu1f851912015-10-27 18:04:07 +08006202 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006203 VkQueryPool queryPool,
6204 uint32_t startQuery,
6205 uint32_t queryCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08006206 VkBuffer dstBuffer,
6207 VkDeviceSize dstOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006208 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006209 VkQueryResultFlags flags)
6210{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006211
6212
6213
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006214
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006215
6216
6217
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006218
6219 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006220}
6221
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006222VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu1f851912015-10-27 18:04:07 +08006223 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006224 VkQueryPool queryPool,
6225 uint32_t startQuery,
6226 uint32_t queryCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08006227 VkBuffer dstBuffer,
6228 VkDeviceSize dstOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006229 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006230 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006231{
Chia-I Wu1f851912015-10-27 18:04:07 +08006232 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006233
Chia-I Wu1f851912015-10-27 18:04:07 +08006234 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006235}
6236
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006237bool PreCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006238 VkCommandBuffer commandBuffer,
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006239 const void* pValues)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006240{
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006241 if(pValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006242 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006243 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006244
6245 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006246}
6247
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006248bool PostCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006249 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006250 VkPipelineLayout layout,
6251 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006252 uint32_t offset,
6253 uint32_t size)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006254{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006255
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006256
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006257
6258
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006259
6260 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006261}
6262
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006263VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006264 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006265 VkPipelineLayout layout,
6266 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006267 uint32_t offset,
6268 uint32_t size,
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006269 const void* pValues)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006270{
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006271 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006272
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006273 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006274
Chia-I Wu1f851912015-10-27 18:04:07 +08006275 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006276}
6277
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006278bool PreCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006279 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006280 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006281{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006282 if(pRenderPassBegin != nullptr)
6283 {
6284 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006285 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07006286 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006287 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006288 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006289 }
Cody Northropc332eef2015-08-04 11:51:03 -06006290 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006292 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006293 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006294
6295 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006296}
6297
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006298bool PostCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006299 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006300 VkSubpassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006301{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006302
Chia-I Wuc51b1212015-10-27 19:25:11 +08006303 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6304 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006305 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07006306 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08006307 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006308 return false;
6309 }
6310
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006311 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006312}
6313
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006314VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006315 VkCommandBuffer commandBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006316 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006317 VkSubpassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006318{
Chia-I Wu1f851912015-10-27 18:04:07 +08006319 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006320
Chia-I Wu1f851912015-10-27 18:04:07 +08006321 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006322
Chia-I Wu1f851912015-10-27 18:04:07 +08006323 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006324}
6325
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006326bool PostCmdNextSubpass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006327 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006328 VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08006329{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006330
Chia-I Wuc51b1212015-10-27 19:25:11 +08006331 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6332 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006333 {
Courtney Goeltzenleuchter95e6dba2015-11-25 11:38:54 -07006334 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDebugReportObjectTypeLUNARG)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08006335 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006336 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006337 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006338
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006339 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006340}
6341
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006342VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006343 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006344 VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08006345{
Chia-I Wu1f851912015-10-27 18:04:07 +08006346 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wuc278df82015-07-07 11:50:03 +08006347
Chia-I Wu1f851912015-10-27 18:04:07 +08006348 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006349}
6350
6351bool PostCmdEndRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006352 VkCommandBuffer commandBuffer)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006353{
6354
6355 return true;
6356}
6357
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006358VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006359 VkCommandBuffer commandBuffer)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006360{
Chia-I Wu1f851912015-10-27 18:04:07 +08006361 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006362
Chia-I Wu1f851912015-10-27 18:04:07 +08006363 PostCmdEndRenderPass(commandBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006364}
6365
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006366bool PreCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006367 VkCommandBuffer commandBuffer,
6368 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006369{
Chia-I Wu1f851912015-10-27 18:04:07 +08006370 if(pCommandBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006371 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006372 }
6373
6374 return true;
6375}
6376
6377bool PostCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006378 VkCommandBuffer commandBuffer,
6379 uint32_t commandBuffersCount)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006380{
6381
6382
6383 return true;
6384}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006385
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006386VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006387 VkCommandBuffer commandBuffer,
6388 uint32_t commandBuffersCount,
6389 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006390{
Chia-I Wu1f851912015-10-27 18:04:07 +08006391 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006392
Chia-I Wu1f851912015-10-27 18:04:07 +08006393 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006394
Chia-I Wu1f851912015-10-27 18:04:07 +08006395 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006396}
6397
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006398VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006399{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006400 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006401 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006402 }
6403
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006404 /* loader uses this to force layer initialization; device object is wrapped */
6405 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006406 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006407 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006408 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006409
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006410 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006411 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006412 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006413 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006414 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006415 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006416 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006417 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006418 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006419 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006420 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006421 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu1f851912015-10-27 18:04:07 +08006422 if (!strcmp(funcName, "vkAllocateMemory"))
6423 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006424 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006425 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006426 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006427 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006428 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006429 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006430 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006431 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006432 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006433 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006434 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006435 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006436 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006437 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006438 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006439 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006440 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006441 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006442 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006443 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006444 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006445 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006446 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006447 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006448 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006449 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006450 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006451 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006452 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006454 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006455 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006456 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006458 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine6715e522015-09-15 14:59:14 -05006462 if (!strcmp(funcName, "vkCreateShaderModule"))
6463 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006464 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006465 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006466 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006467 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006468 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006469 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006470 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006471 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006472 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006473 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006474 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006475 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006476 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006477 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu1f851912015-10-27 18:04:07 +08006478 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6479 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006480 if (!strcmp(funcName, "vkCmdSetViewport"))
6481 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006482 if (!strcmp(funcName, "vkCmdSetScissor"))
6483 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006484 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6485 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6486 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6487 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6488 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6489 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6490 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6491 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6492 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6493 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6494 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6495 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6496 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6497 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu1f851912015-10-27 18:04:07 +08006498 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6499 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006502 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006503 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006504 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006505 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006506 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006508 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006518 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006519 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006520 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006521 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006523 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006525 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006526 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006568 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006570
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006571 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006572 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006573 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006574 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006575 }
6576}
6577
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006578VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006579{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006580 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006581 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006582 }
6583
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006584 /* loader uses this to force layer initialization; instance object is wrapped */
6585 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006588 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006589
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006600 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006602 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6603 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6604 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6605 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6606 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6607 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6608 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6609 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006610
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006611 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006612 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006613 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006614 return fptr;
6615
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006616 {
6617 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6618 return NULL;
6619 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6620 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006621}