diff --git a/src/Avalonia.Vulkan/Interop/VulkanInstance.cs b/src/Avalonia.Vulkan/Interop/VulkanInstance.cs index 18542450c5..524c4602cb 100644 --- a/src/Avalonia.Vulkan/Interop/VulkanInstance.cs +++ b/src/Avalonia.Vulkan/Interop/VulkanInstance.cs @@ -67,6 +67,9 @@ internal class VulkanInstance : IVulkanInstance enabledLayers.Add("VK_LAYER_KHRONOS_validation"); } + foreach (var ext in KnownExtensions.SkiaKnownExtensions) + AddExtensionsIfSupported(ext); + AddExtensionsIfSupported(VulkanExternalObjectsFeature.RequiredInstanceExtensions); var khrSurfaceExtensions = platformOptions.RequiredKhrSurfaceExtensions.Append("VK_KHR_surface").ToArray(); diff --git a/src/Avalonia.Vulkan/KnownExtensions.cs b/src/Avalonia.Vulkan/KnownExtensions.cs new file mode 100644 index 0000000000..d35b444b7e --- /dev/null +++ b/src/Avalonia.Vulkan/KnownExtensions.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; + +namespace Avalonia.Vulkan; + +static class KnownExtensions +{ + // https://github.com/google/skia/blob/c381e69aac29ec1f64dee6be2872aced3ad05d59/tools/gpu/vk/VkTestUtils.cpp#L197 + public static List SkiaKnownExtensions2 = new(); + public static List SkiaKnownExtensions = new() + { + "VK_ARM_rasterization_order_attachment_access", + "VK_EXT_blend_operation_advanced", + "VK_EXT_conservative_rasterization", + "VK_EXT_device_fault", + "VK_EXT_extended_dynamic_state", + "VK_EXT_extended_dynamic_state2", + "VK_EXT_graphics_pipeline_library", + "VK_EXT_image_drm_format_modifier", + "VK_EXT_queue_family_foreign", + "VK_EXT_pipeline_creation_cache_control", + "VK_EXT_rasterization_order_attachment_access", + "VK_EXT_rgba10x6_formats", + "VK_EXT_vertex_input_dynamic_state", + "VK_KHR_bind_memory2", + "VK_KHR_copy_commands2", + "VK_KHR_dedicated_allocation", + "VK_KHR_driver_properties", + "VK_KHR_external_memory_capabilities", + "VK_KHR_external_memory", + "VK_KHR_format_feature_flags2", + "VK_KHR_get_memory_requirements2", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_image_format_list", + "VK_KHR_maintenance1", + "VK_KHR_maintenance2", + "VK_KHR_maintenance3", + "VK_KHR_pipeline_library", + "VK_KHR_sampler_ycbcr_conversion", + }; +} \ No newline at end of file