| /* Need to define dispatch table |
| * Core struct can then have ptr to dispatch table at the top |
| * Along with object ptrs for current and next OBJ |
| */ |
| #pragma once |
| |
| #include "vulkan.h" |
| #include "vk_debug_report_lunarg.h" |
| #include "vk_debug_marker_lunarg.h" |
| #include "vk_wsi_lunarg.h" |
| #include "vk_wsi_lunarg.h" |
| #if defined(__GNUC__) && __GNUC__ >= 4 |
| # define VK_LAYER_EXPORT __attribute__((visibility("default"))) |
| #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) |
| # define VK_LAYER_EXPORT __attribute__((visibility("default"))) |
| #else |
| # define VK_LAYER_EXPORT |
| #endif |
| |
| |
| typedef void * (*PFN_vkGPA)(VkObject obj, const char * pName); |
| typedef struct VkBaseLayerObject_ |
| { |
| PFN_vkGPA pGPA; |
| VkObject nextObject; |
| VkObject baseObject; |
| } VkBaseLayerObject; |
| |
| typedef struct VkLayerDispatchTable_ |
| { |
| PFN_vkGetDeviceProcAddr GetDeviceProcAddr; |
| PFN_vkDestroyDevice DestroyDevice; |
| PFN_vkGetDeviceQueue GetDeviceQueue; |
| PFN_vkQueueSubmit QueueSubmit; |
| PFN_vkQueueWaitIdle QueueWaitIdle; |
| PFN_vkDeviceWaitIdle DeviceWaitIdle; |
| PFN_vkAllocMemory AllocMemory; |
| PFN_vkFreeMemory FreeMemory; |
| PFN_vkSetMemoryPriority SetMemoryPriority; |
| PFN_vkMapMemory MapMemory; |
| PFN_vkUnmapMemory UnmapMemory; |
| PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges; |
| PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges; |
| PFN_vkPinSystemMemory PinSystemMemory; |
| PFN_vkOpenSharedMemory OpenSharedMemory; |
| PFN_vkOpenSharedSemaphore OpenSharedSemaphore; |
| PFN_vkOpenPeerMemory OpenPeerMemory; |
| PFN_vkOpenPeerImage OpenPeerImage; |
| PFN_vkDestroyObject DestroyObject; |
| PFN_vkGetObjectInfo GetObjectInfo; |
| PFN_vkBindObjectMemory BindObjectMemory; |
| PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory; |
| PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory; |
| PFN_vkCreateFence CreateFence; |
| PFN_vkGetFenceStatus GetFenceStatus; |
| PFN_vkResetFences ResetFences; |
| PFN_vkWaitForFences WaitForFences; |
| PFN_vkCreateSemaphore CreateSemaphore; |
| PFN_vkQueueSignalSemaphore QueueSignalSemaphore; |
| PFN_vkQueueWaitSemaphore QueueWaitSemaphore; |
| PFN_vkCreateEvent CreateEvent; |
| PFN_vkGetEventStatus GetEventStatus; |
| PFN_vkSetEvent SetEvent; |
| PFN_vkResetEvent ResetEvent; |
| PFN_vkCreateQueryPool CreateQueryPool; |
| PFN_vkGetQueryPoolResults GetQueryPoolResults; |
| PFN_vkGetFormatInfo GetFormatInfo; |
| PFN_vkCreateBuffer CreateBuffer; |
| PFN_vkCreateBufferView CreateBufferView; |
| PFN_vkCreateImage CreateImage; |
| PFN_vkGetImageSubresourceInfo GetImageSubresourceInfo; |
| PFN_vkCreateImageView CreateImageView; |
| PFN_vkCreateColorAttachmentView CreateColorAttachmentView; |
| PFN_vkCreateDepthStencilView CreateDepthStencilView; |
| PFN_vkCreateShader CreateShader; |
| PFN_vkCreateGraphicsPipeline CreateGraphicsPipeline; |
| PFN_vkCreateGraphicsPipelineDerivative CreateGraphicsPipelineDerivative; |
| PFN_vkCreateComputePipeline CreateComputePipeline; |
| PFN_vkStorePipeline StorePipeline; |
| PFN_vkLoadPipeline LoadPipeline; |
| PFN_vkLoadPipelineDerivative LoadPipelineDerivative; |
| PFN_vkCreatePipelineLayout CreatePipelineLayout; |
| PFN_vkCreateSampler CreateSampler; |
| PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout; |
| PFN_vkCreateDescriptorPool CreateDescriptorPool; |
| PFN_vkResetDescriptorPool ResetDescriptorPool; |
| PFN_vkAllocDescriptorSets AllocDescriptorSets; |
| PFN_vkClearDescriptorSets ClearDescriptorSets; |
| PFN_vkUpdateDescriptorSets UpdateDescriptorSets; |
| PFN_vkCreateDynamicViewportState CreateDynamicViewportState; |
| PFN_vkCreateDynamicRasterState CreateDynamicRasterState; |
| PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState; |
| PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState; |
| PFN_vkCreateCommandBuffer CreateCommandBuffer; |
| PFN_vkBeginCommandBuffer BeginCommandBuffer; |
| PFN_vkEndCommandBuffer EndCommandBuffer; |
| PFN_vkResetCommandBuffer ResetCommandBuffer; |
| PFN_vkCmdBindPipeline CmdBindPipeline; |
| PFN_vkCmdBindDynamicStateObject CmdBindDynamicStateObject; |
| PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets; |
| PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers; |
| PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer; |
| PFN_vkCmdDraw CmdDraw; |
| PFN_vkCmdDrawIndexed CmdDrawIndexed; |
| PFN_vkCmdDrawIndirect CmdDrawIndirect; |
| PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect; |
| PFN_vkCmdDispatch CmdDispatch; |
| PFN_vkCmdDispatchIndirect CmdDispatchIndirect; |
| PFN_vkCmdCopyBuffer CmdCopyBuffer; |
| PFN_vkCmdCopyImage CmdCopyImage; |
| PFN_vkCmdBlitImage CmdBlitImage; |
| PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage; |
| PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer; |
| PFN_vkCmdUpdateBuffer CmdUpdateBuffer; |
| PFN_vkCmdFillBuffer CmdFillBuffer; |
| PFN_vkCmdClearColorImage CmdClearColorImage; |
| PFN_vkCmdClearDepthStencil CmdClearDepthStencil; |
| PFN_vkCmdResolveImage CmdResolveImage; |
| PFN_vkCmdSetEvent CmdSetEvent; |
| PFN_vkCmdResetEvent CmdResetEvent; |
| PFN_vkCmdWaitEvents CmdWaitEvents; |
| PFN_vkCmdPipelineBarrier CmdPipelineBarrier; |
| PFN_vkCmdBeginQuery CmdBeginQuery; |
| PFN_vkCmdEndQuery CmdEndQuery; |
| PFN_vkCmdResetQueryPool CmdResetQueryPool; |
| PFN_vkCmdWriteTimestamp CmdWriteTimestamp; |
| PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults; |
| PFN_vkCmdInitAtomicCounters CmdInitAtomicCounters; |
| PFN_vkCmdLoadAtomicCounters CmdLoadAtomicCounters; |
| PFN_vkCmdSaveAtomicCounters CmdSaveAtomicCounters; |
| PFN_vkCreateFramebuffer CreateFramebuffer; |
| PFN_vkCreateRenderPass CreateRenderPass; |
| PFN_vkCmdBeginRenderPass CmdBeginRenderPass; |
| PFN_vkCmdEndRenderPass CmdEndRenderPass; |
| PFN_vkCreateSwapChainWSI CreateSwapChainWSI; |
| PFN_vkDestroySwapChainWSI DestroySwapChainWSI; |
| PFN_vkGetSwapChainInfoWSI GetSwapChainInfoWSI; |
| PFN_vkQueuePresentWSI QueuePresentWSI; |
| PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback; |
| PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback; |
| PFN_vkDbgStringCallback DbgStringCallback; |
| PFN_vkDbgStdioCallback DbgStdioCallback; |
| PFN_vkDbgBreakCallback DbgBreakCallback; |
| } VkLayerDispatchTable; |
| |
| typedef struct VkLayerInstanceDispatchTable_ |
| { |
| PFN_vkGetInstanceProcAddr GetInstanceProcAddr; |
| PFN_vkCreateInstance CreateInstance; |
| PFN_vkDestroyInstance DestroyInstance; |
| PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices; |
| PFN_vkGetPhysicalDeviceInfo GetPhysicalDeviceInfo; |
| PFN_vkCreateDevice CreateDevice; |
| /* PFN_vkGetGlobalExtensionInfo GetGlobalExtensionInfo; non-dispatchable */ |
| PFN_vkGetPhysicalDeviceExtensionInfo GetPhysicalDeviceExtensionInfo; |
| PFN_vkGetMultiDeviceCompatibility GetMultiDeviceCompatibility; |
| PFN_vkGetDisplayInfoWSI GetDisplayInfoWSI; |
| PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback; |
| PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback; |
| PFN_vkDbgStringCallback DbgStringCallback; |
| PFN_vkDbgStdioCallback DbgStdioCallback; |
| PFN_vkDbgBreakCallback DbgBreakCallback; |
| } VkLayerInstanceDispatchTable; |
| |
| // LL node for tree of dbg callback functions |
| typedef struct VkLayerDbgFunctionNode_ |
| { |
| VkDbgMsgCallback msgCallback; |
| PFN_vkDbgMsgCallback pfnMsgCallback; |
| VkFlags msgFlags; |
| const void *pUserData; |
| struct VkLayerDbgFunctionNode_ *pNext; |
| } VkLayerDbgFunctionNode; |
| |
| typedef enum VkLayerDbgAction_ |
| { |
| VK_DBG_LAYER_ACTION_IGNORE = 0x0, |
| VK_DBG_LAYER_ACTION_CALLBACK = 0x1, |
| VK_DBG_LAYER_ACTION_LOG_MSG = 0x2, |
| VK_DBG_LAYER_ACTION_BREAK = 0x4 |
| } VkLayerDbgAction; |
| |
| // ------------------------------------------------------------------------------------------------ |
| // API functions |