From f3092b7df581804105b6d57530985a70c9f914d1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 14 Jan 2019 15:56:33 +0000 Subject: [PATCH] Add support for new KHR vulkan extensions * VK_KHR_depth_stencil_resolve * VK_KHR_shader_float16_int8 * VK_KHR_shader_float_controls * VK_KHR_swapchain_mutable_format --- renderdoc/driver/vulkan/vk_common.h | 8 ++ renderdoc/driver/vulkan/vk_core.cpp | 12 ++ renderdoc/driver/vulkan/vk_serialise.cpp | 112 ++++++++++++++++-- renderdoc/driver/vulkan/vk_stringise.cpp | 14 +++ .../driver/vulkan/wrappers/vk_wsi_funcs.cpp | 7 +- 5 files changed, 142 insertions(+), 11 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 2026fdcd2..6d29e914f 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -675,6 +675,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevice8BitStorageFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceASTCDecodeFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConditionalRenderingFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthStencilResolvePropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDriverPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceExternalBufferInfo); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceExternalFenceInfo); @@ -700,6 +701,8 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderCorePropertiesAMD); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDrawParameterFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderImageFootprintFeaturesNV); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFloat16Int8FeaturesKHR); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFloatControlsPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSparseImageFormatInfo2); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSurfaceInfo2KHR); @@ -751,6 +754,7 @@ DECLARE_REFLECTION_STRUCT(VkSubmitInfo); DECLARE_REFLECTION_STRUCT(VkSubpassBeginInfoKHR); DECLARE_REFLECTION_STRUCT(VkSubpassDependency2KHR); DECLARE_REFLECTION_STRUCT(VkSubpassDescription2KHR); +DECLARE_REFLECTION_STRUCT(VkSubpassDescriptionDepthStencilResolveKHR); DECLARE_REFLECTION_STRUCT(VkSubpassEndInfoKHR); DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2EXT); DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2KHR); @@ -871,6 +875,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevice8BitStorageFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolvePropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDriverPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceExternalBufferInfo); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceExternalFenceInfo); @@ -896,6 +901,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDrawParameterFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderImageFootprintFeaturesNV); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFloat16Int8FeaturesKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFloatControlsPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSparseImageFormatInfo2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSurfaceInfo2KHR); @@ -947,6 +954,7 @@ DECLARE_DESERIALISE_TYPE(VkSubmitInfo); DECLARE_DESERIALISE_TYPE(VkSubpassBeginInfoKHR); DECLARE_DESERIALISE_TYPE(VkSubpassDependency2KHR); DECLARE_DESERIALISE_TYPE(VkSubpassDescription2KHR); +DECLARE_DESERIALISE_TYPE(VkSubpassDescriptionDepthStencilResolveKHR); DECLARE_DESERIALISE_TYPE(VkSubpassEndInfoKHR); DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2EXT); DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2KHR); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index ccaee56c1..ec5832b28 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -740,6 +740,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION, }, + { + VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION, + }, { VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION, @@ -862,6 +865,12 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, }, + { + VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, + }, + { + VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION, + }, { VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION, }, @@ -875,6 +884,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_KHR_SWAPCHAIN_EXTENSION_NAME, VK_KHR_SWAPCHAIN_SPEC_VERSION, }, + { + VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION, + }, { VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 7290bebb9..f7c096e99 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -517,6 +517,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, VkMemoryDedicatedRequirements) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, VkMemoryDedicatedAllocateInfo) \ \ + /* VK_KHR_depth_stencil_resolve */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, \ + VkPhysicalDeviceDepthStencilResolvePropertiesKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR, \ + VkSubpassDescriptionDepthStencilResolveKHR) \ + \ /* VK_KHR_descriptor_update_template */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, \ VkDescriptorUpdateTemplateCreateInfo) \ @@ -673,6 +679,14 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, \ VkPhysicalDeviceShaderAtomicInt64FeaturesKHR) \ \ + /* VK_KHR_shader_float16_int8 */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, \ + VkPhysicalDeviceFloat16Int8FeaturesKHR) \ + \ + /* VK_KHR_shader_float_controls */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR, \ + VkPhysicalDeviceFloatControlsPropertiesKHR) \ + \ /* VK_KHR_shared_presentable_image */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR, \ VkSharedPresentSurfaceCapabilitiesKHR) \ @@ -812,16 +826,6 @@ SERIALISE_VK_HANDLES(); /* VK_GOOGLE_display_timing */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE) \ \ - /* VK_KHR_depth_stencil_resolve */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR) \ - \ - /* VK_KHR_shader_float16_int8 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR) \ - \ - /* VK_KHR_shader_float_controls */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR) \ - \ /* VK_NV_clip_space_w_scaling */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV) \ \ @@ -3391,6 +3395,43 @@ void Deserialise(const VkPhysicalDeviceConservativeRasterizationPropertiesEXT &e DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDepthStencilResolvePropertiesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(supportedDepthResolveModes); + SERIALISE_MEMBER(supportedStencilResolveModes); + SERIALISE_MEMBER(independentResolveNone); + SERIALISE_MEMBER(independentResolve); +} + +template <> +void Deserialise(const VkPhysicalDeviceDepthStencilResolvePropertiesKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkSubpassDescriptionDepthStencilResolveKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(depthResolveMode); + SERIALISE_MEMBER(stencilResolveMode); + SERIALISE_MEMBER_OPT(pDepthStencilResolveAttachment); +} + +template <> +void Deserialise(const VkSubpassDescriptionDepthStencilResolveKHR &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPipelineRasterizationConservativeStateCreateInfoEXT &el) { @@ -5034,6 +5075,55 @@ void Deserialise(const VkPhysicalDeviceShaderAtomicInt64FeaturesKHR &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceFloat16Int8FeaturesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(shaderFloat16); + SERIALISE_MEMBER(shaderInt8); +} + +template <> +void Deserialise(const VkPhysicalDeviceFloat16Int8FeaturesKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceFloatControlsPropertiesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(separateDenormSettings); + SERIALISE_MEMBER(separateRoundingModeSettings); + SERIALISE_MEMBER(shaderSignedZeroInfNanPreserveFloat16); + SERIALISE_MEMBER(shaderSignedZeroInfNanPreserveFloat32); + SERIALISE_MEMBER(shaderSignedZeroInfNanPreserveFloat64); + SERIALISE_MEMBER(shaderDenormPreserveFloat16); + SERIALISE_MEMBER(shaderDenormPreserveFloat32); + SERIALISE_MEMBER(shaderDenormPreserveFloat64); + SERIALISE_MEMBER(shaderDenormFlushToZeroFloat16); + SERIALISE_MEMBER(shaderDenormFlushToZeroFloat32); + SERIALISE_MEMBER(shaderDenormFlushToZeroFloat64); + SERIALISE_MEMBER(shaderRoundingModeRTEFloat16); + SERIALISE_MEMBER(shaderRoundingModeRTEFloat32); + SERIALISE_MEMBER(shaderRoundingModeRTEFloat64); + SERIALISE_MEMBER(shaderRoundingModeRTZFloat16); + SERIALISE_MEMBER(shaderRoundingModeRTZFloat32); + SERIALISE_MEMBER(shaderRoundingModeRTZFloat64); +} + +template <> +void Deserialise(const VkPhysicalDeviceFloatControlsPropertiesKHR &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkSamplerYcbcrConversionInfo &el) { @@ -5876,6 +5966,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice16BitStorageFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice8BitStorageFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolvePropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDriverPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceExternalBufferInfo); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceExternalFenceInfo); @@ -5952,6 +6043,7 @@ INSTANTIATE_SERIALISE_TYPE(VkSubmitInfo); INSTANTIATE_SERIALISE_TYPE(VkSubpassBeginInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkSubpassDependency2KHR); INSTANTIATE_SERIALISE_TYPE(VkSubpassDescription2KHR); +INSTANTIATE_SERIALISE_TYPE(VkSubpassDescriptionDepthStencilResolveKHR); INSTANTIATE_SERIALISE_TYPE(VkSubpassEndInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2EXT); INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2KHR); diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index 4eaf12b27..6e934140c 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -518,6 +518,20 @@ std::string DoStringise(const VkAttachmentDescriptionFlagBits &el) END_BITFIELD_STRINGISE(); } +template <> +std::string DoStringise(const VkResolveModeFlagBitsKHR &el) +{ + BEGIN_BITFIELD_STRINGISE(VkResolveModeFlagBitsKHR); + { + STRINGISE_BITFIELD_VALUE(VK_RESOLVE_MODE_NONE_KHR); + STRINGISE_BITFIELD_BIT(VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR); + STRINGISE_BITFIELD_BIT(VK_RESOLVE_MODE_AVERAGE_BIT_KHR); + STRINGISE_BITFIELD_BIT(VK_RESOLVE_MODE_MIN_BIT_KHR); + STRINGISE_BITFIELD_BIT(VK_RESOLVE_MODE_MAX_BIT_KHR); + } + END_BITFIELD_STRINGISE(); +} + template <> std::string DoStringise(const VkSampleCountFlagBits &el) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 20c37d956..7d23190c3 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -327,10 +327,15 @@ bool WrappedVulkan::Serialise_vkCreateSwapchainKHR(SerialiserType &ser, VkDevice swapinfo.images.resize(NumImages); + VkImageCreateFlags imageFlags = 0; + + if(CreateInfo.flags & VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR) + imageFlags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; + const VkImageCreateInfo imInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, NULL, - 0, + imageFlags, VK_IMAGE_TYPE_2D, CreateInfo.imageFormat, {CreateInfo.imageExtent.width, CreateInfo.imageExtent.height, 1},