aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
diff options
context:
space:
mode:
authorMary <mary@mary.zone>2023-05-08 13:05:37 +0200
committerGitHub <noreply@github.com>2023-05-08 13:05:37 +0200
commita8950d6ac4c4d4e8b3884f799566603db2d9c406 (patch)
treeaa297c8f71c17a7ce7016725566a8a1b683fb2db /src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
parent162798b026a860a4fa51bd94dabb15f8f00e5a2b (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.cs29
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)
{