11dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter/*
21dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * Copyright (c) 2015-2016 The Khronos Group Inc.
31dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * Copyright (c) 2015-2016 Valve Corporation
41dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * Copyright (c) 2015-2016 LunarG, Inc.
51dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * Copyright (c) 2016 Google Inc.
61dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter *
71dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * Permission is hereby granted, free of charge, to any person obtaining a copy
81dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * of this software and/or associated documentation files (the "Materials"), to
91dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * deal in the Materials without restriction, including without limitation the
101dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
111dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * sell copies of the Materials, and to permit persons to whom the Materials are
121dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * furnished to do so, subject to the following conditions:
131dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter *
141dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * The above copyright notice(s) and this permission notice shall be included in
151dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * all copies or substantial portions of the Materials.
161dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter *
171dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
181dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
191dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
201dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter *
211dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
221dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
231dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
241dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter * USE OR OTHER DEALINGS IN THE MATERIALS.
251dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter *
261dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter */
271dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter#pragma once
281dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
291dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter#include <vulkan/vulkan.h>
301dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
311dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter// ------------------------------------------------------------------------------------------------
321dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter// CreateInstance and CreateDevice support structures
331dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
341dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchtertypedef enum VkLayerFunction_ {
351dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    VK_LAYER_FUNCTION_LINK = 0,
367fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wu    VK_LAYER_FUNCTION_DATA_CALLBACK = 1
371dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter} VkLayerFunction;
381dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
391dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchtertypedef struct VkLayerInstanceLink_ {
401dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    struct VkLayerInstanceLink_* pNext;
411dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
421dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter} VkLayerInstanceLink;
431dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
447fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wutypedef VkResult(VKAPI_PTR* PFN_vkSetInstanceLoaderData)(VkInstance instance,
457fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wu                                                         void* object);
467fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wutypedef VkResult(VKAPI_PTR* PFN_vkSetDeviceLoaderData)(VkDevice device,
477fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wu                                                       void* object);
481dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
491dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchtertypedef struct {
501dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    VkStructureType sType;  // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
511dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    const void* pNext;
521dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    VkLayerFunction function;
531dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    union {
541dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter        VkLayerInstanceLink* pLayerInfo;
557fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wu        PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
561dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    } u;
571dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter} VkLayerInstanceCreateInfo;
581dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
591dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchtertypedef struct VkLayerDeviceLink_ {
601dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    struct VkLayerDeviceLink_* pNext;
611dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
621dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
631dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter} VkLayerDeviceLink;
641dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter
651dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchtertypedef struct {
661dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    VkStructureType sType;  // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
671dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    const void* pNext;
681dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    VkLayerFunction function;
691dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    union {
701dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter        VkLayerDeviceLink* pLayerInfo;
717fcd744c42c91eab5210df2080b0a7a6b5838f68Chia-I Wu        PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData;
721dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter    } u;
731dd712aefdc771297823b24f26d768cd8bd14d49Courtney Goeltzenleuchter} VkLayerDeviceCreateInfo;
74