111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// File: vk_layer.h
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 2015-2016 The Khronos Group Inc.
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 2015-2016 Valve Corporation
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 2015-2016 LunarG, Inc.
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License");
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License.
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *     http://www.apache.org/licenses/LICENSE-2.0
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS,
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License.
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Need to define dispatch table
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Core struct can then have ptr to dispatch table at the top
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Along with object ptrs for current and next OBJ
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#pragma once
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "vulkan.h"
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__GNUC__) && __GNUC__ >= 4
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VK_LAYER_EXPORT __attribute__((visibility("default")))
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VK_LAYER_EXPORT __attribute__((visibility("default")))
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VK_LAYER_EXPORT
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct VkLayerDispatchTable_ {
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyDevice DestroyDevice;
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDeviceQueue GetDeviceQueue;
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkQueueSubmit QueueSubmit;
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkQueueWaitIdle QueueWaitIdle;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDeviceWaitIdle DeviceWaitIdle;
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkAllocateMemory AllocateMemory;
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkFreeMemory FreeMemory;
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkMapMemory MapMemory;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkUnmapMemory UnmapMemory;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkBindImageMemory BindImageMemory;
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkBindBufferMemory BindBufferMemory;
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkQueueBindSparse QueueBindSparse;
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateFence CreateFence;
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyFence DestroyFence;
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetFenceStatus GetFenceStatus;
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkResetFences ResetFences;
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkWaitForFences WaitForFences;
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateSemaphore CreateSemaphore;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroySemaphore DestroySemaphore;
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateEvent CreateEvent;
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyEvent DestroyEvent;
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetEventStatus GetEventStatus;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkSetEvent SetEvent;
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkResetEvent ResetEvent;
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateQueryPool CreateQueryPool;
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyQueryPool DestroyQueryPool;
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetQueryPoolResults GetQueryPoolResults;
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateBuffer CreateBuffer;
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyBuffer DestroyBuffer;
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateBufferView CreateBufferView;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyBufferView DestroyBufferView;
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateImage CreateImage;
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyImage DestroyImage;
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateImageView CreateImageView;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyImageView DestroyImageView;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateShaderModule CreateShaderModule;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyShaderModule DestroyShaderModule;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreatePipelineCache CreatePipelineCache;
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyPipelineCache DestroyPipelineCache;
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPipelineCacheData GetPipelineCacheData;
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkMergePipelineCaches MergePipelineCaches;
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateComputePipelines CreateComputePipelines;
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyPipeline DestroyPipeline;
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreatePipelineLayout CreatePipelineLayout;
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateSampler CreateSampler;
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroySampler DestroySampler;
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateDescriptorPool CreateDescriptorPool;
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkResetDescriptorPool ResetDescriptorPool;
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkFreeDescriptorSets FreeDescriptorSets;
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateFramebuffer CreateFramebuffer;
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyFramebuffer DestroyFramebuffer;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateRenderPass CreateRenderPass;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyRenderPass DestroyRenderPass;
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateCommandPool CreateCommandPool;
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyCommandPool DestroyCommandPool;
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkResetCommandPool ResetCommandPool;
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkFreeCommandBuffers FreeCommandBuffers;
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkBeginCommandBuffer BeginCommandBuffer;
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkEndCommandBuffer EndCommandBuffer;
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkResetCommandBuffer ResetCommandBuffer;
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBindPipeline CmdBindPipeline;
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetViewport CmdSetViewport;
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetScissor CmdSetScissor;
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetLineWidth CmdSetLineWidth;
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetDepthBias CmdSetDepthBias;
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetStencilReference CmdSetStencilReference;
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdDraw CmdDraw;
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdDrawIndexed CmdDrawIndexed;
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdDrawIndirect CmdDrawIndirect;
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdDispatch CmdDispatch;
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdCopyBuffer CmdCopyBuffer;
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdCopyImage CmdCopyImage;
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBlitImage CmdBlitImage;
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdFillBuffer CmdFillBuffer;
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdClearColorImage CmdClearColorImage;
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdClearAttachments CmdClearAttachments;
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdResolveImage CmdResolveImage;
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdSetEvent CmdSetEvent;
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdResetEvent CmdResetEvent;
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdWaitEvents CmdWaitEvents;
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBeginQuery CmdBeginQuery;
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdEndQuery CmdEndQuery;
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdResetQueryPool CmdResetQueryPool;
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdPushConstants CmdPushConstants;
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdNextSubpass CmdNextSubpass;
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdEndRenderPass CmdEndRenderPass;
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCmdExecuteCommands CmdExecuteCommands;
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkQueuePresentKHR QueuePresentKHR;
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerDispatchTable;
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct VkLayerInstanceDispatchTable_ {
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyInstance DestroyInstance;
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceImageFormatProperties
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceImageFormatProperties;
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceSparseImageFormatProperties
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceSparseImageFormatProperties;
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceQueueFamilyProperties
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceQueueFamilyProperties;
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties;
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceSurfaceCapabilitiesKHR;
18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceSurfacePresentModesKHR
18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceSurfacePresentModesKHR;
19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef VK_USE_PLATFORM_MIR_KHR
19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR;
19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceMirPresentationSupportKHR
19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceMirPresentationSupportKHR;
19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef VK_USE_PLATFORM_WAYLAND_KHR
19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR
20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceWaylandPresentationSupportKHR;
20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef VK_USE_PLATFORM_WIN32_KHR
20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR
20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceWin32PresentationSupportKHR;
20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef VK_USE_PLATFORM_XCB_KHR
20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR
21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceXcbPresentationSupportKHR;
21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef VK_USE_PLATFORM_XLIB_KHR
21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR
21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceXlibPresentationSupportKHR;
21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef VK_USE_PLATFORM_ANDROID_KHR
21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceDisplayPropertiesKHR
22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceDisplayPropertiesKHR;
22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR
22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetPhysicalDeviceDisplayPlanePropertiesKHR;
22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDisplayPlaneSupportedDisplaysKHR
22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetDisplayPlaneSupportedDisplaysKHR;
22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDisplayModePropertiesKHR
22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetDisplayModePropertiesKHR;
22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateDisplayModeKHR
23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        CreateDisplayModeKHR;
23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDisplayPlaneCapabilitiesKHR
23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        GetDisplayPlaneCapabilitiesKHR;
23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkCreateDisplayPlaneSurfaceKHR
23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        CreateDisplayPlaneSurfaceKHR;
23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerInstanceDispatchTable;
23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// LL node for tree of dbg callback functions
23811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct VkLayerDbgFunctionNode_ {
23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VkDebugReportCallbackEXT msgCallback;
24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkDebugReportCallbackEXT pfnMsgCallback;
24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VkFlags msgFlags;
24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    void *pUserData;
24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    struct VkLayerDbgFunctionNode_ *pNext;
24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerDbgFunctionNode;
24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef enum VkLayerDbgAction_ {
24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_DBG_LAYER_ACTION_IGNORE = 0x0,
24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_DBG_LAYER_ACTION_BREAK = 0x4,
25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_DBG_LAYER_ACTION_DEBUG_OUTPUT = 0x8,
25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerDbgAction;
25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// ------------------------------------------------------------------------------------------------
25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// CreateInstance and CreateDevice support structures
25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Sub type of structure for instance and device loader ext of CreateInfo.
25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * then VkLayerFunction indicates struct type pointed to by pNext
26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
26211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef enum VkLayerFunction_ {
26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_LAYER_LINK_INFO = 0,
26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VK_LOADER_DATA_CALLBACK = 1
26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerFunction;
26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct VkLayerInstanceLink_ {
26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    struct VkLayerInstanceLink_ *pNext;
26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerInstanceLink;
27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * When creating the device chain the loader needs to pass
27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * down information about it's device structure needed at
27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * the end of the chain. Passing the data via the
27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * VkLayerDeviceInfo avoids issues with finding the
27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * exact instance being used.
27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
27911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct VkLayerDeviceInfo_ {
28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    void *device_info;
28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerDeviceInfo;
28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
28411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance,
28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        void *object);
28611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device,
28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        void *object);
28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
28911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct {
29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const void *pNext;
29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VkLayerFunction function;
29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    union {
29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        VkLayerInstanceLink *pLayerInfo;
29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    } u;
29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerInstanceCreateInfo;
29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct VkLayerDeviceLink_ {
30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    struct VkLayerDeviceLink_ *pNext;
30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerDeviceLink;
30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
30511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct {
30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const void *pNext;
30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    VkLayerFunction function;
30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    union {
31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        VkLayerDeviceLink *pLayerInfo;
31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData;
31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    } u;
31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} VkLayerDeviceCreateInfo;
31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
315