MVKInitialization.cs 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. using Silk.NET.Vulkan;
  2. using System;
  3. using System.Runtime.Versioning;
  4. using System.Runtime.InteropServices;
  5. namespace Ryujinx.Graphics.Vulkan.MoltenVK
  6. {
  7. [SupportedOSPlatform("macos")]
  8. public static partial class MVKInitialization
  9. {
  10. [LibraryImport("libMoltenVK.dylib")]
  11. private static partial Result vkGetMoltenVKConfigurationMVK(IntPtr unusedInstance, out MVKConfiguration config, in IntPtr configSize);
  12. [LibraryImport("libMoltenVK.dylib")]
  13. private static partial Result vkSetMoltenVKConfigurationMVK(IntPtr unusedInstance, in MVKConfiguration config, in IntPtr configSize);
  14. public static void Initialize()
  15. {
  16. var configSize = (IntPtr)Marshal.SizeOf<MVKConfiguration>();
  17. vkGetMoltenVKConfigurationMVK(IntPtr.Zero, out MVKConfiguration config, configSize);
  18. config.UseMetalArgumentBuffers = true;
  19. config.SemaphoreSupportStyle = MVKVkSemaphoreSupportStyle.MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE_SINGLE_QUEUE;
  20. config.SynchronousQueueSubmits = false;
  21. vkSetMoltenVKConfigurationMVK(IntPtr.Zero, config, configSize);
  22. }
  23. }
  24. }