diff --git a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json
index 97bf90a91..45bac526d 100644
--- a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json
+++ b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json
@@ -7082,7 +7082,7 @@
{
"enumerant" : "PhysicalStorageBuffer64",
"value" : 5348,
- "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
+ "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
"capabilities" : [ "PhysicalStorageBufferAddresses" ],
"version" : "1.5"
},
@@ -7623,7 +7623,7 @@
{
"enumerant" : "PhysicalStorageBuffer",
"value" : 5349,
- "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
+ "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
"capabilities" : [ "PhysicalStorageBufferAddresses" ],
"version" : "1.5"
},
@@ -8629,7 +8629,7 @@
"enumerant" : "RestrictPointer",
"value" : 5355,
"capabilities" : [ "PhysicalStorageBufferAddresses" ],
- "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
+ "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
"version" : "1.5"
},
{
@@ -8643,7 +8643,7 @@
"enumerant" : "AliasedPointer",
"value" : 5356,
"capabilities" : [ "PhysicalStorageBufferAddresses" ],
- "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
+ "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
"version" : "1.5"
},
{
@@ -10256,6 +10256,7 @@
"enumerant" : "PhysicalStorageBufferAddresses",
"value" : 5347,
"capabilities" : [ "Shader" ],
+ "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
"version" : "1.5"
},
{
diff --git a/renderdoc/driver/vulkan/official/vulkan_core.h b/renderdoc/driver/vulkan/official/vulkan_core.h
index 01da6ede3..4cf54f482 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 123
+#define VK_HEADER_VERSION 124
#define VK_NULL_HANDLE 0
@@ -449,6 +449,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = 1000180000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000,
VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000,
VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
@@ -471,6 +472,12 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002,
VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000,
VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = 1000207000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = 1000207001,
+ VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = 1000207002,
+ VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = 1000207003,
+ VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = 1000207004,
+ VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = 1000207005,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000,
VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = 1000210000,
VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001,
@@ -6238,6 +6245,18 @@ typedef struct VkPhysicalDeviceShaderAtomicInt64FeaturesKHR {
+#define VK_KHR_shader_clock 1
+#define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1
+#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock"
+typedef struct VkPhysicalDeviceShaderClockFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderSubgroupClock;
+ VkBool32 shaderDeviceClock;
+} VkPhysicalDeviceShaderClockFeaturesKHR;
+
+
+
#define VK_KHR_driver_properties 1
#define VK_MAX_DRIVER_NAME_SIZE_KHR 256
#define VK_MAX_DRIVER_INFO_SIZE_KHR 256
@@ -6354,6 +6373,89 @@ typedef struct VkPhysicalDeviceDepthStencilResolvePropertiesKHR {
#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format"
+#define VK_KHR_timeline_semaphore 1
+#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2
+#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore"
+
+typedef enum VkSemaphoreTypeKHR {
+ VK_SEMAPHORE_TYPE_BINARY_KHR = 0,
+ VK_SEMAPHORE_TYPE_TIMELINE_KHR = 1,
+ VK_SEMAPHORE_TYPE_BEGIN_RANGE_KHR = VK_SEMAPHORE_TYPE_BINARY_KHR,
+ VK_SEMAPHORE_TYPE_END_RANGE_KHR = VK_SEMAPHORE_TYPE_TIMELINE_KHR,
+ VK_SEMAPHORE_TYPE_RANGE_SIZE_KHR = (VK_SEMAPHORE_TYPE_TIMELINE_KHR - VK_SEMAPHORE_TYPE_BINARY_KHR + 1),
+ VK_SEMAPHORE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSemaphoreTypeKHR;
+
+typedef enum VkSemaphoreWaitFlagBitsKHR {
+ VK_SEMAPHORE_WAIT_ANY_BIT_KHR = 0x00000001,
+ VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSemaphoreWaitFlagBitsKHR;
+typedef VkFlags VkSemaphoreWaitFlagsKHR;
+typedef struct VkPhysicalDeviceTimelineSemaphoreFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 timelineSemaphore;
+} VkPhysicalDeviceTimelineSemaphoreFeaturesKHR;
+
+typedef struct VkPhysicalDeviceTimelineSemaphorePropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ uint64_t maxTimelineSemaphoreValueDifference;
+} VkPhysicalDeviceTimelineSemaphorePropertiesKHR;
+
+typedef struct VkSemaphoreTypeCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphoreTypeKHR semaphoreType;
+ uint64_t initialValue;
+} VkSemaphoreTypeCreateInfoKHR;
+
+typedef struct VkTimelineSemaphoreSubmitInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreValueCount;
+ const uint64_t* pWaitSemaphoreValues;
+ uint32_t signalSemaphoreValueCount;
+ const uint64_t* pSignalSemaphoreValues;
+} VkTimelineSemaphoreSubmitInfoKHR;
+
+typedef struct VkSemaphoreWaitInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphoreWaitFlagsKHR flags;
+ uint32_t semaphoreCount;
+ const VkSemaphore* pSemaphores;
+ const uint64_t* pValues;
+} VkSemaphoreWaitInfoKHR;
+
+typedef struct VkSemaphoreSignalInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ uint64_t value;
+} VkSemaphoreSignalInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfoKHR* pWaitInfo, uint64_t timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfoKHR* pSignalInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR(
+ VkDevice device,
+ VkSemaphore semaphore,
+ uint64_t* pValue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR(
+ VkDevice device,
+ const VkSemaphoreWaitInfoKHR* pWaitInfo,
+ uint64_t timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR(
+ VkDevice device,
+ const VkSemaphoreSignalInfoKHR* pSignalInfo);
+#endif
+
+
#define VK_KHR_vulkan_memory_model 1
#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3
#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
diff --git a/renderdoc/driver/vulkan/vk.xml b/renderdoc/driver/vulkan/vk.xml
index dff095ba3..832a41a52 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 123
+#define VK_HEADER_VERSION 124
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
@@ -271,6 +271,7 @@ typedef void CAMetalLayer;
typedef VkFlags VkPipelineCreationFeedbackFlagsEXT;
typedef VkFlags VkPipelineCompilerControlFlagsAMD;
typedef VkFlags VkShaderCorePropertiesFlagsAMD;
+ typedef VkFlags VkSemaphoreWaitFlagsKHR;
WSI extensions
typedef VkFlags VkCompositeAlphaFlagsKHR;
@@ -493,6 +494,7 @@ typedef void CAMetalLayer;
+
@@ -506,6 +508,7 @@ typedef void CAMetalLayer;
+
@@ -3330,6 +3333,44 @@ typedef void CAMetalLayer;
VkStructureType sType
const void* pNext
+
+ VkStructureType sType
+ void* pNext
+ VkBool32 timelineSemaphore
+
+
+ VkStructureType sType
+ void* pNext
+ uint64_t maxTimelineSemaphoreValueDifference
+
+
+ VkStructureType sType
+ const void* pNext
+ VkSemaphoreTypeKHR semaphoreType
+ uint64_t initialValue
+
+
+ VkStructureType sType
+ const void* pNext
+ uint32_t waitSemaphoreValueCount
+ const uint64_t* pWaitSemaphoreValues
+ uint32_t signalSemaphoreValueCount
+ const uint64_t* pSignalSemaphoreValues
+
+
+ VkStructureType sType
+ const void* pNext
+ VkSemaphoreWaitFlagsKHR flags
+ uint32_t semaphoreCount
+ const VkSemaphore* pSemaphores
+ const uint64_t* pValues
+
+
+ VkStructureType sType
+ const void* pNext
+ VkSemaphore semaphore
+ uint64_t value
+
uint32_t binding
uint32_t divisor
@@ -4018,6 +4059,12 @@ typedef void CAMetalLayer;
const void* pNext
VkPerformanceConfigurationTypeINTEL type
+
+ VkStructureType sType
+ void* pNext
+ VkBool32 shaderSubgroupClock
+ VkBool32 shaderDeviceClock
+
VkStructureType sType
void* pNext
@@ -4834,6 +4881,8 @@ typedef void CAMetalLayer;
+
+
@@ -4943,6 +4992,13 @@ typedef void CAMetalLayer;
+
+
+
+
+
+
+
WSI Extensions
@@ -7395,6 +7451,23 @@ typedef void CAMetalLayer;
VkCommandBuffer commandBuffer
const VkSubpassEndInfoKHR* pSubpassEndInfo
+
+ VkResult vkGetSemaphoreCounterValueKHR
+ VkDevice device
+ VkSemaphore semaphore
+ uint64_t* pValue
+
+
+ VkResult vkWaitSemaphoresKHR
+ VkDevice device
+ const VkSemaphoreWaitInfoKHR* pWaitInfo
+ uint64_t timeout
+
+
+ VkResult vkSignalSemaphoreKHR
+ VkDevice device
+ const VkSemaphoreSignalInfoKHR* pSignalInfo
+
VkResult vkGetAndroidHardwareBufferPropertiesANDROID
VkDevice device
@@ -10591,10 +10664,12 @@ typedef void CAMetalLayer;
-
+
-
-
+
+
+
+
@@ -10821,10 +10896,28 @@ typedef void CAMetalLayer;
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11518,5 +11611,23 @@ typedef void CAMetalLayer;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h
index 4a249f403..aa12bb383 100644
--- a/renderdoc/driver/vulkan/vk_common.h
+++ b/renderdoc/driver/vulkan/vk_common.h
@@ -775,6 +775,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFeatures2);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFloatControlsPropertiesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceGroupProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceHostQueryResetFeaturesEXT);
@@ -803,6 +804,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSamplerYcbcrConversionFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceScalarBlockLayoutFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR);
+DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderClockFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderCorePropertiesAMD);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDrawParametersFeatures);
@@ -1036,6 +1038,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFeatures2);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFloatControlsPropertiesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceGroupProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeaturesEXT);
@@ -1064,6 +1067,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR);
+DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDrawParametersFeatures);
@@ -1383,6 +1387,8 @@ DECLARE_REFLECTION_ENUM(VkSamplerReductionModeEXT);
DECLARE_REFLECTION_ENUM(VkSamplerYcbcrModelConversion);
DECLARE_REFLECTION_ENUM(VkSamplerYcbcrRange);
DECLARE_REFLECTION_ENUM(VkSemaphoreImportFlagBits);
+DECLARE_REFLECTION_ENUM(VkSemaphoreTypeKHR);
+DECLARE_REFLECTION_ENUM(VkSemaphoreWaitFlagBitsKHR);
DECLARE_REFLECTION_ENUM(VkShaderFloatControlsIndependenceKHR);
DECLARE_REFLECTION_ENUM(VkShaderModuleCreateFlagBits);
DECLARE_REFLECTION_ENUM(VkShaderStageFlagBits);
diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp
index 1a4d51dc3..ef7f9f403 100644
--- a/renderdoc/driver/vulkan/vk_core.cpp
+++ b/renderdoc/driver/vulkan/vk_core.cpp
@@ -978,6 +978,9 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION,
},
+ {
+ VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION,
+ },
{
VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION,
},
diff --git a/renderdoc/driver/vulkan/vk_dispatch_defs.h b/renderdoc/driver/vulkan/vk_dispatch_defs.h
index 68bd7e05c..3efb4413a 100644
--- a/renderdoc/driver/vulkan/vk_dispatch_defs.h
+++ b/renderdoc/driver/vulkan/vk_dispatch_defs.h
@@ -501,6 +501,11 @@ struct VkDevDispatchTable
PFN_vkCmdDrawIndirectCountKHR CmdDrawIndirectCountKHR;
PFN_vkCmdDrawIndexedIndirectCountKHR CmdDrawIndexedIndirectCountKHR;
+ // VK_KHR_timeline_semaphore
+ PFN_vkGetSemaphoreCounterValueKHR GetSemaphoreCounterValueKHR;
+ PFN_vkWaitSemaphoresKHR WaitSemaphoresKHR;
+ PFN_vkSignalSemaphoreKHR SignalSemaphoreKHR;
+
// VK_KHR_pipeline_executable_properties
PFN_vkGetPipelineExecutablePropertiesKHR GetPipelineExecutablePropertiesKHR;
PFN_vkGetPipelineExecutableStatisticsKHR GetPipelineExecutableStatisticsKHR;
diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp
index 8d1de721b..74f748534 100644
--- a/renderdoc/driver/vulkan/vk_next_chains.cpp
+++ b/renderdoc/driver/vulkan/vk_next_chains.cpp
@@ -253,6 +253,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceShaderAtomicInt64FeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, \
VkPhysicalDeviceShaderCorePropertiesAMD); \
+ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, \
+ VkPhysicalDeviceShaderClockFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, \
VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, \
@@ -273,6 +275,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, \
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT); \
+ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, \
+ VkPhysicalDeviceTimelineSemaphoreFeaturesKHR); \
+ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, \
+ VkPhysicalDeviceTimelineSemaphorePropertiesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, \
VkPhysicalDeviceTransformFeedbackFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT, \
@@ -356,6 +362,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
COPY_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, \
VkSamplerYcbcrConversionImageFormatProperties); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, VkSemaphoreCreateInfo); \
+ COPY_STRUCT(VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR, VkSemaphoreTypeCreateInfoKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, VkShaderModuleCreateInfo); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR, \
VkSharedPresentSurfaceCapabilitiesKHR); \
@@ -375,6 +382,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkSurfaceProtectedCapabilitiesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, \
VkTextureLODGatherFormatPropertiesAMD); \
+ COPY_STRUCT(VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR, \
+ VkTimelineSemaphoreSubmitInfoKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT, VkValidationCacheCreateInfoEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT, VkValidationFeaturesEXT); \
COPY_STRUCT_CAPTURE_ONLY(VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO, \
@@ -425,6 +434,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
UnwrapInPlace(out->commandPool)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO, VkCommandBufferInheritanceInfo, \
UnwrapInPlace(out->renderPass), UnwrapInPlace(out->framebuffer)); \
+ UNWRAP_STRUCT(VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT, \
+ VkConditionalRenderingBeginInfoEXT, UnwrapInPlace(out->buffer)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET, VkCopyDescriptorSet, \
UnwrapInPlace(out->srcSet), UnwrapInPlace(out->dstSet)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV, \
@@ -453,8 +464,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
UnwrapInPlace(out->renderPass), UnwrapInPlace(out->framebuffer)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, VkSamplerYcbcrConversionInfo, \
UnwrapInPlace(out->conversion)); \
- UNWRAP_STRUCT(VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT, \
- VkConditionalRenderingBeginInfoEXT, UnwrapInPlace(out->buffer)); \
+ UNWRAP_STRUCT(VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR, VkSemaphoreSignalInfoKHR, \
+ UnwrapInPlace(out->semaphore)); \
UNWRAP_STRUCT_CAPTURE_ONLY(VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR, \
VkAcquireNextImageInfoKHR, UnwrapInPlace(out->swapchain), \
UnwrapInPlace(out->semaphore), UnwrapInPlace(out->fence)); \
@@ -713,6 +724,14 @@ size_t GetNextPatchSize(const void *pNext)
memSize += info->attachmentCount * sizeof(VkImageView);
break;
}
+ case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR:
+ {
+ memSize += sizeof(VkSemaphoreWaitInfoKHR);
+
+ VkSemaphoreWaitInfoKHR *info = (VkSemaphoreWaitInfoKHR *)next;
+ memSize += info->semaphoreCount * sizeof(VkSemaphore);
+ break;
+ }
case VK_STRUCTURE_TYPE_SUBMIT_INFO:
{
memSize += sizeof(VkSubmitInfo);
@@ -1218,6 +1237,26 @@ void UnwrapNextChain(CaptureState state, const char *structName, byte *&tempMem,
break;
}
+ case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR:
+ {
+ const VkSemaphoreWaitInfoKHR *in = (const VkSemaphoreWaitInfoKHR *)nextInput;
+ VkSemaphoreWaitInfoKHR *out = (VkSemaphoreWaitInfoKHR *)tempMem;
+
+ // append immediately so tempMem is incremented
+ AppendModifiedChainedStruct(tempMem, out, nextChainTail);
+
+ // allocate unwrapped array
+ VkSemaphore *outSemaphores = (VkSemaphore *)tempMem;
+ tempMem += sizeof(VkSemaphore) * in->semaphoreCount;
+
+ *out = *in;
+ out->pSemaphores = outSemaphores;
+
+ for(uint32_t i = 0; i < in->semaphoreCount; i++)
+ outSemaphores[i] = Unwrap(in->pSemaphores[i]);
+
+ break;
+ }
case VK_STRUCTURE_TYPE_SUBMIT_INFO:
{
const VkSubmitInfo *in = (const VkSubmitInfo *)nextInput;
diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp
index 1251315ce..c000e0bf8 100644
--- a/renderdoc/driver/vulkan/vk_serialise.cpp
+++ b/renderdoc/driver/vulkan/vk_serialise.cpp
@@ -154,6 +154,7 @@ DECL_VKFLAG_EXT(VkSwapchainCreate, KHR);
DECL_VKFLAG_EMPTY_EXT(VkValidationCacheCreate, EXT);
DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationDepthClipStateCreate, EXT);
DECL_VKFLAG_EXT(VkDescriptorBinding, EXT);
+DECL_VKFLAG_EXT(VkSemaphoreWait, KHR);
// 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
@@ -861,6 +862,10 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, \
VkPhysicalDeviceShaderAtomicInt64FeaturesKHR) \
\
+ /* VK_KHR_shader_clock */ \
+ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, \
+ VkPhysicalDeviceShaderClockFeaturesKHR) \
+ \
/* VK_KHR_shader_float16_int8 */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, \
VkPhysicalDeviceShaderFloat16Int8FeaturesKHR) \
@@ -906,6 +911,10 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, \
VkDedicatedAllocationBufferCreateInfoNV) \
\
+ /* VK_NV_fragment_shader_barycentric */ \
+ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, \
+ VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV) \
+ \
/* VK_NV_external_memory */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV, VkExportMemoryAllocateInfoNV) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV, \
@@ -982,6 +991,14 @@ SERIALISE_VK_HANDLES();
/* VK_EXT_texture_compression_astc_hdr */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT) \
\
+ /* VK_KHR_timeline_semaphore */ \
+ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR) \
+ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR) \
+ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR) \
+ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR) \
+ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR) \
+ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR) \
+ \
/* VK_INTEL_performance_query */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL) \
@@ -1022,9 +1039,6 @@ SERIALISE_VK_HANDLES();
/* VK_NV_fragment_coverage_to_color */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV) \
\
- /* VK_NV_fragment_shader_barycentric */ \
- PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV) \
- \
/* VK_NV_framebuffer_mixed_samples */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV) \
\
@@ -5454,6 +5468,22 @@ void Deserialise(const VkPhysicalDeviceShaderImageFootprintFeaturesNV &el)
DeserialiseNext(el.pNext);
}
+template
+void DoSerialise(SerialiserType &ser, VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV &el)
+{
+ RDCASSERT(ser.IsReading() ||
+ el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV);
+ SerialiseNext(ser, el.sType, el.pNext);
+
+ SERIALISE_MEMBER(fragmentShaderBarycentric);
+}
+
+template <>
+void Deserialise(const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV &el)
+{
+ DeserialiseNext(el.pNext);
+}
+
template
void DoSerialise(SerialiserType &ser, VkExternalMemoryImageCreateInfo &el)
{
@@ -6511,6 +6541,23 @@ void Deserialise(const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT &el)
DeserialiseNext(el.pNext);
}
+template
+void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderClockFeaturesKHR &el)
+{
+ RDCASSERT(ser.IsReading() ||
+ el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR);
+ SerialiseNext(ser, el.sType, el.pNext);
+
+ SERIALISE_MEMBER(shaderSubgroupClock);
+ SERIALISE_MEMBER(shaderDeviceClock);
+}
+
+template <>
+void Deserialise(const VkPhysicalDeviceShaderClockFeaturesKHR &el)
+{
+ DeserialiseNext(el.pNext);
+}
+
template
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderFloat16Int8FeaturesKHR &el)
{
@@ -7487,6 +7534,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFeatures2);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFloatControlsPropertiesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceGroupProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeaturesEXT);
@@ -7515,6 +7563,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR);
+INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderDrawParametersFeatures);
diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp
index 4172df9c0..86c11bb19 100644
--- a/renderdoc/driver/vulkan/vk_stringise.cpp
+++ b/renderdoc/driver/vulkan/vk_stringise.cpp
@@ -1636,6 +1636,7 @@ rdcstr DoStringise(const VkStructureType &el)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
@@ -1658,6 +1659,12 @@ rdcstr DoStringise(const VkStructureType &el)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR)
+ STRINGISE_ENUM(VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL)
STRINGISE_ENUM(VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
@@ -2604,6 +2611,27 @@ rdcstr DoStringise(const VkLineRasterizationModeEXT &el)
END_ENUM_STRINGISE();
}
+template <>
+rdcstr DoStringise(const VkSemaphoreTypeKHR &el)
+{
+ BEGIN_ENUM_STRINGISE(VkSemaphoreTypeKHR);
+ {
+ STRINGISE_ENUM(VK_SEMAPHORE_TYPE_BINARY_KHR);
+ STRINGISE_ENUM(VK_SEMAPHORE_TYPE_TIMELINE_KHR);
+ }
+ END_ENUM_STRINGISE();
+}
+
+template <>
+rdcstr DoStringise(const VkSemaphoreWaitFlagBitsKHR &el)
+{
+ BEGIN_BITFIELD_STRINGISE(VkSemaphoreWaitFlagBitsKHR);
+ {
+ STRINGISE_BITFIELD_BIT(VK_SEMAPHORE_WAIT_ANY_BIT_KHR);
+ }
+ END_BITFIELD_STRINGISE();
+}
+
template <>
rdcstr DoStringise(const VkExtent3D &el)
{
diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp
index a9a2361b2..777a285f1 100644
--- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp
+++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp
@@ -2292,6 +2292,36 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
CHECK_PHYS_EXT_FEATURE(deviceCoherentMemory);
}
END_PHYS_EXT_CHECK();
+
+ BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderClockFeaturesKHR,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR);
+ {
+ CHECK_PHYS_EXT_FEATURE(shaderSubgroupClock);
+ CHECK_PHYS_EXT_FEATURE(shaderDeviceClock);
+ }
+ END_PHYS_EXT_CHECK();
+
+ BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceMemoryPriorityFeaturesEXT,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT);
+ {
+ CHECK_PHYS_EXT_FEATURE(memoryPriority);
+ }
+ END_PHYS_EXT_CHECK();
+
+ BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceScalarBlockLayoutFeaturesEXT,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT);
+ {
+ CHECK_PHYS_EXT_FEATURE(scalarBlockLayout);
+ }
+ END_PHYS_EXT_CHECK();
+
+ BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderFloat16Int8FeaturesKHR,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR);
+ {
+ CHECK_PHYS_EXT_FEATURE(shaderFloat16);
+ CHECK_PHYS_EXT_FEATURE(shaderInt8);
+ }
+ END_PHYS_EXT_CHECK();
}
if(availFeatures.depthClamp)