Parcourir la source

misc: chore: Use explicit types in Metal project

Evan Husted il y a 1 an
Parent
commit
76ec047eb7
28 fichiers modifiés avec 315 ajouts et 313 suppressions
  1. 1 1
      src/Ryujinx.Graphics.Host1x/Host1xDevice.cs
  2. 1 1
      src/Ryujinx.Graphics.Metal/BackgroundResources.cs
  3. 9 9
      src/Ryujinx.Graphics.Metal/BufferHolder.cs
  4. 12 12
      src/Ryujinx.Graphics.Metal/BufferManager.cs
  5. 4 4
      src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs
  6. 11 11
      src/Ryujinx.Graphics.Metal/CommandBufferPool.cs
  7. 3 3
      src/Ryujinx.Graphics.Metal/DepthStencilCache.cs
  8. 2 2
      src/Ryujinx.Graphics.Metal/EncoderState.cs
  9. 85 84
      src/Ryujinx.Graphics.Metal/EncoderStateManager.cs
  10. 1 1
      src/Ryujinx.Graphics.Metal/FormatTable.cs
  11. 11 11
      src/Ryujinx.Graphics.Metal/HardwareInfo.cs
  12. 7 7
      src/Ryujinx.Graphics.Metal/HashTableSlim.cs
  13. 52 52
      src/Ryujinx.Graphics.Metal/HelperShader.cs
  14. 1 1
      src/Ryujinx.Graphics.Metal/IndexBufferState.cs
  15. 4 4
      src/Ryujinx.Graphics.Metal/MetalRenderer.cs
  16. 4 4
      src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs
  17. 13 12
      src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs
  18. 29 29
      src/Ryujinx.Graphics.Metal/Pipeline.cs
  19. 5 5
      src/Ryujinx.Graphics.Metal/Program.cs
  20. 2 2
      src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs
  21. 2 2
      src/Ryujinx.Graphics.Metal/SamplerHolder.cs
  22. 7 7
      src/Ryujinx.Graphics.Metal/StagingBuffer.cs
  23. 13 13
      src/Ryujinx.Graphics.Metal/State/PipelineState.cs
  24. 1 1
      src/Ryujinx.Graphics.Metal/State/PipelineUid.cs
  25. 2 2
      src/Ryujinx.Graphics.Metal/StateCache.cs
  26. 30 30
      src/Ryujinx.Graphics.Metal/Texture.cs
  27. 1 1
      src/Ryujinx.Graphics.Metal/VertexBufferState.cs
  28. 2 2
      src/Ryujinx.Graphics.Metal/Window.cs

+ 1 - 1
src/Ryujinx.Graphics.Host1x/Host1xDevice.cs

@@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Host1x
 
         public void RegisterDevice(ClassId classId, IDeviceState device)
         {
-            ThiDevice thi = new ThiDevice(classId, device ?? throw new ArgumentNullException(nameof(device)), _syncptIncrMgr);
+            ThiDevice thi = new(classId, device ?? throw new ArgumentNullException(nameof(device)), _syncptIncrMgr);
             _devices.RegisterDevice(classId, thi);
         }
 

+ 1 - 1
src/Ryujinx.Graphics.Metal/BackgroundResources.cs

@@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Metal
         {
             lock (_resources)
             {
-                foreach (var resource in _resources.Values)
+                foreach (BackgroundResource resource in _resources.Values)
                 {
                     resource.Dispose();
                 }

+ 9 - 9
src/Ryujinx.Graphics.Metal/BufferHolder.cs

@@ -103,7 +103,7 @@ namespace Ryujinx.Graphics.Metal
 
             if (_flushFence != null)
             {
-                var fence = _flushFence;
+                FenceHolder fence = _flushFence;
                 Interlocked.Increment(ref _flushWaiting);
 
                 // Don't wait in the lock.
@@ -219,8 +219,8 @@ namespace Ryujinx.Graphics.Metal
                     BufferHolder srcHolder = _renderer.BufferManager.Create(dataSize);
                     srcHolder.SetDataUnchecked(0, data);
 
-                    var srcBuffer = srcHolder.GetBuffer();
-                    var dstBuffer = this.GetBuffer(true);
+                    Auto<DisposableBuffer> srcBuffer = srcHolder.GetBuffer();
+                    Auto<DisposableBuffer> dstBuffer = this.GetBuffer(true);
 
                     Copy(cbs.Value, srcBuffer, dstBuffer, 0, offset, dataSize);
 
@@ -262,8 +262,8 @@ namespace Ryujinx.Graphics.Metal
             int size,
             bool registerSrcUsage = true)
         {
-            var srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value;
-            var dstbuffer = dst.Get(cbs, dstOffset, size, true).Value;
+            MTLBuffer srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value;
+            MTLBuffer dstbuffer = dst.Get(cbs, dstOffset, size, true).Value;
 
             cbs.Encoders.EnsureBlitEncoder().CopyFromBuffer(
                 srcBuffer,
@@ -302,9 +302,9 @@ namespace Ryujinx.Graphics.Metal
                 return null;
             }
 
-            var key = new I8ToI16CacheKey(_renderer);
+            I8ToI16CacheKey key = new I8ToI16CacheKey(_renderer);
 
-            if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder))
+            if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder))
             {
                 holder = _renderer.BufferManager.Create((size * 2 + 3) & ~3);
 
@@ -325,9 +325,9 @@ namespace Ryujinx.Graphics.Metal
                 return null;
             }
 
-            var key = new TopologyConversionCacheKey(_renderer, pattern, indexSize);
+            TopologyConversionCacheKey key = new TopologyConversionCacheKey(_renderer, pattern, indexSize);
 
-            if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder))
+            if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder))
             {
                 // The destination index size is always I32.
 

+ 12 - 12
src/Ryujinx.Graphics.Metal/BufferManager.cs

@@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Metal
         public BufferHandle Create(nint pointer, int size)
         {
             // TODO: This is the wrong Metal method, we need no-copy which SharpMetal isn't giving us.
-            var buffer = _device.NewBuffer(pointer, (ulong)size, MTLResourceOptions.ResourceStorageModeShared);
+            MTLBuffer buffer = _device.NewBuffer(pointer, (ulong)size, MTLResourceOptions.ResourceStorageModeShared);
 
             if (buffer == IntPtr.Zero)
             {
@@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Metal
                 return BufferHandle.Null;
             }
 
-            var holder = new BufferHolder(_renderer, _pipeline, buffer, size);
+            BufferHolder holder = new BufferHolder(_renderer, _pipeline, buffer, size);
 
             BufferCount++;
 
@@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Metal
 
         public BufferHolder Create(int size)
         {
-            var buffer = _device.NewBuffer((ulong)size, MTLResourceOptions.ResourceStorageModeShared);
+            MTLBuffer buffer = _device.NewBuffer((ulong)size, MTLResourceOptions.ResourceStorageModeShared);
 
             if (buffer != IntPtr.Zero)
             {
@@ -137,7 +137,7 @@ namespace Ryujinx.Graphics.Metal
 
         public Auto<DisposableBuffer> GetBuffer(BufferHandle handle, bool isWrite, out int size)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 size = holder.Size;
                 return holder.GetBuffer(isWrite);
@@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Metal
 
         public Auto<DisposableBuffer> GetBuffer(BufferHandle handle, int offset, int size, bool isWrite)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 return holder.GetBuffer(offset, size, isWrite);
             }
@@ -159,7 +159,7 @@ namespace Ryujinx.Graphics.Metal
 
         public Auto<DisposableBuffer> GetBuffer(BufferHandle handle, bool isWrite)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 return holder.GetBuffer(isWrite);
             }
@@ -169,7 +169,7 @@ namespace Ryujinx.Graphics.Metal
 
         public Auto<DisposableBuffer> GetBufferI8ToI16(CommandBufferScoped cbs, BufferHandle handle, int offset, int size)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 return holder.GetBufferI8ToI16(cbs, offset, size);
             }
@@ -179,7 +179,7 @@ namespace Ryujinx.Graphics.Metal
 
         public Auto<DisposableBuffer> GetBufferTopologyConversion(CommandBufferScoped cbs, BufferHandle handle, int offset, int size, IndexBufferPattern pattern, int indexSize)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 return holder.GetBufferTopologyConversion(cbs, offset, size, pattern, indexSize);
             }
@@ -189,7 +189,7 @@ namespace Ryujinx.Graphics.Metal
 
         public PinnedSpan<byte> GetData(BufferHandle handle, int offset, int size)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 return holder.GetData(offset, size);
             }
@@ -204,7 +204,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void SetData(BufferHandle handle, int offset, ReadOnlySpan<byte> data, CommandBufferScoped? cbs)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 holder.SetData(offset, data, cbs);
             }
