Add support for EXT_surface_maintenance1 and EXT_swapchain_maintenance1

This commit is contained in:
baldurk
2023-01-17 18:39:05 +00:00
parent a9d445d779
commit c1bb3abb07
10 changed files with 332 additions and 34 deletions
+2 -2
View File
@@ -93,7 +93,9 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_EXT_shader_subgroup_vote`
* `VK_EXT_shader_viewport_index_layer`
* `VK_EXT_subgroup_size_control`
* `VK_EXT_surface_maintenance1`
* `VK_EXT_swapchain_colorspace`
* `VK_EXT_swapchain_maintenance1`
* `VK_EXT_texel_buffer_alignment`
* `VK_EXT_texture_compression_astc_hdr`
* `VK_EXT_tooling_info`
@@ -267,8 +269,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi
* `VK_EXT_rasterization_order_attachment_access`
* `VK_EXT_shader_module_identifier`
* `VK_EXT_subpass_merge_feedback`
* `VK_EXT_surface_maintenance1`
* `VK_EXT_swapchain_maintenance1`
## Platform/IHV Extensions
+20
View File
@@ -1243,6 +1243,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupSizeControlFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupSizeControlProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSurfaceInfo2KHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSynchronization2Features);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTexelBufferAlignmentProperties);
@@ -1312,6 +1313,7 @@ DECLARE_REFLECTION_STRUCT(VkQueryPoolPerformanceCreateInfoKHR);
DECLARE_REFLECTION_STRUCT(VkQueueFamilyGlobalPriorityPropertiesKHR);
DECLARE_REFLECTION_STRUCT(VkQueueFamilyProperties2);
DECLARE_REFLECTION_STRUCT(VkRefreshCycleDurationGOOGLE);
DECLARE_REFLECTION_STRUCT(VkReleaseSwapchainImagesInfoEXT);
DECLARE_REFLECTION_STRUCT(VkRenderingAttachmentInfo);
DECLARE_REFLECTION_STRUCT(VkRenderingFragmentDensityMapAttachmentInfoEXT);
DECLARE_REFLECTION_STRUCT(VkRenderingFragmentShadingRateAttachmentInfoKHR);
@@ -1356,10 +1358,17 @@ DECLARE_REFLECTION_STRUCT(VkSubpassSampleLocationsEXT);
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2EXT);
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2KHR);
DECLARE_REFLECTION_STRUCT(VkSurfaceFormat2KHR);
DECLARE_REFLECTION_STRUCT(VkSurfacePresentModeCompatibilityEXT);
DECLARE_REFLECTION_STRUCT(VkSurfacePresentModeEXT);
DECLARE_REFLECTION_STRUCT(VkSurfacePresentScalingCapabilitiesEXT);
DECLARE_REFLECTION_STRUCT(VkSurfaceProtectedCapabilitiesKHR);
DECLARE_REFLECTION_STRUCT(VkSwapchainCounterCreateInfoEXT);
DECLARE_REFLECTION_STRUCT(VkSwapchainCreateInfoKHR);
DECLARE_REFLECTION_STRUCT(VkSwapchainDisplayNativeHdrCreateInfoAMD);
DECLARE_REFLECTION_STRUCT(VkSwapchainPresentFenceInfoEXT);
DECLARE_REFLECTION_STRUCT(VkSwapchainPresentModeInfoEXT);
DECLARE_REFLECTION_STRUCT(VkSwapchainPresentModesCreateInfoEXT);
DECLARE_REFLECTION_STRUCT(VkSwapchainPresentScalingCreateInfoEXT);
DECLARE_REFLECTION_STRUCT(VkTextureLODGatherFormatPropertiesAMD);
DECLARE_REFLECTION_STRUCT(VkTimelineSemaphoreSubmitInfo);
DECLARE_REFLECTION_STRUCT(VkValidationCacheCreateInfoEXT);
@@ -1631,6 +1640,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSurfaceInfo2KHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSynchronization2Features);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentProperties);
@@ -1698,6 +1708,7 @@ DECLARE_DESERIALISE_TYPE(VkQueryPoolCreateInfo);
DECLARE_DESERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR);
DECLARE_DESERIALISE_TYPE(VkQueueFamilyGlobalPriorityPropertiesKHR);
DECLARE_DESERIALISE_TYPE(VkQueueFamilyProperties2);
DECLARE_DESERIALISE_TYPE(VkReleaseSwapchainImagesInfoEXT);
DECLARE_DESERIALISE_TYPE(VkRenderingAttachmentInfo);
DECLARE_DESERIALISE_TYPE(VkRenderingFragmentDensityMapAttachmentInfoEXT);
DECLARE_DESERIALISE_TYPE(VkRenderingFragmentShadingRateAttachmentInfoKHR);
@@ -1741,10 +1752,17 @@ DECLARE_DESERIALISE_TYPE(VkSubpassSampleLocationsEXT);
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2EXT);
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2KHR);
DECLARE_DESERIALISE_TYPE(VkSurfaceFormat2KHR);
DECLARE_DESERIALISE_TYPE(VkSurfacePresentModeCompatibilityEXT);
DECLARE_DESERIALISE_TYPE(VkSurfacePresentModeEXT);
DECLARE_DESERIALISE_TYPE(VkSurfacePresentScalingCapabilitiesEXT);
DECLARE_DESERIALISE_TYPE(VkSurfaceProtectedCapabilitiesKHR);
DECLARE_DESERIALISE_TYPE(VkSwapchainCounterCreateInfoEXT);
DECLARE_DESERIALISE_TYPE(VkSwapchainCreateInfoKHR);
DECLARE_DESERIALISE_TYPE(VkSwapchainDisplayNativeHdrCreateInfoAMD);
DECLARE_DESERIALISE_TYPE(VkSwapchainPresentFenceInfoEXT);
DECLARE_DESERIALISE_TYPE(VkSwapchainPresentModeInfoEXT);
DECLARE_DESERIALISE_TYPE(VkSwapchainPresentModesCreateInfoEXT);
DECLARE_DESERIALISE_TYPE(VkSwapchainPresentScalingCreateInfoEXT);
DECLARE_DESERIALISE_TYPE(VkTextureLODGatherFormatPropertiesAMD);
DECLARE_DESERIALISE_TYPE(VkTimelineSemaphoreSubmitInfo);
DECLARE_DESERIALISE_TYPE(VkValidationCacheCreateInfoEXT);
@@ -2024,7 +2042,9 @@ DECLARE_REFLECTION_ENUM(VkPipelineStageFlagBits);
DECLARE_REFLECTION_ENUM(VkPipelineStageFlagBits2);
DECLARE_REFLECTION_ENUM(VkPointClippingBehavior);
DECLARE_REFLECTION_ENUM(VkPolygonMode);
DECLARE_REFLECTION_ENUM(VkPresentGravityFlagBitsEXT);
DECLARE_REFLECTION_ENUM(VkPresentModeKHR);
DECLARE_REFLECTION_ENUM(VkPresentScalingFlagBitsEXT);
DECLARE_REFLECTION_ENUM(VkPrimitiveTopology);
DECLARE_REFLECTION_ENUM(VkRenderingFlagBits);
DECLARE_REFLECTION_ENUM(VkQueryControlFlagBits);
+6
View File
@@ -1115,9 +1115,15 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION,
},
{
VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION,
},
{
VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION,
},
{
VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME, VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION,
},
{
VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION,
},
+4
View File
@@ -2608,4 +2608,8 @@ public:
VkResult vkGetDrmDisplayEXT(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId,
VkDisplayKHR *display);
// VK_EXT_swapchain_maintenance1
VkResult vkReleaseSwapchainImagesEXT(VkDevice device,
const VkReleaseSwapchainImagesInfoEXT *pReleaseInfo);
};
+7 -2
View File
@@ -545,7 +545,8 @@
DeclExt(KHR_dynamic_rendering); \
DeclExt(KHR_fragment_shading_rate); \
DeclExt(EXT_attachment_feedback_loop_layout); \
DeclExt(EXT_pageable_device_local_memory);
DeclExt(EXT_pageable_device_local_memory); \
DeclExt(EXT_swapchain_maintenance1);
// for simplicity and since the check itself is platform agnostic,
// these aren't protected in platform defines
@@ -661,7 +662,8 @@
CheckExt(KHR_dynamic_rendering, VK13); \
CheckExt(KHR_fragment_shading_rate, VKXX); \
CheckExt(EXT_attachment_feedback_loop_layout, VKXX); \
CheckExt(EXT_pageable_device_local_memory, VKXX);
CheckExt(EXT_pageable_device_local_memory, VKXX); \
CheckExt(EXT_swapchain_maintenance1, VKXX);
#define HookInitVulkanInstanceExts_PhysDev() \
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
@@ -922,6 +924,7 @@
HookInitPromotedExtension(KHR_dynamic_rendering, CmdEndRendering, KHR); \
HookInitExtension(KHR_fragment_shading_rate, CmdSetFragmentShadingRateKHR); \
HookInitExtension(EXT_pageable_device_local_memory, SetDeviceMemoryPriorityEXT); \
HookInitExtension(EXT_swapchain_maintenance1, ReleaseSwapchainImagesEXT); \
HookInitExtension_Device_Win32(); \
HookInitExtension_Device_Linux(); \
HookInitExtension_Device_GGP(); \
@@ -1646,6 +1649,8 @@
VkDisplayKHR, display); \
HookDefine4(VkResult, vkGetDrmDisplayEXT, VkPhysicalDevice, physicalDevice, int32_t, drmFd, \
uint32_t, connectorId, VkDisplayKHR *, display); \
HookDefine2(VkResult, vkReleaseSwapchainImagesEXT, VkDevice, device, \
const VkReleaseSwapchainImagesInfoEXT *, pReleaseInfo); \
HookDefine_Win32(); \
HookDefine_Linux(); \
HookDefine_GGP(); \
+46 -9
View File
@@ -421,6 +421,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceSubgroupSizeControlFeatures) \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, \
VkPhysicalDeviceSubgroupSizeControlProperties) \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT, \
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, \
VkPhysicalDeviceSynchronization2Features); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, \
@@ -571,10 +573,20 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, VkSurfaceCapabilities2EXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR, VkSurfaceCapabilities2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR, VkSurfaceFormat2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT, \
VkSurfacePresentModeCompatibilityEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT, VkSurfacePresentModeEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT, \
VkSurfacePresentScalingCapabilitiesEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR, \
VkSurfaceProtectedCapabilitiesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD, \
VkSwapchainDisplayNativeHdrCreateInfoAMD) \
COPY_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT, VkSwapchainPresentModeInfoEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT, \
VkSwapchainPresentModesCreateInfoEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT, \
VkSwapchainPresentScalingCreateInfoEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, \
VkTextureLODGatherFormatPropertiesAMD); \
COPY_STRUCT(VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, VkTimelineSemaphoreSubmitInfo); \
@@ -677,6 +689,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
UnwrapInPlace(out->imageView), UnwrapInPlace(out->resolveImageView)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, VkRenderPassBeginInfo, \
UnwrapInPlace(out->renderPass), UnwrapInPlace(out->framebuffer)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT, \
VkReleaseSwapchainImagesInfoEXT, UnwrapInPlace(out->swapchain)) \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, VkSamplerYcbcrConversionInfo, \
UnwrapInPlace(out->conversion)); \
UNWRAP_STRUCT(VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, VkSemaphoreSignalInfo, \
@@ -933,7 +947,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR: \
case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: \
@@ -963,7 +976,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR: \
case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR: \
case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV: \
case VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT: \
case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT: \
case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT: \
case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT: \
@@ -976,14 +988,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI: \
case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT: \
case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV: \
case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT: \
case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT: \
case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT: \
case VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA: \
case VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM: \
case VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR: \
@@ -1390,6 +1395,14 @@ size_t GetNextPatchSize(const void *pNext)
memSize += GetNextPatchSize(info->pSignalSemaphoreInfos[i].pNext);
break;
}
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT:
{
memSize += sizeof(VkSwapchainPresentFenceInfoEXT);
VkSwapchainPresentFenceInfoEXT *info = (VkSwapchainPresentFenceInfoEXT *)next;
memSize += info->swapchainCount * sizeof(VkFence);
break;
}
case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
{
memSize += sizeof(VkWriteDescriptorSet);
@@ -2476,6 +2489,26 @@ void UnwrapNextChain(CaptureState state, const char *structName, byte *&tempMem,
break;
}
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT:
{
const VkSwapchainPresentFenceInfoEXT *in = (const VkSwapchainPresentFenceInfoEXT *)nextInput;
VkSwapchainPresentFenceInfoEXT *out = (VkSwapchainPresentFenceInfoEXT *)tempMem;
// append immediately so tempMem is incremented
AppendModifiedChainedStruct(tempMem, out, nextChainTail);
// allocate unwrapped array
VkFence *outFences = (VkFence *)tempMem;
tempMem += sizeof(VkFence) * in->swapchainCount;
*out = *in;
out->pFences = outFences;
for(uint32_t i = 0; i < in->swapchainCount; i++)
outFences[i] = Unwrap(in->pFences[i]);
break;
}
case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
{
const VkWriteDescriptorSet *in = (const VkWriteDescriptorSet *)nextInput;
@@ -2855,6 +2888,10 @@ void CopyNextChainForPatching(const char *structName, byte *&tempMem, VkBaseInSt
case VK_STRUCTURE_TYPE_SUBMIT_INFO_2:
CopyNextChainedStruct(sizeof(VkSubmitInfo2), tempMem, nextInput, nextChainTail);
break;
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT:
CopyNextChainedStruct(sizeof(VkSwapchainPresentFenceInfoEXT), tempMem, nextInput,
nextChainTail);
break;
case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
CopyNextChainedStruct(sizeof(VkWriteDescriptorSet), tempMem, nextInput, nextChainTail);
break;
+184 -13
View File
@@ -165,6 +165,8 @@ DECL_VKFLAG_EXT(VkAccess, 2);
DECL_VKFLAG_EXT(VkFormatFeature, 2);
DECL_VKFLAG_EXT(VkGraphicsPipelineLibrary, EXT);
DECL_VKFLAG(VkRendering);
DECL_VKFLAG_EXT(VkPresentScaling, EXT);
DECL_VKFLAG_EXT(VkPresentGravity, 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
@@ -840,6 +842,24 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, \
VkPipelineShaderStageRequiredSubgroupSizeCreateInfo) \
\
/* VK_EXT_surface_maintenance1 */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT, VkSurfacePresentModeEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT, \
VkSurfacePresentScalingCapabilitiesEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT, \
VkSurfacePresentModeCompatibilityEXT) \
\
/* VK_EXT_swapchain_maintenance1 */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT, \
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT, VkReleaseSwapchainImagesInfoEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT, VkSwapchainPresentFenceInfoEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT, \
VkSwapchainPresentModesCreateInfoEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT, VkSwapchainPresentModeInfoEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT, \
VkSwapchainPresentScalingCreateInfoEXT) \
\
/* VK_EXT_texel_buffer_alignment */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, \
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT) \
@@ -1520,19 +1540,6 @@ SERIALISE_VK_HANDLES();
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT) \
\
/* VK_EXT_surface_maintenance1 */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT) \
\
/* VK_EXT_swapchain_maintenance1 */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT) \
\
/* VK_HUAWEI_invocation_mask */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI) \
\
@@ -4147,6 +4154,161 @@ void Deserialise(const VkSwapchainDisplayNativeHdrCreateInfoAMD &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSurfacePresentModeEXT &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentMode);
}
template <>
void Deserialise(const VkSurfacePresentModeEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSurfacePresentScalingCapabilitiesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER_VKFLAGS(VkPresentScalingFlagsEXT, supportedPresentScaling);
SERIALISE_MEMBER_VKFLAGS(VkPresentGravityFlagsEXT, supportedPresentGravityX);
SERIALISE_MEMBER_VKFLAGS(VkPresentGravityFlagsEXT, supportedPresentGravityY);
SERIALISE_MEMBER(minScaledImageExtent);
SERIALISE_MEMBER(maxScaledImageExtent);
}
template <>
void Deserialise(const VkSurfacePresentScalingCapabilitiesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSurfacePresentModeCompatibilityEXT &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentModeCount);
SERIALISE_MEMBER_ARRAY(pPresentModes, presentModeCount);
}
template <>
void Deserialise(const VkSurfacePresentModeCompatibilityEXT &el)
{
DeserialiseNext(el.pNext);
delete[] el.pPresentModes;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(swapchainMaintenance1);
}
template <>
void Deserialise(const VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkReleaseSwapchainImagesInfoEXT &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(swapchain);
SERIALISE_MEMBER(imageIndexCount);
SERIALISE_MEMBER_ARRAY(pImageIndices, imageIndexCount);
}
template <>
void Deserialise(const VkReleaseSwapchainImagesInfoEXT &el)
{
DeserialiseNext(el.pNext);
delete[] el.pImageIndices;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSwapchainPresentFenceInfoEXT &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(swapchainCount);
SERIALISE_MEMBER_ARRAY(pFences, swapchainCount);
}
template <>
void Deserialise(const VkSwapchainPresentFenceInfoEXT &el)
{
DeserialiseNext(el.pNext);
delete[] el.pFences;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSwapchainPresentModesCreateInfoEXT &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentModeCount);
SERIALISE_MEMBER_ARRAY(pPresentModes, presentModeCount);
}
template <>
void Deserialise(const VkSwapchainPresentModesCreateInfoEXT &el)
{
DeserialiseNext(el.pNext);
delete[] el.pPresentModes;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSwapchainPresentModeInfoEXT &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(swapchainCount);
SERIALISE_MEMBER_ARRAY(pPresentModes, swapchainCount);
}
template <>
void Deserialise(const VkSwapchainPresentModeInfoEXT &el)
{
DeserialiseNext(el.pNext);
delete[] el.pPresentModes;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSwapchainPresentScalingCreateInfoEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER_VKFLAGS(VkPresentScalingFlagsEXT, scalingBehavior);
SERIALISE_MEMBER_VKFLAGS(VkPresentGravityFlagsEXT, presentGravityX);
SERIALISE_MEMBER_VKFLAGS(VkPresentGravityFlagsEXT, presentGravityY);
}
template <>
void Deserialise(const VkSwapchainPresentScalingCreateInfoEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPresentInfoKHR &el)
{
@@ -11138,6 +11300,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSurfaceInfo2KHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSynchronization2Features);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentProperties);
@@ -11207,6 +11370,7 @@ INSTANTIATE_SERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR);
INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyGlobalPriorityPropertiesKHR);
INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyProperties2);
INSTANTIATE_SERIALISE_TYPE(VkRefreshCycleDurationGOOGLE);
INSTANTIATE_SERIALISE_TYPE(VkReleaseSwapchainImagesInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkRenderingAttachmentInfo);
INSTANTIATE_SERIALISE_TYPE(VkRenderingFragmentDensityMapAttachmentInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkRenderingFragmentShadingRateAttachmentInfoKHR);
@@ -11251,10 +11415,17 @@ INSTANTIATE_SERIALISE_TYPE(VkSubpassSampleLocationsEXT);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2EXT);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2KHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceFormat2KHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfacePresentModeCompatibilityEXT);
INSTANTIATE_SERIALISE_TYPE(VkSurfacePresentModeEXT);
INSTANTIATE_SERIALISE_TYPE(VkSurfacePresentScalingCapabilitiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceProtectedCapabilitiesKHR);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainCounterCreateInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainCreateInfoKHR);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainDisplayNativeHdrCreateInfoAMD);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainPresentFenceInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainPresentModeInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainPresentModesCreateInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkSwapchainPresentScalingCreateInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkTextureLODGatherFormatPropertiesAMD);
INSTANTIATE_SERIALISE_TYPE(VkTimelineSemaphoreSubmitInfo);
INSTANTIATE_SERIALISE_TYPE(VkValidationCacheCreateInfoEXT);
+29 -5
View File
@@ -3346,6 +3346,18 @@ rdcstr DoStringise(const VkSemaphoreType &el)
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const VkMemoryOverallocationBehaviorAMD &el)
{
BEGIN_ENUM_STRINGISE(VkMemoryOverallocationBehaviorAMD);
{
STRINGISE_ENUM(VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD);
STRINGISE_ENUM(VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD);
STRINGISE_ENUM(VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD);
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const VkSemaphoreWaitFlagBits &el)
{
@@ -3570,13 +3582,25 @@ rdcstr DoStringise(const VkRenderingFlagBits &el)
}
template <>
rdcstr DoStringise(const VkMemoryOverallocationBehaviorAMD &el)
rdcstr DoStringise(const VkPresentGravityFlagBitsEXT &el)
{
BEGIN_BITFIELD_STRINGISE(VkMemoryOverallocationBehaviorAMD);
BEGIN_BITFIELD_STRINGISE(VkPresentGravityFlagBitsEXT);
{
STRINGISE_BITFIELD_BIT(VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD);
STRINGISE_BITFIELD_BIT(VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD);
STRINGISE_BITFIELD_BIT(VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD);
STRINGISE_BITFIELD_BIT(VK_PRESENT_GRAVITY_MIN_BIT_EXT);
STRINGISE_BITFIELD_BIT(VK_PRESENT_GRAVITY_MAX_BIT_EXT);
STRINGISE_BITFIELD_BIT(VK_PRESENT_GRAVITY_CENTERED_BIT_EXT);
}
END_BITFIELD_STRINGISE();
}
template <>
rdcstr DoStringise(const VkPresentScalingFlagBitsEXT &el)
{
BEGIN_BITFIELD_STRINGISE(VkPresentScalingFlagBitsEXT);
{
STRINGISE_BITFIELD_BIT(VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT);
STRINGISE_BITFIELD_BIT(VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT);
STRINGISE_BITFIELD_BIT(VK_PRESENT_SCALING_STRETCH_BIT_EXT);
}
END_BITFIELD_STRINGISE();
}
@@ -182,7 +182,8 @@ static void StripUnwantedExtensions(rdcarray<rdcstr> &Extensions)
// remove WSI-only extensions
if(ext == "VK_GOOGLE_display_timing" || ext == "VK_KHR_display_swapchain" ||
ext == "VK_EXT_display_control" || ext == "VK_KHR_present_id" ||
ext == "VK_KHR_present_wait")
ext == "VK_KHR_present_wait" || ext == "VK_EXT_surface_maintenance1" ||
ext == "VK_EXT_swapchain_maintenance1")
return true;
// remove fullscreen exclusive extension
@@ -3028,6 +3029,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
CHECK_PHYS_EXT_FEATURE(pageableDeviceLocalMemory);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT);
{
CHECK_PHYS_EXT_FEATURE(swapchainMaintenance1);
}
END_PHYS_EXT_CHECK();
}
if(availFeatures.depthClamp)
@@ -788,7 +788,6 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
unwrappedInfo.pSwapchains = unwrappedSwaps.data();
// Don't support any extensions for present info
const VkBaseInStructure *next = (const VkBaseInStructure *)pPresentInfo->pNext;
while(next)
{
@@ -798,7 +797,9 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
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_ID_KHR)
next->sType != VK_STRUCTURE_TYPE_PRESENT_ID_KHR &&
next->sType != VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT &&
next->sType != VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT)
{
RDCWARN("Unsupported pNext structure in pPresentInfo: %s", ToStr(next->sType).c_str());
}
@@ -846,6 +847,16 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
if(ids)
ids->swapchainCount = 1;
VkSwapchainPresentFenceInfoEXT *fences = (VkSwapchainPresentFenceInfoEXT *)FindNextStruct(
&mutableInfo, VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT);
if(fences)
fences->swapchainCount = 1;
VkSwapchainPresentModeInfoEXT *mode = (VkSwapchainPresentModeInfoEXT *)FindNextStruct(
&mutableInfo, VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT);
if(mode)
mode->swapchainCount = 1;
for(uint32_t i = 0; i < pPresentInfo->swapchainCount; i++)
{
HandlePresent(queue, &mutableInfo, unwrappedWaitSems);
@@ -861,6 +872,10 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
ids->pPresentIds++;
if(times)
times->pTimes++;
if(fences)
fences->pFences++;
if(mode)
mode->pPresentModes++;
}
}
@@ -1434,6 +1449,14 @@ VkResult WrappedVulkan::vkWaitForPresentKHR(VkDevice device, VkSwapchainKHR swap
return ObjDisp(device)->WaitForPresentKHR(Unwrap(device), Unwrap(swapchain), presentId, timeout);
}
VkResult WrappedVulkan::vkReleaseSwapchainImagesEXT(VkDevice device,
const VkReleaseSwapchainImagesInfoEXT *pReleaseInfo)
{
VkReleaseSwapchainImagesInfoEXT releaseInfo = *pReleaseInfo;
releaseInfo.swapchain = Unwrap(releaseInfo.swapchain);
return ObjDisp(device)->ReleaseSwapchainImagesEXT(Unwrap(device), &releaseInfo);
}
#ifdef VK_USE_PLATFORM_WIN32_KHR
VkResult WrappedVulkan::vkCreateWin32SurfaceKHR(VkInstance instance,
const VkWin32SurfaceCreateInfoKHR *pCreateInfo,