aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/MoltenVK
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /src/Ryujinx.Graphics.Vulkan/MoltenVK
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/MoltenVK')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKConfiguration.cs104
-rw-r--r--src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs31
2 files changed, 135 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKConfiguration.cs b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKConfiguration.cs
new file mode 100644
index 00000000..4fbae86e
--- /dev/null
+++ b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKConfiguration.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Graphics.Vulkan.MoltenVK
+{
+ enum MVKConfigLogLevel : int
+ {
+ None = 0,
+ Error = 1,
+ Warning = 2,
+ Info = 3,
+ Debug = 4
+ }
+
+ enum MVKConfigTraceVulkanCalls : int
+ {
+ None = 0,
+ Enter = 1,
+ EnterExit = 2,
+ Duration = 3
+ }
+
+ enum MVKConfigAutoGPUCaptureScope : int
+ {
+ None = 0,
+ Device = 1,
+ Frame = 2
+ }
+
+ [Flags]
+ enum MVKConfigAdvertiseExtensions : int
+ {
+ All = 0x00000001,
+ MoltenVK = 0x00000002,
+ WSI = 0x00000004,
+ Portability = 0x00000008
+ }
+
+ enum MVKVkSemaphoreSupportStyle : int
+ {
+ MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_SINGLE_QUEUE = 0,
+ MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_METAL_EVENTS_WHERE_SAFE = 1,
+ MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_METAL_EVENTS = 2,
+ MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_CALLBACK = 3,
+ MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_MAX_ENUM = 0x7FFFFFFF
+ }
+
+ readonly struct Bool32
+ {
+ uint Value { get; }
+
+ public Bool32(uint value)
+ {
+ Value = value;
+ }
+
+ public Bool32(bool value)
+ {
+ Value = value ? 1u : 0u;
+ }
+
+ public static implicit operator bool(Bool32 val) => val.Value == 1;
+ public static implicit operator Bool32(bool val) => new Bool32(val);
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ struct MVKConfiguration
+ {
+ public Bool32 DebugMode;
+ public Bool32 ShaderConversionFlipVertexY;
+ public Bool32 SynchronousQueueSubmits;
+ public Bool32 PrefillMetalCommandBuffers;
+ public uint MaxActiveMetalCommandBuffersPerQueue;
+ public Bool32 SupportLargeQueryPools;
+ public Bool32 PresentWithCommandBuffer;
+ public Bool32 SwapchainMagFilterUseNearest;
+ public ulong MetalCompileTimeout;
+ public Bool32 PerformanceTracking;
+ public uint PerformanceLoggingFrameCount;
+ public Bool32 DisplayWatermark;
+ public Bool32 SpecializedQueueFamilies;
+ public Bool32 SwitchSystemGPU;
+ public Bool32 FullImageViewSwizzle;
+ public uint DefaultGPUCaptureScopeQueueFamilyIndex;
+ public uint DefaultGPUCaptureScopeQueueIndex;
+ public Bool32 FastMathEnabled;
+ public MVKConfigLogLevel LogLevel;
+ public MVKConfigTraceVulkanCalls TraceVulkanCalls;
+ public Bool32 ForceLowPowerGPU;
+ public Bool32 SemaphoreUseMTLFence;
+ public MVKVkSemaphoreSupportStyle SemaphoreSupportStyle;
+ public MVKConfigAutoGPUCaptureScope AutoGPUCaptureScope;
+ public IntPtr AutoGPUCaptureOutputFilepath;
+ public Bool32 Texture1DAs2D;
+ public Bool32 PreallocateDescriptors;
+ public Bool32 UseCommandPooling;
+ public Bool32 UseMTLHeap;
+ public Bool32 LogActivityPerformanceInline;
+ public uint ApiVersionToAdvertise;
+ public MVKConfigAdvertiseExtensions AdvertiseExtensions;
+ public Bool32 ResumeLostDevice;
+ public Bool32 UseMetalArgumentBuffers;
+ }
+}
diff --git a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs
new file mode 100644
index 00000000..5910d1aa
--- /dev/null
+++ b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs
@@ -0,0 +1,31 @@
+using Silk.NET.Vulkan;
+using System;
+using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
+
+namespace Ryujinx.Graphics.Vulkan.MoltenVK
+{
+ [SupportedOSPlatform("macos")]
+ public static partial class MVKInitialization
+ {
+ [LibraryImport("libMoltenVK.dylib")]
+ private static partial Result vkGetMoltenVKConfigurationMVK(IntPtr unusedInstance, out MVKConfiguration config, in IntPtr configSize);
+
+ [LibraryImport("libMoltenVK.dylib")]
+ private static partial Result vkSetMoltenVKConfigurationMVK(IntPtr unusedInstance, in MVKConfiguration config, in IntPtr configSize);
+
+ public static void Initialize()
+ {
+ var configSize = (IntPtr)Marshal.SizeOf<MVKConfiguration>();
+
+ vkGetMoltenVKConfigurationMVK(IntPtr.Zero, out MVKConfiguration config, configSize);
+
+ config.UseMetalArgumentBuffers = true;
+
+ config.SemaphoreSupportStyle = MVKVkSemaphoreSupportStyle.MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_SINGLE_QUEUE;
+ config.SynchronousQueueSubmits = false;
+
+ vkSetMoltenVKConfigurationMVK(IntPtr.Zero, config, configSize);
+ }
+ }
+} \ No newline at end of file