diff options
author | Mary <mary@mary.zone> | 2023-05-08 13:05:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-08 13:05:37 +0200 |
commit | a8950d6ac4c4d4e8b3884f799566603db2d9c406 (patch) | |
tree | aa297c8f71c17a7ce7016725566a8a1b683fb2db /src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | |
parent | 162798b026a860a4fa51bd94dabb15f8f00e5a2b (diff) |
vulkan: Pass Vk instance to VulkanRenderer (#4859)1.1.772
This will allow possible multiple driver selection without any need of
LD preload. (useful when testing custom version of mesa for example)
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index 06fec4f1..e4ce4904 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -89,11 +89,12 @@ namespace Ryujinx.Graphics.Vulkan public event EventHandler<ScreenCaptureImageInfo> ScreenCaptured; - public VulkanRenderer(Func<Instance, Vk, SurfaceKHR> surfaceFunc, Func<string[]> requiredExtensionsFunc, string preferredGpuId) + public VulkanRenderer(Vk api, Func<Instance, Vk, SurfaceKHR> surfaceFunc, Func<string[]> requiredExtensionsFunc, string preferredGpuId) { _getSurface = surfaceFunc; _getRequiredExtensions = requiredExtensionsFunc; _preferredGpuId = preferredGpuId; + Api = api; Shaders = new HashSet<ShaderCollection>(); Textures = new HashSet<ITexture>(); Samplers = new HashSet<SamplerHolder>(); @@ -345,31 +346,27 @@ namespace Ryujinx.Graphics.Vulkan private unsafe void SetupContext(GraphicsDebugLevel logLevel) { - var api = Vk.GetApi(); - - Api = api; - - _instance = VulkanInitialization.CreateInstance(api, logLevel, _getRequiredExtensions()); - _debugMessenger = new VulkanDebugMessenger(api, _instance.Instance, logLevel); + _instance = VulkanInitialization.CreateInstance(Api, logLevel, _getRequiredExtensions()); + _debugMessenger = new VulkanDebugMessenger(Api, _instance.Instance, logLevel); - if (api.TryGetInstanceExtension(_instance.Instance, out KhrSurface surfaceApi)) + if (Api.TryGetInstanceExtension(_instance.Instance, out KhrSurface surfaceApi)) { SurfaceApi = surfaceApi; } - _surface = _getSurface(_instance.Instance, api); - _physicalDevice = VulkanInitialization.FindSuitablePhysicalDevice(api, _instance, _surface, _preferredGpuId); + _surface = _getSurface(_instance.Instance, Api); + _physicalDevice = VulkanInitialization.FindSuitablePhysicalDevice(Api, _instance, _surface, _preferredGpuId); - var queueFamilyIndex = VulkanInitialization.FindSuitableQueueFamily(api, _physicalDevice, _surface, out uint maxQueueCount); + var queueFamilyIndex = VulkanInitialization.FindSuitableQueueFamily(Api, _physicalDevice, _surface, out uint maxQueueCount); - _device = VulkanInitialization.CreateDevice(api, _physicalDevice, queueFamilyIndex, maxQueueCount); + _device = VulkanInitialization.CreateDevice(Api, _physicalDevice, queueFamilyIndex, maxQueueCount); - if (api.TryGetDeviceExtension(_instance.Instance, _device, out KhrSwapchain swapchainApi)) + if (Api.TryGetDeviceExtension(_instance.Instance, _device, out KhrSwapchain swapchainApi)) { SwapchainApi = swapchainApi; } - api.GetDeviceQueue(_device, queueFamilyIndex, 0, out var queue); + Api.GetDeviceQueue(_device, queueFamilyIndex, 0, out var queue); Queue = queue; QueueLock = new object(); @@ -603,11 +600,11 @@ namespace Ryujinx.Graphics.Vulkan return new HardwareInfo(GpuVendor, GpuRenderer); } - public static DeviceInfo[] GetPhysicalDevices() + public static DeviceInfo[] GetPhysicalDevices(Vk api) { try { - return VulkanInitialization.GetSuitablePhysicalDevices(Vk.GetApi()); + return VulkanInitialization.GetSuitablePhysicalDevices(api); } catch (Exception) { |