blob: e7c7e63b4983c54b724285d06d42a11c809571a5 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
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.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
32
33#include "loader_platform.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060034#include "vkLayer.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060035#include "layers_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060036#include "vk_enum_validate_helper.h"
37#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060038//The following is #included again to catch certain OS-specific functions being used:
39#include "loader_platform.h"
40
41#include "layers_msg.h"
42
Jon Ashburn301c5f02015-04-06 10:58:22 -060043static VkLayerDispatchTable nextTable;
44static VkBaseLayerObject *pCurObj;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060045static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(tabOnce);
46
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060047#include "vk_dispatch_table_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060048static void initParamChecker(void)
49{
50
51 const char *strOpt;
52 // initialize ParamChecker options
53 getLayerOptionEnum("ParamCheckerReportLevel", (uint32_t *) &g_reportingLevel);
54 g_actionIsDefault = getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &g_debugAction);
55
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060056 if (g_debugAction & VK_DBG_LAYER_ACTION_LOG_MSG)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060057 {
58 strOpt = getLayerOption("ParamCheckerLogFilename");
59 if (strOpt)
60 {
61 g_logFile = fopen(strOpt, "w");
62 }
63 if (g_logFile == NULL)
64 g_logFile = stdout;
65 }
66
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060067 PFN_vkGetProcAddr fpNextGPA;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060068 fpNextGPA = pCurObj->pGPA;
69 assert(fpNextGPA);
70
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060071 layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalGpu) pCurObj->nextObject);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060072}
73
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060074void PreCreateInstance(const VkApplicationInfo* pAppInfo, const VkAllocCallbacks* pAllocCb)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060075{
76 if(pAppInfo == nullptr)
77 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060078 char const str[] = "vkCreateInstance parameter, VkApplicationInfo* pAppInfo, is "\
Mike Stroyan0ae32252015-04-06 15:24:46 -060079 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060080 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060081 return;
82 }
83
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060084 if(pAppInfo->sType != VK_STRUCTURE_TYPE_APPLICATION_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060085 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060086 char const str[] = "vkCreateInstance parameter, VK_STRUCTURE_TYPE_APPLICATION_INFO "\
87 "pAppInfo->sType, is not VK_STRUCTURE_TYPE_APPLICATION_INFO (precondition).";
88 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060089 return;
90 }
91
92 // TODO: What else can validated in pAppInfo?
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060093 // TODO: VK_API_VERSION validation.
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060094
95 // It's okay if pAllocCb is a nullptr.
96 if(pAllocCb != nullptr)
97 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -060098 if(!vk_validate_vkalloccallbacks(pAllocCb))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060099 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600100 char const str[] = "vkCreateInstance parameter, VkAllocCallbacks* pAllocCb, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600101 "contains an invalid value (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600102 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600103 return;
104 }
105 }
106}
107
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600108void PostCreateInstance(VkResult result, VkInstance* pInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600109{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600110 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600111 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600112 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600113 char const str[] = "vkCreateInstance failed (postcondition).";
114 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600115 return;
116 }
117
118 if(pInstance == nullptr)
119 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600120 char const str[] = "vkCreateInstance parameter, VkInstance* pInstance, is nullptr "\
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600121 "(postcondition).";
122 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600123 return;
124 }
125}
126
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600127VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600128{
Jon Ashburn29669a42015-04-04 14:52:07 -0600129 PreCreateInstance(pCreateInfo->pAppInfo, pCreateInfo->pAllocCb);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600130 VkResult result = nextTable.CreateInstance(pCreateInfo, pInstance);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600131 PostCreateInstance(result, pInstance);
132 return result;
133}
134
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600135VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(VkInstance instance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600136{
137
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600138 VkResult result = nextTable.DestroyInstance(instance);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600139 return result;
140}
141
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600142VK_LAYER_EXPORT VkResult VKAPI vkEnumerateGpus(VkInstance instance, uint32_t maxGpus, uint32_t* pGpuCount, VkPhysicalGpu* pGpus)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600143{
144
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600145 VkResult result = nextTable.EnumerateGpus(instance, maxGpus, pGpuCount, pGpus);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600146 return result;
147}
148
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600149VK_LAYER_EXPORT VkResult VKAPI vkGetGpuInfo(VkPhysicalGpu gpu, VkPhysicalGpuInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600150{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600151 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600152 loader_platform_thread_once(&tabOnce, initParamChecker);
153 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600154 if (!validate_VkPhysicalGpuInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600155 sprintf(str, "Parameter infoType to function GetGpuInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600156 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600157 }
Jon Ashburn630e44f2015-04-08 21:33:34 -0600158 VkResult result = nextTable.GetGpuInfo(gpu, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600159 return result;
160}
161
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600162void PreCreateDevice(VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600163{
164 if(gpu == nullptr)
165 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600166 char const str[] = "vkCreateDevice parameter, VkPhysicalGpu gpu, is nullptr "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600167 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600168 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600169 return;
170 }
171
172 if(pCreateInfo == nullptr)
173 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600174 char const str[] = "vkCreateDevice parameter, VkDeviceCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600175 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600176 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600177 return;
178 }
179
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600180 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600181 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600182 char const str[] = "vkCreateDevice parameter, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO "\
183 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO (precondition).";
184 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600185 return;
186 }
187
188 if(pCreateInfo->queueRecordCount == 0)
189 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600190 char const str[] = "vkCreateDevice parameter, uint32_t pCreateInfo->queueRecordCount, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600191 "zero (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600192 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600193 return;
194 }
195
196 if(pCreateInfo->pRequestedQueues == nullptr)
197 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600198 char const str[] = "vkCreateDevice parameter, VkDeviceQueueCreateInfo* pCreateInfo->pRequestedQueues, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600199 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600200 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600201 return;
202 }
203
204 for(uint32_t i = 0; i < pCreateInfo->queueRecordCount; ++i)
205 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600206 if(!vk_validate_vkdevicequeuecreateinfo(&(pCreateInfo->pRequestedQueues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600207 {
208 std::stringstream ss;
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600209 ss << "vkCreateDevice parameter, VkDeviceQueueCreateInfo pCreateInfo->pRequestedQueues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600210 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600211 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600212 continue;
213 }
214 }
215
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600216 if(!validate_VkValidationLevel(pCreateInfo->maxValidationLevel))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600217 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600218 char const str[] = "vkCreateDevice parameter, VkValidationLevel pCreateInfo->maxValidationLevel, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600219 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600220 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600221 return;
222 }
223}
224
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600225void PostCreateDevice(VkResult result, VkDevice* pDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600226{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600227 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600228 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600229 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600230 char const str[] = "vkCreateDevice failed (postcondition).";
231 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600232 return;
233 }
234
235 if(pDevice == nullptr)
236 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600237 char const str[] = "vkCreateDevice parameter, VkDevice* pDevice, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600238 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600239 return;
240 }
241}
242
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600243VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600244{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600245 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600246 loader_platform_thread_once(&tabOnce, initParamChecker);
247 PreCreateDevice(gpu, pCreateInfo);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600248 VkResult result = nextTable.CreateDevice(gpu, pCreateInfo, pDevice);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600249 PostCreateDevice(result, pDevice);
250 return result;
251}
252
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600253VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600254{
255
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600256 VkResult result = nextTable.DestroyDevice(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600257 return result;
258}
259
Jon Ashburneb2728b2015-04-10 14:33:07 -0600260struct extProps {
261 uint32_t version;
262 const char * const name;
263};
264
265#define PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE 1
266static const struct extProps pcExts[PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE] = {
267 // TODO what is the version?
268 0x10, "ParamChecker",
269};
270
271VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
272 VkExtensionInfoType infoType,
273 uint32_t extensionIndex,
274 size_t* pDataSize,
275 void* pData)
276{
277 VkResult result;
278
279 /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */
280 VkExtensionProperties *ext_props;
281 uint32_t *count;
282
283 if (pDataSize == NULL)
284 return VK_ERROR_INVALID_POINTER;
285
286 switch (infoType) {
287 case VK_EXTENSION_INFO_TYPE_COUNT:
288 *pDataSize = sizeof(uint32_t);
289 if (pData == NULL)
290 return VK_SUCCESS;
291 count = (uint32_t *) pData;
292 *count = PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE;
293 break;
294 case VK_EXTENSION_INFO_TYPE_PROPERTIES:
295 *pDataSize = sizeof(VkExtensionProperties);
296 if (pData == NULL)
297 return VK_SUCCESS;
298 if (extensionIndex >= PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE)
299 return VK_ERROR_INVALID_VALUE;
300 ext_props = (VkExtensionProperties *) pData;
301 ext_props->version = pcExts[extensionIndex].version;
302 strncpy(ext_props->extName, pcExts[extensionIndex].name,
303 VK_MAX_EXTENSION_NAME);
304 ext_props->extName[VK_MAX_EXTENSION_NAME - 1] = '\0';
305 break;
306 default:
307 return VK_ERROR_INVALID_VALUE;
308 };
309
310 return VK_SUCCESS;
311}
312
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600313VK_LAYER_EXPORT VkResult VKAPI vkGetExtensionSupport(VkPhysicalGpu gpu, const char* pExtName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600314{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600315 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600316 loader_platform_thread_once(&tabOnce, initParamChecker);
317
Jon Ashburn630e44f2015-04-08 21:33:34 -0600318 VkResult result = nextTable.GetExtensionSupport(gpu, pExtName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600319 return result;
320}
321
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600322VK_LAYER_EXPORT VkResult VKAPI vkEnumerateLayers(VkPhysicalGpu gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600323{
324 char str[1024];
325 if (gpu != NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600326 sprintf(str, "At start of layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600327 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600328 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600329 loader_platform_thread_once(&tabOnce, initParamChecker);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600330 VkResult result = nextTable.EnumerateLayers(gpu, maxLayerCount, maxStringSize, pOutLayerCount, pOutLayers, pReserved);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600331 sprintf(str, "Completed layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600332 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600333 fflush(stdout);
334 return result;
335 } else {
336 if (pOutLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600337 return VK_ERROR_INVALID_POINTER;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600338 // This layer compatible with all GPUs
339 *pOutLayerCount = 1;
340 strncpy(pOutLayers[0], "ParamChecker", maxStringSize);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600341 return VK_SUCCESS;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600342 }
343}
344
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600345VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600346{
347
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600348 VkResult result = nextTable.GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600349 return result;
350}
351
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600352VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600353{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600354 VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600355 return result;
356}
357
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600358VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600359{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600360 VkResult result = nextTable.QueueAddMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600361 return result;
362}
363
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600364VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600365{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600366 VkResult result = nextTable.QueueRemoveMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600367 return result;
368}
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600369VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600370{
371
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600372 VkResult result = nextTable.QueueWaitIdle(queue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600373 return result;
374}
375
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600376VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600377{
378
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600379 VkResult result = nextTable.DeviceWaitIdle(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600380 return result;
381}
382
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600383VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600384{
385 char str[1024];
386 if (!pAllocInfo) {
387 sprintf(str, "Struct ptr parameter pAllocInfo to function AllocMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600388 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600389 } else if (!vk_validate_vkmemoryallocinfo(pAllocInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600390 sprintf(str, "Parameter pAllocInfo to function AllocMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600391 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600392 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600393 VkResult result = nextTable.AllocMemory(device, pAllocInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600394 return result;
395}
396
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600397VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600398{
399
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600400 VkResult result = nextTable.FreeMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600401 return result;
402}
403
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600404VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkGpuMemory mem, VkMemoryPriority priority)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600405{
406 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600407 if (!validate_VkMemoryPriority(priority)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600408 sprintf(str, "Parameter priority to function SetMemoryPriority has invalid value of %i.", (int)priority);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600409 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600410 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600411 VkResult result = nextTable.SetMemoryPriority(mem, priority);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600412 return result;
413}
414
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600415VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkGpuMemory mem, VkFlags flags, void** ppData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600416{
417
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600418 VkResult result = nextTable.MapMemory(mem, flags, ppData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600419 return result;
420}
421
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600422VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600423{
424
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600425 VkResult result = nextTable.UnmapMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600426 return result;
427}
428
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600429VK_LAYER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600430{
431
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600432 VkResult result = nextTable.PinSystemMemory(device, pSysMem, memSize, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600433 return result;
434}
435
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600436VK_LAYER_EXPORT VkResult VKAPI vkGetMultiGpuCompatibility(VkPhysicalGpu gpu0, VkPhysicalGpu gpu1, VkGpuCompatibilityInfo* pInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600437{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600438 pCurObj = (VkBaseLayerObject *) gpu0;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600439 loader_platform_thread_once(&tabOnce, initParamChecker);
440
Jon Ashburn630e44f2015-04-08 21:33:34 -0600441 VkResult result = nextTable.GetMultiGpuCompatibility(gpu0, gpu1, pInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600442 return result;
443}
444
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600445VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600446{
447 char str[1024];
448 if (!pOpenInfo) {
449 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600450 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600451 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600452 else if (!vk_validate_vkmemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600453 sprintf(str, "Parameter pOpenInfo to function OpenSharedMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600454 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600455 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600456 VkResult result = nextTable.OpenSharedMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600457 return result;
458}
459
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600460VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600461{
462 char str[1024];
463 if (!pOpenInfo) {
464 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600465 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600466 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600467 else if (!vk_validate_vksemaphoreopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600468 sprintf(str, "Parameter pOpenInfo to function OpenSharedSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600469 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600470 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600471 VkResult result = nextTable.OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600472 return result;
473}
474
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600475VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600476{
477 char str[1024];
478 if (!pOpenInfo) {
479 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600480 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600481 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600482 else if (!vk_validate_vkpeermemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600483 sprintf(str, "Parameter pOpenInfo to function OpenPeerMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600484 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600485 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600486 VkResult result = nextTable.OpenPeerMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600487 return result;
488}
489
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600490VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600491{
492 char str[1024];
493 if (!pOpenInfo) {
494 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerImage is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600495 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600496 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600497 else if (!vk_validate_vkpeerimageopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600498 sprintf(str, "Parameter pOpenInfo to function OpenPeerImage contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600499 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600500 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600501 VkResult result = nextTable.OpenPeerImage(device, pOpenInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600502 return result;
503}
504
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600505VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600506{
507
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600508 VkResult result = nextTable.DestroyObject(object);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600509 return result;
510}
511
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600512VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600513{
514 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600515 if (!validate_VkObjectInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600516 sprintf(str, "Parameter infoType to function GetObjectInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600517 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600518 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600519 VkResult result = nextTable.GetObjectInfo(object, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600520 return result;
521}
522
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600523VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkObject object, uint32_t allocationIdx, VkGpuMemory mem, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600524{
525
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600526 VkResult result = nextTable.BindObjectMemory(object, allocationIdx, mem, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600527 return result;
528}
529
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600530VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemoryRange(VkObject object, uint32_t allocationIdx, VkGpuSize rangeOffset, VkGpuSize rangeSize, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600531{
532
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600533 VkResult result = nextTable.BindObjectMemoryRange(object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600534 return result;
535}
536
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600537VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemoryRange(VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* bindInfo, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600538{
539 char str[1024];
540 if (!bindInfo) {
541 sprintf(str, "Struct ptr parameter bindInfo to function BindImageMemoryRange is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600542 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600543 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600544 else if (!vk_validate_vkimagememorybindinfo(bindInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600545 sprintf(str, "Parameter bindInfo to function BindImageMemoryRange contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600546 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600547 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600548 VkResult result = nextTable.BindImageMemoryRange(image, allocationIdx, bindInfo, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600549 return result;
550}
551
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600552VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600553{
554 char str[1024];
555 if (!pCreateInfo) {
556 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFence is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600557 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600558 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600559 else if (!vk_validate_vkfencecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600560 sprintf(str, "Parameter pCreateInfo to function CreateFence contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600561 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600562 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600563 VkResult result = nextTable.CreateFence(device, pCreateInfo, pFence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600564 return result;
565}
566
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600567VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600568{
569
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600570 VkResult result = nextTable.GetFenceStatus(fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600571 return result;
572}
573
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600574VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600575{
576
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600577 VkResult result = nextTable.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600578 return result;
579}
580
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600581VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500582{
583
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600584 VkResult result = nextTable.ResetFences(device, fenceCount, pFences);
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500585 return result;
586}
587
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600588VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600589{
590 char str[1024];
591 if (!pCreateInfo) {
592 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600593 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600594 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600595 else if (!vk_validate_vksemaphorecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600596 sprintf(str, "Parameter pCreateInfo to function CreateSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600597 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600598 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600599 VkResult result = nextTable.CreateSemaphore(device, pCreateInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600600 return result;
601}
602
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600603VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600604{
605
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600606 VkResult result = nextTable.QueueSignalSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600607 return result;
608}
609
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600610VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600611{
612
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600613 VkResult result = nextTable.QueueWaitSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600614 return result;
615}
616
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600617VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600618{
619 char str[1024];
620 if (!pCreateInfo) {
621 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateEvent is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600622 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600623 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600624 else if (!vk_validate_vkeventcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600625 sprintf(str, "Parameter pCreateInfo to function CreateEvent contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600626 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600627 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600628 VkResult result = nextTable.CreateEvent(device, pCreateInfo, pEvent);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600629 return result;
630}
631
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600632VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600633{
634
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600635 VkResult result = nextTable.GetEventStatus(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600636 return result;
637}
638
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600639VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600640{
641
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600642 VkResult result = nextTable.SetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600643 return result;
644}
645
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600646VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600647{
648
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600649 VkResult result = nextTable.ResetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600650 return result;
651}
652
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600653VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600654{
655 char str[1024];
656 if (!pCreateInfo) {
657 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateQueryPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600658 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600659 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600660 else if (!vk_validate_vkquerypoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600661 sprintf(str, "Parameter pCreateInfo to function CreateQueryPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600662 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600663 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600664 VkResult result = nextTable.CreateQueryPool(device, pCreateInfo, pQueryPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600665 return result;
666}
667
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600668VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600669{
670
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600671 VkResult result = nextTable.GetQueryPoolResults(queryPool, startQuery, queryCount, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600672 return result;
673}
674
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600675VK_LAYER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600676{
677 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600678 if (!validate_VkFormat(format)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600679 sprintf(str, "Parameter format to function GetFormatInfo has invalid value of %i.", (int)format);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600680 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600681 }
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600682 if (!validate_VkFormatInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600683 sprintf(str, "Parameter infoType to function GetFormatInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600684 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600685 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600686 VkResult result = nextTable.GetFormatInfo(device, format, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600687 return result;
688}
689
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600690VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600691{
692 char str[1024];
693 if (!pCreateInfo) {
694 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600695 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600696 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600697 else if (!vk_validate_vkbuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600698 sprintf(str, "Parameter pCreateInfo to function CreateBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600699 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600700 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600701 VkResult result = nextTable.CreateBuffer(device, pCreateInfo, pBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600702 return result;
703}
704
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600705VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600706{
707 char str[1024];
708 if (!pCreateInfo) {
709 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBufferView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600710 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600711 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600712 else if (!vk_validate_vkbufferviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600713 sprintf(str, "Parameter pCreateInfo to function CreateBufferView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600714 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600715 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600716 VkResult result = nextTable.CreateBufferView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600717 return result;
718}
719
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600720void PreCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600721{
722 if(pCreateInfo == nullptr)
723 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600724 char const str[] = "vkCreateImage parameter, VkImageCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600725 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600726 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600727 return;
728 }
729
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600730 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600731 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600732 char const str[] = "vkCreateImage parameter, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO "\
733 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (precondition).";
734 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600735 return;
736 }
737
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600738 if (!validate_VkImageType(pCreateInfo->imageType))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600739 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600740 char const str[] = "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600741 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600742 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600743 return;
744 }
745
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600746 if (!validate_VkFormat(pCreateInfo->format))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600747 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600748 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600749 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600750 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600751 return;
752 }
753
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600754 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600755 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600756 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->format,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600757 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
758 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600759 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600760 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, cannot be "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600761 "validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600762 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600763 return;
764 }
765
766 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
767 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600768 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, contains "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600769 "unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600770 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600771 return;
772 }
773
774 // TODO: Can we check device-specific limits?
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600775 if (!vk_validate_vkextent3d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600776 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600777 char const str[] = "vkCreateImage parameter, VkExtent3D pCreateInfo->extent, is invalid "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600778 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600779 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600780 return;
781 }
782
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600783 if (!validate_VkImageTiling(pCreateInfo->tiling))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600784 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600785 char const str[] = "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600786 "unrecoginized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600787 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600788 return;
789 }
790}
791
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600792void PostCreateImage(VkResult result, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600793{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600794 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600795 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600796 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600797 char const str[] = "vkCreateImage failed (postcondition).";
798 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600799 return;
800 }
801
802 if(pImage == nullptr)
803 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600804 char const str[] = "vkCreateImage parameter, VkImage* pImage, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600805 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600806 return;
807 }
808}
809
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600810VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600811{
812 PreCreateImage(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600813 VkResult result = nextTable.CreateImage(device, pCreateInfo, pImage);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600814 PostCreateImage(result, pImage);
815 return result;
816}
817
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600818VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600819{
820 char str[1024];
821 if (!pSubresource) {
822 sprintf(str, "Struct ptr parameter pSubresource to function GetImageSubresourceInfo is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600823 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600824 } else if (!vk_validate_vkimagesubresource(pSubresource)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600825 sprintf(str, "Parameter pSubresource to function GetImageSubresourceInfo contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600826 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600827 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600828 if (!validate_VkSubresourceInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600829 sprintf(str, "Parameter infoType to function GetImageSubresourceInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600830 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600831 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600832 VkResult result = nextTable.GetImageSubresourceInfo(image, pSubresource, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600833 return result;
834}
835
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600836VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600837{
838 char str[1024];
839 if (!pCreateInfo) {
840 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateImageView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600841 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600842 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600843 else if (!vk_validate_vkimageviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600844 sprintf(str, "Parameter pCreateInfo to function CreateImageView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600845 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600846 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600847 VkResult result = nextTable.CreateImageView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600848 return result;
849}
850
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600851VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600852{
853 char str[1024];
854 if (!pCreateInfo) {
855 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateColorAttachmentView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600856 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600857 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600858 else if (!vk_validate_vkcolorattachmentviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600859 sprintf(str, "Parameter pCreateInfo to function CreateColorAttachmentView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600860 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600861 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600862 VkResult result = nextTable.CreateColorAttachmentView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600863 return result;
864}
865
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600866VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600867{
868 char str[1024];
869 if (!pCreateInfo) {
870 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDepthStencilView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600871 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600872 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600873 else if (!vk_validate_vkdepthstencilviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600874 sprintf(str, "Parameter pCreateInfo to function CreateDepthStencilView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600875 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600876 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600877 VkResult result = nextTable.CreateDepthStencilView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600878 return result;
879}
880
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600881VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600882{
883 char str[1024];
884 if (!pCreateInfo) {
885 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateShader is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600886 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600887 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600888 else if (!vk_validate_vkshadercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600889 sprintf(str, "Parameter pCreateInfo to function CreateShader contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600890 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600891 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600892 VkResult result = nextTable.CreateShader(device, pCreateInfo, pShader);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600893 return result;
894}
895
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600896VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600897{
898 char str[1024];
899 if (!pCreateInfo) {
900 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600901 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600902 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600903 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600904 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600905 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600906 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600907 VkResult result = nextTable.CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600908 return result;
909}
910
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600911VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600912{
913 char str[1024];
914 if (!pCreateInfo) {
915 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipelineDerivative is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600916 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600917 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600918 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600919 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipelineDerivative contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600920 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600921 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600922 VkResult result = nextTable.CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600923 return result;
924}
925
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600926VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600927{
928 char str[1024];
929 if (!pCreateInfo) {
930 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateComputePipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600931 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600932 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600933 else if (!vk_validate_vkcomputepipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600934 sprintf(str, "Parameter pCreateInfo to function CreateComputePipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600935 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600936 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600937 VkResult result = nextTable.CreateComputePipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600938 return result;
939}
940
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600941VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600942{
943
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600944 VkResult result = nextTable.StorePipeline(pipeline, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600945 return result;
946}
947
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600948VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600949{
950
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600951 VkResult result = nextTable.LoadPipeline(device, dataSize, pData, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600952 return result;
953}
954
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600955VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600956{
957
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600958 VkResult result = nextTable.LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600959 return result;
960}
961
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600962VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600963{
964 char str[1024];
965 if (!pCreateInfo) {
966 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSampler is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600967 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600968 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600969 else if (!vk_validate_vksamplercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600970 sprintf(str, "Parameter pCreateInfo to function CreateSampler contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600971 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600972 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600973 VkResult result = nextTable.CreateSampler(device, pCreateInfo, pSampler);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600974 return result;
975}
976
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600977VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600978{
979 char str[1024];
980 if (!pCreateInfo) {
981 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorSetLayout is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600982 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600983 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600984 else if (!vk_validate_vkdescriptorsetlayoutcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600985 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorSetLayout contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600986 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600987 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600988 VkResult result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600989 return result;
990}
991
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600992VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayoutChain(VkDevice device, uint32_t setLayoutArrayCount, const VkDescriptorSetLayout* pSetLayoutArray, VkDescriptorSetLayoutChain* pLayoutChain)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600993{
994
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600995 VkResult result = nextTable.CreateDescriptorSetLayoutChain(device, setLayoutArrayCount, pSetLayoutArray, pLayoutChain);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600996 return result;
997}
998
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600999VK_LAYER_EXPORT VkResult VKAPI vkBeginDescriptorPoolUpdate(VkDevice device, VkDescriptorUpdateMode updateMode)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001000{
1001 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001002 if (!validate_VkDescriptorUpdateMode(updateMode)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001003 sprintf(str, "Parameter updateMode to function BeginDescriptorPoolUpdate has invalid value of %i.", (int)updateMode);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001004 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001005 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001006 VkResult result = nextTable.BeginDescriptorPoolUpdate(device, updateMode);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001007 return result;
1008}
1009
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001010VK_LAYER_EXPORT VkResult VKAPI vkEndDescriptorPoolUpdate(VkDevice device, VkCmdBuffer cmd)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001011{
1012
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001013 VkResult result = nextTable.EndDescriptorPoolUpdate(device, cmd);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001014 return result;
1015}
1016
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001017VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001018{
1019 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001020 if (!validate_VkDescriptorPoolUsage(poolUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001021 sprintf(str, "Parameter poolUsage to function CreateDescriptorPool has invalid value of %i.", (int)poolUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001022 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001023 }
1024 if (!pCreateInfo) {
1025 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001026 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001027 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001028 else if (!vk_validate_vkdescriptorpoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001029 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001030 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001031 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001032 VkResult result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001033 return result;
1034}
1035
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001036VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001037{
1038
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001039 VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001040 return result;
1041}
1042
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001043VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001044{
1045 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001046 if (!validate_VkDescriptorSetUsage(setUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001047 sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001048 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001049 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001050 VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001051 return result;
1052}
1053
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001054VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001055{
1056
1057 nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
1058}
1059
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001060VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001061{
1062
1063 nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
1064}
1065
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001066VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001067{
1068 char str[1024];
1069 if (!pCreateInfo) {
1070 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicViewportState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001071 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001072 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001073 else if (!vk_validate_vkdynamicvpstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001074 sprintf(str, "Parameter pCreateInfo to function CreateDynamicViewportState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001075 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001076 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001077 VkResult result = nextTable.CreateDynamicViewportState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001078 return result;
1079}
1080
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001081VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001082{
1083 char str[1024];
1084 if (!pCreateInfo) {
1085 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicRasterState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001086 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001087 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001088 else if (!vk_validate_vkdynamicrsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001089 sprintf(str, "Parameter pCreateInfo to function CreateDynamicRasterState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001090 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001091 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001092 VkResult result = nextTable.CreateDynamicRasterState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001093 return result;
1094}
1095
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001096VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001097{
1098 char str[1024];
1099 if (!pCreateInfo) {
1100 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicColorBlendState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001101 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001102 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001103 else if (!vk_validate_vkdynamiccbstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001104 sprintf(str, "Parameter pCreateInfo to function CreateDynamicColorBlendState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001105 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001106 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001107 VkResult result = nextTable.CreateDynamicColorBlendState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001108 return result;
1109}
1110
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001111VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001112{
1113 char str[1024];
1114 if (!pCreateInfo) {
1115 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicDepthStencilState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001116 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001117 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001118 else if (!vk_validate_vkdynamicdsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001119 sprintf(str, "Parameter pCreateInfo to function CreateDynamicDepthStencilState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001120 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001121 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001122 VkResult result = nextTable.CreateDynamicDepthStencilState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001123 return result;
1124}
1125
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001126void PreCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001127{
1128 if(device == nullptr)
1129 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001130 char const str[] = "vkCreateCommandBuffer parameter, VkDevice device, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001131 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001132 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001133 return;
1134 }
1135
1136 if(pCreateInfo == nullptr)
1137 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001138 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBufferCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001139 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001140 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001141 return;
1142 }
1143
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001144 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001145 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001146 char const str[] = "vkCreateCommandBuffer parameter, VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO "\
1147 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO (precondition).";
1148 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001149 return;
1150 }
1151}
1152
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001153void PostCreateCommandBuffer(VkResult result, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001154{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001155 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001156 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001157 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001158 char const str[] = "vkCreateCommandBuffer failed (postcondition).";
1159 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001160 return;
1161 }
1162
1163 if(pCmdBuffer == nullptr)
1164 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001165 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001166 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001167 return;
1168 }
1169}
1170
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001171VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device,
1172 const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001173{
1174 PreCreateCommandBuffer(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001175 VkResult result = nextTable.CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001176 PostCreateCommandBuffer(result, pCmdBuffer);
1177 return result;
1178}
1179
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001180VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001181{
1182 char str[1024];
1183 if (!pBeginInfo) {
1184 sprintf(str, "Struct ptr parameter pBeginInfo to function BeginCommandBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001185 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001186 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001187 else if (!vk_validate_vkcmdbufferbegininfo(pBeginInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001188 sprintf(str, "Parameter pBeginInfo to function BeginCommandBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001189 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001190 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001191 VkResult result = nextTable.BeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001192 return result;
1193}
1194
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001195VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001196{
1197
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001198 VkResult result = nextTable.EndCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001199 return result;
1200}
1201
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001202VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001203{
1204
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001205 VkResult result = nextTable.ResetCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001206 return result;
1207}
1208
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001209VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001210{
1211 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001212 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001213 sprintf(str, "Parameter pipelineBindPoint to function CmdBindPipeline has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001214 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001215 }
1216 nextTable.CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1217}
1218
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001219VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001220{
1221 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001222 if (!validate_VkStateBindPoint(stateBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001223 sprintf(str, "Parameter stateBindPoint to function CmdBindDynamicStateObject has invalid value of %i.", (int)stateBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001224 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001225 }
1226 nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
1227}
1228
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001229VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkDescriptorSetLayoutChain layoutChain, uint32_t layoutChainSlot, uint32_t count, const VkDescriptorSet* pDescriptorSets, const uint32_t* pUserData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001230{
1231 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001232 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001233 sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001234 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001235 }
1236 nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChain, layoutChainSlot, count, pDescriptorSets, pUserData);
1237}
1238
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001239VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t binding)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001240{
1241
1242 nextTable.CmdBindVertexBuffer(cmdBuffer, buffer, offset, binding);
1243}
1244
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001245VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, VkIndexType indexType)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001246{
1247 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001248 if (!validate_VkIndexType(indexType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001249 sprintf(str, "Parameter indexType to function CmdBindIndexBuffer has invalid value of %i.", (int)indexType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001250 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001251 }
1252 nextTable.CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1253}
1254
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001255VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001256{
1257
1258 nextTable.CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
1259}
1260
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001261VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001262{
1263
1264 nextTable.CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
1265}
1266
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001267VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001268{
1269
1270 nextTable.CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1271}
1272
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001273VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001274{
1275
1276 nextTable.CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1277}
1278
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001279VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001280{
1281
1282 nextTable.CmdDispatch(cmdBuffer, x, y, z);
1283}
1284
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001285VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001286{
1287
1288 nextTable.CmdDispatchIndirect(cmdBuffer, buffer, offset);
1289}
1290
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001291VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001292{
1293 char str[1024];
1294 uint32_t i;
1295 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001296 if (!vk_validate_vkbuffercopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001297 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001298 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001299 }
1300 }
1301 nextTable.CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1302}
1303
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001304VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001305{
1306 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001307 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001308 sprintf(str, "Parameter srcImageLayout to function CmdCopyImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001309 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001310 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001311 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001312 sprintf(str, "Parameter destImageLayout to function CmdCopyImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001313 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001314 }
1315 uint32_t i;
1316 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001317 if (!vk_validate_vkimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001318 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001319 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001320 }
1321 }
1322 nextTable.CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1323}
1324
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001325VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001326{
1327 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001328 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001329 sprintf(str, "Parameter srcImageLayout to function CmdBlitImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001330 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001331 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001332 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001333 sprintf(str, "Parameter destImageLayout to function CmdBlitImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001334 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001335 }
1336 uint32_t i;
1337 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001338 if (!vk_validate_vkimageblit(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001339 sprintf(str, "Parameter pRegions[%i] to function CmdBlitImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001340 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001341 }
1342 }
1343 nextTable.CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1344}
1345
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001346VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001347{
1348 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001349 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001350 sprintf(str, "Parameter destImageLayout to function CmdCopyBufferToImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001351 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001352 }
1353 uint32_t i;
1354 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001355 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001356 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBufferToImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001357 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001358 }
1359 }
1360 nextTable.CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1361}
1362
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001363VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001364{
1365 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001366 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001367 sprintf(str, "Parameter srcImageLayout to function CmdCopyImageToBuffer has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001368 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001369 }
1370 uint32_t i;
1371 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001372 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001373 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImageToBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001374 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001375 }
1376 }
1377 nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1378}
1379
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001380VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001381{
1382 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001383 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001384 sprintf(str, "Parameter srcImageLayout to function CmdCloneImageData has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001385 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001386 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001387 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001388 sprintf(str, "Parameter destImageLayout to function CmdCloneImageData has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001389 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001390 }
1391 nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
1392}
1393
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001394VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize dataSize, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001395{
1396
1397 nextTable.CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1398}
1399
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001400VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize fillSize, uint32_t data)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001401{
1402
1403 nextTable.CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1404}
1405
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001406VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, VkClearColor color, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001407{
1408 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001409 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001410 sprintf(str, "Parameter imageLayout to function CmdClearColorImage has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001411 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001412 }
1413 uint32_t i;
1414 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001415 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001416 sprintf(str, "Parameter pRanges[%i] to function CmdClearColorImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001417 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001418 }
1419 }
1420 nextTable.CmdClearColorImage(cmdBuffer, image, imageLayout, color, rangeCount, pRanges);
1421}
1422
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001423VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001424{
1425 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001426 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001427 sprintf(str, "Parameter imageLayout to function CmdClearDepthStencil has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001428 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001429 }
1430 uint32_t i;
1431 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001432 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001433 sprintf(str, "Parameter pRanges[%i] to function CmdClearDepthStencil contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001434 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001435 }
1436 }
1437 nextTable.CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1438}
1439
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001440VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t rectCount, const VkImageResolve* pRects)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001441{
1442 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001443 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001444 sprintf(str, "Parameter srcImageLayout to function CmdResolveImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001445 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001446 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001447 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001448 sprintf(str, "Parameter destImageLayout to function CmdResolveImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001449 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001450 }
1451 uint32_t i;
1452 for (i = 0; i < rectCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001453 if (!vk_validate_vkimageresolve(&pRects[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001454 sprintf(str, "Parameter pRects[%i] to function CmdResolveImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001455 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001456 }
1457 }
1458 nextTable.CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, rectCount, pRects);
1459}
1460
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001461VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001462{
1463 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001464 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001465 sprintf(str, "Parameter pipeEvent to function CmdSetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001466 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001467 }
1468 nextTable.CmdSetEvent(cmdBuffer, event, pipeEvent);
1469}
1470
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001471VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001472{
1473 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001474 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001475 sprintf(str, "Parameter pipeEvent to function CmdResetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001476 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001477 }
1478 nextTable.CmdResetEvent(cmdBuffer, event, pipeEvent);
1479}
1480
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001481VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, const VkEventWaitInfo* pWaitInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001482{
1483 char str[1024];
1484 if (!pWaitInfo) {
1485 sprintf(str, "Struct ptr parameter pWaitInfo to function CmdWaitEvents is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001486 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001487 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001488 else if (!vk_validate_vkeventwaitinfo(pWaitInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001489 sprintf(str, "Parameter pWaitInfo to function CmdWaitEvents contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001490 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001491 }
1492 nextTable.CmdWaitEvents(cmdBuffer, pWaitInfo);
1493}
1494
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001495VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, const VkPipelineBarrier* pBarrier)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001496{
1497 char str[1024];
1498 if (!pBarrier) {
1499 sprintf(str, "Struct ptr parameter pBarrier to function CmdPipelineBarrier is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001500 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001501 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001502 else if (!vk_validate_vkpipelinebarrier(pBarrier)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001503 sprintf(str, "Parameter pBarrier to function CmdPipelineBarrier contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001504 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001505 }
1506 nextTable.CmdPipelineBarrier(cmdBuffer, pBarrier);
1507}
1508
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001509VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001510{
1511
1512 nextTable.CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1513}
1514
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001515VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001516{
1517
1518 nextTable.CmdEndQuery(cmdBuffer, queryPool, slot);
1519}
1520
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001521VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001522{
1523
1524 nextTable.CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1525}
1526
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001527VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkGpuSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001528{
1529 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001530 if (!validate_VkTimestampType(timestampType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001531 sprintf(str, "Parameter timestampType to function CmdWriteTimestamp has invalid value of %i.", (int)timestampType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001532 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001533 }
1534 nextTable.CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1535}
1536
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001537VK_LAYER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001538{
1539 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001540 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001541 sprintf(str, "Parameter pipelineBindPoint to function CmdInitAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001542 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001543 }
1544 nextTable.CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1545}
1546
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001547VK_LAYER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkGpuSize srcOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001548{
1549 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001550 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001551 sprintf(str, "Parameter pipelineBindPoint to function CmdLoadAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001552 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001553 }
1554 nextTable.CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1555}
1556
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001557VK_LAYER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkGpuSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001558{
1559 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001560 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001561 sprintf(str, "Parameter pipelineBindPoint to function CmdSaveAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001562 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001563 }
1564 nextTable.CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1565}
1566
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001567VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001568{
1569 char str[1024];
1570 if (!pCreateInfo) {
1571 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFramebuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001572 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001573 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001574 else if (!vk_validate_vkframebuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001575 sprintf(str, "Parameter pCreateInfo to function CreateFramebuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001576 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001577 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001578 VkResult result = nextTable.CreateFramebuffer(device, pCreateInfo, pFramebuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001579 return result;
1580}
1581
1582
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001583void PreCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001584{
1585 if(pCreateInfo == nullptr)
1586 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001587 char const str[] = "vkCreateRenderPass parameter, VkRenderPassCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001588 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001589 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001590 return;
1591 }
1592
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001593 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001594 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001595 char const str[] = "vkCreateRenderPass parameter, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO "\
1596 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO (precondition).";
1597 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001598 return;
1599 }
1600
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001601 if(!vk_validate_vkrect(&pCreateInfo->renderArea))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001602 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001603 char const str[] = "vkCreateRenderPass parameter, VkRect pCreateInfo->renderArea, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001604 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001605 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001606 return;
1607 }
1608
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001609 if(!vk_validate_vkextent2d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001610 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001611 char const str[] = "vkCreateRenderPass parameter, VkExtent2D pCreateInfo->extent, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001612 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001613 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001614 return;
1615 }
1616
1617 if(pCreateInfo->pColorFormats == nullptr)
1618 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001619 char const str[] = "vkCreateRenderPass parameter, VkFormat* pCreateInfo->pColorFormats, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001620 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001621 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001622 return;
1623 }
1624
1625 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1626 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001627 if(!validate_VkFormat(pCreateInfo->pColorFormats[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001628 {
1629 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001630 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001631 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001632 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001633 continue;
1634 }
1635
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001636 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001637 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001638 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->pColorFormats[i],
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001639 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1640 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001641 {
1642 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001643 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001644 "], cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001645 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001646 continue;
1647 }
1648
1649 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1650 {
1651 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001652 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001653 "], contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001654 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001655 continue;
1656 }
1657
1658 }
1659
1660 if(pCreateInfo->pColorLayouts == nullptr)
1661 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001662 char const str[] = "vkCreateRenderPass parameter, VkImageLayout* pCreateInfo->pColorLayouts, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001663 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001664 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001665 return;
1666 }
1667
1668 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1669 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001670 if(!validate_VkImageLayout(pCreateInfo->pColorLayouts[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001671 {
1672 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001673 ss << "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pColorLayouts[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001674 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001675 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001676 continue;
1677 }
1678 }
1679
1680 if(pCreateInfo->pColorLoadOps == nullptr)
1681 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001682 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001683 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001684 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001685 return;
1686 }
1687
1688 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1689 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001690 if(!validate_VkAttachmentLoadOp(pCreateInfo->pColorLoadOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001691 {
1692 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001693 ss << "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pColorLoadOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001694 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001695 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001696 continue;
1697 }
1698 }
1699
1700 if(pCreateInfo->pColorStoreOps == nullptr)
1701 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001702 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001703 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001704 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001705 return;
1706 }
1707
1708 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1709 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001710 if(!validate_VkAttachmentStoreOp(pCreateInfo->pColorStoreOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001711 {
1712 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001713 ss << "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pColorStoreOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001714 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001715 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001716 continue;
1717 }
1718 }
1719
1720 if(pCreateInfo->pColorLoadClearValues == nullptr)
1721 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001722 char const str[] = "vkCreateRenderPass parameter, VkClearColor* pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001723 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001724 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001725 return;
1726 }
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001727
1728 if(pCreateInfo->pColorStoreOps == nullptr)
1729 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001730 char const str[] = "vkCreateRenderPass parameter, VK_ATTACHMENT_STORE_OP* pCreateInfo->pColorStoreOps, "\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001731 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001732 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001733 return;
1734 }
1735
1736 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1737 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001738 if(!validate_VK_ATTACHMENT_STORE_OP(pCreateInfo->pColorStoreOps[i]))
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001739 {
1740 std::stringstream ss;
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001741 ss << "vkCreateRenderPass parameter, VK_ATTACHMENT_STORE_OP pCreateInfo->pColorStoreOps[" << i <<
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001742 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001743 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001744 continue;
1745 }
1746 }
1747
1748 if(pCreateInfo->pColorLoadClearValues == nullptr)
1749 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001750 char const str[] = "vkCreateRenderPass parameter, VK_CLEAR_COLOR* pCreateInfo->"\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001751 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001752 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001753 return;
1754 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001755
1756 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1757 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001758 if(!vk_validate_vkclearcolor(&(pCreateInfo->pColorLoadClearValues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001759 {
1760 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001761 ss << "vkCreateRenderPass parameter, VkClearColor pCreateInfo->pColorLoadClearValues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001762 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001763 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001764 continue;
1765 }
1766 }
1767
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001768 if(!validate_VkFormat(pCreateInfo->depthStencilFormat))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001769 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001770 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001771 "depthStencilFormat, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001772 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001773 return;
1774 }
1775
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001776 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001777 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001778 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->depthStencilFormat,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001779 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1780 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001781 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001782 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001783 "depthStencilFormat, cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001784 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001785 return;
1786 }
1787
1788 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1789 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001790 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001791 "depthStencilFormat, contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001792 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001793 return;
1794 }
1795
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001796 if(!validate_VkImageLayout(pCreateInfo->depthStencilLayout))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001797 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001798 char const str[] = "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001799 "depthStencilLayout, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001800 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001801 return;
1802 }
1803
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001804 if(!validate_VkAttachmentLoadOp(pCreateInfo->depthLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001805 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001806 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001807 "depthLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001808 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001809 return;
1810 }
1811
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001812 if(!validate_VkAttachmentStoreOp(pCreateInfo->depthStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001813 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001814 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001815 "depthStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001816 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001817 return;
1818 }
1819
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001820 if(!validate_VkAttachmentLoadOp(pCreateInfo->stencilLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001821 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001822 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001823 "stencilLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001824 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001825 return;
1826 }
1827
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001828 if(!validate_VkAttachmentStoreOp(pCreateInfo->stencilStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001829 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001830 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001831 "stencilStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001832 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001833 return;
1834 }
1835}
1836
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001837void PostCreateRenderPass(VkResult result, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001838{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001839 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001840 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001841 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001842 char const str[] = "vkCreateRenderPass failed (postcondition).";
1843 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001844 return;
1845 }
1846
1847 if(pRenderPass == nullptr)
1848 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001849 char const str[] = "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001850 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001851 return;
1852 }
1853}
1854
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001855VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001856{
1857 PreCreateRenderPass(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001858 VkResult result = nextTable.CreateRenderPass(device, pCreateInfo, pRenderPass);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001859 PostCreateRenderPass(result, pRenderPass);
1860 return result;
1861}
1862
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001863VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001864{
1865 char str[1024];
1866 if (!pRenderPassBegin) {
1867 sprintf(str, "Struct ptr parameter pRenderPassBegin to function CmdBeginRenderPass is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001868 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001869 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001870 else if (!vk_validate_vkrenderpassbegin(pRenderPassBegin)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001871 sprintf(str, "Parameter pRenderPassBegin to function CmdBeginRenderPass contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001872 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001873 }
1874 nextTable.CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1875}
1876
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001877VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001878{
1879
1880 nextTable.CmdEndRenderPass(cmdBuffer, renderPass);
1881}
1882
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001883VK_LAYER_EXPORT VkResult VKAPI vkDbgSetValidationLevel(VkDevice device, VkValidationLevel validationLevel)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001884{
1885 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001886 if (!validate_VkValidationLevel(validationLevel)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001887 sprintf(str, "Parameter validationLevel to function DbgSetValidationLevel has invalid value of %i.", (int)validationLevel);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001888 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001889 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001890 VkResult result = nextTable.DbgSetValidationLevel(device, validationLevel);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001891 return result;
1892}
1893
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001894VK_LAYER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001895{
1896 // This layer intercepts callbacks
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001897 VK_LAYER_DBG_FUNCTION_NODE *pNewDbgFuncNode = (VK_LAYER_DBG_FUNCTION_NODE*)malloc(sizeof(VK_LAYER_DBG_FUNCTION_NODE));
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001898 if (!pNewDbgFuncNode)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001899 return VK_ERROR_OUT_OF_MEMORY;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001900 pNewDbgFuncNode->pfnMsgCallback = pfnMsgCallback;
1901 pNewDbgFuncNode->pUserData = pUserData;
1902 pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
1903 g_pDbgFunctionHead = pNewDbgFuncNode;
1904 // force callbacks if DebugAction hasn't been set already other than initial value
1905 if (g_actionIsDefault) {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001906 g_debugAction = VK_DBG_LAYER_ACTION_CALLBACK;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001907 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001908 VkResult result = nextTable.DbgRegisterMsgCallback(instance, pfnMsgCallback, pUserData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001909 return result;
1910}
1911
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001912VK_LAYER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001913{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001914 VK_LAYER_DBG_FUNCTION_NODE *pTrav = g_pDbgFunctionHead;
1915 VK_LAYER_DBG_FUNCTION_NODE *pPrev = pTrav;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001916 while (pTrav) {
1917 if (pTrav->pfnMsgCallback == pfnMsgCallback) {
1918 pPrev->pNext = pTrav->pNext;
1919 if (g_pDbgFunctionHead == pTrav)
1920 g_pDbgFunctionHead = pTrav->pNext;
1921 free(pTrav);
1922 break;
1923 }
1924 pPrev = pTrav;
1925 pTrav = pTrav->pNext;
1926 }
1927 if (g_pDbgFunctionHead == NULL)
1928 {
1929 if (g_actionIsDefault)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001930 g_debugAction = VK_DBG_LAYER_ACTION_LOG_MSG;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001931 else
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001932 g_debugAction = (VK_LAYER_DBG_ACTION)(g_debugAction & ~((uint32_t)VK_DBG_LAYER_ACTION_CALLBACK));
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001933 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001934 VkResult result = nextTable.DbgUnregisterMsgCallback(instance, pfnMsgCallback);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001935 return result;
1936}
1937
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001938VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001939{
1940
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001941 VkResult result = nextTable.DbgSetMessageFilter(device, msgCode, filter);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001942 return result;
1943}
1944
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001945VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkBaseObject object, size_t tagSize, const void* pTag)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001946{
1947
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001948 VkResult result = nextTable.DbgSetObjectTag(object, tagSize, pTag);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001949 return result;
1950}
1951
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001952VK_LAYER_EXPORT VkResult VKAPI vkDbgSetGlobalOption(VkInstance instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001953{
1954
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001955 VkResult result = nextTable.DbgSetGlobalOption(instance, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001956 return result;
1957}
1958
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001959VK_LAYER_EXPORT VkResult VKAPI vkDbgSetDeviceOption(VkDevice device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001960{
1961
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001962 VkResult result = nextTable.DbgSetDeviceOption(device, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001963 return result;
1964}
1965
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001966VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001967{
1968
1969 nextTable.CmdDbgMarkerBegin(cmdBuffer, pMarker);
1970}
1971
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001972VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001973{
1974
1975 nextTable.CmdDbgMarkerEnd(cmdBuffer);
1976}
1977
1978#if defined(__linux__) || defined(XCB_NVIDIA)
1979
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001980VK_LAYER_EXPORT VkResult VKAPI vkWsiX11AssociateConnection(VkPhysicalGpu gpu, const VK_WSI_X11_CONNECTION_INFO* pConnectionInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001981{
Jon Ashburn630e44f2015-04-08 21:33:34 -06001982 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001983 loader_platform_thread_once(&tabOnce, initParamChecker);
1984
Jon Ashburn630e44f2015-04-08 21:33:34 -06001985 VkResult result = nextTable.WsiX11AssociateConnection(gpu, pConnectionInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001986 return result;
1987}
1988
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001989VK_LAYER_EXPORT VkResult VKAPI vkWsiX11GetMSC(VkDevice device, xcb_window_t window, xcb_randr_crtc_t crtc, uint64_t* pMsc)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001990{
1991
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001992 VkResult result = nextTable.WsiX11GetMSC(device, window, crtc, pMsc);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001993 return result;
1994}
1995
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001996VK_LAYER_EXPORT VkResult VKAPI vkWsiX11CreatePresentableImage(VkDevice device, const VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO* pCreateInfo, VkImage* pImage, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001997{
1998
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001999 VkResult result = nextTable.WsiX11CreatePresentableImage(device, pCreateInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002000 return result;
2001}
2002
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002003VK_LAYER_EXPORT VkResult VKAPI vkWsiX11QueuePresent(VkQueue queue, const VK_WSI_X11_PRESENT_INFO* pPresentInfo, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002004{
2005
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002006 VkResult result = nextTable.WsiX11QueuePresent(queue, pPresentInfo, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002007 return result;
2008}
2009
2010#endif
2011
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002012#include "vk_generic_intercept_proc_helper.h"
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002013VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalGpu gpu, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002014{
Jon Ashburn301c5f02015-04-06 10:58:22 -06002015 VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002016 void* addr;
2017 if (gpu == NULL)
2018 return NULL;
2019 pCurObj = gpuw;
2020 loader_platform_thread_once(&tabOnce, initParamChecker);
2021
2022 addr = layer_intercept_proc(funcName);
2023 if (addr)
2024 return addr;
2025 else {
2026 if (gpuw->pGPA == NULL)
2027 return NULL;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002028 return gpuw->pGPA((VkPhysicalGpu)gpuw->nextObject, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002029 }
2030}
2031