From 922a0fac69a54ab79203e4047ed358c76b6950c0 Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Wed, 10 Jun 2015 17:39:03 -0600 Subject: extensions: begin changes for extension support This patch starts restructuring the various components (loader, driver, layers, etc.) to support global and device extensions. Require GetProcAddr to access the extension functions and related support. --- include/vkDbg.h | 55 +-------------- include/vkLayer.h | 47 +++++++------ include/vk_dbg.h | 44 +++++++----- include/vk_debug_marker_lunarg.h | 97 +++++++++++++++++++++++++++ include/vk_debug_report_lunarg.h | 141 +++++++++++++++++++++++++++++++++++++++ include/vulkan.h | 41 ++++-------- 6 files changed, 302 insertions(+), 123 deletions(-) create mode 100644 include/vk_debug_marker_lunarg.h create mode 100644 include/vk_debug_report_lunarg.h (limited to 'include') diff --git a/include/vkDbg.h b/include/vkDbg.h index f828eb8c..9e5fb6ec 100644 --- a/include/vkDbg.h +++ b/include/vkDbg.h @@ -25,12 +25,12 @@ typedef enum VkValidationLevel_ typedef enum _VK_DBG_MSG_TYPE { - VK_DBG_MSG_UNKNOWN = 0x0, - VK_DBG_MSG_ERROR = 0x1, + VK_DBG_REPORT_INFO_BIT = 0x0, + VK_DBG_REPORT_ERROR_BIT = 0x1, VK_DBG_MSG_WARNING = 0x2, VK_DBG_MSG_PERF_WARNING = 0x3, - VK_DBG_MSG_TYPE_BEGIN_RANGE = VK_DBG_MSG_UNKNOWN, + VK_DBG_MSG_TYPE_BEGIN_RANGE = VK_DBG_REPORT_INFO_BIT, VK_DBG_MSG_TYPE_END_RANGE = VK_DBG_MSG_PERF_WARNING, VK_NUM_DBG_MSG_TYPE = (VK_DBG_MSG_TYPE_END_RANGE - VK_DBG_MSG_TYPE_BEGIN_RANGE + 1), } VK_DBG_MSG_TYPE; @@ -68,55 +68,6 @@ typedef enum _VK_DBG_DEVICE_OPTION VK_NUM_DBG_DEVICE_OPTION = (VK_DBG_DEVICE_OPTION_END_RANGE - VK_DBG_DEVICE_OPTION_BEGIN_RANGE + 1), } VK_DBG_DEVICE_OPTION; -typedef enum _VK_DBG_OBJECT_TYPE -{ - VK_DBG_OBJECT_UNKNOWN = 0x00, - VK_DBG_OBJECT_DEVICE = 0x01, - VK_DBG_OBJECT_QUEUE = 0x02, - VK_DBG_OBJECT_GPU_MEMORY = 0x03, - VK_DBG_OBJECT_IMAGE = 0x04, - VK_DBG_OBJECT_IMAGE_VIEW = 0x05, - VK_DBG_OBJECT_COLOR_TARGET_VIEW = 0x06, - VK_DBG_OBJECT_DEPTH_STENCIL_VIEW = 0x07, - VK_DBG_OBJECT_SHADER = 0x08, - VK_DBG_OBJECT_GRAPHICS_PIPELINE = 0x09, - VK_DBG_OBJECT_COMPUTE_PIPELINE = 0x0a, - VK_DBG_OBJECT_SAMPLER = 0x0b, - VK_DBG_OBJECT_DESCRIPTOR_SET = 0x0c, - VK_DBG_OBJECT_VIEWPORT_STATE = 0x0d, - VK_DBG_OBJECT_RASTER_STATE = 0x0e, - VK_DBG_OBJECT_MSAA_STATE = 0x0f, - VK_DBG_OBJECT_COLOR_BLEND_STATE = 0x10, - VK_DBG_OBJECT_DEPTH_STENCIL_STATE = 0x11, - VK_DBG_OBJECT_CMD_BUFFER = 0x12, - VK_DBG_OBJECT_FENCE = 0x13, - VK_DBG_OBJECT_SEMAPHORE = 0x14, - VK_DBG_OBJECT_EVENT = 0x15, - VK_DBG_OBJECT_QUERY_POOL = 0x16, - VK_DBG_OBJECT_SHARED_GPU_MEMORY = 0x17, - VK_DBG_OBJECT_SHARED_SEMAPHORE = 0x18, - VK_DBG_OBJECT_PEER_GPU_MEMORY = 0x19, - VK_DBG_OBJECT_PEER_IMAGE = 0x1a, - VK_DBG_OBJECT_PINNED_GPU_MEMORY = 0x1b, - VK_DBG_OBJECT_INTERNAL_GPU_MEMORY = 0x1c, - VK_DBG_OBJECT_FRAMEBUFFER = 0x1d, - VK_DBG_OBJECT_RENDER_PASS = 0x1e, - - VK_DBG_OBJECT_INSTANCE, - VK_DBG_OBJECT_BUFFER, - VK_DBG_OBJECT_BUFFER_VIEW, - VK_DBG_OBJECT_DESCRIPTOR_SET_LAYOUT, - VK_DBG_OBJECT_PIPELINE_LAYOUT, - VK_DBG_OBJECT_DESCRIPTOR_POOL, - - VK_DBG_OBJECT_DISPLAY_WSI, - VK_DBG_OBJECT_SWAP_CHAIN_WSI, - - VK_DBG_OBJECT_TYPE_BEGIN_RANGE = VK_DBG_OBJECT_UNKNOWN, - VK_DBG_OBJECT_TYPE_END_RANGE = VK_DBG_OBJECT_SWAP_CHAIN_WSI, - VK_NUM_DBG_OBJECT_TYPE = (VK_DBG_OBJECT_TYPE_END_RANGE - VK_DBG_OBJECT_TYPE_BEGIN_RANGE + 1), -} VK_DBG_OBJECT_TYPE; - typedef void (VKAPI *VK_DBG_MSG_CALLBACK_FUNCTION)( VK_DBG_MSG_TYPE msgType, VkValidationLevel validationLevel, diff --git a/include/vkLayer.h b/include/vkLayer.h index f30ef256..883cca13 100644 --- a/include/vkLayer.h +++ b/include/vkLayer.h @@ -5,7 +5,9 @@ #pragma once #include "vulkan.h" -#include "vkDbg.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"))) @@ -130,16 +132,19 @@ typedef struct VkLayerDispatchTable_ PFN_vkCreateRenderPass CreateRenderPass; PFN_vkCmdBeginRenderPass CmdBeginRenderPass; PFN_vkCmdEndRenderPass CmdEndRenderPass; - PFN_vkDbgSetValidationLevel DbgSetValidationLevel; - PFN_vkDbgSetMessageFilter DbgSetMessageFilter; PFN_vkDbgSetObjectTag DbgSetObjectTag; - PFN_vkDbgSetDeviceOption DbgSetDeviceOption; PFN_vkCmdDbgMarkerBegin CmdDbgMarkerBegin; PFN_vkCmdDbgMarkerEnd CmdDbgMarkerEnd; 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; + PFN_vkDbgSetObjectName DbgSetObjectName; } VkLayerDispatchTable; typedef struct VkLayerInstanceDispatchTable_ @@ -152,38 +157,32 @@ typedef struct VkLayerInstanceDispatchTable_ PFN_vkCreateDevice CreateDevice; PFN_vkGetGlobalExtensionInfo GetGlobalExtensionInfo; PFN_vkGetPhysicalDeviceExtensionInfo GetPhysicalDeviceExtensionInfo; - PFN_vkEnumerateLayers EnumerateLayers; PFN_vkGetMultiDeviceCompatibility GetMultiDeviceCompatibility; - PFN_vkDbgRegisterMsgCallback DbgRegisterMsgCallback; - PFN_vkDbgUnregisterMsgCallback DbgUnregisterMsgCallback; - PFN_vkDbgSetGlobalOption DbgSetGlobalOption; 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 _VK_LAYER_DBG_FUNCTION_NODE +typedef struct VkLayerDbgFunctionNode_ { - VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback; - void *pUserData; - struct _VK_LAYER_DBG_FUNCTION_NODE *pNext; -} VK_LAYER_DBG_FUNCTION_NODE; + VkDbgMsgCallback msgCallback; + PFN_vkDbgMsgCallback pfnMsgCallback; + VkFlags msgFlags; + const void *pUserData; + struct VkLayerDbgFunctionNode_ *pNext; +} VkLayerDbgFunctionNode; -typedef enum _VK_LAYER_DBG_ACTION +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 -} VK_LAYER_DBG_ACTION; - -typedef enum _VK_LAYER_DBG_REPORT_LEVEL -{ +} VkLayerDbgAction; - VK_DBG_LAYER_LEVEL_INFO = 0, - VK_DBG_LAYER_LEVEL_WARN, - VK_DBG_LAYER_LEVEL_PERF_WARN, - VK_DBG_LAYER_LEVEL_ERROR, - VK_DBG_LAYER_LEVEL_NONE, -} VK_LAYER_DBG_REPORT_LEVEL; // ------------------------------------------------------------------------------------------------ // API functions diff --git a/include/vk_dbg.h b/include/vk_dbg.h index f7f3fc61..9ccf570e 100644 --- a/include/vk_dbg.h +++ b/include/vk_dbg.h @@ -30,7 +30,9 @@ #include "vulkan.h" #define VK_DEBUG_REPORT_EXTENSION_NUMBER 2 +#define VK_DEBUG_REPORT_EXTENSION_VERSION 1 #define VK_DEBUG_MARKER_EXTENSION_NUMBER 3 +#define VK_DEBUG_MARKER_EXTENSION_VERSION 1 #ifdef __cplusplus extern "C" { @@ -42,22 +44,23 @@ extern "C" *************************************************************************************************** */ +#define DEBUG_REPORT_EXTENSION_NAME "DEBUG_REPORT" +#define DEBUG_MARKER_EXTENSION_NAME "DEBUG_MARKER" + VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDbgMsgCallback, VkObject) // ------------------------------------------------------------------------------------------------ // Enumerations -typedef enum VkDbgLevel_ +typedef enum VkDbgReportFlags_ { - VK_DBG_LEVEL_INFO_BIT = 0x00000001, - VK_DBG_LEVEL_WARN_BIT = 0x00000002, - VK_DBG_LEVEL_PERF_WARN_BIT = 0x00000004, - VK_DBG_LEVEL_ERROR_BIT = 0x00000008, - - VK_ENUM_RANGE(DBG_LEVEL, INFO_BIT, ERROR_BIT) + VK_DBG_REPORT_INFO_BIT = VK_BIT(0), + VK_DBG_REPORT_WARN_BIT = VK_BIT(1), + VK_DBG_REPORT_PERF_WARN_BIT = VK_BIT(2), + VK_DBG_REPORT_ERROR_BIT = VK_BIT(3), } VkDbgReportFlags; -#define VK_DBG_ENUM_EXTEND(type,id) ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id)) +#define VK_DBG_ENUM_EXTEND(type, id) ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id))) #define VK_OBJECT_INFO_TYPE_DBG_OBJECT_TAG VK_DBG_ENUM_EXTEND(VkObjectInfoType, 0) #define VK_OBJECT_INFO_TYPE_DBG_OBJECT_NAME VK_DBG_ENUM_EXTEND(VkObjectInfoType, 1) @@ -66,7 +69,7 @@ typedef enum VkDbgLevel_ // ------------------------------------------------------------------------------------------------ // Vulkan function pointers -typedef void (VKAPI *PFN_vkDbgMsgCallback)( +typedef void (*PFN_vkDbgMsgCallback)( VkFlags msgFlags, VkObjectType objType, VkObject srcObject, @@ -79,10 +82,11 @@ typedef void (VKAPI *PFN_vkDbgMsgCallback)( // ------------------------------------------------------------------------------------------------ // API functions -typedef VkResult (VKAPI *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, const void* pUserData, const VkDbgMsgCallback* pMsgCallback); -typedef void (VKAPI *PFN_vkStringCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); -typedef void (VKAPI *PFN_vkStdioCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); -typedef void (VKAPI *PFN_vkBreakCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); +typedef VkResult (VKAPI *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, void* pUserData, VkDbgMsgCallback* pMsgCallback); +typedef VkResult (VKAPI *PFN_vkDbgDestroyMsgCallback)(VkInstance instance, VkDbgMsgCallback pMsgCallback); +typedef void (VKAPI *PFN_vkDbgStringCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); +typedef void (VKAPI *PFN_vkDbgStdioCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); +typedef void (VKAPI *PFN_vkDbgBreakCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); typedef void (VKAPI *PFN_vkCmdDbgMarkerBegin)(VkCmdBuffer cmdBuffer, const char* pMarker); typedef void (VKAPI *PFN_vkCmdDbgMarkerEnd)(VkCmdBuffer cmdBuffer); typedef VkResult (VKAPI *PFN_vkDbgSetObjectTag)(VkDevice device, VkObjectType objType, VkObject object, size_t tagSize, const void* pTag); @@ -95,11 +99,15 @@ VkResult VKAPI vkDbgCreateMsgCallback( VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, - const void* pUserData, - const VkDbgMsgCallback* pMsgCallback); + void* pUserData, + VkDbgMsgCallback* pMsgCallback); + +VkResult VKAPI vkDbgDestroyMsgCallback( + VkInstance instance, + VkDbgMsgCallback pMsgCallback); // DebugReport utility callback functions -void VKAPI vkStringCallback( +void VKAPI vkDbgStringCallback( VkFlags msgFlags, VkObjectType objType, VkObject srcObject, @@ -109,7 +117,7 @@ void VKAPI vkStringCallback( const char* pMsg, void* pUserData); -void VKAPI vkStdioCallback( +void VKAPI vkDbgStdioCallback( VkFlags msgFlags, VkObjectType objType, VkObject srcObject, @@ -119,7 +127,7 @@ void VKAPI vkStdioCallback( const char* pMsg, void* pUserData); -void VKAPI vkBreakCallback( +void VKAPI vkDbgBreakCallback( VkFlags msgFlags, VkObjectType objType, VkObject srcObject, diff --git a/include/vk_debug_marker_lunarg.h b/include/vk_debug_marker_lunarg.h new file mode 100644 index 00000000..2d3daa10 --- /dev/null +++ b/include/vk_debug_marker_lunarg.h @@ -0,0 +1,97 @@ +// +// File: vk_debug_marker_lunarg.h +// +/* +** Copyright (c) 2015 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +** +** Authors: +** Jon Ashburn +** Courtney Goeltzenleuchter +*/ + +#ifndef __VK_DEBUG_MARKER_H__ +#define __VK_DEBUG_MARKER_H__ + +#include "vulkan.h" + +#define VK_DEBUG_MARKER_EXTENSION_NUMBER 3 +#define VK_DEBUG_MARKER_EXTENSION_VERSION 1 +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/* +*************************************************************************************************** +* DebugMarker Vulkan Extension API +*************************************************************************************************** +*/ + +#define DEBUG_MARKER_EXTENSION_NAME "DEBUG_MARKER" + +// ------------------------------------------------------------------------------------------------ +// Enumerations + +#define VK_DEBUG_MARKER_ENUM_EXTEND(type, id) ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id))) + +#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_TAG VK_DEBUG_MARKER_ENUM_EXTEND(VkObjectInfoType, 0) +#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_NAME VK_DEBUG_MARKER_ENUM_EXTEND(VkObjectInfoType, 1) + +// ------------------------------------------------------------------------------------------------ +// API functions + +typedef void (VKAPI *PFN_vkCmdDbgMarkerBegin)(VkCmdBuffer cmdBuffer, const char* pMarker); +typedef void (VKAPI *PFN_vkCmdDbgMarkerEnd)(VkCmdBuffer cmdBuffer); +typedef VkResult (VKAPI *PFN_vkDbgSetObjectTag)(VkDevice device, VkObjectType objType, VkObject object, size_t tagSize, const void* pTag); +typedef VkResult (VKAPI *PFN_vkDbgSetObjectName)(VkDevice device, VkObjectType objType, VkObject object, size_t nameSize, const char* pName); + +#ifdef VK_PROTOTYPES + +// DebugMarker extension entrypoints +void VKAPI vkCmdDbgMarkerBegin( + VkCmdBuffer cmdBuffer, + const char* pMarker); + +void VKAPI vkCmdDbgMarkerEnd( + VkCmdBuffer cmdBuffer); + +VkResult VKAPI vkDbgSetObjectTag( + VkDevice device, + VkObjectType objType, + VkObject object, + size_t tagSize, + const void* pTag); + +VkResult VKAPI vkDbgSetObjectName( + VkDevice device, + VkObjectType objType, + VkObject object, + size_t nameSize, + const char* pName); + +#endif // VK_PROTOTYPES + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // __VK_DEBUG_MARKER_H__ diff --git a/include/vk_debug_report_lunarg.h b/include/vk_debug_report_lunarg.h new file mode 100644 index 00000000..eb8f9f4b --- /dev/null +++ b/include/vk_debug_report_lunarg.h @@ -0,0 +1,141 @@ +// +// File: vk_debug_report_lunarg.h +// +/* + * Vulkan + * + * Copyright (C) 2015 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Jon Ashburn + * Courtney Goeltzenleuchter + */ + +#ifndef __VK_DEBUG_REPORT_LUNARG_H__ +#define __VK_DEBUG_REPORT_LUNARG_H__ + +#include "vulkan.h" + +#define VK_DEBUG_REPORT_EXTENSION_NUMBER 2 +#define VK_DEBUG_REPORT_EXTENSION_VERSION 0x10 +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/* +*************************************************************************************************** +* DebugReport Vulkan Extension API +*************************************************************************************************** +*/ + +#define DEBUG_REPORT_EXTENSION_NAME "DEBUG_REPORT" + +VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDbgMsgCallback, VkObject) + +// ------------------------------------------------------------------------------------------------ +// Enumerations + +typedef enum VkDbgReportFlags_ +{ + VK_DBG_REPORT_INFO_BIT = VK_BIT(0), + VK_DBG_REPORT_WARN_BIT = VK_BIT(1), + VK_DBG_REPORT_PERF_WARN_BIT = VK_BIT(2), + VK_DBG_REPORT_ERROR_BIT = VK_BIT(3), +} VkDbgReportFlags; + +#define VK_DEBUG_REPORT_ENUM_EXTEND(type, id) ((type)(VK_DEBUG_REPORT_EXTENSION_NUMBER * -1000 + (id))) + +#define VK_OBJECT_TYPE_MSG_CALLBACK VK_DEBUG_REPORT_ENUM_EXTEND(VkObjectType, 0) +// ------------------------------------------------------------------------------------------------ +// Vulkan function pointers + +typedef void (*PFN_vkDbgMsgCallback)( + VkFlags msgFlags, + VkObjectType objType, + VkObject srcObject, + size_t location, + int32_t msgCode, + const char* pLayerPrefix, + const char* pMsg, + void* pUserData); + +// ------------------------------------------------------------------------------------------------ +// API functions + +typedef VkResult (VKAPI *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, const void* pUserData, VkDbgMsgCallback* pMsgCallback); +typedef VkResult (VKAPI *PFN_vkDbgDestroyMsgCallback)(VkInstance instance, VkDbgMsgCallback msgCallback); +typedef void (VKAPI *PFN_vkDbgStringCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); +typedef void (VKAPI *PFN_vkDbgStdioCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); +typedef void (VKAPI *PFN_vkDbgBreakCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData); + +#ifdef VK_PROTOTYPES + +// DebugReport extension entrypoints +VkResult VKAPI vkDbgCreateMsgCallback( + VkInstance instance, + VkFlags msgFlags, + const PFN_vkDbgMsgCallback pfnMsgCallback, + void* pUserData, + VkDbgMsgCallback* pMsgCallback); + +VkResult VKAPI vkDbgDestroyMsgCallback( + VkInstance instance, + VkDbgMsgCallback msgCallback); + +// DebugReport utility callback functions +void VKAPI vkDbgStringCallback( + VkFlags msgFlags, + VkObjectType objType, + VkObject srcObject, + size_t location, + int32_t msgCode, + const char* pLayerPrefix, + const char* pMsg, + void* pUserData); + +void VKAPI vkDbgStdioCallback( + VkFlags msgFlags, + VkObjectType objType, + VkObject srcObject, + size_t location, + int32_t msgCode, + const char* pLayerPrefix, + const char* pMsg, + void* pUserData); + +void VKAPI vkDbgBreakCallback( + VkFlags msgFlags, + VkObjectType objType, + VkObject srcObject, + size_t location, + int32_t msgCode, + const char* pLayerPrefix, + const char* pMsg, + void* pUserData); + +#endif // VK_PROTOTYPES + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // __VK_DEBUG_REPORT_LUNARG_H__ diff --git a/include/vulkan.h b/include/vulkan.h index 89431af2..dbc6f866 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -835,18 +835,17 @@ typedef enum VkStructureType_ VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 38, VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO = 39, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 40, - VK_STRUCTURE_TYPE_LAYER_CREATE_INFO = 41, - VK_STRUCTURE_TYPE_MEMORY_BARRIER = 42, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 43, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 44, - VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 45, + VK_STRUCTURE_TYPE_MEMORY_BARRIER = 41, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 42, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 43, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 44, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 46, VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 47, VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 48, VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 49, - VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 50, + VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES = 50, - VK_ENUM_RANGE(STRUCTURE_TYPE, APPLICATION_INFO, MAPPED_MEMORY_RANGE) + VK_ENUM_RANGE(STRUCTURE_TYPE, APPLICATION_INFO, EXTENSION_PROPERTIES) } VkStructureType; // Object type enumerant @@ -936,6 +935,7 @@ typedef enum VkResult_ VK_ERROR_MEMORY_NOT_BOUND = -(0x0000001F), VK_ERROR_INCOMPATIBLE_QUEUE = -(0x00000020), VK_ERROR_NOT_SHAREABLE = -(0x00000021), + VK_ERROR_MISSING_EXTENSION_DEPENDENCY = -(0x00000022), VK_MAX_ENUM(RESULT) } VkResult; @@ -1279,8 +1279,10 @@ typedef struct VkPhysicalDeviceCompatibilityInfo_ typedef struct VkExtensionProperties_ { - char extName[VK_MAX_EXTENSION_NAME]; // extension name + VkStructureType sType; // Type of structure. Should be VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES + char name[VK_MAX_EXTENSION_NAME]; // extension name uint32_t version; // version of the extension specification + char description[VK_MAX_EXTENSION_NAME]; // Name of library implementing this extension } VkExtensionProperties; typedef struct VkApplicationInfo_ @@ -1324,7 +1326,7 @@ typedef struct VkDeviceCreateInfo_ uint32_t queueRecordCount; const VkDeviceQueueCreateInfo* pRequestedQueues; uint32_t extensionCount; - const char*const* ppEnabledExtensionNames; + const VkExtensionProperties* pEnabledExtensions; // Indicate extensions to enable by index value VkDeviceCreateFlags flags; // Device creation flags } VkDeviceCreateInfo; @@ -1335,18 +1337,9 @@ typedef struct VkInstanceCreateInfo_ const VkApplicationInfo* pAppInfo; const VkAllocCallbacks* pAllocCb; uint32_t extensionCount; - const char*const* ppEnabledExtensionNames; // layer or extension name to be enabled + const VkExtensionProperties* pEnabledExtensions; // Indicate extensions to enable by index value } VkInstanceCreateInfo; -// can be added to VkDeviceCreateInfo via pNext -typedef struct VkLayerCreateInfo_ -{ - VkStructureType sType; // Should be VK_STRUCTURE_TYPE_LAYER_CREATE_INFO - const void* pNext; // Pointer to next structure - uint32_t layerCount; - const char *const* ppActiveLayerNames; // layer name from the layer's vkEnumerateLayers()) -} VkLayerCreateInfo; - typedef struct VkPhysicalDeviceQueueProperties_ { VkQueueFlags queueFlags; // Queue flags @@ -2093,7 +2086,6 @@ typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, co typedef VkResult (VKAPI *PFN_vkDestroyDevice)(VkDevice device); typedef VkResult (VKAPI *PFN_vkGetGlobalExtensionInfo)(VkExtensionInfoType infoType, uint32_t extensionIndex, size_t* pDataSize, void* pData); typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceExtensionInfo)(VkPhysicalDevice physicalDevice, VkExtensionInfoType infoType, uint32_t extensionIndex, size_t* pDataSize, void* pData); -typedef VkResult (VKAPI *PFN_vkEnumerateLayers)(VkPhysicalDevice physicalDevice, size_t maxStringSize, size_t* pLayerCount, char* const* pOutLayers, void* pReserved); typedef VkResult (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue); typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence); typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue); @@ -2252,15 +2244,6 @@ VkResult VKAPI vkGetPhysicalDeviceExtensionInfo( size_t* pDataSize, void* pData); -// Layer discovery functions - -VkResult VKAPI vkEnumerateLayers( - VkPhysicalDevice physicalDevice, - size_t maxStringSize, - size_t* pLayerCount, - char* const* pOutLayers, - void* pReserved); - // Queue functions VkResult VKAPI vkGetDeviceQueue( -- cgit v1.2.3