diff --git a/renderdoc/driver/vulkan/official/vulkan_core.h b/renderdoc/driver/vulkan/official/vulkan_core.h
index f41ccf4a4..7bfacbe91 100644
--- a/renderdoc/driver/vulkan/official/vulkan_core.h
+++ b/renderdoc/driver/vulkan/official/vulkan_core.h
@@ -44,7 +44,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
-#define VK_HEADER_VERSION 129
+#define VK_HEADER_VERSION 130
#define VK_NULL_HANDLE 0
@@ -518,6 +518,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = 1000241002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000,
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = 1000245000,
VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = 1000246000,
VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000,
@@ -9905,6 +9906,41 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT(
#endif
+#define VK_EXT_tooling_info 1
+#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1
+#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info"
+
+typedef enum VkToolPurposeFlagBitsEXT {
+ VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 0x00000001,
+ VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 0x00000002,
+ VK_TOOL_PURPOSE_TRACING_BIT_EXT = 0x00000004,
+ VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = 0x00000008,
+ VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = 0x00000010,
+ VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020,
+ VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040,
+ VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkToolPurposeFlagBitsEXT;
+typedef VkFlags VkToolPurposeFlagsEXT;
+typedef struct VkPhysicalDeviceToolPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ char name[VK_MAX_EXTENSION_NAME_SIZE];
+ char version[VK_MAX_EXTENSION_NAME_SIZE];
+ VkToolPurposeFlagsEXT purposes;
+ char description[VK_MAX_DESCRIPTION_SIZE];
+ char layer[VK_MAX_EXTENSION_NAME_SIZE];
+} VkPhysicalDeviceToolPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pToolCount,
+ VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
+#endif
+
+
#define VK_EXT_separate_stencil_usage 1
#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1
#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage"
diff --git a/renderdoc/driver/vulkan/renderdoc.json b/renderdoc/driver/vulkan/renderdoc.json
index c97608f8c..305efb948 100644
--- a/renderdoc/driver/vulkan/renderdoc.json
+++ b/renderdoc/driver/vulkan/renderdoc.json
@@ -31,6 +31,11 @@
"vkCmdDebugMarkerEndEXT",
"vkCmdDebugMarkerInsertEXT"
]
+ },
+ {
+ "name": "VK_EXT_tooling_info",
+ "spec_version": "1",
+ "entrypoints": ["vkGetPhysicalDeviceToolPropertiesEXT"]
}
],
"enable_environment": {
diff --git a/renderdoc/driver/vulkan/vk.xml b/renderdoc/driver/vulkan/vk.xml
index 9d98e9d2b..1a3d613eb 100644
--- a/renderdoc/driver/vulkan/vk.xml
+++ b/renderdoc/driver/vulkan/vk.xml
@@ -154,7 +154,7 @@ server.
// Vulkan 1.1 version number
#define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0
// Version of this file
-#define VK_HEADER_VERSION 129
+#define VK_HEADER_VERSION 130
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
@@ -339,6 +339,7 @@ typedef void CAMetalLayer;
typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT;
typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT;
typedef VkFlags VkSwapchainImageUsageFlagsANDROID;
+ typedef VkFlags VkToolPurposeFlagsEXT;
Types which can be void pointers or class pointers, selected at compile time
VK_DEFINE_HANDLE(VkInstance)
@@ -524,6 +525,7 @@ typedef void CAMetalLayer;
+
WSI extensions
@@ -2851,7 +2853,7 @@ typedef void CAMetalLayer;
VkStructureType sType
const void* pNext
- VkDeviceQueueCreateFlags flags
+ VkDeviceQueueCreateFlags flags
uint32_t queueFamilyIndex
uint32_t queueIndex
@@ -4213,7 +4215,7 @@ typedef void CAMetalLayer;
VkPipelineExecutableStatisticFormatKHR format
VkPipelineExecutableStatisticValueKHR value
-
+
VkStructureType sType
void* pNext
char name[VK_MAX_DESCRIPTION_SIZE]
@@ -4302,6 +4304,15 @@ typedef void CAMetalLayer;
void* pNext
VkBool32 deviceCoherentMemory
+
+ VkStructureType sType
+ void* pNext
+ char name[VK_MAX_EXTENSION_NAME_SIZE]
+ char version[VK_MAX_EXTENSION_NAME_SIZE]
+ VkToolPurposeFlagsEXT purposes
+ char description[VK_MAX_DESCRIPTION_SIZE]
+ char layer[VK_MAX_EXTENSION_NAME_SIZE]
+
Vulkan enumerant (token) definitions
@@ -5632,6 +5643,13 @@ typedef void CAMetalLayer;
+
+
+
+
+
+
+
@@ -8010,6 +8028,12 @@ typedef void CAMetalLayer;
uint32_t lineStippleFactor
uint16_t lineStipplePattern
+
+ VkResult vkGetPhysicalDeviceToolPropertiesEXT
+ VkPhysicalDevice physicalDevice
+ uint32_t* pToolCount
+ VkPhysicalDeviceToolPropertiesEXT* pToolProperties
+
@@ -10400,8 +10424,12 @@ typedef void CAMetalLayer;
-
+
+
+
+
+
@@ -11452,10 +11480,25 @@ typedef void CAMetalLayer;
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h
index 947b8e181..b82dc2510 100644
--- a/renderdoc/driver/vulkan/vk_common.h
+++ b/renderdoc/driver/vulkan/vk_common.h
@@ -841,6 +841,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTimelineSemaphoreFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTimelineSemaphorePropertiesKHR);
+DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceToolPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTransformFeedbackFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTransformFeedbackPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR);
@@ -1114,6 +1115,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphoreFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphorePropertiesKHR);
+DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceToolPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTransformFeedbackFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTransformFeedbackPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR);
@@ -1449,6 +1451,7 @@ DECLARE_REFLECTION_ENUM(VkSurfaceTransformFlagBitsKHR);
DECLARE_REFLECTION_ENUM(VkSwapchainCreateFlagBitsKHR);
DECLARE_REFLECTION_ENUM(VkTessellationDomainOrigin);
DECLARE_REFLECTION_ENUM(VkTimeDomainEXT);
+DECLARE_REFLECTION_ENUM(VkToolPurposeFlagBitsEXT);
DECLARE_REFLECTION_ENUM(VkValidationCheckEXT);
DECLARE_REFLECTION_ENUM(VkValidationFeatureDisableEXT);
DECLARE_REFLECTION_ENUM(VkValidationFeatureEnableEXT);
diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp
index a9d974a68..027dd779d 100644
--- a/renderdoc/driver/vulkan/vk_core.cpp
+++ b/renderdoc/driver/vulkan/vk_core.cpp
@@ -778,6 +778,9 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION,
},
+ {
+ VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_EXT_TOOLING_INFO_SPEC_VERSION,
+ },
{
VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION,
},
@@ -1111,6 +1114,7 @@ static const VkExtensionProperties supportedExtensions[] = {
// this is the list of extensions we provide - regardless of whether the ICD supports them
static const VkExtensionProperties renderdocProvidedDeviceExtensions[] = {
{VK_EXT_DEBUG_MARKER_EXTENSION_NAME, VK_EXT_DEBUG_MARKER_SPEC_VERSION},
+ {VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_EXT_TOOLING_INFO_SPEC_VERSION},
};
static const VkExtensionProperties renderdocProvidedInstanceExtensions[] = {
diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h
index 62e8940fc..752a88cc6 100644
--- a/renderdoc/driver/vulkan/vk_core.h
+++ b/renderdoc/driver/vulkan/vk_core.h
@@ -2211,4 +2211,9 @@ public:
uint64_t vkGetBufferOpaqueCaptureAddressKHR(VkDevice device, VkBufferDeviceAddressInfoKHR *pInfo);
uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR(VkDevice device,
VkDeviceMemoryOpaqueCaptureAddressInfoKHR *pInfo);
+
+ // VK_EXT_tooling_info
+
+ VkResult vkGetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t *pToolCount,
+ VkPhysicalDeviceToolPropertiesEXT *pToolProperties);
};
diff --git a/renderdoc/driver/vulkan/vk_dispatch_defs.h b/renderdoc/driver/vulkan/vk_dispatch_defs.h
index 10228123f..0f9f96de5 100644
--- a/renderdoc/driver/vulkan/vk_dispatch_defs.h
+++ b/renderdoc/driver/vulkan/vk_dispatch_defs.h
@@ -258,6 +258,9 @@ struct VkInstDispatchTable
PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT;
#endif // VK_USE_PLATFORM_METAL_EXT
+ // VK_EXT_tooling_info
+ PFN_vkGetPhysicalDeviceToolPropertiesEXT GetPhysicalDeviceToolPropertiesEXT;
+
// VK_NV_cooperative_matrix
PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV;
diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h
index 9c01e80e6..5d5293d8d 100644
--- a/renderdoc/driver/vulkan/vk_hookset_defs.h
+++ b/renderdoc/driver/vulkan/vk_hookset_defs.h
@@ -214,7 +214,7 @@
HookInitExtension(VK_KHR_xlib_surface, GetPhysicalDeviceXlibPresentationSupportKHR); \
HookInitExtension(VK_EXT_acquire_xlib_display, AcquireXlibDisplayEXT); \
HookInitExtension(VK_EXT_acquire_xlib_display, GetRandROutputDisplayEXT);
-#define HookInitInstance_PlatformSpecific_XLib_PhysDev() \
+#define HookInitInstance_PlatformSpecific_Xlib_PhysDev() \
HookInitExtension(VK_KHR_xlib_surface, GetPhysicalDeviceXlibPresentationSupportKHR); \
HookInitExtension(VK_EXT_acquire_xlib_display, AcquireXlibDisplayEXT); \
HookInitExtension(VK_EXT_acquire_xlib_display, GetRandROutputDisplayEXT);
@@ -233,8 +233,8 @@
#else
#define HookInitInstance_PlatformSpecific_Xlib()
+#define HookInitInstance_PlatformSpecific_Xlib_PhysDev()
#define HookDefine_PlatformSpecific_Xlib()
-#define HookInitInstance_PlatformSpecific_XLib_PhysDev()
#endif
@@ -484,7 +484,8 @@
DeclExt(GOOGLE_display_timing); \
DeclExt(KHR_timeline_semaphore); \
DeclExt(KHR_performance_query); \
- DeclExt(KHR_buffer_device_address);
+ DeclExt(KHR_buffer_device_address); \
+ DeclExt(EXT_tooling_info);
// for simplicity and since the check itself is platform agnostic,
// these aren't protected in platform defines
@@ -573,7 +574,8 @@
CheckExt(GOOGLE_display_timing, VKXX); \
CheckExt(KHR_timeline_semaphore, VKXX); \
CheckExt(KHR_performance_query, VKXX); \
- CheckExt(KHR_buffer_device_address, VKXX);
+ CheckExt(KHR_buffer_device_address, VKXX); \
+ CheckExt(EXT_tooling_info, VKXX);
#define HookInitVulkanInstanceExts_PhysDev() \
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
@@ -618,6 +620,7 @@
HookInitExtension(KHR_performance_query, \
EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); \
HookInitExtension(KHR_performance_query, GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); \
+ HookInitExtension(EXT_tooling_info, GetPhysicalDeviceToolPropertiesEXT); \
HookInitInstance_PlatformSpecific_PhysDev()
#define HookInitVulkanInstanceExts() \
@@ -678,6 +681,7 @@
HookInitExtension(KHR_performance_query, \
EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); \
HookInitExtension(KHR_performance_query, GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); \
+ HookInitExtension(EXT_tooling_info, GetPhysicalDeviceToolPropertiesEXT); \
HookInitInstance_PlatformSpecific()
#define HookInitVulkanDeviceExts() \
@@ -1393,4 +1397,6 @@
VkBufferDeviceAddressInfoKHR *, pInfo); \
HookDefine2(uint64_t, vkGetDeviceMemoryOpaqueCaptureAddressKHR, VkDevice, device, \
VkDeviceMemoryOpaqueCaptureAddressInfoKHR *, pInfo); \
+ HookDefine3(VkResult, vkGetPhysicalDeviceToolPropertiesEXT, VkPhysicalDevice, physicalDevice, \
+ uint32_t *, pToolCount, VkPhysicalDeviceToolPropertiesEXT *, pToolProperties); \
HookDefine_PlatformSpecific()
diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp
index 94a37b71e..e2a9738be 100644
--- a/renderdoc/driver/vulkan/vk_next_chains.cpp
+++ b/renderdoc/driver/vulkan/vk_next_chains.cpp
@@ -285,6 +285,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceTimelineSemaphoreFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, \
VkPhysicalDeviceTimelineSemaphorePropertiesKHR); \
+ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT, \
+ VkPhysicalDeviceToolPropertiesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, \
VkPhysicalDeviceTransformFeedbackFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT, \
diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp
index 7a655b9c6..6c2a9f6a5 100644
--- a/renderdoc/driver/vulkan/vk_serialise.cpp
+++ b/renderdoc/driver/vulkan/vk_serialise.cpp
@@ -155,6 +155,7 @@ DECL_VKFLAG_EMPTY_EXT(VkValidationCacheCreate, EXT);
DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationDepthClipStateCreate, EXT);
DECL_VKFLAG_EXT(VkDescriptorBinding, EXT);
DECL_VKFLAG_EXT(VkSemaphoreWait, KHR);
+DECL_VKFLAG_EXT(VkToolPurpose, EXT);
// serialise a member as flags - cast to the Bits enum for serialisation so the stringification
// picks up the bitfield and doesn't treat it as uint32_t. Then we rename the type back to the base
@@ -627,6 +628,10 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, \
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT) \
\
+ /* VK_EXT_tooling_info */ \
+ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT, \
+ VkPhysicalDeviceToolPropertiesEXT) \
+ \
/* VK_EXT_transform_feedback */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, \
VkPhysicalDeviceTransformFeedbackFeaturesEXT) \
@@ -5334,6 +5339,25 @@ void Deserialise(const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT &el)
DeserialiseNext(el.pNext);
}
+template
+void DoSerialise(SerialiserType &ser, VkPhysicalDeviceToolPropertiesEXT &el)
+{
+ RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT);
+ SerialiseNext(ser, el.sType, el.pNext);
+
+ SERIALISE_MEMBER(name);
+ SERIALISE_MEMBER(version);
+ SERIALISE_MEMBER_VKFLAGS(VkToolPurposeFlagsEXT, purposes);
+ SERIALISE_MEMBER(description);
+ SERIALISE_MEMBER(layer);
+}
+
+template <>
+void Deserialise(const VkPhysicalDeviceToolPropertiesEXT &el)
+{
+ DeserialiseNext(el.pNext);
+}
+
template
void DoSerialise(SerialiserType &ser, VkPipelineSampleLocationsStateCreateInfoEXT &el)
{
@@ -7796,6 +7820,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphoreFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphorePropertiesKHR);
+INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceToolPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTransformFeedbackFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTransformFeedbackPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR);
diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp
index ad5b39173..2fea37bbd 100644
--- a/renderdoc/driver/vulkan/vk_stringise.cpp
+++ b/renderdoc/driver/vulkan/vk_stringise.cpp
@@ -1715,6 +1715,7 @@ rdcstr DoStringise(const VkStructureType &el)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
@@ -2657,6 +2658,22 @@ rdcstr DoStringise(const VkSemaphoreWaitFlagBitsKHR &el)
END_BITFIELD_STRINGISE();
}
+template <>
+rdcstr DoStringise(const VkToolPurposeFlagBitsEXT &el)
+{
+ BEGIN_BITFIELD_STRINGISE(VkToolPurposeFlagBitsEXT);
+ {
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_VALIDATION_BIT_EXT);
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_PROFILING_BIT_EXT);
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_TRACING_BIT_EXT);
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT);
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT);
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT);
+ STRINGISE_BITFIELD_BIT(VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT);
+ }
+ END_BITFIELD_STRINGISE();
+}
+
template <>
rdcstr DoStringise(const VkExtent3D &el)
{
diff --git a/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp
index 12833b5cc..ac888c56f 100644
--- a/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp
+++ b/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp
@@ -23,6 +23,7 @@
******************************************************************************/
#include "../vk_core.h"
+#include "api/replay/version.h"
static char fakeRenderDocUUID[VK_UUID_SIZE + 1] = {};
@@ -722,3 +723,78 @@ uint64_t WrappedVulkan::vkGetDeviceMemoryOpaqueCaptureAddressKHR(
unwrappedInfo.memory = Unwrap(unwrappedInfo.memory);
return ObjDisp(device)->GetDeviceMemoryOpaqueCaptureAddressKHR(Unwrap(device), &unwrappedInfo);
}
+
+VkResult WrappedVulkan::vkGetPhysicalDeviceToolPropertiesEXT(
+ VkPhysicalDevice physicalDevice, uint32_t *pToolCount,
+ VkPhysicalDeviceToolPropertiesEXT *pToolProperties)
+{
+ // check how many tools are downstream. The function pointer will be NULL if no-one else supports
+ // this extension except us.
+ uint32_t downstreamCount = 0;
+ if(ObjDisp(physicalDevice)->GetPhysicalDeviceToolPropertiesEXT != NULL)
+ ObjDisp(physicalDevice)
+ ->GetPhysicalDeviceToolPropertiesEXT(Unwrap(physicalDevice), &downstreamCount, NULL);
+
+ // if we're just enumerating, pToolProperties is NULL, so set the tool count and return
+ if(pToolCount && pToolProperties == NULL)
+ {
+ *pToolCount = downstreamCount + 1;
+ return VK_SUCCESS;
+ }
+
+ // otherwise we expect both to be non-NULL
+ if(pToolCount == NULL || pToolProperties == NULL)
+ return VK_INCOMPLETE;
+
+ // this is how much space is in the array, don't forget it
+ uint32_t availableCount = *pToolCount;
+
+ VkResult vkr = VK_SUCCESS;
+
+ if(ObjDisp(physicalDevice)->GetPhysicalDeviceToolPropertiesEXT != NULL)
+ {
+ // call downstream to populate the array (up to what's available)
+ // this writes up to availableCount properties into pToolProperties, and sets the number written
+ // in pToolCount
+ vkr = ObjDisp(physicalDevice)
+ ->GetPhysicalDeviceToolPropertiesEXT(Unwrap(physicalDevice), pToolCount,
+ pToolProperties);
+ }
+ else
+ {
+ // nothing written downstream
+ *pToolCount = 0;
+ }
+
+ // if available isn't enough, return VK_INCOMPLETE now
+ if(vkr == VK_INCOMPLETE || availableCount < downstreamCount + 1)
+ return VK_INCOMPLETE;
+
+ // otherwise we write our own properties in after any downstream properties, then increment
+ // pToolCount
+
+ VkPhysicalDeviceToolPropertiesEXT &props = *(pToolProperties + *pToolCount);
+
+ const rdcstr name = "RenderDoc"_lit;
+ const rdcstr version = StringFormat::Fmt(
+ "%s (%s)", FULL_VERSION_STRING, GitVersionHash[0] == 'N' ? "Unknown revision" : GitVersionHash);
+ const rdcstr description = "Debugging capture layer for RenderDoc"_lit;
+
+ RDCASSERTMSG("Name is too long for VkPhysicalDeviceToolPropertiesEXT",
+ name.length() < sizeof(props.name));
+ RDCASSERTMSG("Version is too long for VkPhysicalDeviceToolPropertiesEXT",
+ version.length() < sizeof(props.version));
+ RDCASSERTMSG("Description is too long for VkPhysicalDeviceToolPropertiesEXT",
+ description.length() < sizeof(props.description));
+
+ memcpy(props.name, name.c_str(), name.length() + 1);
+ memcpy(props.version, version.c_str(), version.length() + 1);
+ props.purposes = VK_TOOL_PURPOSE_TRACING_BIT_EXT | VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT |
+ VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT;
+ memcpy(props.description, description.c_str(), description.length() + 1);
+ // do not tell people about the layer
+ RDCEraseEl(props.layer);
+
+ (*pToolCount)++;
+ return VK_SUCCESS;
+}
diff --git a/util/test/demos/3rdparty/volk/README.md b/util/test/demos/3rdparty/volk/README.md
index bb5bb9b41..bc0ad4068 100644
--- a/util/test/demos/3rdparty/volk/README.md
+++ b/util/test/demos/3rdparty/volk/README.md
@@ -1 +1 @@
-volk from https://github.com/zeux/volk at commit b1128a0df781cb41f47342925177fdf5b8d112bd
+volk from https://github.com/zeux/volk at commit b7ea0c3d15591a9c84f16b0c628443b1a06a302d (built against 1.1.130)
diff --git a/util/test/demos/3rdparty/volk/volk.c b/util/test/demos/3rdparty/volk/volk.c
index c93a3eda0..549cccbda 100644
--- a/util/test/demos/3rdparty/volk/volk.c
+++ b/util/test/demos/3rdparty/volk/volk.c
@@ -197,6 +197,9 @@ static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*,
#if defined(VK_EXT_sample_locations)
vkGetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)load(context, "vkGetPhysicalDeviceMultisamplePropertiesEXT");
#endif /* defined(VK_EXT_sample_locations) */
+#if defined(VK_EXT_tooling_info)
+ vkGetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)load(context, "vkGetPhysicalDeviceToolPropertiesEXT");
+#endif /* defined(VK_EXT_tooling_info) */
#if defined(VK_FUCHSIA_imagepipe_surface)
vkCreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA)load(context, "vkCreateImagePipeSurfaceFUCHSIA");
#endif /* defined(VK_FUCHSIA_imagepipe_surface) */
@@ -1378,6 +1381,9 @@ PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT;
PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT;
#endif /* defined(VK_EXT_sample_locations) */
+#if defined(VK_EXT_tooling_info)
+PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT;
+#endif /* defined(VK_EXT_tooling_info) */
#if defined(VK_EXT_transform_feedback)
PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT;
PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT;
diff --git a/util/test/demos/3rdparty/volk/volk.h b/util/test/demos/3rdparty/volk/volk.h
index 7944a02d1..58576c521 100644
--- a/util/test/demos/3rdparty/volk/volk.h
+++ b/util/test/demos/3rdparty/volk/volk.h
@@ -14,7 +14,7 @@
#endif
/* VOLK_GENERATE_VERSION_DEFINE */
-#define VOLK_HEADER_VERSION 129
+#define VOLK_HEADER_VERSION 130
/* VOLK_GENERATE_VERSION_DEFINE */
#ifndef VK_NO_PROTOTYPES
@@ -769,6 +769,9 @@ extern PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
extern PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT;
extern PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT;
#endif /* defined(VK_EXT_sample_locations) */
+#if defined(VK_EXT_tooling_info)
+extern PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT;
+#endif /* defined(VK_EXT_tooling_info) */
#if defined(VK_EXT_transform_feedback)
extern PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT;
extern PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT;
diff --git a/util/test/demos/vk/official/vulkan/vulkan_core.h b/util/test/demos/vk/official/vulkan/vulkan_core.h
index f41ccf4a4..7bfacbe91 100644
--- a/util/test/demos/vk/official/vulkan/vulkan_core.h
+++ b/util/test/demos/vk/official/vulkan/vulkan_core.h
@@ -44,7 +44,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
-#define VK_HEADER_VERSION 129
+#define VK_HEADER_VERSION 130
#define VK_NULL_HANDLE 0
@@ -518,6 +518,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = 1000241002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000,
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = 1000245000,
VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = 1000246000,
VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000,
@@ -9905,6 +9906,41 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT(
#endif
+#define VK_EXT_tooling_info 1
+#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1
+#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info"
+
+typedef enum VkToolPurposeFlagBitsEXT {
+ VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 0x00000001,
+ VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 0x00000002,
+ VK_TOOL_PURPOSE_TRACING_BIT_EXT = 0x00000004,
+ VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = 0x00000008,
+ VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = 0x00000010,
+ VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020,
+ VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040,
+ VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkToolPurposeFlagBitsEXT;
+typedef VkFlags VkToolPurposeFlagsEXT;
+typedef struct VkPhysicalDeviceToolPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ char name[VK_MAX_EXTENSION_NAME_SIZE];
+ char version[VK_MAX_EXTENSION_NAME_SIZE];
+ VkToolPurposeFlagsEXT purposes;
+ char description[VK_MAX_DESCRIPTION_SIZE];
+ char layer[VK_MAX_EXTENSION_NAME_SIZE];
+} VkPhysicalDeviceToolPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pToolCount,
+ VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
+#endif
+
+
#define VK_EXT_separate_stencil_usage 1
#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1
#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage"