From 491fb3ccfbb488a62995659f028aba751ac3e1fe Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Fri, 22 Nov 2024 19:12:17 -0600 Subject: [PATCH] Vulkan: Enable pageable device-local memory --- .../VulkanInitialization.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs index 1f7433515..6493042c1 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs @@ -29,6 +29,7 @@ namespace Ryujinx.Graphics.Vulkan KhrDrawIndirectCount.ExtensionName, KhrPushDescriptor.ExtensionName, ExtExternalMemoryHost.ExtensionName, + ExtPageableDeviceLocalMemory.ExtensionName, "VK_EXT_blend_operation_advanced", "VK_EXT_custom_border_color", "VK_EXT_descriptor_indexing", // Enabling this works around an issue with disposed buffer bindings on RADV. @@ -461,6 +462,14 @@ namespace Ryujinx.Graphics.Vulkan features2.PNext = &supportedFeaturesShaderInt8; } + PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT supportedPageableDeviceLocalMemoryFeatures = new() + { + SType = StructureType.PhysicalDevicePageableDeviceLocalMemoryFeaturesExt, + PNext = features2.PNext, + }; + + features2.PNext = &supportedPageableDeviceLocalMemoryFeatures; + PhysicalDeviceVulkan12Features supportedPhysicalDeviceVulkan12Features = new() { SType = StructureType.PhysicalDeviceVulkan12Features, @@ -633,6 +642,15 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresDynamicAttachmentFeedbackLoop; } + PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT featuresPageableDeviceLocalMemory = new() + { + SType = StructureType.PhysicalDevicePageableDeviceLocalMemoryFeaturesExt, + PNext = pExtendedFeatures, + PageableDeviceLocalMemory = supportedPageableDeviceLocalMemoryFeatures.PageableDeviceLocalMemory, + }; + + pExtendedFeatures = &featuresPageableDeviceLocalMemory; + var enabledExtensions = _requiredExtensions.Union(_desirableExtensions.Intersect(physicalDevice.DeviceExtensions)); if (VendorUtils.FromId(physicalDevice.PhysicalDeviceProperties.VendorID) == Vendor.Qualcomm &&