mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-08-18 22:58:43 +02:00
* Add MVK basics. * Use appropriate output attribute types * 4kb vertex alignment, bunch of fixes * Add reduced shader precision mode for mvk. * Disable ASTC on MVK for now * Only request robustnes2 when it is available. * It's just the one feature actually * Add triangle fan conversion * Allow NullDescriptor on MVK for some reason. * Force safe blit on MoltenVK * Use ASTC only when formats are all available. * Disable multilevel 3d texture views * Filter duplicate render targets (on backend) * Add Automatic MoltenVK Configuration * Do not create color attachment views with formats that are not RT compatible * Make sure that the host format matches the vertex shader input types for invalid/unknown guest formats * FIx rebase for Vertex Attrib State * Fix 4b alignment for vertex * Use asynchronous queue submits for MVK * Ensure color clear shader has correct output type * Update MoltenVK config * Always use MoltenVK workarounds on MacOS * Make MVK supersede all vendors * Fix rebase * Various fixes on rebase * Get portability flags from extension * Fix some minor rebasing issues * Style change * Use LibraryImport for MVKConfiguration * Rename MoltenVK vendor to Apple Intel and AMD GPUs on moltenvk report with the those vendors - only apple silicon reports with vendor 0x106B. * Fix features2 rebase conflict * Rename fragment output type * Add missing check for fragment output types Might have caused the crash in MK8 * Only do fragment output specialization on MoltenVK * Avoid copy when passing capabilities * Self feedback * Address feedback Co-authored-by: gdk <gab.dark.100@gmail.com> Co-authored-by: nastys <nastys@users.noreply.github.com>
105 lines
3.1 KiB
C#
105 lines
3.1 KiB
C#
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;
|
|
}
|
|
}
|