mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 09:30:44 +00:00
Add support for VK_KHR_present_id/wait
This commit is contained in:
@@ -135,6 +135,8 @@ Maintainers can update this file by updating vk.xml in this folder and running `
|
||||
* `VK_KHR_multiview`
|
||||
* `VK_KHR_performance_query`
|
||||
* `VK_KHR_pipeline_executable_properties`
|
||||
* `VK_KHR_present_id`
|
||||
* `VK_KHR_present_wait`
|
||||
* `VK_KHR_push_descriptor`
|
||||
* `VK_KHR_relaxed_block_layout`
|
||||
* `VK_KHR_sampler_mirror_clamp_to_edge`
|
||||
@@ -189,8 +191,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio
|
||||
|
||||
* `VK_KHR_fragment_shading_rate`
|
||||
* `VK_KHR_maintenance4`
|
||||
* `VK_KHR_present_id`
|
||||
* `VK_KHR_present_wait`
|
||||
* `VK_KHR_shader_integer_dot_product`
|
||||
* `VK_KHR_shader_subgroup_uniform_control_flow`
|
||||
|
||||
|
||||
@@ -964,6 +964,8 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineCreationCacheControlFeaturesEX
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePointClippingProperties);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrivateDataFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentIdFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentWaitFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProperties2);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProtectedMemoryFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProtectedMemoryProperties);
|
||||
@@ -1038,6 +1040,7 @@ DECLARE_REFLECTION_STRUCT(VkPipelineTessellationStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputDivisorStateCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineViewportStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPresentIdKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPresentInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPresentRegionsKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPresentTimeGOOGLE);
|
||||
@@ -1294,6 +1297,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePointClippingProperties);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrivateDataFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentIdFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentWaitFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProperties2);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryProperties);
|
||||
@@ -1368,6 +1373,7 @@ DECLARE_DESERIALISE_TYPE(VkPipelineTessellationStateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputStateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineViewportStateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPresentIdKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPresentInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPresentRegionsKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPresentTimesInfoGOOGLE);
|
||||
|
||||
@@ -1237,6 +1237,12 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME,
|
||||
VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_PRESENT_ID_EXTENSION_NAME, VK_KHR_PRESENT_ID_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_PRESENT_WAIT_EXTENSION_NAME, VK_KHR_PRESENT_WAIT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -2454,4 +2454,9 @@ public:
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkQueueSubmit2KHR, VkQueue queue, uint32_t submitCount,
|
||||
const VkSubmitInfo2KHR *pSubmits, VkFence fence);
|
||||
|
||||
// VK_KHR_present_wait
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkWaitForPresentKHR, VkDevice device,
|
||||
VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout);
|
||||
};
|
||||
|
||||
@@ -527,7 +527,8 @@
|
||||
DeclExt(EXT_private_data); \
|
||||
DeclExt(EXT_extended_dynamic_state); \
|
||||
DeclExt(KHR_copy_commands2); \
|
||||
DeclExt(KHR_synchronization2);
|
||||
DeclExt(KHR_synchronization2); \
|
||||
DeclExt(KHR_present_wait);
|
||||
|
||||
// for simplicity and since the check itself is platform agnostic,
|
||||
// these aren't protected in platform defines
|
||||
@@ -868,6 +869,7 @@
|
||||
HookInitExtension(KHR_synchronization2, CmdWriteTimestamp2KHR); \
|
||||
HookInitExtension(KHR_synchronization2, QueueSubmit2KHR); \
|
||||
HookInitExtension(KHR_synchronization2 &&AMD_buffer_marker, CmdWriteBufferMarker2AMD); \
|
||||
HookInitExtension(KHR_present_wait, WaitForPresentKHR); \
|
||||
/* No GetQueueCheckpointData2NV without VK_NV_device_diagnostic_checkpoints */ \
|
||||
HookInitExtension_Device_Win32(); \
|
||||
HookInitExtension_Device_Linux(); \
|
||||
@@ -1552,6 +1554,8 @@
|
||||
HookDefine5(void, vkCmdWriteBufferMarker2AMD, VkCommandBuffer, commandBuffer, \
|
||||
VkPipelineStageFlags2KHR, stage, VkBuffer, dstBuffer, VkDeviceSize, dstOffset, \
|
||||
uint32_t, marker); \
|
||||
HookDefine4(VkResult, vkWaitForPresentKHR, VkDevice, device, VkSwapchainKHR, swapchain, \
|
||||
uint64_t, presentId, uint64_t, timeout); \
|
||||
HookDefine_Win32(); \
|
||||
HookDefine_Linux(); \
|
||||
HookDefine_GGP(); \
|
||||
|
||||
@@ -300,6 +300,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPhysicalDevicePointClippingProperties); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, \
|
||||
VkPhysicalDevicePrivateDataFeaturesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, \
|
||||
VkPhysicalDevicePresentIdFeaturesKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, \
|
||||
VkPhysicalDevicePresentWaitFeaturesKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, VkPhysicalDeviceProperties2); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, \
|
||||
VkPhysicalDeviceProtectedMemoryFeatures); \
|
||||
@@ -434,6 +438,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPipelineVertexInputStateCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, \
|
||||
VkPipelineViewportStateCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_ID_KHR, VkPresentIdKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR, VkPresentRegionsKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE, VkPresentTimesInfoGOOGLE) \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT, VkPrivateDataSlotCreateInfoEXT) \
|
||||
@@ -735,8 +740,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: \
|
||||
@@ -779,7 +782,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV: \
|
||||
case VK_STRUCTURE_TYPE_PRESENT_ID_KHR: \
|
||||
case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: \
|
||||
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV: \
|
||||
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: \
|
||||
|
||||
@@ -1040,6 +1040,15 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR, \
|
||||
VkPipelineExecutableInternalRepresentationKHR) \
|
||||
\
|
||||
/* VK_KHR_present_id */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PRESENT_ID_KHR, VkPresentIdKHR) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, \
|
||||
VkPhysicalDevicePresentIdFeaturesKHR) \
|
||||
\
|
||||
/* VK_KHR_present_wait */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, \
|
||||
VkPhysicalDevicePresentWaitFeaturesKHR) \
|
||||
\
|
||||
/* VK_KHR_push_descriptor */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR, \
|
||||
VkPhysicalDevicePushDescriptorPropertiesKHR) \
|
||||
@@ -1328,13 +1337,6 @@ SERIALISE_VK_HANDLES();
|
||||
/* VK_KHR_pipeline_library */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR) \
|
||||
\
|
||||
/* VK_KHR_present_id */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRESENT_ID_KHR) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR) \
|
||||
\
|
||||
/* VK_KHR_present_wait */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR) \
|
||||
\
|
||||
/* VK_KHR_ray_tracing_pipeline */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR) \
|
||||
@@ -5421,6 +5423,53 @@ void Deserialise(const VkPipelineExecutableInternalRepresentationKHR &el)
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPresentIdKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PRESENT_ID_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(swapchainCount);
|
||||
SERIALISE_MEMBER_ARRAY(pPresentIds);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPresentIdKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentIdFeaturesKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(presentId);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDevicePresentIdFeaturesKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentWaitFeaturesKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(presentWait);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDevicePresentWaitFeaturesKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePushDescriptorPropertiesKHR &el)
|
||||
{
|
||||
@@ -9480,6 +9529,8 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeaturesE
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePointClippingProperties);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePrivateDataFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentIdFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentWaitFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProperties2);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryFeatures);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryProperties);
|
||||
@@ -9554,6 +9605,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPipelineTessellationStateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfoEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputStateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineViewportStateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPresentIdKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPresentInfoKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPresentRegionsKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPresentTimeGOOGLE);
|
||||
|
||||
@@ -179,7 +179,8 @@ static void StripUnwantedExtensions(rdcarray<rdcstr> &Extensions)
|
||||
}
|
||||
|
||||
// remove WSI-only extensions
|
||||
if(ext == "VK_GOOGLE_display_timing")
|
||||
if(ext == "VK_GOOGLE_display_timing" || ext == "VK_KHR_display_swapchain" ||
|
||||
ext == "VK_EXT_display_control" || ext == "VK_KHR_present_id")
|
||||
return true;
|
||||
|
||||
// remove fullscreen exclusive extension
|
||||
@@ -188,7 +189,8 @@ static void StripUnwantedExtensions(rdcarray<rdcstr> &Extensions)
|
||||
|
||||
// this is debug only, nothing to capture, so nothing to replay
|
||||
if(ext == "VK_EXT_tooling_info" || ext == "VK_EXT_private_data" ||
|
||||
ext == "VK_EXT_validation_features" || ext == "VK_EXT_validation_flags")
|
||||
ext == "VK_EXT_validation_features" || ext == "VK_EXT_validation_cache" ||
|
||||
ext == "VK_EXT_validation_flags")
|
||||
return true;
|
||||
|
||||
// these are debug only and will be added (if supported) as optional
|
||||
@@ -1618,19 +1620,6 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
rdcarray<rdcstr> Extensions;
|
||||
for(uint32_t i = 0; i < createInfo.enabledExtensionCount; i++)
|
||||
{
|
||||
// don't include the debug marker extension
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME))
|
||||
continue;
|
||||
|
||||
// don't include the validation cache extension
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_VALIDATION_CACHE_EXTENSION_NAME))
|
||||
continue;
|
||||
|
||||
// don't include direct-display WSI extensions
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) ||
|
||||
!strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME))
|
||||
continue;
|
||||
|
||||
Extensions.push_back(createInfo.ppEnabledExtensionNames[i]);
|
||||
}
|
||||
|
||||
@@ -2062,12 +2051,18 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove private data structs to improve capture compatibility, since we don't replay any
|
||||
// private data.
|
||||
// remove structs from extensions that we have stripped but may still be referenced here,
|
||||
// to ensure we don't pass structs for disabled extensions.
|
||||
if(RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT) ||
|
||||
RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT))
|
||||
{
|
||||
RDCLOG("Removed private data structs from vkCreateDevice pNext chain");
|
||||
RDCLOG("Removed VK_EXT_private_data structs from vkCreateDevice pNext chain");
|
||||
}
|
||||
|
||||
if(RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR) ||
|
||||
RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR))
|
||||
{
|
||||
RDCLOG("Removed VK_KHR_present_id/wait structs from vkCreateDevice pNext chain");
|
||||
}
|
||||
|
||||
VkPhysicalDeviceFeatures enabledFeatures = {0};
|
||||
|
||||
@@ -769,7 +769,8 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
|
||||
next->sType != VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR &&
|
||||
next->sType != VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP &&
|
||||
next->sType != VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR &&
|
||||
next->sType != VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
|
||||
next->sType != VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE &&
|
||||
next->sType != VK_STRUCTURE_TYPE_PRESENT_ID_KHR)
|
||||
{
|
||||
RDCWARN("Unsupported pNext structure in pPresentInfo: %s", ToStr(next->sType).c_str());
|
||||
}
|
||||
@@ -1309,6 +1310,12 @@ VkResult WrappedVulkan::vkCreateHeadlessSurfaceEXT(VkInstance instance,
|
||||
return ret;
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkWaitForPresentKHR(VkDevice device, VkSwapchainKHR swapchain,
|
||||
uint64_t presentId, uint64_t timeout)
|
||||
{
|
||||
return ObjDisp(device)->WaitForPresentKHR(Unwrap(device), Unwrap(swapchain), presentId, timeout);
|
||||
}
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
VkResult WrappedVulkan::vkCreateWin32SurfaceKHR(VkInstance instance,
|
||||
const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
|
||||
|
||||
Reference in New Issue
Block a user