blob: 94550745121958ea45a63a8c77fe732dde908f71 [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
Jon Ashburnbdcd7562015-04-14 14:12:59 -0600265#define PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE 2
Jon Ashburneb2728b2015-04-10 14:33:07 -0600266static const struct extProps pcExts[PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE] = {
267 // TODO what is the version?
268 0x10, "ParamChecker",
Jon Ashburnbdcd7562015-04-14 14:12:59 -0600269 0x10, "Validation",
Jon Ashburneb2728b2015-04-10 14:33:07 -0600270};
271
272VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
273 VkExtensionInfoType infoType,
274 uint32_t extensionIndex,
275 size_t* pDataSize,
276 void* pData)
277{
278 VkResult result;
279
280 /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */
281 VkExtensionProperties *ext_props;
282 uint32_t *count;
283
284 if (pDataSize == NULL)
285 return VK_ERROR_INVALID_POINTER;
286
287 switch (infoType) {
288 case VK_EXTENSION_INFO_TYPE_COUNT:
289 *pDataSize = sizeof(uint32_t);
290 if (pData == NULL)
291 return VK_SUCCESS;
292 count = (uint32_t *) pData;
293 *count = PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE;
294 break;
295 case VK_EXTENSION_INFO_TYPE_PROPERTIES:
296 *pDataSize = sizeof(VkExtensionProperties);
297 if (pData == NULL)
298 return VK_SUCCESS;
299 if (extensionIndex >= PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE)
300 return VK_ERROR_INVALID_VALUE;
301 ext_props = (VkExtensionProperties *) pData;
302 ext_props->version = pcExts[extensionIndex].version;
303 strncpy(ext_props->extName, pcExts[extensionIndex].name,
304 VK_MAX_EXTENSION_NAME);
305 ext_props->extName[VK_MAX_EXTENSION_NAME - 1] = '\0';
306 break;
307 default:
308 return VK_ERROR_INVALID_VALUE;
309 };
310
311 return VK_SUCCESS;
312}
313
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600314VK_LAYER_EXPORT VkResult VKAPI vkGetExtensionSupport(VkPhysicalGpu gpu, const char* pExtName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600315{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600316 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600317 loader_platform_thread_once(&tabOnce, initParamChecker);
318
Jon Ashburn630e44f2015-04-08 21:33:34 -0600319 VkResult result = nextTable.GetExtensionSupport(gpu, pExtName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600320 return result;
321}
322
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600323VK_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 -0600324{
325 char str[1024];
326 if (gpu != NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600327 sprintf(str, "At start of layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600328 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600329 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600330 loader_platform_thread_once(&tabOnce, initParamChecker);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600331 VkResult result = nextTable.EnumerateLayers(gpu, maxLayerCount, maxStringSize, pOutLayerCount, pOutLayers, pReserved);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600332 sprintf(str, "Completed layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600333 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600334 fflush(stdout);
335 return result;
336 } else {
337 if (pOutLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600338 return VK_ERROR_INVALID_POINTER;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600339 // This layer compatible with all GPUs
340 *pOutLayerCount = 1;
341 strncpy(pOutLayers[0], "ParamChecker", maxStringSize);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600342 return VK_SUCCESS;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600343 }
344}
345
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600346VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600347{
348
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600349 VkResult result = nextTable.GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600350 return result;
351}
352
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600353VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600354{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600355 VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600356 return result;
357}
358
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600359VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600360{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600361 VkResult result = nextTable.QueueAddMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600362 return result;
363}
364
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600365VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600366{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600367 VkResult result = nextTable.QueueRemoveMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600368 return result;
369}
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600370VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600371{
372
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600373 VkResult result = nextTable.QueueWaitIdle(queue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600374 return result;
375}
376
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600377VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600378{
379
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600380 VkResult result = nextTable.DeviceWaitIdle(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600381 return result;
382}
383
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600384VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600385{
386 char str[1024];
387 if (!pAllocInfo) {
388 sprintf(str, "Struct ptr parameter pAllocInfo to function AllocMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600389 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600390 } else if (!vk_validate_vkmemoryallocinfo(pAllocInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600391 sprintf(str, "Parameter pAllocInfo to function AllocMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600392 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600393 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600394 VkResult result = nextTable.AllocMemory(device, pAllocInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600395 return result;
396}
397
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600398VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600399{
400
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600401 VkResult result = nextTable.FreeMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600402 return result;
403}
404
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600405VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkGpuMemory mem, VkMemoryPriority priority)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600406{
407 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600408 if (!validate_VkMemoryPriority(priority)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600409 sprintf(str, "Parameter priority to function SetMemoryPriority has invalid value of %i.", (int)priority);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600410 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600411 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600412 VkResult result = nextTable.SetMemoryPriority(mem, priority);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600413 return result;
414}
415
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600416VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkGpuMemory mem, VkFlags flags, void** ppData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600417{
418
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600419 VkResult result = nextTable.MapMemory(mem, flags, ppData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600420 return result;
421}
422
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600423VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600424{
425
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600426 VkResult result = nextTable.UnmapMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600427 return result;
428}
429
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600430VK_LAYER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600431{
432
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600433 VkResult result = nextTable.PinSystemMemory(device, pSysMem, memSize, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600434 return result;
435}
436
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600437VK_LAYER_EXPORT VkResult VKAPI vkGetMultiGpuCompatibility(VkPhysicalGpu gpu0, VkPhysicalGpu gpu1, VkGpuCompatibilityInfo* pInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600438{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600439 pCurObj = (VkBaseLayerObject *) gpu0;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600440 loader_platform_thread_once(&tabOnce, initParamChecker);
441
Jon Ashburn630e44f2015-04-08 21:33:34 -0600442 VkResult result = nextTable.GetMultiGpuCompatibility(gpu0, gpu1, pInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600443 return result;
444}
445
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600446VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600447{
448 char str[1024];
449 if (!pOpenInfo) {
450 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600451 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600452 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600453 else if (!vk_validate_vkmemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600454 sprintf(str, "Parameter pOpenInfo to function OpenSharedMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600455 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600456 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600457 VkResult result = nextTable.OpenSharedMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600458 return result;
459}
460
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600461VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600462{
463 char str[1024];
464 if (!pOpenInfo) {
465 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600466 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600467 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600468 else if (!vk_validate_vksemaphoreopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600469 sprintf(str, "Parameter pOpenInfo to function OpenSharedSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600470 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600471 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600472 VkResult result = nextTable.OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600473 return result;
474}
475
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600476VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600477{
478 char str[1024];
479 if (!pOpenInfo) {
480 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600481 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600482 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600483 else if (!vk_validate_vkpeermemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600484 sprintf(str, "Parameter pOpenInfo to function OpenPeerMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600485 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600486 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600487 VkResult result = nextTable.OpenPeerMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600488 return result;
489}
490
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600491VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600492{
493 char str[1024];
494 if (!pOpenInfo) {
495 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerImage is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600496 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600497 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600498 else if (!vk_validate_vkpeerimageopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600499 sprintf(str, "Parameter pOpenInfo to function OpenPeerImage contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600500 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600501 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600502 VkResult result = nextTable.OpenPeerImage(device, pOpenInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600503 return result;
504}
505
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600506VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600507{
508
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600509 VkResult result = nextTable.DestroyObject(object);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600510 return result;
511}
512
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600513VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600514{
515 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600516 if (!validate_VkObjectInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600517 sprintf(str, "Parameter infoType to function GetObjectInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600518 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600519 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600520 VkResult result = nextTable.GetObjectInfo(object, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600521 return result;
522}
523
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600524VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkObject object, uint32_t allocationIdx, VkGpuMemory mem, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600525{
526
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600527 VkResult result = nextTable.BindObjectMemory(object, allocationIdx, mem, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600528 return result;
529}
530
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600531VK_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 -0600532{
533
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600534 VkResult result = nextTable.BindObjectMemoryRange(object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600535 return result;
536}
537
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600538VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemoryRange(VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* bindInfo, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600539{
540 char str[1024];
541 if (!bindInfo) {
542 sprintf(str, "Struct ptr parameter bindInfo to function BindImageMemoryRange is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600543 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600544 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600545 else if (!vk_validate_vkimagememorybindinfo(bindInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600546 sprintf(str, "Parameter bindInfo to function BindImageMemoryRange contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600547 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600548 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600549 VkResult result = nextTable.BindImageMemoryRange(image, allocationIdx, bindInfo, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600550 return result;
551}
552
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600553VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600554{
555 char str[1024];
556 if (!pCreateInfo) {
557 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFence is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600558 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600559 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600560 else if (!vk_validate_vkfencecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600561 sprintf(str, "Parameter pCreateInfo to function CreateFence contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600562 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600563 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600564 VkResult result = nextTable.CreateFence(device, pCreateInfo, pFence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600565 return result;
566}
567
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600568VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600569{
570
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600571 VkResult result = nextTable.GetFenceStatus(fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600572 return result;
573}
574
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600575VK_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 -0600576{
577
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600578 VkResult result = nextTable.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600579 return result;
580}
581
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600582VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500583{
584
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600585 VkResult result = nextTable.ResetFences(device, fenceCount, pFences);
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500586 return result;
587}
588
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600589VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600590{
591 char str[1024];
592 if (!pCreateInfo) {
593 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600594 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600595 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600596 else if (!vk_validate_vksemaphorecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600597 sprintf(str, "Parameter pCreateInfo to function CreateSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600598 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600599 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600600 VkResult result = nextTable.CreateSemaphore(device, pCreateInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600601 return result;
602}
603
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600604VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600605{
606
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600607 VkResult result = nextTable.QueueSignalSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600608 return result;
609}
610
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600611VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600612{
613
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600614 VkResult result = nextTable.QueueWaitSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600615 return result;
616}
617
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600618VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600619{
620 char str[1024];
621 if (!pCreateInfo) {
622 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateEvent is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600623 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600624 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600625 else if (!vk_validate_vkeventcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600626 sprintf(str, "Parameter pCreateInfo to function CreateEvent contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600627 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600628 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600629 VkResult result = nextTable.CreateEvent(device, pCreateInfo, pEvent);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600630 return result;
631}
632
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600633VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600634{
635
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600636 VkResult result = nextTable.GetEventStatus(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600637 return result;
638}
639
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600640VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600641{
642
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600643 VkResult result = nextTable.SetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600644 return result;
645}
646
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600647VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600648{
649
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600650 VkResult result = nextTable.ResetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600651 return result;
652}
653
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600654VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600655{
656 char str[1024];
657 if (!pCreateInfo) {
658 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateQueryPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600659 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600660 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600661 else if (!vk_validate_vkquerypoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600662 sprintf(str, "Parameter pCreateInfo to function CreateQueryPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600663 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600664 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600665 VkResult result = nextTable.CreateQueryPool(device, pCreateInfo, pQueryPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600666 return result;
667}
668
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600669VK_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 -0600670{
671
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600672 VkResult result = nextTable.GetQueryPoolResults(queryPool, startQuery, queryCount, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600673 return result;
674}
675
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600676VK_LAYER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600677{
678 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600679 if (!validate_VkFormat(format)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600680 sprintf(str, "Parameter format to function GetFormatInfo has invalid value of %i.", (int)format);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600681 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600682 }
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600683 if (!validate_VkFormatInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600684 sprintf(str, "Parameter infoType to function GetFormatInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600685 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600686 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600687 VkResult result = nextTable.GetFormatInfo(device, format, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600688 return result;
689}
690
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600691VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600692{
693 char str[1024];
694 if (!pCreateInfo) {
695 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600696 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600697 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600698 else if (!vk_validate_vkbuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600699 sprintf(str, "Parameter pCreateInfo to function CreateBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600700 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600701 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600702 VkResult result = nextTable.CreateBuffer(device, pCreateInfo, pBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600703 return result;
704}
705
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600706VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600707{
708 char str[1024];
709 if (!pCreateInfo) {
710 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBufferView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600711 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600712 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600713 else if (!vk_validate_vkbufferviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600714 sprintf(str, "Parameter pCreateInfo to function CreateBufferView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600715 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600716 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600717 VkResult result = nextTable.CreateBufferView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600718 return result;
719}
720
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600721void PreCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600722{
723 if(pCreateInfo == nullptr)
724 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600725 char const str[] = "vkCreateImage parameter, VkImageCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600726 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600727 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600728 return;
729 }
730
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600731 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600732 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600733 char const str[] = "vkCreateImage parameter, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO "\
734 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (precondition).";
735 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600736 return;
737 }
738
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600739 if (!validate_VkImageType(pCreateInfo->imageType))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600740 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600741 char const str[] = "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600742 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600743 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600744 return;
745 }
746
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600747 if (!validate_VkFormat(pCreateInfo->format))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600748 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600749 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600750 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600751 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600752 return;
753 }
754
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600755 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600756 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600757 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->format,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600758 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
759 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600760 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600761 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, cannot be "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600762 "validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600763 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600764 return;
765 }
766
767 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
768 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600769 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, contains "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600770 "unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600771 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600772 return;
773 }
774
775 // TODO: Can we check device-specific limits?
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600776 if (!vk_validate_vkextent3d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600777 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600778 char const str[] = "vkCreateImage parameter, VkExtent3D pCreateInfo->extent, is invalid "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600779 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600780 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600781 return;
782 }
783
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600784 if (!validate_VkImageTiling(pCreateInfo->tiling))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600785 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600786 char const str[] = "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600787 "unrecoginized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600788 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600789 return;
790 }
791}
792
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600793void PostCreateImage(VkResult result, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600794{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600795 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600796 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600797 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600798 char const str[] = "vkCreateImage failed (postcondition).";
799 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600800 return;
801 }
802
803 if(pImage == nullptr)
804 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600805 char const str[] = "vkCreateImage parameter, VkImage* pImage, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600806 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600807 return;
808 }
809}
810
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600811VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600812{
813 PreCreateImage(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600814 VkResult result = nextTable.CreateImage(device, pCreateInfo, pImage);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600815 PostCreateImage(result, pImage);
816 return result;
817}
818
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600819VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600820{
821 char str[1024];
822 if (!pSubresource) {
823 sprintf(str, "Struct ptr parameter pSubresource to function GetImageSubresourceInfo is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600824 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600825 } else if (!vk_validate_vkimagesubresource(pSubresource)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600826 sprintf(str, "Parameter pSubresource to function GetImageSubresourceInfo contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600827 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600828 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600829 if (!validate_VkSubresourceInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600830 sprintf(str, "Parameter infoType to function GetImageSubresourceInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600831 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600832 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600833 VkResult result = nextTable.GetImageSubresourceInfo(image, pSubresource, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600834 return result;
835}
836
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600837VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600838{
839 char str[1024];
840 if (!pCreateInfo) {
841 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateImageView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600842 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600843 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600844 else if (!vk_validate_vkimageviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600845 sprintf(str, "Parameter pCreateInfo to function CreateImageView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600846 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600847 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600848 VkResult result = nextTable.CreateImageView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600849 return result;
850}
851
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600852VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600853{
854 char str[1024];
855 if (!pCreateInfo) {
856 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateColorAttachmentView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600857 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600858 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600859 else if (!vk_validate_vkcolorattachmentviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600860 sprintf(str, "Parameter pCreateInfo to function CreateColorAttachmentView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600861 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600862 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600863 VkResult result = nextTable.CreateColorAttachmentView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600864 return result;
865}
866
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600867VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600868{
869 char str[1024];
870 if (!pCreateInfo) {
871 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDepthStencilView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600872 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600873 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600874 else if (!vk_validate_vkdepthstencilviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600875 sprintf(str, "Parameter pCreateInfo to function CreateDepthStencilView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600876 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600877 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600878 VkResult result = nextTable.CreateDepthStencilView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600879 return result;
880}
881
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600882VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600883{
884 char str[1024];
885 if (!pCreateInfo) {
886 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateShader is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600887 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600888 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600889 else if (!vk_validate_vkshadercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600890 sprintf(str, "Parameter pCreateInfo to function CreateShader contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600891 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600892 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600893 VkResult result = nextTable.CreateShader(device, pCreateInfo, pShader);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600894 return result;
895}
896
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600897VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600898{
899 char str[1024];
900 if (!pCreateInfo) {
901 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600902 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600903 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600904 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600905 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600906 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600907 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600908 VkResult result = nextTable.CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600909 return result;
910}
911
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600912VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600913{
914 char str[1024];
915 if (!pCreateInfo) {
916 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipelineDerivative is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600917 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600918 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600919 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600920 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipelineDerivative contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600921 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600922 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600923 VkResult result = nextTable.CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600924 return result;
925}
926
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600927VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600928{
929 char str[1024];
930 if (!pCreateInfo) {
931 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateComputePipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600932 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600933 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600934 else if (!vk_validate_vkcomputepipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600935 sprintf(str, "Parameter pCreateInfo to function CreateComputePipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600936 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600937 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600938 VkResult result = nextTable.CreateComputePipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600939 return result;
940}
941
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600942VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600943{
944
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600945 VkResult result = nextTable.StorePipeline(pipeline, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600946 return result;
947}
948
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600949VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600950{
951
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600952 VkResult result = nextTable.LoadPipeline(device, dataSize, pData, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600953 return result;
954}
955
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600956VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600957{
958
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600959 VkResult result = nextTable.LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600960 return result;
961}
962
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600963VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600964{
965 char str[1024];
966 if (!pCreateInfo) {
967 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSampler is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600968 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600969 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600970 else if (!vk_validate_vksamplercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600971 sprintf(str, "Parameter pCreateInfo to function CreateSampler contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600972 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600973 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600974 VkResult result = nextTable.CreateSampler(device, pCreateInfo, pSampler);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600975 return result;
976}
977
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600978VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600979{
980 char str[1024];
981 if (!pCreateInfo) {
982 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorSetLayout is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600983 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600984 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600985 else if (!vk_validate_vkdescriptorsetlayoutcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600986 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorSetLayout contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600987 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600988 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600989 VkResult result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600990 return result;
991}
992
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600993VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayoutChain(VkDevice device, uint32_t setLayoutArrayCount, const VkDescriptorSetLayout* pSetLayoutArray, VkDescriptorSetLayoutChain* pLayoutChain)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600994{
995
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600996 VkResult result = nextTable.CreateDescriptorSetLayoutChain(device, setLayoutArrayCount, pSetLayoutArray, pLayoutChain);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600997 return result;
998}
999
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001000VK_LAYER_EXPORT VkResult VKAPI vkBeginDescriptorPoolUpdate(VkDevice device, VkDescriptorUpdateMode updateMode)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001001{
1002 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001003 if (!validate_VkDescriptorUpdateMode(updateMode)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001004 sprintf(str, "Parameter updateMode to function BeginDescriptorPoolUpdate has invalid value of %i.", (int)updateMode);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001005 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001006 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001007 VkResult result = nextTable.BeginDescriptorPoolUpdate(device, updateMode);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001008 return result;
1009}
1010
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001011VK_LAYER_EXPORT VkResult VKAPI vkEndDescriptorPoolUpdate(VkDevice device, VkCmdBuffer cmd)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001012{
1013
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001014 VkResult result = nextTable.EndDescriptorPoolUpdate(device, cmd);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001015 return result;
1016}
1017
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001018VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001019{
1020 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001021 if (!validate_VkDescriptorPoolUsage(poolUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001022 sprintf(str, "Parameter poolUsage to function CreateDescriptorPool has invalid value of %i.", (int)poolUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001023 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001024 }
1025 if (!pCreateInfo) {
1026 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001027 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001028 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001029 else if (!vk_validate_vkdescriptorpoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001030 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001031 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001032 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001033 VkResult result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001034 return result;
1035}
1036
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001037VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001038{
1039
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001040 VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001041 return result;
1042}
1043
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001044VK_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 -06001045{
1046 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001047 if (!validate_VkDescriptorSetUsage(setUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001048 sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001049 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001050 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001051 VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001052 return result;
1053}
1054
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001055VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001056{
1057
1058 nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
1059}
1060
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001061VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001062{
1063
1064 nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
1065}
1066
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001067VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001068{
1069 char str[1024];
1070 if (!pCreateInfo) {
1071 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicViewportState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001072 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001073 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001074 else if (!vk_validate_vkdynamicvpstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001075 sprintf(str, "Parameter pCreateInfo to function CreateDynamicViewportState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001076 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001077 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001078 VkResult result = nextTable.CreateDynamicViewportState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001079 return result;
1080}
1081
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001082VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001083{
1084 char str[1024];
1085 if (!pCreateInfo) {
1086 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicRasterState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001087 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001088 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001089 else if (!vk_validate_vkdynamicrsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001090 sprintf(str, "Parameter pCreateInfo to function CreateDynamicRasterState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001091 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001092 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001093 VkResult result = nextTable.CreateDynamicRasterState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001094 return result;
1095}
1096
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001097VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001098{
1099 char str[1024];
1100 if (!pCreateInfo) {
1101 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicColorBlendState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001102 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001103 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001104 else if (!vk_validate_vkdynamiccbstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001105 sprintf(str, "Parameter pCreateInfo to function CreateDynamicColorBlendState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001106 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001107 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001108 VkResult result = nextTable.CreateDynamicColorBlendState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001109 return result;
1110}
1111
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001112VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001113{
1114 char str[1024];
1115 if (!pCreateInfo) {
1116 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicDepthStencilState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001117 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001118 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001119 else if (!vk_validate_vkdynamicdsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001120 sprintf(str, "Parameter pCreateInfo to function CreateDynamicDepthStencilState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001121 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001122 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001123 VkResult result = nextTable.CreateDynamicDepthStencilState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001124 return result;
1125}
1126
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001127void PreCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001128{
1129 if(device == nullptr)
1130 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001131 char const str[] = "vkCreateCommandBuffer parameter, VkDevice device, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001132 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001133 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001134 return;
1135 }
1136
1137 if(pCreateInfo == nullptr)
1138 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001139 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBufferCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001140 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001141 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001142 return;
1143 }
1144
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001145 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001146 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001147 char const str[] = "vkCreateCommandBuffer parameter, VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO "\
1148 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO (precondition).";
1149 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001150 return;
1151 }
1152}
1153
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001154void PostCreateCommandBuffer(VkResult result, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001155{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001156 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001157 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001158 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001159 char const str[] = "vkCreateCommandBuffer failed (postcondition).";
1160 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001161 return;
1162 }
1163
1164 if(pCmdBuffer == nullptr)
1165 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001166 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001167 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001168 return;
1169 }
1170}
1171
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001172VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device,
1173 const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001174{
1175 PreCreateCommandBuffer(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001176 VkResult result = nextTable.CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001177 PostCreateCommandBuffer(result, pCmdBuffer);
1178 return result;
1179}
1180
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001181VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001182{
1183 char str[1024];
1184 if (!pBeginInfo) {
1185 sprintf(str, "Struct ptr parameter pBeginInfo to function BeginCommandBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001186 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001187 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001188 else if (!vk_validate_vkcmdbufferbegininfo(pBeginInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001189 sprintf(str, "Parameter pBeginInfo to function BeginCommandBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001190 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001191 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001192 VkResult result = nextTable.BeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001193 return result;
1194}
1195
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001196VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001197{
1198
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001199 VkResult result = nextTable.EndCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001200 return result;
1201}
1202
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001203VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001204{
1205
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001206 VkResult result = nextTable.ResetCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001207 return result;
1208}
1209
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001210VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001211{
1212 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001213 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001214 sprintf(str, "Parameter pipelineBindPoint to function CmdBindPipeline has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001215 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001216 }
1217 nextTable.CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1218}
1219
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001220VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001221{
1222 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001223 if (!validate_VkStateBindPoint(stateBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001224 sprintf(str, "Parameter stateBindPoint to function CmdBindDynamicStateObject has invalid value of %i.", (int)stateBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001225 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001226 }
1227 nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
1228}
1229
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001230VK_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 -06001231{
1232 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001233 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001234 sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001235 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001236 }
1237 nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChain, layoutChainSlot, count, pDescriptorSets, pUserData);
1238}
1239
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001240VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t binding)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001241{
1242
1243 nextTable.CmdBindVertexBuffer(cmdBuffer, buffer, offset, binding);
1244}
1245
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001246VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, VkIndexType indexType)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001247{
1248 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001249 if (!validate_VkIndexType(indexType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001250 sprintf(str, "Parameter indexType to function CmdBindIndexBuffer has invalid value of %i.", (int)indexType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001251 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001252 }
1253 nextTable.CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1254}
1255
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001256VK_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 -06001257{
1258
1259 nextTable.CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
1260}
1261
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001262VK_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 -06001263{
1264
1265 nextTable.CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
1266}
1267
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001268VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001269{
1270
1271 nextTable.CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1272}
1273
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001274VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001275{
1276
1277 nextTable.CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1278}
1279
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001280VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001281{
1282
1283 nextTable.CmdDispatch(cmdBuffer, x, y, z);
1284}
1285
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001286VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001287{
1288
1289 nextTable.CmdDispatchIndirect(cmdBuffer, buffer, offset);
1290}
1291
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001292VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001293{
1294 char str[1024];
1295 uint32_t i;
1296 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001297 if (!vk_validate_vkbuffercopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001298 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001299 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001300 }
1301 }
1302 nextTable.CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1303}
1304
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001305VK_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 -06001306{
1307 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001308 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001309 sprintf(str, "Parameter srcImageLayout to function CmdCopyImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001310 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001311 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001312 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001313 sprintf(str, "Parameter destImageLayout to function CmdCopyImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001314 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001315 }
1316 uint32_t i;
1317 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001318 if (!vk_validate_vkimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001319 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001320 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001321 }
1322 }
1323 nextTable.CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1324}
1325
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001326VK_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 -06001327{
1328 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001329 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001330 sprintf(str, "Parameter srcImageLayout to function CmdBlitImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001331 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001332 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001333 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001334 sprintf(str, "Parameter destImageLayout to function CmdBlitImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001335 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001336 }
1337 uint32_t i;
1338 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001339 if (!vk_validate_vkimageblit(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001340 sprintf(str, "Parameter pRegions[%i] to function CmdBlitImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001341 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001342 }
1343 }
1344 nextTable.CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1345}
1346
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001347VK_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 -06001348{
1349 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001350 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001351 sprintf(str, "Parameter destImageLayout to function CmdCopyBufferToImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001352 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001353 }
1354 uint32_t i;
1355 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001356 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001357 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBufferToImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001358 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001359 }
1360 }
1361 nextTable.CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1362}
1363
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001364VK_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 -06001365{
1366 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001367 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001368 sprintf(str, "Parameter srcImageLayout to function CmdCopyImageToBuffer has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001369 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001370 }
1371 uint32_t i;
1372 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001373 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001374 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImageToBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001375 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001376 }
1377 }
1378 nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1379}
1380
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001381VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001382{
1383 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001384 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001385 sprintf(str, "Parameter srcImageLayout to function CmdCloneImageData has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001386 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001387 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001388 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001389 sprintf(str, "Parameter destImageLayout to function CmdCloneImageData has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001390 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001391 }
1392 nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
1393}
1394
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001395VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize dataSize, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001396{
1397
1398 nextTable.CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1399}
1400
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001401VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize fillSize, uint32_t data)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001402{
1403
1404 nextTable.CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1405}
1406
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001407VK_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 -06001408{
1409 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001410 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001411 sprintf(str, "Parameter imageLayout to function CmdClearColorImage has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001412 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001413 }
1414 uint32_t i;
1415 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001416 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001417 sprintf(str, "Parameter pRanges[%i] to function CmdClearColorImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001418 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001419 }
1420 }
1421 nextTable.CmdClearColorImage(cmdBuffer, image, imageLayout, color, rangeCount, pRanges);
1422}
1423
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001424VK_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 -06001425{
1426 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001427 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001428 sprintf(str, "Parameter imageLayout to function CmdClearDepthStencil has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001429 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001430 }
1431 uint32_t i;
1432 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001433 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001434 sprintf(str, "Parameter pRanges[%i] to function CmdClearDepthStencil contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001435 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001436 }
1437 }
1438 nextTable.CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1439}
1440
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001441VK_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 -06001442{
1443 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001444 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001445 sprintf(str, "Parameter srcImageLayout to function CmdResolveImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001446 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001447 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001448 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001449 sprintf(str, "Parameter destImageLayout to function CmdResolveImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001450 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001451 }
1452 uint32_t i;
1453 for (i = 0; i < rectCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001454 if (!vk_validate_vkimageresolve(&pRects[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001455 sprintf(str, "Parameter pRects[%i] to function CmdResolveImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001456 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001457 }
1458 }
1459 nextTable.CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, rectCount, pRects);
1460}
1461
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001462VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001463{
1464 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001465 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001466 sprintf(str, "Parameter pipeEvent to function CmdSetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001467 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001468 }
1469 nextTable.CmdSetEvent(cmdBuffer, event, pipeEvent);
1470}
1471
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001472VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001473{
1474 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001475 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001476 sprintf(str, "Parameter pipeEvent to function CmdResetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001477 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001478 }
1479 nextTable.CmdResetEvent(cmdBuffer, event, pipeEvent);
1480}
1481
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001482VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, const VkEventWaitInfo* pWaitInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001483{
1484 char str[1024];
1485 if (!pWaitInfo) {
1486 sprintf(str, "Struct ptr parameter pWaitInfo to function CmdWaitEvents is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001487 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001488 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001489 else if (!vk_validate_vkeventwaitinfo(pWaitInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001490 sprintf(str, "Parameter pWaitInfo to function CmdWaitEvents contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001491 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001492 }
1493 nextTable.CmdWaitEvents(cmdBuffer, pWaitInfo);
1494}
1495
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001496VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, const VkPipelineBarrier* pBarrier)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001497{
1498 char str[1024];
1499 if (!pBarrier) {
1500 sprintf(str, "Struct ptr parameter pBarrier to function CmdPipelineBarrier is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001501 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001502 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001503 else if (!vk_validate_vkpipelinebarrier(pBarrier)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001504 sprintf(str, "Parameter pBarrier to function CmdPipelineBarrier contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001505 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001506 }
1507 nextTable.CmdPipelineBarrier(cmdBuffer, pBarrier);
1508}
1509
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001510VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001511{
1512
1513 nextTable.CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1514}
1515
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001516VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001517{
1518
1519 nextTable.CmdEndQuery(cmdBuffer, queryPool, slot);
1520}
1521
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001522VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001523{
1524
1525 nextTable.CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1526}
1527
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001528VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkGpuSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001529{
1530 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001531 if (!validate_VkTimestampType(timestampType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001532 sprintf(str, "Parameter timestampType to function CmdWriteTimestamp has invalid value of %i.", (int)timestampType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001533 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001534 }
1535 nextTable.CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1536}
1537
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001538VK_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 -06001539{
1540 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001541 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001542 sprintf(str, "Parameter pipelineBindPoint to function CmdInitAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001543 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001544 }
1545 nextTable.CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1546}
1547
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001548VK_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 -06001549{
1550 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001551 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001552 sprintf(str, "Parameter pipelineBindPoint to function CmdLoadAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001553 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001554 }
1555 nextTable.CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1556}
1557
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001558VK_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 -06001559{
1560 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001561 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001562 sprintf(str, "Parameter pipelineBindPoint to function CmdSaveAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001563 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001564 }
1565 nextTable.CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1566}
1567
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001568VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001569{
1570 char str[1024];
1571 if (!pCreateInfo) {
1572 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFramebuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001573 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001574 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001575 else if (!vk_validate_vkframebuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001576 sprintf(str, "Parameter pCreateInfo to function CreateFramebuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001577 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001578 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001579 VkResult result = nextTable.CreateFramebuffer(device, pCreateInfo, pFramebuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001580 return result;
1581}
1582
1583
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001584void PreCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001585{
1586 if(pCreateInfo == nullptr)
1587 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001588 char const str[] = "vkCreateRenderPass parameter, VkRenderPassCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001589 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001590 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001591 return;
1592 }
1593
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001594 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001595 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001596 char const str[] = "vkCreateRenderPass parameter, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO "\
1597 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO (precondition).";
1598 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001599 return;
1600 }
1601
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001602 if(!vk_validate_vkrect(&pCreateInfo->renderArea))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001603 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001604 char const str[] = "vkCreateRenderPass parameter, VkRect pCreateInfo->renderArea, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001605 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001606 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001607 return;
1608 }
1609
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001610 if(!vk_validate_vkextent2d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001611 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001612 char const str[] = "vkCreateRenderPass parameter, VkExtent2D pCreateInfo->extent, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001613 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001614 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001615 return;
1616 }
1617
1618 if(pCreateInfo->pColorFormats == nullptr)
1619 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001620 char const str[] = "vkCreateRenderPass parameter, VkFormat* pCreateInfo->pColorFormats, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001621 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001622 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001623 return;
1624 }
1625
1626 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1627 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001628 if(!validate_VkFormat(pCreateInfo->pColorFormats[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001629 {
1630 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001631 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001632 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001633 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001634 continue;
1635 }
1636
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001637 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001638 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001639 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->pColorFormats[i],
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001640 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1641 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001642 {
1643 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001644 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001645 "], cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001646 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001647 continue;
1648 }
1649
1650 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1651 {
1652 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001653 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001654 "], contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001655 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001656 continue;
1657 }
1658
1659 }
1660
1661 if(pCreateInfo->pColorLayouts == nullptr)
1662 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001663 char const str[] = "vkCreateRenderPass parameter, VkImageLayout* pCreateInfo->pColorLayouts, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001664 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001665 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001666 return;
1667 }
1668
1669 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1670 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001671 if(!validate_VkImageLayout(pCreateInfo->pColorLayouts[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001672 {
1673 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001674 ss << "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pColorLayouts[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001675 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001676 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001677 continue;
1678 }
1679 }
1680
1681 if(pCreateInfo->pColorLoadOps == nullptr)
1682 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001683 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001684 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001685 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001686 return;
1687 }
1688
1689 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1690 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001691 if(!validate_VkAttachmentLoadOp(pCreateInfo->pColorLoadOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001692 {
1693 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001694 ss << "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pColorLoadOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001695 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001696 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001697 continue;
1698 }
1699 }
1700
1701 if(pCreateInfo->pColorStoreOps == nullptr)
1702 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001703 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001704 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001705 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001706 return;
1707 }
1708
1709 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1710 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001711 if(!validate_VkAttachmentStoreOp(pCreateInfo->pColorStoreOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001712 {
1713 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001714 ss << "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pColorStoreOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001715 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001716 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001717 continue;
1718 }
1719 }
1720
1721 if(pCreateInfo->pColorLoadClearValues == nullptr)
1722 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001723 char const str[] = "vkCreateRenderPass parameter, VkClearColor* pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001724 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001725 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001726 return;
1727 }
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001728
1729 if(pCreateInfo->pColorStoreOps == nullptr)
1730 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001731 char const str[] = "vkCreateRenderPass parameter, VK_ATTACHMENT_STORE_OP* pCreateInfo->pColorStoreOps, "\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001732 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001733 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001734 return;
1735 }
1736
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001737 if(pCreateInfo->pColorLoadClearValues == nullptr)
1738 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001739 char const str[] = "vkCreateRenderPass parameter, VK_CLEAR_COLOR* pCreateInfo->"\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001740 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001741 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001742 return;
1743 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001744
1745 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1746 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001747 if(!vk_validate_vkclearcolor(&(pCreateInfo->pColorLoadClearValues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001748 {
1749 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001750 ss << "vkCreateRenderPass parameter, VkClearColor pCreateInfo->pColorLoadClearValues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001751 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001752 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001753 continue;
1754 }
1755 }
1756
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001757 if(!validate_VkFormat(pCreateInfo->depthStencilFormat))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001758 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001759 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001760 "depthStencilFormat, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001761 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001762 return;
1763 }
1764
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001765 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001766 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001767 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->depthStencilFormat,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001768 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1769 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001770 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001771 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001772 "depthStencilFormat, cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001773 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001774 return;
1775 }
1776
1777 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1778 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001779 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001780 "depthStencilFormat, contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001781 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001782 return;
1783 }
1784
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001785 if(!validate_VkImageLayout(pCreateInfo->depthStencilLayout))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001786 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001787 char const str[] = "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001788 "depthStencilLayout, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001789 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001790 return;
1791 }
1792
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001793 if(!validate_VkAttachmentLoadOp(pCreateInfo->depthLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001794 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001795 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001796 "depthLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001797 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001798 return;
1799 }
1800
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001801 if(!validate_VkAttachmentStoreOp(pCreateInfo->depthStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001802 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001803 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001804 "depthStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001805 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001806 return;
1807 }
1808
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001809 if(!validate_VkAttachmentLoadOp(pCreateInfo->stencilLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001810 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001811 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001812 "stencilLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001813 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001814 return;
1815 }
1816
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001817 if(!validate_VkAttachmentStoreOp(pCreateInfo->stencilStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001818 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001819 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001820 "stencilStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001821 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001822 return;
1823 }
1824}
1825
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001826void PostCreateRenderPass(VkResult result, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001827{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001828 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001829 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001830 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001831 char const str[] = "vkCreateRenderPass failed (postcondition).";
1832 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001833 return;
1834 }
1835
1836 if(pRenderPass == nullptr)
1837 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001838 char const str[] = "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001839 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001840 return;
1841 }
1842}
1843
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001844VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001845{
1846 PreCreateRenderPass(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001847 VkResult result = nextTable.CreateRenderPass(device, pCreateInfo, pRenderPass);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001848 PostCreateRenderPass(result, pRenderPass);
1849 return result;
1850}
1851
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001852VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001853{
1854 char str[1024];
1855 if (!pRenderPassBegin) {
1856 sprintf(str, "Struct ptr parameter pRenderPassBegin to function CmdBeginRenderPass is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001857 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001858 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001859 else if (!vk_validate_vkrenderpassbegin(pRenderPassBegin)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001860 sprintf(str, "Parameter pRenderPassBegin to function CmdBeginRenderPass contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001861 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001862 }
1863 nextTable.CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1864}
1865
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001866VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001867{
1868
1869 nextTable.CmdEndRenderPass(cmdBuffer, renderPass);
1870}
1871
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001872VK_LAYER_EXPORT VkResult VKAPI vkDbgSetValidationLevel(VkDevice device, VkValidationLevel validationLevel)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001873{
1874 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001875 if (!validate_VkValidationLevel(validationLevel)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001876 sprintf(str, "Parameter validationLevel to function DbgSetValidationLevel has invalid value of %i.", (int)validationLevel);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001877 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001878 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001879 VkResult result = nextTable.DbgSetValidationLevel(device, validationLevel);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001880 return result;
1881}
1882
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001883VK_LAYER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001884{
1885 // This layer intercepts callbacks
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001886 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 -06001887 if (!pNewDbgFuncNode)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001888 return VK_ERROR_OUT_OF_MEMORY;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001889 pNewDbgFuncNode->pfnMsgCallback = pfnMsgCallback;
1890 pNewDbgFuncNode->pUserData = pUserData;
1891 pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
1892 g_pDbgFunctionHead = pNewDbgFuncNode;
1893 // force callbacks if DebugAction hasn't been set already other than initial value
1894 if (g_actionIsDefault) {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001895 g_debugAction = VK_DBG_LAYER_ACTION_CALLBACK;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001896 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001897 VkResult result = nextTable.DbgRegisterMsgCallback(instance, pfnMsgCallback, pUserData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001898 return result;
1899}
1900
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001901VK_LAYER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001902{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001903 VK_LAYER_DBG_FUNCTION_NODE *pTrav = g_pDbgFunctionHead;
1904 VK_LAYER_DBG_FUNCTION_NODE *pPrev = pTrav;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001905 while (pTrav) {
1906 if (pTrav->pfnMsgCallback == pfnMsgCallback) {
1907 pPrev->pNext = pTrav->pNext;
1908 if (g_pDbgFunctionHead == pTrav)
1909 g_pDbgFunctionHead = pTrav->pNext;
1910 free(pTrav);
1911 break;
1912 }
1913 pPrev = pTrav;
1914 pTrav = pTrav->pNext;
1915 }
1916 if (g_pDbgFunctionHead == NULL)
1917 {
1918 if (g_actionIsDefault)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001919 g_debugAction = VK_DBG_LAYER_ACTION_LOG_MSG;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001920 else
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001921 g_debugAction = (VK_LAYER_DBG_ACTION)(g_debugAction & ~((uint32_t)VK_DBG_LAYER_ACTION_CALLBACK));
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001922 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001923 VkResult result = nextTable.DbgUnregisterMsgCallback(instance, pfnMsgCallback);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001924 return result;
1925}
1926
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001927VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001928{
1929
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001930 VkResult result = nextTable.DbgSetMessageFilter(device, msgCode, filter);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001931 return result;
1932}
1933
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001934VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkBaseObject object, size_t tagSize, const void* pTag)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001935{
1936
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001937 VkResult result = nextTable.DbgSetObjectTag(object, tagSize, pTag);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001938 return result;
1939}
1940
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001941VK_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 -06001942{
1943
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001944 VkResult result = nextTable.DbgSetGlobalOption(instance, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001945 return result;
1946}
1947
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001948VK_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 -06001949{
1950
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001951 VkResult result = nextTable.DbgSetDeviceOption(device, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001952 return result;
1953}
1954
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001955VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001956{
1957
1958 nextTable.CmdDbgMarkerBegin(cmdBuffer, pMarker);
1959}
1960
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001961VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001962{
1963
1964 nextTable.CmdDbgMarkerEnd(cmdBuffer);
1965}
1966
1967#if defined(__linux__) || defined(XCB_NVIDIA)
1968
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001969VK_LAYER_EXPORT VkResult VKAPI vkWsiX11AssociateConnection(VkPhysicalGpu gpu, const VK_WSI_X11_CONNECTION_INFO* pConnectionInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001970{
Jon Ashburn630e44f2015-04-08 21:33:34 -06001971 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001972 loader_platform_thread_once(&tabOnce, initParamChecker);
1973
Jon Ashburn630e44f2015-04-08 21:33:34 -06001974 VkResult result = nextTable.WsiX11AssociateConnection(gpu, pConnectionInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001975 return result;
1976}
1977
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001978VK_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 -06001979{
1980
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001981 VkResult result = nextTable.WsiX11GetMSC(device, window, crtc, pMsc);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001982 return result;
1983}
1984
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001985VK_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 -06001986{
1987
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001988 VkResult result = nextTable.WsiX11CreatePresentableImage(device, pCreateInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001989 return result;
1990}
1991
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001992VK_LAYER_EXPORT VkResult VKAPI vkWsiX11QueuePresent(VkQueue queue, const VK_WSI_X11_PRESENT_INFO* pPresentInfo, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001993{
1994
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001995 VkResult result = nextTable.WsiX11QueuePresent(queue, pPresentInfo, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001996 return result;
1997}
1998
1999#endif
2000
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002001#include "vk_generic_intercept_proc_helper.h"
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002002VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalGpu gpu, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002003{
Jon Ashburn301c5f02015-04-06 10:58:22 -06002004 VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002005 void* addr;
2006 if (gpu == NULL)
2007 return NULL;
2008 pCurObj = gpuw;
2009 loader_platform_thread_once(&tabOnce, initParamChecker);
2010
2011 addr = layer_intercept_proc(funcName);
2012 if (addr)
2013 return addr;
2014 else {
2015 if (gpuw->pGPA == NULL)
2016 return NULL;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002017 return gpuw->pGPA((VkPhysicalGpu)gpuw->nextObject, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002018 }
2019}
2020