@@ -212,7 +212,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void Delete(BufferHandle handle)
         {
-            if (TryGetBuffer(handle, out var holder))
+            if (TryGetBuffer(handle, out BufferHolder holder))
             {
                 holder.Dispose();
                 _buffers.Remove((int)Unsafe.As<BufferHandle, ulong>(ref handle));
@@ -228,7 +228,7 @@ namespace Ryujinx.Graphics.Metal
         {
             StagingBuffer.Dispose();
 
-            foreach (var buffer in _buffers)
+            foreach (BufferHolder buffer in _buffers)
             {
                 buffer.Dispose();
             }

+ 4 - 4
src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs

@@ -137,7 +137,7 @@ class CommandBufferEncoder
     {
         EndCurrentPass();
 
-        var renderCommandEncoder = _encoderFactory.CreateRenderCommandEncoder();
+        MTLRenderCommandEncoder renderCommandEncoder = _encoderFactory.CreateRenderCommandEncoder();
 
         CurrentEncoder = renderCommandEncoder;
         CurrentEncoderType = EncoderType.Render;
@@ -149,8 +149,8 @@ class CommandBufferEncoder
     {
         EndCurrentPass();
 
-        using var descriptor = new MTLBlitPassDescriptor();
-        var blitCommandEncoder = _commandBuffer.BlitCommandEncoder(descriptor);
+        using MTLBlitPassDescriptor descriptor = new MTLBlitPassDescriptor();
+        MTLBlitCommandEncoder blitCommandEncoder = _commandBuffer.BlitCommandEncoder(descriptor);
 
         CurrentEncoder = blitCommandEncoder;
         CurrentEncoderType = EncoderType.Blit;
@@ -161,7 +161,7 @@ class CommandBufferEncoder
     {
         EndCurrentPass();
 
-        var computeCommandEncoder = _encoderFactory.CreateComputeCommandEncoder();
+        MTLComputeCommandEncoder computeCommandEncoder = _encoderFactory.CreateComputeCommandEncoder();
 
         CurrentEncoder = computeCommandEncoder;
         CurrentEncoderType = EncoderType.Compute;

+ 11 - 11
src/Ryujinx.Graphics.Metal/CommandBufferPool.cs

@@ -101,7 +101,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 for (int i = 0; i < _totalCommandBuffers; i++)
                 {
-                    ref var entry = ref _commandBuffers[i];
+                    ref ReservedCommandBuffer entry = ref _commandBuffers[i];
 
                     if (entry.InConsumption)
                     {
@@ -117,7 +117,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 for (int i = 0; i < _totalCommandBuffers; i++)
                 {
-                    ref var entry = ref _commandBuffers[i];
+                    ref ReservedCommandBuffer entry = ref _commandBuffers[i];
 
                     if (entry.InUse)
                     {
@@ -129,7 +129,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void AddWaitable(int cbIndex, MultiFenceHolder waitable)
         {
-            ref var entry = ref _commandBuffers[cbIndex];
+            ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex];
             if (waitable.AddFence(cbIndex, entry.Fence))
             {
                 entry.Waitables.Add(waitable);
@@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 for (int i = 0; i < _totalCommandBuffers; i++)
                 {
-                    ref var entry = ref _commandBuffers[i];
+                    ref ReservedCommandBuffer entry = ref _commandBuffers[i];
 
                     if (entry.InUse && entry.Fence == fence)
                     {
@@ -172,7 +172,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 int index = _queuedIndexes[_queuedIndexesPtr];
 
-                ref var entry = ref _commandBuffers[index];
+                ref ReservedCommandBuffer entry = ref _commandBuffers[index];
 
                 if (wait || !entry.InConsumption || entry.Fence.IsSignaled())
                 {
@@ -207,7 +207,7 @@ namespace Ryujinx.Graphics.Metal
 
                 for (int i = 0; i < _totalCommandBuffers; i++)
                 {
-                    ref var entry = ref _commandBuffers[cursor];
+                    ref ReservedCommandBuffer entry = ref _commandBuffers[cursor];
 
                     if (!entry.InUse && !entry.InConsumption)
                     {
@@ -234,7 +234,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 int cbIndex = cbs.CommandBufferIndex;
 
-                ref var entry = ref _commandBuffers[cbIndex];
+                ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex];
 
                 Debug.Assert(entry.InUse);
                 Debug.Assert(entry.CommandBuffer.NativePtr == cbs.CommandBuffer.NativePtr);
@@ -243,7 +243,7 @@ namespace Ryujinx.Graphics.Metal
                 entry.SubmissionCount++;
                 _inUseCount--;
 
-                var commandBuffer = entry.CommandBuffer;
+                MTLCommandBuffer commandBuffer = entry.CommandBuffer;
                 commandBuffer.Commit();
 
                 int ptr = (_queuedIndexesPtr + _queuedCount) % _totalCommandBuffers;
@@ -254,7 +254,7 @@ namespace Ryujinx.Graphics.Metal
 
         private void WaitAndDecrementRef(int cbIndex)
         {
-            ref var entry = ref _commandBuffers[cbIndex];
+            ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex];
 
             if (entry.InConsumption)
             {
@@ -262,12 +262,12 @@ namespace Ryujinx.Graphics.Metal
                 entry.InConsumption = false;
             }
 
-            foreach (var dependant in entry.Dependants)
+            foreach (IAuto dependant in entry.Dependants)
             {
                 dependant.DecrementReferenceCount(cbIndex);
             }
 
-            foreach (var waitable in entry.Waitables)
+            foreach (MultiFenceHolder waitable in entry.Waitables)
             {
                 waitable.RemoveFence(cbIndex);
                 waitable.RemoveBufferUses(cbIndex);

+ 3 - 3
src/Ryujinx.Graphics.Metal/DepthStencilCache.cs

@@ -25,7 +25,7 @@ namespace Ryujinx.Graphics.Metal
 
             ref StencilUid frontUid = ref descriptor.FrontFace;
 
-            using var frontFaceStencil = new MTLStencilDescriptor
+            using MTLStencilDescriptor frontFaceStencil = new MTLStencilDescriptor
             {
                 StencilFailureOperation = frontUid.StencilFailureOperation,
                 DepthFailureOperation = frontUid.DepthFailureOperation,
@@ -37,7 +37,7 @@ namespace Ryujinx.Graphics.Metal
 
             ref StencilUid backUid = ref descriptor.BackFace;
 
-            using var backFaceStencil = new MTLStencilDescriptor
+            using MTLStencilDescriptor backFaceStencil = new MTLStencilDescriptor
             {
                 StencilFailureOperation = backUid.StencilFailureOperation,
                 DepthFailureOperation = backUid.DepthFailureOperation,
@@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Metal
                 WriteMask = backUid.WriteMask
             };
 
-            var mtlDescriptor = new MTLDepthStencilDescriptor
+            MTLDepthStencilDescriptor mtlDescriptor = new MTLDepthStencilDescriptor
             {
                 DepthCompareFunction = descriptor.DepthCompareFunction,
                 DepthWriteEnabled = descriptor.DepthWriteEnabled

+ 2 - 2
src/Ryujinx.Graphics.Metal/EncoderState.cs

@@ -165,7 +165,7 @@ namespace Ryujinx.Graphics.Metal
         {
             // Inherit render target related information without causing a render encoder split.
 
-            var oldState = new RenderTargetCopy
+            RenderTargetCopy oldState = new RenderTargetCopy
             {
                 Scissors = other.Scissors,
                 RenderTargets = other.RenderTargets,
@@ -180,7 +180,7 @@ namespace Ryujinx.Graphics.Metal
             Pipeline.Internal.ColorBlendState = other.Pipeline.Internal.ColorBlendState;
             Pipeline.DepthStencilFormat = other.Pipeline.DepthStencilFormat;
 
-            ref var blendStates = ref Pipeline.Internal.ColorBlendState;
+            ref Array8<ColorBlendStateUid> blendStates = ref Pipeline.Internal.ColorBlendState;
 
             // Mask out irrelevant attachments.
             for (int i = 0; i < blendStates.Length; i++)

+ 85 - 84
src/Ryujinx.Graphics.Metal/EncoderStateManager.cs

@@ -1,4 +1,5 @@
 using Ryujinx.Common.Logging;
+using Ryujinx.Common.Memory;
 using Ryujinx.Graphics.GAL;
 using Ryujinx.Graphics.Metal.State;
 using Ryujinx.Graphics.Shader;
@@ -124,21 +125,21 @@ namespace Ryujinx.Graphics.Metal
         public readonly MTLRenderCommandEncoder CreateRenderCommandEncoder()
         {
             // Initialise Pass & State
-            using var renderPassDescriptor = new MTLRenderPassDescriptor();
+            using MTLRenderPassDescriptor renderPassDescriptor = new MTLRenderPassDescriptor();
 
             for (int i = 0; i < Constants.MaxColorAttachments; i++)
             {
                 if (_currentState.RenderTargets[i] is Texture tex)
                 {
-                    var passAttachment = renderPassDescriptor.ColorAttachments.Object((ulong)i);
+                    MTLRenderPassColorAttachmentDescriptor passAttachment = renderPassDescriptor.ColorAttachments.Object((ulong)i);
                     tex.PopulateRenderPassAttachment(passAttachment);
                     passAttachment.LoadAction = _currentState.ClearLoadAction ? MTLLoadAction.Clear : MTLLoadAction.Load;
                     passAttachment.StoreAction = MTLStoreAction.Store;
                 }
             }
 
-            var depthAttachment = renderPassDescriptor.DepthAttachment;
-            var stencilAttachment = renderPassDescriptor.StencilAttachment;
+            MTLRenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.DepthAttachment;
+            MTLRenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.StencilAttachment;
 
             if (_currentState.DepthStencil != null)
             {
@@ -177,15 +178,15 @@ namespace Ryujinx.Graphics.Metal
             }
 
             // Initialise Encoder
-            var renderCommandEncoder = _pipeline.CommandBuffer.RenderCommandEncoder(renderPassDescriptor);
+            MTLRenderCommandEncoder renderCommandEncoder = _pipeline.CommandBuffer.RenderCommandEncoder(renderPassDescriptor);
 
             return renderCommandEncoder;
         }
 
         public readonly MTLComputeCommandEncoder CreateComputeCommandEncoder()
         {
-            using var descriptor = new MTLComputePassDescriptor();
-            var computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor);
+            using MTLComputePassDescriptor descriptor = new MTLComputePassDescriptor();
+            MTLComputeCommandEncoder computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor);
 
             return computeCommandEncoder;
         }
@@ -292,17 +293,17 @@ namespace Ryujinx.Graphics.Metal
                 SetScissors(renderCommandEncoder);
             }
 
-            foreach (var resource in _currentState.RenderEncoderBindings.Resources)
+            foreach (Resource resource in _currentState.RenderEncoderBindings.Resources)
             {
                 renderCommandEncoder.UseResource(resource.MtlResource, resource.ResourceUsage, resource.Stages);
             }
 
-            foreach (var buffer in _currentState.RenderEncoderBindings.VertexBuffers)
+            foreach (BufferResource buffer in _currentState.RenderEncoderBindings.VertexBuffers)
             {
                 renderCommandEncoder.SetVertexBuffer(buffer.Buffer, buffer.Offset, buffer.Binding);
             }
 
-            foreach (var buffer in _currentState.RenderEncoderBindings.FragmentBuffers)
+            foreach (BufferResource buffer in _currentState.RenderEncoderBindings.FragmentBuffers)
             {
                 renderCommandEncoder.SetFragmentBuffer(buffer.Buffer, buffer.Offset, buffer.Binding);
             }
@@ -317,12 +318,12 @@ namespace Ryujinx.Graphics.Metal
                 SetComputePipelineState(computeCommandEncoder);
             }
 
-            foreach (var resource in _currentState.ComputeEncoderBindings.Resources)
+            foreach (Resource resource in _currentState.ComputeEncoderBindings.Resources)
             {
                 computeCommandEncoder.UseResource(resource.MtlResource, resource.ResourceUsage);
             }
 
-            foreach (var buffer in _currentState.ComputeEncoderBindings.Buffers)
+            foreach (BufferResource buffer in _currentState.ComputeEncoderBindings.Buffers)
             {
                 computeCommandEncoder.SetBuffer(buffer.Buffer, buffer.Offset, buffer.Binding);
             }
@@ -350,7 +351,7 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var pipelineState = PipelineState.CreateComputePipeline(_device, _currentState.ComputeProgram);
+            MTLComputePipelineState pipelineState = PipelineState.CreateComputePipeline(_device, _currentState.ComputeProgram);
 
             computeCommandEncoder.SetComputePipelineState(pipelineState);
         }
@@ -418,7 +419,7 @@ namespace Ryujinx.Graphics.Metal
 
         public readonly void UpdateRenderTargetColorMasks(ReadOnlySpan<uint> componentMask)
         {
-            ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState;
+            ref Array8<ColorBlendStateUid> blendState = ref _currentState.Pipeline.Internal.ColorBlendState;
 
             for (int i = 0; i < componentMask.Length; i++)
             {
@@ -427,7 +428,7 @@ namespace Ryujinx.Graphics.Metal
                 bool blue = (componentMask[i] & (0x1 << 2)) != 0;
                 bool alpha = (componentMask[i] & (0x1 << 3)) != 0;
 
-                var mask = MTLColorWriteMask.None;
+                MTLColorWriteMask mask = MTLColorWriteMask.None;
 
                 mask |= red ? MTLColorWriteMask.Red : 0;
                 mask |= green ? MTLColorWriteMask.Green : 0;
@@ -480,7 +481,7 @@ namespace Ryujinx.Graphics.Metal
             // Look for textures that are masked out.
 
             ref PipelineState pipeline = ref _currentState.Pipeline;
-            ref var blendState = ref pipeline.Internal.ColorBlendState;
+            ref Array8<ColorBlendStateUid> blendState = ref pipeline.Internal.ColorBlendState;
 
             pipeline.ColorBlendAttachmentStateCount = (uint)colors.Length;
 
@@ -491,7 +492,7 @@ namespace Ryujinx.Graphics.Metal
                     continue;
                 }
 
-                var mtlMask = blendState[i].WriteMask;
+                MTLColorWriteMask mtlMask = blendState[i].WriteMask;
 
                 for (int j = 0; j < i; j++)
                 {
@@ -501,7 +502,7 @@ namespace Ryujinx.Graphics.Metal
                     {
                         // Prefer the binding with no write mask.
 
-                        var mtlMask2 = blendState[j].WriteMask;
+                        MTLColorWriteMask mtlMask2 = blendState[j].WriteMask;
 
                         if (mtlMask == 0)
                         {
@@ -574,7 +575,7 @@ namespace Ryujinx.Graphics.Metal
 
         public readonly void UpdateBlendDescriptors(int index, BlendDescriptor blend)
         {
-            ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState[index];
+            ref ColorBlendStateUid blendState = ref _currentState.Pipeline.Internal.ColorBlendState[index];
 
             blendState.Enable = blend.Enable;
             blendState.AlphaBlendOperation = blend.AlphaOp.Convert();
@@ -687,7 +688,7 @@ namespace Ryujinx.Graphics.Metal
         {
             for (int i = 0; i < regions.Length; i++)
             {
-                var region = regions[i];
+                Rectangle<int> region = regions[i];
 
                 _currentState.Scissors[i] = new MTLScissorRect
                 {
@@ -717,7 +718,7 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < viewports.Length; i++)
             {
-                var viewport = viewports[i];
+                Viewport viewport = viewports[i];
                 // Y coordinate is inverted
                 _currentState.Viewports[i] = new MTLViewport
                 {
@@ -746,7 +747,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 if (i < vertexBuffers.Length)
                 {
-                    var vertexBuffer = vertexBuffers[i];
+                    VertexBufferDescriptor vertexBuffer = vertexBuffers[i];
 
                     _currentState.VertexBuffers[i] = new VertexBufferState(
                         vertexBuffer.Buffer.Handle,
@@ -771,7 +772,7 @@ namespace Ryujinx.Graphics.Metal
         {
             foreach (BufferAssignment assignment in buffers)
             {
-                var buffer = assignment.Range;
+                BufferRange buffer = assignment.Range;
                 int index = assignment.Binding;
 
                 Auto<DisposableBuffer> mtlBuffer = buffer.Handle == BufferHandle.Null
@@ -788,7 +789,7 @@ namespace Ryujinx.Graphics.Metal
         {
             foreach (BufferAssignment assignment in buffers)
             {
-                var buffer = assignment.Range;
+                BufferRange buffer = assignment.Range;
                 int index = assignment.Binding;
 
                 Auto<DisposableBuffer> mtlBuffer = buffer.Handle == BufferHandle.Null
@@ -805,7 +806,7 @@ namespace Ryujinx.Graphics.Metal
         {
             for (int i = 0; i < buffers.Length; i++)
             {
-                var mtlBuffer = buffers[i];
+                Auto<DisposableBuffer> mtlBuffer = buffers[i];
                 int index = first + i;
 
                 _currentState.StorageBufferRefs[index] = new BufferRef(mtlBuffer);
@@ -816,7 +817,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void UpdateCullMode(bool enable, Face face)
         {
-            var dirtyScissor = (face == Face.FrontAndBack) != _currentState.CullBoth;
+            bool dirtyScissor = (face == Face.FrontAndBack) != _currentState.CullBoth;
 
             _currentState.CullMode = enable ? face.Convert() : MTLCullMode.None;
             _currentState.CullBoth = face == Face.FrontAndBack;
@@ -980,8 +981,8 @@ namespace Ryujinx.Graphics.Metal
 
         private unsafe void SetScissors(MTLRenderCommandEncoder renderCommandEncoder)
         {
-            var isTriangles = (_currentState.Topology == PrimitiveTopology.Triangles) ||
-                              (_currentState.Topology == PrimitiveTopology.TriangleStrip);
+            bool isTriangles = (_currentState.Topology == PrimitiveTopology.Triangles) ||
+                               (_currentState.Topology == PrimitiveTopology.TriangleStrip);
 
             if (_currentState.CullBoth && isTriangles)
             {
@@ -1017,7 +1018,7 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < attribDescriptors.Length; i++)
             {
-                ref var attrib = ref pipeline.Internal.VertexAttributes[i];
+                ref VertexInputAttributeUid attrib = ref pipeline.Internal.VertexAttributes[i];
 
                 if (attribDescriptors[i].IsZero)
                 {
@@ -1037,7 +1038,7 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < bufferDescriptors.Length; i++)
             {
-                ref var layout = ref pipeline.Internal.VertexBindings[i];
+                ref VertexInputLayoutUid layout = ref pipeline.Internal.VertexBindings[i];
 
                 if ((indexMask & (1u << i)) != 0)
                 {
@@ -1069,7 +1070,7 @@ namespace Ryujinx.Graphics.Metal
                 }
             }
 
-            ref var zeroBufLayout = ref pipeline.Internal.VertexBindings[(int)Constants.ZeroBufferIndex];
+            ref VertexInputLayoutUid zeroBufLayout = ref pipeline.Internal.VertexBindings[(int)Constants.ZeroBufferIndex];
 
             // Zero buffer
             if ((indexMask & (1u << (int)Constants.ZeroBufferIndex)) != 0)
@@ -1108,7 +1109,7 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var zeroMtlBuffer = autoZeroBuffer.Get(_pipeline.Cbs).Value;
+            MTLBuffer zeroMtlBuffer = autoZeroBuffer.Get(_pipeline.Cbs).Value;
             bindings.VertexBuffers.Add(new BufferResource(zeroMtlBuffer, 0, Constants.ZeroBufferIndex));
         }
 
@@ -1117,12 +1118,12 @@ namespace Ryujinx.Graphics.Metal
             ulong gpuAddress = 0;
             IntPtr nativePtr = IntPtr.Zero;
 
-            var range = buffer.Range;
-            var autoBuffer = buffer.Buffer;
+            BufferRange? range = buffer.Range;
+            Auto<DisposableBuffer> autoBuffer = buffer.Buffer;
 
             if (autoBuffer != null)
             {
-                var offset = 0;
+                int offset = 0;
                 MTLBuffer mtlBuffer;
 
                 if (range.HasValue)
@@ -1144,7 +1145,7 @@ namespace Ryujinx.Graphics.Metal
 
         private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForTexture(ref TextureRef texture)
         {
-            var storage = texture.Storage;
+            TextureBase storage = texture.Storage;
 
             ulong gpuAddress = 0;
             IntPtr nativePtr = IntPtr.Zero;
@@ -1156,7 +1157,7 @@ namespace Ryujinx.Graphics.Metal
                     textureBuffer.RebuildStorage(false);
                 }
 
-                var mtlTexture = storage.GetHandle();
+                MTLTexture mtlTexture = storage.GetHandle();
 
                 gpuAddress = mtlTexture.GpuResourceID._impl;
                 nativePtr = mtlTexture.NativePtr;
@@ -1167,14 +1168,14 @@ namespace Ryujinx.Graphics.Metal
 
         private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForImage(ref ImageRef image)
         {
-            var storage = image.Storage;
+            Texture storage = image.Storage;
 
             ulong gpuAddress = 0;
             IntPtr nativePtr = IntPtr.Zero;
 
             if (storage != null)
             {
-                var mtlTexture = storage.GetHandle();
+                MTLTexture mtlTexture = storage.GetHandle();
 
                 gpuAddress = mtlTexture.GpuResourceID._impl;
                 nativePtr = mtlTexture.NativePtr;
@@ -1192,7 +1193,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 bufferTexture.RebuildStorage(false);
 
-                var mtlTexture = bufferTexture.GetHandle();
+                MTLTexture mtlTexture = bufferTexture.GetHandle();
 
                 gpuAddress = mtlTexture.GpuResourceID._impl;
                 nativePtr = mtlTexture.NativePtr;
@@ -1221,7 +1222,7 @@ namespace Ryujinx.Graphics.Metal
 
         private readonly void UpdateAndBind(Program program, uint setIndex, ref readonly RenderEncoderBindings bindings)
         {
-            var bindingSegments = program.BindingSegments[setIndex];
+            ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex];
 
             if (bindingSegments.Length == 0)
             {
@@ -1244,8 +1245,8 @@ namespace Ryujinx.Graphics.Metal
             Span<ulong> vertResourceIds = stackalloc ulong[program.ArgumentBufferSizes[setIndex]];
             Span<ulong> fragResourceIds = stackalloc ulong[program.FragArgumentBufferSizes[setIndex]];
 
-            var vertResourceIdIndex = 0;
-            var fragResourceIdIndex = 0;
+            int vertResourceIdIndex = 0;
+            int fragResourceIdIndex = 0;
 
             foreach (ResourceBindingSegment segment in bindingSegments)
             {
@@ -1260,7 +1261,7 @@ namespace Ryujinx.Graphics.Metal
                             int index = binding + i;
 
                             ref BufferRef buffer = ref _currentState.UniformBufferRefs[index];
-                            var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer);
+                            (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer);
 
                             MTLRenderStages renderStages = 0;
 
@@ -1289,7 +1290,7 @@ namespace Ryujinx.Graphics.Metal
                             int index = binding + i;
 
                             ref BufferRef buffer = ref _currentState.StorageBufferRefs[index];
-                            var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer);
+                            (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer);
 
                             MTLRenderStages renderStages = 0;
 
@@ -1319,8 +1320,8 @@ namespace Ryujinx.Graphics.Metal
                             {
                                 int index = binding + i;
 
-                                ref var texture = ref _currentState.TextureRefs[index];
-                                var (gpuAddress, nativePtr) = AddressForTexture(ref texture);
+                                ref TextureRef texture = ref _currentState.TextureRefs[index];
+                                (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture);
 
                                 MTLRenderStages renderStages = 0;
 
@@ -1357,17 +1358,17 @@ namespace Ryujinx.Graphics.Metal
                         }
                         else
                         {
-                            var textureArray = _currentState.TextureArrayRefs[binding].Array;
+                            TextureArray textureArray = _currentState.TextureArrayRefs[binding].Array;
 
                             if (segment.Type != ResourceType.BufferTexture)
                             {
-                                var textures = textureArray.GetTextureRefs();
-                                var samplers = new Auto<DisposableSampler>[textures.Length];
+                                TextureRef[] textures = textureArray.GetTextureRefs();
+                                Auto<DisposableSampler>[] samplers = new Auto<DisposableSampler>[textures.Length];
 
                                 for (int i = 0; i < textures.Length; i++)
                                 {
                                     TextureRef texture = textures[i];
-                                    var (gpuAddress, nativePtr) = AddressForTexture(ref texture);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture);
 
                                     samplers[i] = texture.Sampler;
 
@@ -1392,7 +1393,7 @@ namespace Ryujinx.Graphics.Metal
                                     AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings);
                                 }
 
-                                foreach (var sampler in samplers)
+                                foreach (Auto<DisposableSampler> sampler in samplers)
                                 {
                                     ulong gpuAddress = 0;
 
@@ -1416,12 +1417,12 @@ namespace Ryujinx.Graphics.Metal
                             }
                             else
                             {
-                                var bufferTextures = textureArray.GetBufferTextureRefs();
+                                TextureBuffer[] bufferTextures = textureArray.GetBufferTextureRefs();
 
                                 for (int i = 0; i < bufferTextures.Length; i++)
                                 {
                                     TextureBuffer bufferTexture = bufferTextures[i];
-                                    var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref bufferTexture);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref bufferTexture);
 
                                     MTLRenderStages renderStages = 0;
 
@@ -1453,8 +1454,8 @@ namespace Ryujinx.Graphics.Metal
                             {
                                 int index = binding + i;
 
-                                ref var image = ref _currentState.ImageRefs[index];
-                                var (gpuAddress, nativePtr) = AddressForImage(ref image);
+                                ref ImageRef image = ref _currentState.ImageRefs[index];
+                                (ulong gpuAddress, IntPtr nativePtr) = AddressForImage(ref image);
 
                                 MTLRenderStages renderStages = 0;
 
@@ -1477,16 +1478,16 @@ namespace Ryujinx.Graphics.Metal
                         }
                         else
                         {
-                            var imageArray = _currentState.ImageArrayRefs[binding].Array;
+                            ImageArray imageArray = _currentState.ImageArrayRefs[binding].Array;
 
                             if (segment.Type != ResourceType.BufferImage)
                             {
-                                var images = imageArray.GetTextureRefs();
+                                TextureRef[] images = imageArray.GetTextureRefs();
 
                                 for (int i = 0; i < images.Length; i++)
                                 {
                                     TextureRef image = images[i];
-                                    var (gpuAddress, nativePtr) = AddressForTexture(ref image);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref image);
 
                                     MTLRenderStages renderStages = 0;
 
@@ -1509,12 +1510,12 @@ namespace Ryujinx.Graphics.Metal
                             }
                             else
                             {
-                                var bufferImages = imageArray.GetBufferTextureRefs();
+                                TextureBuffer[] bufferImages = imageArray.GetBufferTextureRefs();
 
                                 for (int i = 0; i < bufferImages.Length; i++)
                                 {
                                     TextureBuffer image = bufferImages[i];
-                                    var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref image);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref image);
 
                                     MTLRenderStages renderStages = 0;
 
@@ -1543,21 +1544,21 @@ namespace Ryujinx.Graphics.Metal
             if (program.ArgumentBufferSizes[setIndex] > 0)
             {
                 vertArgBuffer.Holder.SetDataUnchecked(vertArgBuffer.Offset, MemoryMarshal.AsBytes(vertResourceIds));
-                var mtlVertArgBuffer = _bufferManager.GetBuffer(vertArgBuffer.Handle, false).Get(_pipeline.Cbs).Value;
+                MTLBuffer mtlVertArgBuffer = _bufferManager.GetBuffer(vertArgBuffer.Handle, false).Get(_pipeline.Cbs).Value;
                 bindings.VertexBuffers.Add(new BufferResource(mtlVertArgBuffer, (uint)vertArgBuffer.Range.Offset, SetIndexToBindingIndex(setIndex)));
             }
 
             if (program.FragArgumentBufferSizes[setIndex] > 0)
             {
                 fragArgBuffer.Holder.SetDataUnchecked(fragArgBuffer.Offset, MemoryMarshal.AsBytes(fragResourceIds));
-                var mtlFragArgBuffer = _bufferManager.GetBuffer(fragArgBuffer.Handle, false).Get(_pipeline.Cbs).Value;
+                MTLBuffer mtlFragArgBuffer = _bufferManager.GetBuffer(fragArgBuffer.Handle, false).Get(_pipeline.Cbs).Value;
                 bindings.FragmentBuffers.Add(new BufferResource(mtlFragArgBuffer, (uint)fragArgBuffer.Range.Offset, SetIndexToBindingIndex(setIndex)));
             }
         }
 
         private readonly void UpdateAndBind(Program program, uint setIndex, ref readonly ComputeEncoderBindings bindings)
         {
-            var bindingSegments = program.BindingSegments[setIndex];
+            ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex];
 
             if (bindingSegments.Length == 0)
             {
@@ -1572,7 +1573,7 @@ namespace Ryujinx.Graphics.Metal
             }
 
             Span<ulong> resourceIds = stackalloc ulong[program.ArgumentBufferSizes[setIndex]];
-            var resourceIdIndex = 0;
+            int resourceIdIndex = 0;
 
             foreach (ResourceBindingSegment segment in bindingSegments)
             {
@@ -1587,7 +1588,7 @@ namespace Ryujinx.Graphics.Metal
                             int index = binding + i;
 
                             ref BufferRef buffer = ref _currentState.UniformBufferRefs[index];
-                            var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer);
+                            (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer);
 
                             if ((segment.Stages & ResourceStages.Compute) != 0)
                             {
@@ -1604,7 +1605,7 @@ namespace Ryujinx.Graphics.Metal
                             int index = binding + i;
 
                             ref BufferRef buffer = ref _currentState.StorageBufferRefs[index];
-                            var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer);
+                            (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer);
 
                             if ((segment.Stages & ResourceStages.Compute) != 0)
                             {
@@ -1621,8 +1622,8 @@ namespace Ryujinx.Graphics.Metal
                             {
                                 int index = binding + i;
 
-                                ref var texture = ref _currentState.TextureRefs[index];
-                                var (gpuAddress, nativePtr) = AddressForTexture(ref texture);
+                                ref TextureRef texture = ref _currentState.TextureRefs[index];
+                                (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture);
 
                                 if ((segment.Stages & ResourceStages.Compute) != 0)
                                 {
@@ -1640,17 +1641,17 @@ namespace Ryujinx.Graphics.Metal
                         }
                         else
                         {
-                            var textureArray = _currentState.TextureArrayRefs[binding].Array;
+                            TextureArray textureArray = _currentState.TextureArrayRefs[binding].Array;
 
                             if (segment.Type != ResourceType.BufferTexture)
                             {
-                                var textures = textureArray.GetTextureRefs();
-                                var samplers = new Auto<DisposableSampler>[textures.Length];
+                                TextureRef[] textures = textureArray.GetTextureRefs();
+                                Auto<DisposableSampler>[] samplers = new Auto<DisposableSampler>[textures.Length];
 
                                 for (int i = 0; i < textures.Length; i++)
                                 {
                                     TextureRef texture = textures[i];
-                                    var (gpuAddress, nativePtr) = AddressForTexture(ref texture);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture);
 
                                     if ((segment.Stages & ResourceStages.Compute) != 0)
                                     {
@@ -1662,7 +1663,7 @@ namespace Ryujinx.Graphics.Metal
                                     }
                                 }
 
-                                foreach (var sampler in samplers)
+                                foreach (Auto<DisposableSampler> sampler in samplers)
                                 {
                                     if (sampler != null)
                                     {
@@ -1673,12 +1674,12 @@ namespace Ryujinx.Graphics.Metal
                             }
                             else
                             {
-                                var bufferTextures = textureArray.GetBufferTextureRefs();
+                                TextureBuffer[] bufferTextures = textureArray.GetBufferTextureRefs();
 
                                 for (int i = 0; i < bufferTextures.Length; i++)
                                 {
                                     TextureBuffer bufferTexture = bufferTextures[i];
-                                    var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref bufferTexture);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref bufferTexture);
 
                                     if ((segment.Stages & ResourceStages.Compute) != 0)
                                     {
@@ -1697,8 +1698,8 @@ namespace Ryujinx.Graphics.Metal
                             {
                                 int index = binding + i;
 
-                                ref var image = ref _currentState.ImageRefs[index];
-                                var (gpuAddress, nativePtr) = AddressForImage(ref image);
+                                ref ImageRef image = ref _currentState.ImageRefs[index];
+                                (ulong gpuAddress, IntPtr nativePtr) = AddressForImage(ref image);
 
                                 if ((segment.Stages & ResourceStages.Compute) != 0)
                                 {
@@ -1710,16 +1711,16 @@ namespace Ryujinx.Graphics.Metal
                         }
                         else
                         {
-                            var imageArray = _currentState.ImageArrayRefs[binding].Array;
+                            ImageArray imageArray = _currentState.ImageArrayRefs[binding].Array;
 
                             if (segment.Type != ResourceType.BufferImage)
                             {
-                                var images = imageArray.GetTextureRefs();
+                                TextureRef[] images = imageArray.GetTextureRefs();
 
                                 for (int i = 0; i < images.Length; i++)
                                 {
                                     TextureRef image = images[i];
-                                    var (gpuAddress, nativePtr) = AddressForTexture(ref image);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref image);
 
                                     if ((segment.Stages & ResourceStages.Compute) != 0)
                                     {
@@ -1731,12 +1732,12 @@ namespace Ryujinx.Graphics.Metal
                             }
                             else
                             {
-                                var bufferImages = imageArray.GetBufferTextureRefs();
+                                TextureBuffer[] bufferImages = imageArray.GetBufferTextureRefs();
 
                                 for (int i = 0; i < bufferImages.Length; i++)
                                 {
                                     TextureBuffer image = bufferImages[i];
-                                    var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref image);
+                                    (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref image);
 
                                     if ((segment.Stages & ResourceStages.Compute) != 0)
                                     {
@@ -1754,7 +1755,7 @@ namespace Ryujinx.Graphics.Metal
             if (program.ArgumentBufferSizes[setIndex] > 0)
             {
                 argBuffer.Holder.SetDataUnchecked(argBuffer.Offset, MemoryMarshal.AsBytes(resourceIds));
-                var mtlArgBuffer = _bufferManager.GetBuffer(argBuffer.Handle, false).Get(_pipeline.Cbs).Value;
+                MTLBuffer mtlArgBuffer = _bufferManager.GetBuffer(argBuffer.Handle, false).Get(_pipeline.Cbs).Value;
                 bindings.Buffers.Add(new BufferResource(mtlArgBuffer, (uint)argBuffer.Range.Offset, SetIndexToBindingIndex(setIndex)));
             }
         }

+ 1 - 1
src/Ryujinx.Graphics.Metal/FormatTable.cs

@@ -170,7 +170,7 @@ namespace Ryujinx.Graphics.Metal
 
         public static MTLPixelFormat GetFormat(Format format)
         {
-            var mtlFormat = _table[(int)format];
+            MTLPixelFormat mtlFormat = _table[(int)format];
 
             if (IsD24S8(format))
             {

+ 11 - 11
src/Ryujinx.Graphics.Metal/HardwareInfo.cs

@@ -45,33 +45,33 @@ namespace Ryujinx.Graphics.Metal
 
         public static string GetVendor()
         {
-            var serviceDict = IOServiceMatching("IOGPU");
-            var service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict);
-            var cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "vendor-id", _kCFStringEncodingASCII);
-            var cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0);
+            IntPtr serviceDict = IOServiceMatching("IOGPU");
+            IntPtr service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict);
+            IntPtr cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "vendor-id", _kCFStringEncodingASCII);
+            IntPtr cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0);
 
             byte[] buffer = new byte[4];
-            var bufferPtr = CFDataGetBytePtr(cfProperty);
+            IntPtr bufferPtr = CFDataGetBytePtr(cfProperty);
             Marshal.Copy(bufferPtr, buffer, 0, buffer.Length);
 
-            var vendorId = BitConverter.ToUInt32(buffer);
+            uint vendorId = BitConverter.ToUInt32(buffer);
 
             return GetNameFromId(vendorId);
         }
 
         public static string GetModel()
         {
-            var serviceDict = IOServiceMatching("IOGPU");
-            var service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict);
-            var cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "model", _kCFStringEncodingASCII);
-            var cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0);
+            IntPtr serviceDict = IOServiceMatching("IOGPU");
+            IntPtr service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict);
+            IntPtr cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "model", _kCFStringEncodingASCII);
+            IntPtr cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0);
 
             char[] buffer = new char[64];
             IntPtr bufferPtr = Marshal.AllocHGlobal(buffer.Length);
 
             if (CFStringGetCString(cfProperty, bufferPtr, buffer.Length, _kCFStringEncodingASCII))
             {
-                var model = Marshal.PtrToStringUTF8(bufferPtr);
+                string model = Marshal.PtrToStringUTF8(bufferPtr);
                 Marshal.FreeHGlobal(bufferPtr);
                 return model;
             }

+ 7 - 7
src/Ryujinx.Graphics.Metal/HashTableSlim.cs

@@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void Add(ref TKey key, TValue value)
         {
-            var entry = new Entry
+            Entry entry = new()
             {
                 Hash = key.GetHashCode(),
                 Key = key,
@@ -75,7 +75,7 @@ namespace Ryujinx.Graphics.Metal
             int hashCode = key.GetHashCode();
             int bucketIndex = hashCode & TotalBucketsMask;
 
-            ref var bucket = ref _hashTable[bucketIndex];
+            ref Bucket bucket = ref _hashTable[bucketIndex];
             if (bucket.Entries != null)
             {
                 int index = bucket.Length;
@@ -102,11 +102,11 @@ namespace Ryujinx.Graphics.Metal
         {
             int hashCode = key.GetHashCode();
 
-            ref var bucket = ref _hashTable[hashCode & TotalBucketsMask];
-            var entries = bucket.AsSpan();
+            ref Bucket bucket = ref _hashTable[hashCode & TotalBucketsMask];
+            Span<Entry> entries = bucket.AsSpan();
             for (int i = 0; i < entries.Length; i++)
             {
-                ref var entry = ref entries[i];
+                ref Entry entry = ref entries[i];
 
                 if (entry.Hash == hashCode && entry.Key.Equals(ref key))
                 {
@@ -124,10 +124,10 @@ namespace Ryujinx.Graphics.Metal
         {
             int hashCode = key.GetHashCode();
 
-            var entries = _hashTable[hashCode & TotalBucketsMask].AsSpan();
+            Span<Entry> entries = _hashTable[hashCode & TotalBucketsMask].AsSpan();
             for (int i = 0; i < entries.Length; i++)
             {
-                ref var entry = ref entries[i];
+                ref Entry entry = ref entries[i];
 
                 if (entry.Hash == hashCode && entry.Key.Equals(ref key))
                 {

+ 52 - 52
src/Ryujinx.Graphics.Metal/HelperShader.cs

@@ -50,58 +50,58 @@ namespace Ryujinx.Graphics.Metal
             _samplerNearest = new SamplerHolder(renderer, _device, SamplerCreateInfo.Create(MinFilter.Nearest, MagFilter.Nearest));
             _samplerLinear = new SamplerHolder(renderer, _device, SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear));
 
-            var blitResourceLayout = new ResourceLayoutBuilder()
+            ResourceLayout blitResourceLayout = new ResourceLayoutBuilder()
                 .Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 0)
                 .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build();
 
-            var blitSource = ReadMsl("Blit.metal");
+            string blitSource = ReadMsl("Blit.metal");
 
-            var blitSourceF = blitSource.Replace("FORMAT", "float", StringComparison.Ordinal);
+            string blitSourceF = blitSource.Replace("FORMAT", "float", StringComparison.Ordinal);
             _programColorBlitF = new Program(renderer, device, [
                 new ShaderSource(blitSourceF, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var blitSourceI = blitSource.Replace("FORMAT", "int");
+            string blitSourceI = blitSource.Replace("FORMAT", "int");
             _programColorBlitI = new Program(renderer, device, [
                 new ShaderSource(blitSourceI, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceI, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var blitSourceU = blitSource.Replace("FORMAT", "uint");
+            string blitSourceU = blitSource.Replace("FORMAT", "uint");
             _programColorBlitU = new Program(renderer, device, [
                 new ShaderSource(blitSourceU, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceU, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var blitMsSource = ReadMsl("BlitMs.metal");
+            string blitMsSource = ReadMsl("BlitMs.metal");
 
-            var blitMsSourceF = blitMsSource.Replace("FORMAT", "float");
+            string blitMsSourceF = blitMsSource.Replace("FORMAT", "float");
             _programColorBlitMsF = new Program(renderer, device, [
                 new ShaderSource(blitMsSourceF, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitMsSourceF, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var blitMsSourceI = blitMsSource.Replace("FORMAT", "int");
+            string blitMsSourceI = blitMsSource.Replace("FORMAT", "int");
             _programColorBlitMsI = new Program(renderer, device, [
                 new ShaderSource(blitMsSourceI, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitMsSourceI, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var blitMsSourceU = blitMsSource.Replace("FORMAT", "uint");
+            string blitMsSourceU = blitMsSource.Replace("FORMAT", "uint");
             _programColorBlitMsU = new Program(renderer, device, [
                 new ShaderSource(blitMsSourceU, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitMsSourceU, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var colorClearResourceLayout = new ResourceLayoutBuilder()
+            ResourceLayout colorClearResourceLayout = new ResourceLayoutBuilder()
                 .Add(ResourceStages.Fragment, ResourceType.UniformBuffer, 0).Build();
 
-            var colorClearSource = ReadMsl("ColorClear.metal");
+            string colorClearSource = ReadMsl("ColorClear.metal");
 
             for (int i = 0; i < Constants.MaxColorAttachments; i++)
             {
-                var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "float");
+                string crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "float");
                 _programsColorClearF.Add(new Program(renderer, device, [
                     new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl),
                     new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl)
@@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < Constants.MaxColorAttachments; i++)
             {
-                var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "int");
+                string crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "int");
                 _programsColorClearI.Add(new Program(renderer, device, [
                     new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl),
                     new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl)
@@ -119,68 +119,68 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < Constants.MaxColorAttachments; i++)
             {
-                var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "uint");
+                string crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "uint");
                 _programsColorClearU.Add(new Program(renderer, device, [
                     new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl),
                     new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl)
                 ], colorClearResourceLayout));
             }
 
-            var depthStencilClearSource = ReadMsl("DepthStencilClear.metal");
+            string depthStencilClearSource = ReadMsl("DepthStencilClear.metal");
             _programDepthStencilClear = new Program(renderer, device, [
                 new ShaderSource(depthStencilClearSource, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(depthStencilClearSource, ShaderStage.Vertex, TargetLanguage.Msl)
             ], colorClearResourceLayout);
 
-            var strideChangeResourceLayout = new ResourceLayoutBuilder()
+            ResourceLayout strideChangeResourceLayout = new ResourceLayoutBuilder()
                 .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0)
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1)
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build();
 
-            var strideChangeSource = ReadMsl("ChangeBufferStride.metal");
+            string strideChangeSource = ReadMsl("ChangeBufferStride.metal");
             _programStrideChange = new Program(renderer, device, [
                 new ShaderSource(strideChangeSource, ShaderStage.Compute, TargetLanguage.Msl)
             ], strideChangeResourceLayout, new ComputeSize(64, 1, 1));
 
-            var convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder()
+            ResourceLayout convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder()
                 .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0)
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1)
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build();
 
-            var convertD32S8ToD24S8Source = ReadMsl("ConvertD32S8ToD24S8.metal");
+            string convertD32S8ToD24S8Source = ReadMsl("ConvertD32S8ToD24S8.metal");
             _programConvertD32S8ToD24S8 = new Program(renderer, device, [
                 new ShaderSource(convertD32S8ToD24S8Source, ShaderStage.Compute, TargetLanguage.Msl)
             ], convertD32S8ToD24S8ResourceLayout, new ComputeSize(64, 1, 1));
 
-            var convertIndexBufferLayout = new ResourceLayoutBuilder()
+            ResourceLayout convertIndexBufferLayout = new ResourceLayoutBuilder()
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1)
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true)
                 .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 3).Build();
 
-            var convertIndexBufferSource = ReadMsl("ConvertIndexBuffer.metal");
+            string convertIndexBufferSource = ReadMsl("ConvertIndexBuffer.metal");
             _programConvertIndexBuffer = new Program(renderer, device, [
                 new ShaderSource(convertIndexBufferSource, ShaderStage.Compute, TargetLanguage.Msl)
             ], convertIndexBufferLayout, new ComputeSize(16, 1, 1));
 
-            var depthBlitSource = ReadMsl("DepthBlit.metal");
+            string depthBlitSource = ReadMsl("DepthBlit.metal");
             _programDepthBlit = new Program(renderer, device, [
                 new ShaderSource(depthBlitSource, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var depthBlitMsSource = ReadMsl("DepthBlitMs.metal");
+            string depthBlitMsSource = ReadMsl("DepthBlitMs.metal");
             _programDepthBlitMs = new Program(renderer, device, [
                 new ShaderSource(depthBlitMsSource, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var stencilBlitSource = ReadMsl("StencilBlit.metal");
+            string stencilBlitSource = ReadMsl("StencilBlit.metal");
             _programStencilBlit = new Program(renderer, device, [
                 new ShaderSource(stencilBlitSource, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl)
             ], blitResourceLayout);
 
-            var stencilBlitMsSource = ReadMsl("StencilBlitMs.metal");
+            string stencilBlitMsSource = ReadMsl("StencilBlitMs.metal");
             _programStencilBlitMs = new Program(renderer, device, [
                 new ShaderSource(stencilBlitMsSource, ShaderStage.Fragment, TargetLanguage.Msl),
                 new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl)
@@ -189,7 +189,7 @@ namespace Ryujinx.Graphics.Metal
 
         private static string ReadMsl(string fileName)
         {
-            var msl = EmbeddedResources.ReadAllText(string.Join('/', ShadersSourcePath, fileName));
+            string msl = EmbeddedResources.ReadAllText(string.Join('/', ShadersSourcePath, fileName));
 
 #pragma warning disable IDE0055 // Disable formatting
             msl = msl.Replace("CONSTANT_BUFFERS_INDEX", $"{Constants.ConstantBuffersIndex}")
@@ -214,7 +214,7 @@ namespace Ryujinx.Graphics.Metal
 
             const int RegionBufferSize = 16;
 
-            var sampler = linearFilter ? _samplerLinear : _samplerNearest;
+            ISampler sampler = linearFilter ? _samplerLinear : _samplerNearest;
 
             _pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, src, sampler);
 
@@ -235,11 +235,11 @@ namespace Ryujinx.Graphics.Metal
                 (region[2], region[3]) = (region[3], region[2]);
             }
 
-            using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize);
+            using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize);
             buffer.Holder.SetDataUnchecked<float>(buffer.Offset, region);
             _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]);
 
-            var rect = new Rectangle<float>(
+            Rectangle<float> rect = new Rectangle<float>(
                 MathF.Min(dstRegion.X1, dstRegion.X2),
                 MathF.Min(dstRegion.Y1, dstRegion.Y2),
                 MathF.Abs(dstRegion.X2 - dstRegion.X1),
@@ -266,7 +266,7 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var debugGroupName = "Blit Color ";
+            string debugGroupName = "Blit Color ";
 
             if (src.Info.Target.IsMultisample())
             {
@@ -359,13 +359,13 @@ namespace Ryujinx.Graphics.Metal
                 (region[2], region[3]) = (region[3], region[2]);
             }
 
-            using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize);
+            using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize);
             buffer.Holder.SetDataUnchecked<float>(buffer.Offset, region);
             _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]);
 
             Span<Viewport> viewports = stackalloc Viewport[16];
 
-            var rect = new Rectangle<float>(
+            Rectangle<float> rect = new Rectangle<float>(
                 MathF.Min(dstRegion.X1, dstRegion.X2),
                 MathF.Min(dstRegion.Y1, dstRegion.Y2),
                 MathF.Abs(dstRegion.X2 - dstRegion.X1),
@@ -400,7 +400,7 @@ namespace Ryujinx.Graphics.Metal
                 Format.D32FloatS8Uint or
                 Format.S8UintD24Unorm)
             {
-                var depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth);
+                Texture depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth);
 
                 BlitDepthStencilDraw(depthTexture, isDepth: true);
 
@@ -416,7 +416,7 @@ namespace Ryujinx.Graphics.Metal
                 Format.D32FloatS8Uint or
                 Format.S8UintD24Unorm)
             {
-                var stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil);
+                Texture stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil);
 
                 BlitDepthStencilDraw(stencilTexture, isDepth: false);
 
@@ -494,7 +494,7 @@ namespace Ryujinx.Graphics.Metal
             Extents2DF dstRegion)
         {
             // Save current state
-            var state = _pipeline.SavePredrawState();
+            PredrawState state = _pipeline.SavePredrawState();
 
             _pipeline.SetFaceCulling(false, Face.Front);
             _pipeline.SetStencilTest(new StencilTestDescriptor());
@@ -521,13 +521,13 @@ namespace Ryujinx.Graphics.Metal
                 (region[2], region[3]) = (region[3], region[2]);
             }
 
-            var bufferHandle = _renderer.BufferManager.CreateWithHandle(RegionBufferSize);
+            BufferHandle bufferHandle = _renderer.BufferManager.CreateWithHandle(RegionBufferSize);
             _renderer.BufferManager.SetData<float>(bufferHandle, 0, region);
             _pipeline.SetUniformBuffers([new BufferAssignment(0, new BufferRange(bufferHandle, 0, RegionBufferSize))]);
 
             Span<Viewport> viewports = stackalloc Viewport[16];
 
-            var rect = new Rectangle<float>(
+            Rectangle<float> rect = new Rectangle<float>(
                 MathF.Min(dstRegion.X1, dstRegion.X2),
                 MathF.Min(dstRegion.Y1, dstRegion.Y2),
                 MathF.Abs(dstRegion.X2 - dstRegion.X1),
@@ -569,8 +569,8 @@ namespace Ryujinx.Graphics.Metal
         {
             int elems = size / stride;
 
-            var srcBuffer = src.GetBuffer();
-            var dstBuffer = dst.GetBuffer();
+            Auto<DisposableBuffer> srcBuffer = src.GetBuffer();
+            Auto<DisposableBuffer> dstBuffer = dst.GetBuffer();
 
             const int ParamsBufferSize = 4 * sizeof(int);
 
@@ -584,7 +584,7 @@ namespace Ryujinx.Graphics.Metal
             shaderParams[2] = size;
             shaderParams[3] = srcOffset;
 
-            using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize);
+            using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize);
             buffer.Holder.SetDataUnchecked<int>(buffer.Offset, shaderParams);
             _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]);
 
@@ -605,7 +605,7 @@ namespace Ryujinx.Graphics.Metal
         {
             int inSize = pixelCount * 2 * sizeof(int);
 
-            var srcBuffer = src.GetBuffer();
+            Auto<DisposableBuffer> srcBuffer = src.GetBuffer();
 
             const int ParamsBufferSize = sizeof(int) * 2;
 
@@ -617,7 +617,7 @@ namespace Ryujinx.Graphics.Metal
             shaderParams[0] = pixelCount;
             shaderParams[1] = dstOffset;
 
-            using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize);
+            using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize);
             buffer.Holder.SetDataUnchecked<int>(buffer.Offset, shaderParams);
             _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]);
 
@@ -648,8 +648,8 @@ namespace Ryujinx.Graphics.Metal
             int primitiveCount = pattern.GetPrimitiveCount(indexCount);
             int outputIndexSize = 4;
 
-            var srcBuffer = src.GetBuffer();
-            var dstBuffer = dst.GetBuffer();
+            Auto<DisposableBuffer> srcBuffer = src.GetBuffer();
+            Auto<DisposableBuffer> dstBuffer = dst.GetBuffer();
 
             const int ParamsBufferSize = 16 * sizeof(int);
 
@@ -669,7 +669,7 @@ namespace Ryujinx.Graphics.Metal
 
             pattern.OffsetIndex.CopyTo(shaderParams[..pattern.OffsetIndex.Length]);
 
-            using var patternScoped = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize);
+            using ScopedTemporaryBuffer patternScoped = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize);
             patternScoped.Holder.SetDataUnchecked<int>(patternScoped.Offset, shaderParams);
 
             Span<Auto<DisposableBuffer>> sbRanges = new Auto<DisposableBuffer>[2];
@@ -707,7 +707,7 @@ namespace Ryujinx.Graphics.Metal
 
             // TODO: Flush
 
-            using var buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearColorBufferSize);
+            using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearColorBufferSize);
             buffer.Holder.SetDataUnchecked(buffer.Offset, clearColor);
             _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]);
 
@@ -726,7 +726,7 @@ namespace Ryujinx.Graphics.Metal
             Span<uint> componentMasks = stackalloc uint[index + 1];
             componentMasks[index] = componentMask;
 
-            var debugGroupName = "Clear Color ";
+            string debugGroupName = "Clear Color ";
 
             if (format.IsSint())
             {
@@ -768,7 +768,7 @@ namespace Ryujinx.Graphics.Metal
         {
             // Keep original scissor
             DirtyFlags clearFlags = DirtyFlags.All & (~DirtyFlags.Scissors);
-            var helperScissors = _helperShaderState.Scissors;
+            MTLScissorRect[] helperScissors = _helperShaderState.Scissors;
 
             // Save current state
             EncoderState originalState = _pipeline.SwapState(_helperShaderState, clearFlags, false);
@@ -778,7 +778,7 @@ namespace Ryujinx.Graphics.Metal
 
             const int ClearDepthBufferSize = 16;
 
-            using var buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearDepthBufferSize);
+            using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearDepthBufferSize);
             buffer.Holder.SetDataUnchecked(buffer.Offset, new ReadOnlySpan<float>(ref depthValue));
             _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]);
 
@@ -844,17 +844,17 @@ namespace Ryujinx.Graphics.Metal
             _programColorBlitMsI.Dispose();
             _programColorBlitMsU.Dispose();
 
-            foreach (var programColorClear in _programsColorClearF)
+            foreach (IProgram programColorClear in _programsColorClearF)
             {
                 programColorClear.Dispose();
             }
 
-            foreach (var programColorClear in _programsColorClearU)
+            foreach (IProgram programColorClear in _programsColorClearU)
             {
                 programColorClear.Dispose();
             }
 
-            foreach (var programColorClear in _programsColorClearI)
+            foreach (IProgram programColorClear in _programsColorClearI)
             {
                 programColorClear.Dispose();
             }

+ 1 - 1
src/Ryujinx.Graphics.Metal/IndexBufferState.cs

@@ -76,7 +76,7 @@ namespace Ryujinx.Graphics.Metal
 
             int firstIndexOffset = firstIndex * indexSize;
 
-            var autoBuffer = renderer.BufferManager.GetBufferTopologyConversion(cbs, _handle, _offset + firstIndexOffset, indexCount * indexSize, pattern, indexSize);
+            Auto<DisposableBuffer> autoBuffer = renderer.BufferManager.GetBufferTopologyConversion(cbs, _handle, _offset + firstIndexOffset, indexCount * indexSize, pattern, indexSize);
 
             int size = convertedCount * 4;
 

+ 4 - 4
src/Ryujinx.Graphics.Metal/MetalRenderer.cs

@@ -61,7 +61,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void Initialize(GraphicsDebugLevel logLevel)
         {
-            var layer = _getMetalLayer();
+            CAMetalLayer layer = _getMetalLayer();
             layer.Device = _device;
             layer.FramebufferOnly = false;
 
@@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Metal
         public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, float divisor, bool hostReserved)
         {
             // https://developer.apple.com/documentation/metal/gpu_counters_and_counter_sample_buffers/creating_a_counter_sample_buffer_to_store_a_gpu_s_counter_data_during_a_pass?language=objc
-            var counterEvent = new CounterEvent();
+            CounterEvent counterEvent = new CounterEvent();
             resultHandler?.Invoke(counterEvent, type == CounterType.SamplesPassed ? (ulong)1 : 0);
             return counterEvent;
         }
@@ -295,12 +295,12 @@ namespace Ryujinx.Graphics.Metal
         {
             BackgroundResources.Dispose();
 
-            foreach (var program in Programs)
+            foreach (Program program in Programs)
             {
                 program.Dispose();
             }
 
-            foreach (var sampler in Samplers)
+            foreach (SamplerHolder sampler in Samplers)
             {
                 sampler.Dispose();
             }

+ 4 - 4
src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs

@@ -189,14 +189,14 @@ namespace Ryujinx.Graphics.Metal
 
             if (indefinite)
             {
-                foreach (var fence in fences)
+                foreach (MTLCommandBuffer fence in fences)
                 {
                     fence.WaitUntilCompleted();
                 }
             }
             else
             {
-                foreach (var fence in fences)
+                foreach (MTLCommandBuffer fence in fences)
                 {
                     if (fence.Status != MTLCommandBufferStatus.Completed)
                     {
@@ -224,7 +224,7 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < _fences.Length; i++)
             {
-                var fence = _fences[i];
+                FenceHolder fence = _fences[i];
 
                 if (fence != null)
                 {
@@ -248,7 +248,7 @@ namespace Ryujinx.Graphics.Metal
 
             for (int i = 0; i < _fences.Length; i++)
             {
-                var fence = _fences[i];
+                FenceHolder fence = _fences[i];
 
                 if (fence != null && _bufferUsageBitmap.OverlapsWith(i, offset, size))
                 {

+ 13 - 12
src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs

@@ -1,4 +1,5 @@
 using Ryujinx.Graphics.GAL;
+using SharpMetal.Metal;
 using System;
 using System.Runtime.Versioning;
 
@@ -18,7 +19,7 @@ namespace Ryujinx.Graphics.Metal
 
         private BufferHolder ResizeIfNeeded(int size)
         {
-            var flushStorage = _flushStorage;
+            BufferHolder flushStorage = _flushStorage;
 
             if (flushStorage == null || size > _flushStorage.Size)
             {
@@ -33,13 +34,13 @@ namespace Ryujinx.Graphics.Metal
 
         public Span<byte> GetBufferData(CommandBufferPool cbp, BufferHolder buffer, int offset, int size)
         {
-            var flushStorage = ResizeIfNeeded(size);
+            BufferHolder flushStorage = ResizeIfNeeded(size);
             Auto<DisposableBuffer> srcBuffer;
 
-            using (var cbs = cbp.Rent())
+            using (CommandBufferScoped cbs = cbp.Rent())
             {
                 srcBuffer = buffer.GetBuffer();
-                var dstBuffer = flushStorage.GetBuffer();
+                Auto<DisposableBuffer> dstBuffer = flushStorage.GetBuffer();
 
                 if (srcBuffer.TryIncrementReferenceCount())
                 {
@@ -61,12 +62,12 @@ namespace Ryujinx.Graphics.Metal
         {
             TextureCreateInfo info = view.Info;
 
-            var flushStorage = ResizeIfNeeded(size);
+            BufferHolder flushStorage = ResizeIfNeeded(size);
 
-            using (var cbs = cbp.Rent())
+            using (CommandBufferScoped cbs = cbp.Rent())
             {
-                var buffer = flushStorage.GetBuffer().Get(cbs).Value;
-                var image = view.GetHandle();
+                MTLBuffer buffer = flushStorage.GetBuffer().Get(cbs).Value;
+                MTLTexture image = view.GetHandle();
 
                 view.CopyFromOrToBuffer(cbs, buffer, image, size, true, 0, 0, info.GetLayers(), info.Levels, singleSlice: false);
             }
@@ -77,12 +78,12 @@ namespace Ryujinx.Graphics.Metal
 
         public Span<byte> GetTextureData(CommandBufferPool cbp, Texture view, int size, int layer, int level)
         {
-            var flushStorage = ResizeIfNeeded(size);
+            BufferHolder flushStorage = ResizeIfNeeded(size);
 
-            using (var cbs = cbp.Rent())
+            using (CommandBufferScoped cbs = cbp.Rent())
             {
-                var buffer = flushStorage.GetBuffer().Get(cbs).Value;
-                var image = view.GetHandle();
+                MTLBuffer buffer = flushStorage.GetBuffer().Get(cbs).Value;
+                MTLTexture image = view.GetHandle();
 
                 view.CopyFromOrToBuffer(cbs, buffer, image, size, true, layer, level, 1, 1, singleSlice: true);
             }

+ 29 - 29
src/Ryujinx.Graphics.Metal/Pipeline.cs

@@ -149,8 +149,8 @@ namespace Ryujinx.Graphics.Metal
         public void Present(CAMetalDrawable drawable, Texture src, Extents2D srcRegion, Extents2D dstRegion, bool isLinear)
         {
             // TODO: Clean this up
-            var textureInfo = new TextureCreateInfo((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha);
-            var dst = new Texture(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0);
+            TextureCreateInfo textureInfo = new TextureCreateInfo((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha);
+            Texture dst = new Texture(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0);
 
             _renderer.HelperShader.BlitColor(Cbs, src, dst, srcRegion, dstRegion, isLinear, true);
 
@@ -248,14 +248,14 @@ namespace Ryujinx.Graphics.Metal
             {
                 case EncoderType.Render:
                     {
-                        var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets;
+                        MTLBarrierScope scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets;
                         MTLRenderStages stages = MTLRenderStages.RenderStageVertex | MTLRenderStages.RenderStageFragment;
                         Encoders.RenderEncoder.MemoryBarrier(scope, stages, stages);
                         break;
                     }
                 case EncoderType.Compute:
                     {
-                        var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets;
+                        MTLBarrierScope scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets;
                         Encoders.ComputeEncoder.MemoryBarrier(scope);
                         break;
                     }
@@ -264,9 +264,9 @@ namespace Ryujinx.Graphics.Metal
 
         public void ClearBuffer(BufferHandle destination, int offset, int size, uint value)
         {
-            var blitCommandEncoder = GetOrCreateBlitEncoder();
+            MTLBlitCommandEncoder blitCommandEncoder = GetOrCreateBlitEncoder();
 
-            var mtlBuffer = _renderer.BufferManager.GetBuffer(destination, offset, size, true).Get(Cbs, offset, size, true).Value;
+            MTLBuffer mtlBuffer = _renderer.BufferManager.GetBuffer(destination, offset, size, true).Get(Cbs, offset, size, true).Value;
 
             // Might need a closer look, range's count, lower, and upper bound
             // must be a multiple of 4
@@ -282,7 +282,7 @@ namespace Ryujinx.Graphics.Metal
         public void ClearRenderTargetColor(int index, int layer, int layerCount, uint componentMask, ColorF color)
         {
             float[] colors = [color.Red, color.Green, color.Blue, color.Alpha];
-            var dst = _encoderStateManager.RenderTargets[index];
+            Texture dst = _encoderStateManager.RenderTargets[index];
 
             // TODO: Remove workaround for Wonder which has an invalid texture due to unsupported format
             if (dst == null)
@@ -296,7 +296,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void ClearRenderTargetDepthStencil(int layer, int layerCount, float depthValue, bool depthMask, int stencilValue, int stencilMask)
         {
-            var depthStencil = _encoderStateManager.DepthStencil;
+            Texture depthStencil = _encoderStateManager.DepthStencil;
 
             if (depthStencil == null)
             {
@@ -313,16 +313,16 @@ namespace Ryujinx.Graphics.Metal
 
         public void CopyBuffer(BufferHandle src, BufferHandle dst, int srcOffset, int dstOffset, int size)
         {
-            var srcBuffer = _renderer.BufferManager.GetBuffer(src, srcOffset, size, false);
-            var dstBuffer = _renderer.BufferManager.GetBuffer(dst, dstOffset, size, true);
+            Auto<DisposableBuffer> srcBuffer = _renderer.BufferManager.GetBuffer(src, srcOffset, size, false);
+            Auto<DisposableBuffer> dstBuffer = _renderer.BufferManager.GetBuffer(dst, dstOffset, size, true);
 
             BufferHolder.Copy(Cbs, srcBuffer, dstBuffer, srcOffset, dstOffset, size);
         }
 
         public void PushDebugGroup(string name)
         {
-            var encoder = Encoders.CurrentEncoder;
-            var debugGroupName = StringHelper.NSString(name);
+            MTLCommandEncoder? encoder = Encoders.CurrentEncoder;
+            NSString debugGroupName = StringHelper.NSString(name);
 
             if (encoder == null)
             {
@@ -345,7 +345,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void PopDebugGroup()
         {
-            var encoder = Encoders.CurrentEncoder;
+            MTLCommandEncoder? encoder = Encoders.CurrentEncoder;
 
             if (encoder == null)
             {
@@ -373,7 +373,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void DispatchCompute(int groupsX, int groupsY, int groupsZ, string debugGroupName)
         {
-            var computeCommandEncoder = GetOrCreateComputeEncoder(true);
+            MTLComputeCommandEncoder computeCommandEncoder = GetOrCreateComputeEncoder(true);
 
             ComputeSize localSize = _encoderStateManager.ComputeLocalSize;
 
@@ -404,17 +404,17 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
+            MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
 
             if (TopologyUnsupported(_encoderStateManager.Topology))
             {
-                var pattern = GetIndexBufferPattern();
+                IndexBufferPattern pattern = GetIndexBufferPattern();
 
                 BufferHandle handle = pattern.GetRepeatingBuffer(vertexCount, out int indexCount);
-                var buffer = _renderer.BufferManager.GetBuffer(handle, false);
-                var mtlBuffer = buffer.Get(Cbs, 0, indexCount * sizeof(int)).Value;
+                Auto<DisposableBuffer> buffer = _renderer.BufferManager.GetBuffer(handle, false);
+                MTLBuffer mtlBuffer = buffer.Get(Cbs, 0, indexCount * sizeof(int)).Value;
 
-                var renderCommandEncoder = GetOrCreateRenderEncoder(true);
+                MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true);
 
                 renderCommandEncoder.DrawIndexedPrimitives(
                     primitiveType,
@@ -425,7 +425,7 @@ namespace Ryujinx.Graphics.Metal
             }
             else
             {
-                var renderCommandEncoder = GetOrCreateRenderEncoder(true);
+                MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true);
 
                 if (debugGroupName != String.Empty)
                 {
@@ -488,11 +488,11 @@ namespace Ryujinx.Graphics.Metal
             MTLIndexType type;
             int finalIndexCount = indexCount;
 
-            var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
+            MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
 
             if (TopologyUnsupported(_encoderStateManager.Topology))
             {
-                var pattern = GetIndexBufferPattern();
+                IndexBufferPattern pattern = GetIndexBufferPattern();
                 int convertedCount = pattern.GetConvertedCount(indexCount);
 
                 finalIndexCount = convertedCount;
@@ -506,7 +506,7 @@ namespace Ryujinx.Graphics.Metal
 
             if (mtlBuffer.NativePtr != IntPtr.Zero)
             {
-                var renderCommandEncoder = GetOrCreateRenderEncoder(true);
+                MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true);
 
                 renderCommandEncoder.DrawIndexedPrimitives(
                     primitiveType,
@@ -533,17 +533,17 @@ namespace Ryujinx.Graphics.Metal
                 Logger.Warning?.Print(LogClass.Gpu, $"Drawing indexed with unsupported topology: {_encoderStateManager.Topology}");
             }
 
-            var buffer = _renderer.BufferManager
+            MTLBuffer buffer = _renderer.BufferManager
                 .GetBuffer(indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false)
                 .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value;
 
-            var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
+            MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
 
             (MTLBuffer indexBuffer, int indexOffset, MTLIndexType type) = _encoderStateManager.IndexBuffer.GetIndexBuffer(_renderer, Cbs);
 
             if (indexBuffer.NativePtr != IntPtr.Zero && buffer.NativePtr != IntPtr.Zero)
             {
-                var renderCommandEncoder = GetOrCreateRenderEncoder(true);
+                MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true);
 
                 renderCommandEncoder.DrawIndexedPrimitives(
                     primitiveType,
@@ -576,12 +576,12 @@ namespace Ryujinx.Graphics.Metal
                 Logger.Warning?.Print(LogClass.Gpu, $"Drawing indirect with unsupported topology: {_encoderStateManager.Topology}");
             }
 
-            var buffer = _renderer.BufferManager
+            MTLBuffer buffer = _renderer.BufferManager
                 .GetBuffer(indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false)
                 .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value;
 
-            var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
-            var renderCommandEncoder = GetOrCreateRenderEncoder(true);
+            MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert();
+            MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true);
 
             renderCommandEncoder.DrawPrimitives(
                 primitiveType,

+ 5 - 5
src/Ryujinx.Graphics.Metal/Program.cs

@@ -56,12 +56,12 @@ namespace Ryujinx.Graphics.Metal
             {
                 ShaderSource shader = _shaders[i];
 
-                using var compileOptions = new MTLCompileOptions
+                using MTLCompileOptions compileOptions = new MTLCompileOptions
                 {
                     PreserveInvariance = true,
                     LanguageVersion = MTLLanguageVersion.Version31,
                 };
-                var index = i;
+                int index = i;
 
                 _handles[i] = device.NewLibrary(StringHelper.NSString(shader.Code), compileOptions, (library, error) => CompilationResultHandler(library, error, index));
             }
@@ -71,7 +71,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void CompilationResultHandler(MTLLibrary library, NSError error, int index)
         {
-            var shader = _shaders[index];
+            ShaderSource shader = _shaders[index];
 
             if (_handles[index].IsAllocated)
             {
@@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Metal
                                 currentUsage.Stages,
                                 currentUsage.ArrayLength > 1));
 
-                            var size = currentCount * ResourcePointerSize(currentUsage.Type);
+                            int size = currentCount * ResourcePointerSize(currentUsage.Type);
                             if (currentUsage.Stages.HasFlag(ResourceStages.Fragment))
                             {
                                 fragArgBufferSizes[setIndex] += size;
@@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Metal
                         currentUsage.Stages,
                         currentUsage.ArrayLength > 1));
 
-                    var size = currentCount * ResourcePointerSize(currentUsage.Type);
+                    int size = currentCount * ResourcePointerSize(currentUsage.Type);
                     if (currentUsage.Stages.HasFlag(ResourceStages.Fragment))
                     {
                         fragArgBufferSizes[setIndex] += size;

+ 2 - 2
src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs

@@ -44,8 +44,8 @@ namespace Ryujinx.Graphics.Metal
 
         public ResourceLayout Build()
         {
-            var descriptors = new ResourceDescriptorCollection[TotalSets];
-            var usages = new ResourceUsageCollection[TotalSets];
+            ResourceDescriptorCollection[] descriptors = new ResourceDescriptorCollection[TotalSets];
+            ResourceUsageCollection[] usages = new ResourceUsageCollection[TotalSets];
 
             for (int index = 0; index < TotalSets; index++)
             {

+ 2 - 2
src/Ryujinx.Graphics.Metal/SamplerHolder.cs

@@ -21,7 +21,7 @@ namespace Ryujinx.Graphics.Metal
 
             MTLSamplerBorderColor borderColor = GetConstrainedBorderColor(info.BorderColor, out _);
 
-            using var descriptor = new MTLSamplerDescriptor
+            using MTLSamplerDescriptor descriptor = new MTLSamplerDescriptor
             {
                 BorderColor = borderColor,
                 MinFilter = minFilter,
@@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Metal
                 SupportArgumentBuffers = true
             };
 
-            var sampler = device.NewSamplerState(descriptor);
+            MTLSamplerState sampler = device.NewSamplerState(descriptor);
 
             _sampler = new Auto<DisposableSampler>(new DisposableSampler(sampler));
         }

+ 7 - 7
src/Ryujinx.Graphics.Metal/StagingBuffer.cs

@@ -108,8 +108,8 @@ namespace Ryujinx.Graphics.Metal
 
         private void PushDataImpl(CommandBufferScoped cbs, BufferHolder dst, int dstOffset, ReadOnlySpan<byte> data)
         {
-            var srcBuffer = _buffer.GetBuffer();
-            var dstBuffer = dst.GetBuffer(dstOffset, data.Length, true);
+            Auto<DisposableBuffer> srcBuffer = _buffer.GetBuffer();
+            Auto<DisposableBuffer> dstBuffer = dst.GetBuffer(dstOffset, data.Length, true);
 
             int offset = _freeOffset;
             int capacity = BufferSize - offset;
@@ -241,7 +241,7 @@ namespace Ryujinx.Graphics.Metal
 
         private bool WaitFreeCompleted(CommandBufferPool cbp)
         {
-            if (_pendingCopies.TryPeek(out var pc))
+            if (_pendingCopies.TryPeek(out PendingCopy pc))
             {
                 if (!pc.Fence.IsSignaled())
                 {
@@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Metal
                     pc.Fence.Wait();
                 }
 
-                var dequeued = _pendingCopies.Dequeue();
+                PendingCopy dequeued = _pendingCopies.Dequeue();
                 Debug.Assert(dequeued.Fence == pc.Fence);
                 _freeSize += pc.Size;
                 pc.Fence.Put();
@@ -265,10 +265,10 @@ namespace Ryujinx.Graphics.Metal
         public void FreeCompleted()
         {
             FenceHolder signalledFence = null;
-            while (_pendingCopies.TryPeek(out var pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled()))
+            while (_pendingCopies.TryPeek(out PendingCopy pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled()))
             {
                 signalledFence = pc.Fence; // Already checked - don't need to do it again.
-                var dequeued = _pendingCopies.Dequeue();
+                PendingCopy dequeued = _pendingCopies.Dequeue();
                 Debug.Assert(dequeued.Fence == pc.Fence);
                 _freeSize += pc.Size;
                 pc.Fence.Put();
@@ -279,7 +279,7 @@ namespace Ryujinx.Graphics.Metal
         {
             _renderer.BufferManager.Delete(Handle);
 
-            while (_pendingCopies.TryDequeue(out var pc))
+            while (_pendingCopies.TryDequeue(out PendingCopy pc))
             {
                 pc.Fence.Put();
             }

+ 13 - 13
src/Ryujinx.Graphics.Metal/State/PipelineState.cs

@@ -118,13 +118,13 @@ namespace Ryujinx.Graphics.Metal
 
         private readonly MTLVertexDescriptor BuildVertexDescriptor()
         {
-            var vertexDescriptor = new MTLVertexDescriptor();
+            MTLVertexDescriptor vertexDescriptor = new MTLVertexDescriptor();
 
             for (int i = 0; i < VertexAttributeDescriptionsCount; i++)
             {
                 VertexInputAttributeUid uid = Internal.VertexAttributes[i];
 
-                var attrib = vertexDescriptor.Attributes.Object((ulong)i);
+                MTLVertexAttributeDescriptor attrib = vertexDescriptor.Attributes.Object((ulong)i);
                 attrib.Format = uid.Format;
                 attrib.Offset = uid.Offset;
                 attrib.BufferIndex = uid.BufferIndex;
@@ -134,7 +134,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 VertexInputLayoutUid uid = Internal.VertexBindings[i];
 
-                var layout = vertexDescriptor.Layouts.Object((ulong)i);
+                MTLVertexBufferLayoutDescriptor layout = vertexDescriptor.Layouts.Object((ulong)i);
 
                 layout.StepFunction = uid.StepFunction;
                 layout.StepRate = uid.StepRate;
@@ -146,15 +146,15 @@ namespace Ryujinx.Graphics.Metal
 
         private MTLRenderPipelineDescriptor CreateRenderDescriptor(Program program)
         {
-            var renderPipelineDescriptor = new MTLRenderPipelineDescriptor();
+            MTLRenderPipelineDescriptor renderPipelineDescriptor = new MTLRenderPipelineDescriptor();
 
             for (int i = 0; i < Constants.MaxColorAttachments; i++)
             {
-                var blendState = Internal.ColorBlendState[i];
+                ColorBlendStateUid blendState = Internal.ColorBlendState[i];
 
                 if (blendState.PixelFormat != MTLPixelFormat.Invalid)
                 {
-                    var pipelineAttachment = renderPipelineDescriptor.ColorAttachments.Object((ulong)i);
+                    MTLRenderPipelineColorAttachmentDescriptor pipelineAttachment = renderPipelineDescriptor.ColorAttachments.Object((ulong)i);
 
                     BuildColorAttachment(pipelineAttachment, blendState);
                 }
@@ -195,7 +195,7 @@ namespace Ryujinx.Graphics.Metal
             renderPipelineDescriptor.RasterizationEnabled = !RasterizerDiscardEnable;
             renderPipelineDescriptor.SampleCount = Math.Max(1, SamplesCount);
 
-            var vertexDescriptor = BuildVertexDescriptor();
+            MTLVertexDescriptor vertexDescriptor = BuildVertexDescriptor();
             renderPipelineDescriptor.VertexDescriptor = vertexDescriptor;
 
             renderPipelineDescriptor.VertexFunction = program.VertexFunction;
@@ -210,14 +210,14 @@ namespace Ryujinx.Graphics.Metal
 
         public MTLRenderPipelineState CreateRenderPipeline(MTLDevice device, Program program)
         {
-            if (program.TryGetGraphicsPipeline(ref Internal, out var pipelineState))
+            if (program.TryGetGraphicsPipeline(ref Internal, out MTLRenderPipelineState pipelineState))
             {
                 return pipelineState;
             }
 
-            using var descriptor = CreateRenderDescriptor(program);
+            using MTLRenderPipelineDescriptor descriptor = CreateRenderDescriptor(program);
 
-            var error = new NSError(IntPtr.Zero);
+            NSError error = new NSError(IntPtr.Zero);
             pipelineState = device.NewRenderPipelineState(descriptor, ref error);
             if (error != IntPtr.Zero)
             {
@@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Metal
                 throw new InvalidOperationException($"Local thread size for compute cannot be 0 in any dimension.");
             }
 
-            var descriptor = new MTLComputePipelineDescriptor
+            MTLComputePipelineDescriptor descriptor = new MTLComputePipelineDescriptor
             {
                 ComputeFunction = program.ComputeFunction,
                 MaxTotalThreadsPerThreadgroup = maxThreads,
@@ -252,14 +252,14 @@ namespace Ryujinx.Graphics.Metal
 
         public static MTLComputePipelineState CreateComputePipeline(MTLDevice device, Program program)
         {
-            if (program.TryGetComputePipeline(out var pipelineState))
+            if (program.TryGetComputePipeline(out MTLComputePipelineState pipelineState))
             {
                 return pipelineState;
             }
 
             using MTLComputePipelineDescriptor descriptor = CreateComputeDescriptor(program);
 
-            var error = new NSError(IntPtr.Zero);
+            NSError error = new NSError(IntPtr.Zero);
             pipelineState = device.NewComputePipelineState(descriptor, MTLPipelineOption.None, 0, ref error);
             if (error != IntPtr.Zero)
             {

+ 1 - 1
src/Ryujinx.Graphics.Metal/State/PipelineUid.cs

@@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void Swap(ColorBlendStateUid uid)
         {
-            var format = PixelFormat;
+            MTLPixelFormat format = PixelFormat;
 
             this = uid;
             PixelFormat = format;

+ 2 - 2
src/Ryujinx.Graphics.Metal/StateCache.cs

@@ -25,14 +25,14 @@ namespace Ryujinx.Graphics.Metal
 
         public T GetOrCreate(TDescriptor descriptor)
         {
-            var hash = GetHash(descriptor);
+            THash hash = GetHash(descriptor);
             if (_cache.TryGetValue(hash, out T value))
             {
                 return value;
             }
             else
             {
-                var newValue = CreateValue(descriptor);
+                T newValue = CreateValue(descriptor);
                 _cache.Add(hash, newValue);
 
                 return newValue;

+ 30 - 30
src/Ryujinx.Graphics.Metal/Texture.cs

@@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Metal
         {
             MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format);
 
-            var descriptor = new MTLTextureDescriptor
+            MTLTextureDescriptor descriptor = new MTLTextureDescriptor
             {
                 PixelFormat = pixelFormat,
                 Usage = MTLTextureUsage.Unknown,
@@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Metal
 
         public Texture(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info, MTLTexture sourceTexture, int firstLayer, int firstLevel) : base(device, renderer, pipeline, info)
         {
-            var pixelFormat = FormatTable.GetFormat(Info.Format);
+            MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format);
 
             if (info.DepthStencilMode == DepthStencilMode.Stencil)
             {
@@ -77,7 +77,7 @@ namespace Ryujinx.Graphics.Metal
                 };
             }
 
-            var textureType = Info.Target.Convert();
+            MTLTextureType textureType = Info.Target.Convert();
             NSRange levels;
             levels.location = (ulong)firstLevel;
             levels.length = (ulong)Info.Levels;
@@ -85,7 +85,7 @@ namespace Ryujinx.Graphics.Metal
             slices.location = (ulong)firstLayer;
             slices.length = textureType == MTLTextureType.Type3D ? 1 : (ulong)info.GetDepthOrLayers();
 
-            var swizzle = GetSwizzle(info, pixelFormat);
+            MTLTextureSwizzleChannels swizzle = GetSwizzle(info, pixelFormat);
 
             _identitySwizzleHandle = sourceTexture.NewTextureView(pixelFormat, textureType, levels, slices);
 
@@ -131,10 +131,10 @@ namespace Ryujinx.Graphics.Metal
 
         private MTLTextureSwizzleChannels GetSwizzle(TextureCreateInfo info, MTLPixelFormat pixelFormat)
         {
-            var swizzleR = Info.SwizzleR.Convert();
-            var swizzleG = Info.SwizzleG.Convert();
-            var swizzleB = Info.SwizzleB.Convert();
-            var swizzleA = Info.SwizzleA.Convert();
+            MTLTextureSwizzle swizzleR = Info.SwizzleR.Convert();
+            MTLTextureSwizzle swizzleG = Info.SwizzleG.Convert();
+            MTLTextureSwizzle swizzleB = Info.SwizzleB.Convert();
+            MTLTextureSwizzle swizzleA = Info.SwizzleA.Convert();
 
             if (info.Format == Format.R5G5B5A1Unorm ||
                 info.Format == Format.R5G5B5X1Unorm ||
@@ -144,8 +144,8 @@ namespace Ryujinx.Graphics.Metal
             }
             else if (pixelFormat == MTLPixelFormat.ABGR4Unorm || info.Format == Format.A1B5G5R5Unorm)
             {
-                var tempB = swizzleB;
-                var tempA = swizzleA;
+                MTLTextureSwizzle tempB = swizzleB;
+                MTLTextureSwizzle tempA = swizzleA;
 
                 swizzleB = swizzleG;
                 swizzleA = swizzleR;
@@ -174,8 +174,8 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var srcImage = GetHandle();
-            var dstImage = dst.GetHandle();
+            MTLTexture srcImage = GetHandle();
+            MTLTexture dstImage = dst.GetHandle();
 
             if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample())
             {
@@ -231,8 +231,8 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var srcImage = GetHandle();
-            var dstImage = dst.GetHandle();
+            MTLTexture srcImage = GetHandle();
+            MTLTexture dstImage = dst.GetHandle();
 
             if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample())
             {
@@ -276,7 +276,7 @@ namespace Ryujinx.Graphics.Metal
                 return;
             }
 
-            var dst = (Texture)destination;
+            Texture dst = (Texture)destination;
 
             bool isDepthOrStencil = dst.Info.Format.IsDepthOrStencil();
 
@@ -285,15 +285,15 @@ namespace Ryujinx.Graphics.Metal
 
         public void CopyTo(BufferRange range, int layer, int level, int stride)
         {
-            var cbs = Pipeline.Cbs;
+            CommandBufferScoped cbs = Pipeline.Cbs;
 
             int outSize = Info.GetMipSize(level);
             int hostSize = GetBufferDataLength(outSize);
 
             int offset = range.Offset;
 
-            var autoBuffer = Renderer.BufferManager.GetBuffer(range.Handle, true);
-            var mtlBuffer = autoBuffer.Get(cbs, range.Offset, outSize).Value;
+            Auto<DisposableBuffer> autoBuffer = Renderer.BufferManager.GetBuffer(range.Handle, true);
+            MTLBuffer mtlBuffer = autoBuffer.Get(cbs, range.Offset, outSize).Value;
 
             if (PrepareOutputBuffer(cbs, hostSize, mtlBuffer, out MTLBuffer copyToBuffer, out BufferHolder tempCopyHolder))
             {
@@ -511,13 +511,13 @@ namespace Ryujinx.Graphics.Metal
 
         public void SetData(MemoryOwner<byte> data)
         {
-            var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder();
+            MTLBlitCommandEncoder blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder();
 
-            var dataSpan = data.Memory.Span;
+            Span<byte> dataSpan = data.Memory.Span;
 
-            var buffer = Renderer.BufferManager.Create(dataSpan.Length);
+            BufferHolder buffer = Renderer.BufferManager.Create(dataSpan.Length);
             buffer.SetDataUnchecked(0, dataSpan);
-            var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value;
+            MTLBuffer mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value;
 
             int width = Info.Width;
             int height = Info.Height;
@@ -572,16 +572,16 @@ namespace Ryujinx.Graphics.Metal
         {
             int bufferDataLength = GetBufferDataLength(data.Length);
 
-            using var bufferHolder = Renderer.BufferManager.Create(bufferDataLength);
+            using BufferHolder bufferHolder = Renderer.BufferManager.Create(bufferDataLength);
 
             // TODO: loadInline logic
 
-            var cbs = Pipeline.Cbs;
+            CommandBufferScoped cbs = Pipeline.Cbs;
 
             CopyDataToBuffer(bufferHolder.GetDataStorage(0, bufferDataLength), data);
 
-            var buffer = bufferHolder.GetBuffer().Get(cbs).Value;
-            var image = GetHandle();
+            MTLBuffer buffer = bufferHolder.GetBuffer().Get(cbs).Value;
+            MTLTexture image = GetHandle();
 
             CopyFromOrToBuffer(cbs, buffer, image, bufferDataLength, false, layer, level, layers, levels, singleSlice);
         }
@@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Metal
 
         public void SetData(MemoryOwner<byte> data, int layer, int level, Rectangle<int> region)
         {
-            var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder();
+            MTLBlitCommandEncoder blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder();
 
             ulong bytesPerRow = (ulong)Info.GetMipStride(level);
             ulong bytesPerImage = 0;
@@ -604,11 +604,11 @@ namespace Ryujinx.Graphics.Metal
                 bytesPerImage = bytesPerRow * (ulong)Info.Height;
             }
 
-            var dataSpan = data.Memory.Span;
+            Span<byte> dataSpan = data.Memory.Span;
 
-            var buffer = Renderer.BufferManager.Create(dataSpan.Length);
+            BufferHolder buffer = Renderer.BufferManager.Create(dataSpan.Length);
             buffer.SetDataUnchecked(0, dataSpan);
-            var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value;
+            MTLBuffer mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value;
 
             blitCommandEncoder.CopyFromBuffer(
                 mtlBuffer,

+ 1 - 1
src/Ryujinx.Graphics.Metal/VertexBufferState.cs

@@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Metal
             if (autoBuffer != null)
             {
                 int offset = _offset;
-                var buffer = autoBuffer.Get(cbs, offset, _size).Value;
+                MTLBuffer buffer = autoBuffer.Get(cbs, offset, _size).Value;
 
                 return (buffer, offset);
             }

+ 2 - 2
src/Ryujinx.Graphics.Metal/Window.cs

@@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Metal
             if (_requestedWidth != 0 && _requestedHeight != 0)
             {
                 // TODO: This is actually a CGSize, but there is no overload for that, so fill the first two fields of rect with the size.
-                var rect = new NSRect(_requestedWidth, _requestedHeight, 0, 0);
+                NSRect rect = new NSRect(_requestedWidth, _requestedHeight, 0, 0);
 
                 ObjectiveC.objc_msgSend(_metalLayer, "setDrawableSize:", rect);
 
@@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Metal
             {
                 ResizeIfNeeded();
 
-                var drawable = new CAMetalDrawable(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable"));
+                CAMetalDrawable drawable = new CAMetalDrawable(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable"));
 
                 _width = (int)drawable.Texture.Width;
                 _height = (int)drawable.Texture.Height;