From fa9d38c77999ef9ae8b02e1f85619d7ccb10d3c5 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 6 Jul 2024 22:56:04 +0100 Subject: [PATCH] Formatting cleanup --- .../BackgroundResources.cs | 12 +- src/Ryujinx.Graphics.Metal/BufferManager.cs | 2 +- src/Ryujinx.Graphics.Metal/CacheByRange.cs | 164 +++++++++--------- .../EncoderStateManager.cs | 66 +++---- src/Ryujinx.Graphics.Metal/MetalRenderer.cs | 2 +- .../PersistentFlushBuffer.cs | 4 +- src/Ryujinx.Graphics.Metal/StagingBuffer.cs | 4 +- src/Ryujinx.Graphics.Metal/Texture.cs | 94 +++++----- src/Ryujinx.Graphics.Metal/TextureBase.cs | 25 ++- src/Ryujinx.Graphics.Metal/TextureBuffer.cs | 20 +-- 10 files changed, 192 insertions(+), 201 deletions(-) diff --git a/src/Ryujinx.Graphics.Metal/BackgroundResources.cs b/src/Ryujinx.Graphics.Metal/BackgroundResources.cs index c06a6747b..8bf6b92bd 100644 --- a/src/Ryujinx.Graphics.Metal/BackgroundResources.cs +++ b/src/Ryujinx.Graphics.Metal/BackgroundResources.cs @@ -10,15 +10,13 @@ namespace Ryujinx.Graphics.Metal class BackgroundResource : IDisposable { private readonly MetalRenderer _renderer; - private readonly Pipeline _pipeline; private CommandBufferPool _pool; private PersistentFlushBuffer _flushBuffer; - public BackgroundResource(MetalRenderer renderer, Pipeline pipeline) + public BackgroundResource(MetalRenderer renderer) { _renderer = renderer; - _pipeline = pipeline; } public CommandBufferPool GetPool() @@ -35,7 +33,7 @@ namespace Ryujinx.Graphics.Metal public PersistentFlushBuffer GetFlushBuffer() { - _flushBuffer ??= new PersistentFlushBuffer(_renderer, _pipeline); + _flushBuffer ??= new PersistentFlushBuffer(_renderer); return _flushBuffer; } @@ -51,14 +49,12 @@ namespace Ryujinx.Graphics.Metal class BackgroundResources : IDisposable { private readonly MetalRenderer _renderer; - private readonly Pipeline _pipeline; private readonly Dictionary _resources; - public BackgroundResources(MetalRenderer renderer, Pipeline pipeline) + public BackgroundResources(MetalRenderer renderer) { _renderer = renderer; - _pipeline = pipeline; _resources = new Dictionary(); } @@ -88,7 +84,7 @@ namespace Ryujinx.Graphics.Metal { Cleanup(); - resource = new BackgroundResource(_renderer, _pipeline); + resource = new BackgroundResource(_renderer); _resources[thread] = resource; } diff --git a/src/Ryujinx.Graphics.Metal/BufferManager.cs b/src/Ryujinx.Graphics.Metal/BufferManager.cs index e1a005a41..1bc7d458e 100644 --- a/src/Ryujinx.Graphics.Metal/BufferManager.cs +++ b/src/Ryujinx.Graphics.Metal/BufferManager.cs @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Metal _pipeline = pipeline; _buffers = new IdList(); - StagingBuffer = new StagingBuffer(_renderer, _pipeline, this); + StagingBuffer = new StagingBuffer(_renderer, this); } public BufferHandle Create(nint pointer, int size) diff --git a/src/Ryujinx.Graphics.Metal/CacheByRange.cs b/src/Ryujinx.Graphics.Metal/CacheByRange.cs index 39255de39..80a0c1018 100644 --- a/src/Ryujinx.Graphics.Metal/CacheByRange.cs +++ b/src/Ryujinx.Graphics.Metal/CacheByRange.cs @@ -13,13 +13,13 @@ namespace Ryujinx.Graphics.Metal struct I8ToI16CacheKey : ICacheKey { // Used to notify the pipeline that bindings have invalidated on dispose. - private readonly MetalRenderer _renderer; - private Auto _buffer; + // private readonly MetalRenderer _renderer; + // private Auto _buffer; public I8ToI16CacheKey(MetalRenderer renderer) { - _renderer = renderer; - _buffer = null; + // _renderer = renderer; + // _buffer = null; } public readonly bool KeyEqual(ICacheKey other) @@ -27,92 +27,92 @@ namespace Ryujinx.Graphics.Metal return other is I8ToI16CacheKey; } - public void SetBuffer(Auto buffer) + public readonly void SetBuffer(Auto buffer) { - _buffer = buffer; + // _buffer = buffer; } - public void Dispose() + public readonly void Dispose() { // TODO: Tell pipeline buffer is dirty! // _renderer.PipelineInternal.DirtyIndexBuffer(_buffer); } } - [SupportedOSPlatform("macos")] - struct AlignedVertexBufferCacheKey : ICacheKey - { - private readonly int _stride; - private readonly int _alignment; + // [SupportedOSPlatform("macos")] + // struct AlignedVertexBufferCacheKey : ICacheKey + // { + // private readonly int _stride; + // private readonly int _alignment; + // + // // Used to notify the pipeline that bindings have invalidated on dispose. + // // private readonly MetalRenderer _renderer; + // // private Auto _buffer; + // + // public AlignedVertexBufferCacheKey(MetalRenderer renderer, int stride, int alignment) + // { + // // _renderer = renderer; + // _stride = stride; + // _alignment = alignment; + // // _buffer = null; + // } + // + // public readonly bool KeyEqual(ICacheKey other) + // { + // return other is AlignedVertexBufferCacheKey entry && + // entry._stride == _stride && + // entry._alignment == _alignment; + // } + // + // public void SetBuffer(Auto buffer) + // { + // // _buffer = buffer; + // } + // + // public readonly void Dispose() + // { + // // TODO: Tell pipeline buffer is dirty! + // // _renderer.PipelineInternal.DirtyVertexBuffer(_buffer); + // } + // } - // Used to notify the pipeline that bindings have invalidated on dispose. - private readonly MetalRenderer _renderer; - private Auto _buffer; - - public AlignedVertexBufferCacheKey(MetalRenderer renderer, int stride, int alignment) - { - _renderer = renderer; - _stride = stride; - _alignment = alignment; - _buffer = null; - } - - public readonly bool KeyEqual(ICacheKey other) - { - return other is AlignedVertexBufferCacheKey entry && - entry._stride == _stride && - entry._alignment == _alignment; - } - - public void SetBuffer(Auto buffer) - { - _buffer = buffer; - } - - public readonly void Dispose() - { - // TODO: Tell pipeline buffer is dirty! - // _renderer.PipelineInternal.DirtyVertexBuffer(_buffer); - } - } - - [SupportedOSPlatform("macos")] - struct TopologyConversionCacheKey : ICacheKey - { - // TODO: Patterns - // private readonly IndexBufferPattern _pattern; - private readonly int _indexSize; - - // Used to notify the pipeline that bindings have invalidated on dispose. - private readonly MetalRenderer _renderer; - private Auto _buffer; - - public TopologyConversionCacheKey(MetalRenderer renderer, /*IndexBufferPattern pattern, */int indexSize) - { - _renderer = renderer; - // _pattern = pattern; - _indexSize = indexSize; - _buffer = null; - } - - public readonly bool KeyEqual(ICacheKey other) - { - return other is TopologyConversionCacheKey entry && - // entry._pattern == _pattern && - entry._indexSize == _indexSize; - } - - public void SetBuffer(Auto buffer) - { - _buffer = buffer; - } - - public readonly void Dispose() - { - // TODO: Tell pipeline buffer is dirty! - // _renderer.PipelineInternal.DirtyVertexBuffer(_buffer); - } - } + // [SupportedOSPlatform("macos")] + // struct TopologyConversionCacheKey : ICacheKey + // { + // // TODO: Patterns + // // private readonly IndexBufferPattern _pattern; + // private readonly int _indexSize; + // + // // Used to notify the pipeline that bindings have invalidated on dispose. + // // private readonly MetalRenderer _renderer; + // // private Auto _buffer; + // + // public TopologyConversionCacheKey(MetalRenderer renderer, /*IndexBufferPattern pattern, */int indexSize) + // { + // // _renderer = renderer; + // // _pattern = pattern; + // _indexSize = indexSize; + // // _buffer = null; + // } + // + // public readonly bool KeyEqual(ICacheKey other) + // { + // return other is TopologyConversionCacheKey entry && + // // entry._pattern == _pattern && + // entry._indexSize == _indexSize; + // } + // + // public void SetBuffer(Auto buffer) + // { + // // _buffer = buffer; + // } + // + // public readonly void Dispose() + // { + // // TODO: Tell pipeline buffer is dirty! + // // _renderer.PipelineInternal.DirtyVertexBuffer(_buffer); + // } + // } [SupportedOSPlatform("macos")] readonly struct Dependency @@ -141,8 +141,8 @@ namespace Ryujinx.Graphics.Metal { private struct Entry { - public ICacheKey Key; - public T Value; + public readonly ICacheKey Key; + public readonly T Value; public List DependencyList; public Entry(ICacheKey key, T value) diff --git a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs index 4c1e82269..83e1835a3 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs @@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Metal } } - public void Dispose() + public readonly void Dispose() { // State @@ -79,7 +79,7 @@ namespace Ryujinx.Graphics.Metal }; } - public void RestorePredrawState(PredrawState state) + public readonly void RestorePredrawState(PredrawState state) { _currentState.CullMode = state.CullMode; _currentState.DepthStencilUid = state.DepthStencilUid; @@ -89,12 +89,12 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.CullMode | DirtyFlags.DepthStencil | DirtyFlags.Viewports; } - public void SetClearLoadAction(bool clear) + public readonly void SetClearLoadAction(bool clear) { _currentState.ClearLoadAction = clear; } - public MTLRenderCommandEncoder CreateRenderCommandEncoder() + public readonly MTLRenderCommandEncoder CreateRenderCommandEncoder() { // Initialise Pass & State var renderPassDescriptor = new MTLRenderPassDescriptor(); @@ -161,7 +161,7 @@ namespace Ryujinx.Graphics.Metal return renderCommandEncoder; } - public MTLComputeCommandEncoder CreateComputeCommandEncoder() + public readonly MTLComputeCommandEncoder CreateComputeCommandEncoder() { var descriptor = new MTLComputePassDescriptor(); var computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor); @@ -246,7 +246,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty &= ~DirtyFlags.RenderAll; } - public void RebindComputeState(MTLComputeCommandEncoder computeCommandEncoder) + public readonly void RebindComputeState(MTLComputeCommandEncoder computeCommandEncoder) { if (_currentState.Dirty.HasFlag(DirtyFlags.ComputePipeline)) { @@ -276,7 +276,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty &= ~DirtyFlags.ComputeAll; } - private void SetRenderPipelineState(MTLRenderCommandEncoder renderCommandEncoder) + private readonly void SetRenderPipelineState(MTLRenderCommandEncoder renderCommandEncoder) { MTLRenderPipelineState pipelineState = _currentState.Pipeline.CreateRenderPipeline(_device, _currentState.RenderProgram); @@ -289,7 +289,7 @@ namespace Ryujinx.Graphics.Metal _currentState.BlendColor.Alpha); } - private void SetComputePipelineState(MTLComputeCommandEncoder computeCommandEncoder) + private readonly void SetComputePipelineState(MTLComputeCommandEncoder computeCommandEncoder) { if (_currentState.ComputeProgram == null) { @@ -301,7 +301,7 @@ namespace Ryujinx.Graphics.Metal computeCommandEncoder.SetComputePipelineState(pipelineState); } - public void UpdateIndexBuffer(BufferRange buffer, IndexType type) + public readonly void UpdateIndexBuffer(BufferRange buffer, IndexType type) { if (buffer.Handle != BufferHandle.Null) { @@ -320,12 +320,12 @@ namespace Ryujinx.Graphics.Metal } } - public void UpdatePrimitiveTopology(PrimitiveTopology topology) + public readonly void UpdatePrimitiveTopology(PrimitiveTopology topology) { _currentState.Topology = topology; } - public void UpdateProgram(IProgram program) + public readonly void UpdateProgram(IProgram program) { Program prg = (Program)program; @@ -356,13 +356,13 @@ namespace Ryujinx.Graphics.Metal } } - public void UpdateRenderTargets(ITexture[] colors, ITexture depthStencil) + public readonly void UpdateRenderTargets(ITexture[] colors, ITexture depthStencil) { _currentState.FramebufferUsingColorWriteMask = false; UpdateRenderTargetsInternal(colors, depthStencil); } - public void UpdateRenderTargetColorMasks(ReadOnlySpan componentMask) + public readonly void UpdateRenderTargetColorMasks(ReadOnlySpan componentMask) { ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState; @@ -415,7 +415,7 @@ namespace Ryujinx.Graphics.Metal } } - private void UpdateRenderTargetsInternal(ITexture[] colors, ITexture depthStencil) + private readonly void UpdateRenderTargetsInternal(ITexture[] colors, ITexture depthStencil) { // TBDR GPUs don't work properly if the same attachment is bound to multiple targets, // due to each attachment being a copy of the real attachment, rather than a direct write. @@ -496,7 +496,7 @@ namespace Ryujinx.Graphics.Metal } } - private void MaskOut(ITexture[] colors, ITexture depthStencil) + private readonly void MaskOut(ITexture[] colors, ITexture depthStencil) { if (!_currentState.FramebufferUsingColorWriteMask) { @@ -508,7 +508,7 @@ namespace Ryujinx.Graphics.Metal _currentState.FramebufferUsingColorWriteMask = true; } - public void UpdateVertexAttribs(ReadOnlySpan vertexAttribs) + public readonly void UpdateVertexAttribs(ReadOnlySpan vertexAttribs) { vertexAttribs.CopyTo(_currentState.VertexAttribs); @@ -519,7 +519,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.RenderPipeline; } - public void UpdateBlendDescriptors(int index, BlendDescriptor blend) + public readonly void UpdateBlendDescriptors(int index, BlendDescriptor blend) { ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState[index]; @@ -577,7 +577,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.DepthStencil; } - public void UpdateDepthState(DepthTestDescriptor depthTest) + public readonly void UpdateDepthState(DepthTestDescriptor depthTest) { ref DepthStencilUid uid = ref _currentState.DepthStencilUid; @@ -589,7 +589,7 @@ namespace Ryujinx.Graphics.Metal } // Inlineable - public void UpdateDepthClamp(bool clamp) + public readonly void UpdateDepthClamp(bool clamp) { _currentState.DepthClipMode = clamp ? MTLDepthClipMode.Clamp : MTLDepthClipMode.Clip; @@ -605,7 +605,7 @@ namespace Ryujinx.Graphics.Metal } // Inlineable - public void UpdateDepthBias(float depthBias, float slopeScale, float clamp) + public readonly void UpdateDepthBias(float depthBias, float slopeScale, float clamp) { _currentState.DepthBias = depthBias; _currentState.SlopeScale = slopeScale; @@ -683,7 +683,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.Viewports; } - public void UpdateVertexBuffers(ReadOnlySpan vertexBuffers) + public readonly void UpdateVertexBuffers(ReadOnlySpan vertexBuffers) { vertexBuffers.CopyTo(_currentState.VertexBuffers); @@ -694,7 +694,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.RenderPipeline; } - public void UpdateUniformBuffers(ReadOnlySpan buffers) + public readonly void UpdateUniformBuffers(ReadOnlySpan buffers) { foreach (BufferAssignment assignment in buffers) { @@ -711,7 +711,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.Uniforms; } - public void UpdateStorageBuffers(ReadOnlySpan buffers) + public readonly void UpdateStorageBuffers(ReadOnlySpan buffers) { foreach (BufferAssignment assignment in buffers) { @@ -728,7 +728,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.Storages; } - public void UpdateStorageBuffers(int first, ReadOnlySpan> buffers) + public readonly void UpdateStorageBuffers(int first, ReadOnlySpan> buffers) { for (int i = 0; i < buffers.Length; i++) { @@ -767,7 +767,7 @@ namespace Ryujinx.Graphics.Metal } // Inlineable - public void UpdateFrontFace(FrontFace frontFace) + public readonly void UpdateFrontFace(FrontFace frontFace) { _currentState.Winding = frontFace.Convert(); @@ -782,7 +782,7 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.FrontFace; } - private void UpdateStencilRefValue(int frontRef, int backRef) + private readonly void UpdateStencilRefValue(int frontRef, int backRef) { _currentState.FrontRefValue = frontRef; _currentState.BackRefValue = backRef; @@ -797,9 +797,9 @@ namespace Ryujinx.Graphics.Metal _currentState.Dirty |= DirtyFlags.StencilRef; } - public void UpdateTextureAndSampler(ShaderStage stage, ulong binding, TextureBase texture, Sampler sampler) + public readonly void UpdateTextureAndSampler(ShaderStage stage, ulong binding, TextureBase texture, Sampler sampler) { - if (texture is TextureBuffer textureBuffer) + if (texture is TextureBuffer) { // TODO: Texture buffers } @@ -853,7 +853,7 @@ namespace Ryujinx.Graphics.Metal } } - private unsafe void SetViewports(MTLRenderCommandEncoder renderCommandEncoder) + private readonly unsafe void SetViewports(MTLRenderCommandEncoder renderCommandEncoder) { if (_currentState.Viewports.Length > 0) { @@ -864,7 +864,7 @@ namespace Ryujinx.Graphics.Metal } } - private void UpdatePipelineVertexState(VertexBufferDescriptor[] bufferDescriptors, VertexAttribDescriptor[] attribDescriptors) + private readonly void UpdatePipelineVertexState(VertexBufferDescriptor[] bufferDescriptors, VertexAttribDescriptor[] attribDescriptors) { ref PipelineState pipeline = ref _currentState.Pipeline; uint indexMask = 0; @@ -941,7 +941,7 @@ namespace Ryujinx.Graphics.Metal pipeline.VertexBindingDescriptionsCount = Constants.ZeroBufferIndex + 1; // TODO: move this out? } - private void SetVertexBuffers(MTLRenderCommandEncoder renderCommandEncoder, VertexBufferDescriptor[] bufferDescriptors) + private readonly void SetVertexBuffers(MTLRenderCommandEncoder renderCommandEncoder, VertexBufferDescriptor[] bufferDescriptors) { for (int i = 0; i < bufferDescriptors.Length; i++) { @@ -974,7 +974,7 @@ namespace Ryujinx.Graphics.Metal renderCommandEncoder.SetVertexBuffer(zeroMtlBuffer, 0, Constants.ZeroBufferIndex); } - private void UpdateAndBind(MTLRenderCommandEncoder renderCommandEncoder, Program program, int setIndex) + private readonly void UpdateAndBind(MTLRenderCommandEncoder renderCommandEncoder, Program program, int setIndex) { var bindingSegments = program.BindingSegments[setIndex]; @@ -1193,7 +1193,7 @@ namespace Ryujinx.Graphics.Metal } } - private void UpdateAndBind(MTLComputeCommandEncoder computeCommandEncoder, Program program, int setIndex) + private readonly void UpdateAndBind(MTLComputeCommandEncoder computeCommandEncoder, Program program, int setIndex) { var bindingSegments = program.BindingSegments[setIndex]; diff --git a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs index 4d744bbe4..fa24e70a0 100644 --- a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs +++ b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs @@ -67,7 +67,7 @@ namespace Ryujinx.Graphics.Metal _pipeline.InitEncoderStateManager(BufferManager); - BackgroundResources = new BackgroundResources(this, _pipeline); + BackgroundResources = new BackgroundResources(this); HelperShader = new HelperShader(_device, this, _pipeline); SyncManager = new SyncManager(this); } diff --git a/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs b/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs index a1834f0b7..fa3df47db 100644 --- a/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs +++ b/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs @@ -8,14 +8,12 @@ namespace Ryujinx.Graphics.Metal internal class PersistentFlushBuffer : IDisposable { private readonly MetalRenderer _renderer; - private readonly Pipeline _pipeline; private BufferHolder _flushStorage; - public PersistentFlushBuffer(MetalRenderer renderer, Pipeline pipeline) + public PersistentFlushBuffer(MetalRenderer renderer) { _renderer = renderer; - _pipeline = pipeline; } private BufferHolder ResizeIfNeeded(int size) diff --git a/src/Ryujinx.Graphics.Metal/StagingBuffer.cs b/src/Ryujinx.Graphics.Metal/StagingBuffer.cs index d739cdd3f..b250b87f2 100644 --- a/src/Ryujinx.Graphics.Metal/StagingBuffer.cs +++ b/src/Ryujinx.Graphics.Metal/StagingBuffer.cs @@ -31,7 +31,6 @@ namespace Ryujinx.Graphics.Metal private int _freeSize; private readonly MetalRenderer _renderer; - private readonly Pipeline _pipeline; private readonly BufferHolder _buffer; private readonly int _resourceAlignment; @@ -52,10 +51,9 @@ namespace Ryujinx.Graphics.Metal private readonly Queue _pendingCopies; - public StagingBuffer(MetalRenderer renderer, Pipeline pipeline, BufferManager bufferManager) + public StagingBuffer(MetalRenderer renderer, BufferManager bufferManager) { _renderer = renderer; - _pipeline = pipeline; Handle = bufferManager.CreateWithHandle(BufferSize, out _buffer); _pendingCopies = new Queue(); diff --git a/src/Ryujinx.Graphics.Metal/Texture.cs b/src/Ryujinx.Graphics.Metal/Texture.cs index a687062a5..fa5def60b 100644 --- a/src/Ryujinx.Graphics.Metal/Texture.cs +++ b/src/Ryujinx.Graphics.Metal/Texture.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Metal class Texture : TextureBase, ITexture { private MTLTexture _identitySwizzleHandle; - private bool _identityIsDifferent; + private readonly bool _identityIsDifferent; public Texture(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info) : base(device, renderer, pipeline, info) { @@ -40,15 +40,15 @@ namespace Ryujinx.Graphics.Metal MTLTextureSwizzleChannels swizzle = GetSwizzle(info, descriptor.PixelFormat); - _identitySwizzleHandle = _device.NewTexture(descriptor); + _identitySwizzleHandle = Device.NewTexture(descriptor); if (SwizzleIsIdentity(swizzle)) { - _mtlTexture = _identitySwizzleHandle; + MtlTexture = _identitySwizzleHandle; } else { - _mtlTexture = CreateDefaultView(_identitySwizzleHandle, swizzle, descriptor); + MtlTexture = CreateDefaultView(_identitySwizzleHandle, swizzle, descriptor); _identityIsDifferent = true; } @@ -73,11 +73,11 @@ namespace Ryujinx.Graphics.Metal if (SwizzleIsIdentity(swizzle)) { - _mtlTexture = _identitySwizzleHandle; + MtlTexture = _identitySwizzleHandle; } else { - _mtlTexture = sourceTexture.NewTextureView(pixelFormat, textureType, levels, slices, swizzle); + MtlTexture = sourceTexture.NewTextureView(pixelFormat, textureType, levels, slices, swizzle); _identityIsDifferent = true; } @@ -146,7 +146,7 @@ namespace Ryujinx.Graphics.Metal public void CopyTo(ITexture destination, int firstLayer, int firstLevel) { - CommandBufferScoped cbs = _pipeline.Cbs; + CommandBufferScoped cbs = Pipeline.Cbs; TextureBase src = this; TextureBase dst = (TextureBase)destination; @@ -156,30 +156,30 @@ namespace Ryujinx.Graphics.Metal if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) { - //int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); - //_gd.HelperShader.CopyMSToNonMS(_gd, cbs, src, dst, 0, firstLayer, layers); + // _gd.HelperShader.CopyMSToNonMS(_gd, cbs, src, dst, 0, firstLayer, layers); } else if (dst.Info.Target.IsMultisample() && !Info.Target.IsMultisample()) { - //int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); - //_gd.HelperShader.CopyNonMSToMS(_gd, cbs, src, dst, 0, firstLayer, layers); + // _gd.HelperShader.CopyNonMSToMS(_gd, cbs, src, dst, 0, firstLayer, layers); } else if (dst.Info.BytesPerPixel != Info.BytesPerPixel) { - //int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); - //int levels = Math.Min(Info.Levels, dst.Info.Levels - firstLevel); + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + // int levels = Math.Min(Info.Levels, dst.Info.Levels - firstLevel); - //_gd.HelperShader.CopyIncompatibleFormats(_gd, cbs, src, dst, 0, firstLayer, 0, firstLevel, layers, levels); + // _gd.HelperShader.CopyIncompatibleFormats(_gd, cbs, src, dst, 0, firstLayer, 0, firstLevel, layers, levels); } else if (src.Info.Format.IsDepthOrStencil() != dst.Info.Format.IsDepthOrStencil()) { - int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); - int levels = Math.Min(Info.Levels, dst.Info.Levels - firstLevel); + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + // int levels = Math.Min(Info.Levels, dst.Info.Levels - firstLevel); // TODO: depth copy? - //_gd.HelperShader.CopyColor(_gd, cbs, src, dst, 0, firstLayer, 0, FirstLevel, layers, levels); + // _gd.HelperShader.CopyColor(_gd, cbs, src, dst, 0, firstLayer, 0, FirstLevel, layers, levels); } else { @@ -198,7 +198,7 @@ namespace Ryujinx.Graphics.Metal public void CopyTo(ITexture destination, int srcLayer, int dstLayer, int srcLevel, int dstLevel) { - CommandBufferScoped cbs = _pipeline.Cbs; + CommandBufferScoped cbs = Pipeline.Cbs; TextureBase src = this; TextureBase dst = (TextureBase)destination; @@ -208,19 +208,19 @@ namespace Ryujinx.Graphics.Metal if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) { - //_gd.HelperShader.CopyMSToNonMS(_gd, cbs, src, dst, srcLayer, dstLayer, 1); + // _gd.HelperShader.CopyMSToNonMS(_gd, cbs, src, dst, srcLayer, dstLayer, 1); } else if (dst.Info.Target.IsMultisample() && !Info.Target.IsMultisample()) { - //_gd.HelperShader.CopyNonMSToMS(_gd, cbs, src, dst, srcLayer, dstLayer, 1); + // _gd.HelperShader.CopyNonMSToMS(_gd, cbs, src, dst, srcLayer, dstLayer, 1); } else if (dst.Info.BytesPerPixel != Info.BytesPerPixel) { - //_gd.HelperShader.CopyIncompatibleFormats(_gd, cbs, src, dst, srcLayer, dstLayer, srcLevel, dstLevel, 1, 1); + // _gd.HelperShader.CopyIncompatibleFormats(_gd, cbs, src, dst, srcLayer, dstLayer, srcLevel, dstLevel, 1, 1); } else if (src.Info.Format.IsDepthOrStencil() != dst.Info.Format.IsDepthOrStencil()) { - //_gd.HelperShader.CopyColor(_gd, cbs, src, dst, srcLayer, dstLayer, srcLevel, dstLevel, 1, 1); + // _gd.HelperShader.CopyColor(_gd, cbs, src, dst, srcLayer, dstLayer, srcLevel, dstLevel, 1, 1); } else { @@ -241,7 +241,7 @@ namespace Ryujinx.Graphics.Metal public void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter) { - if (!_renderer.CommandBufferPool.OwnedByCurrentThread) + if (!Renderer.CommandBufferPool.OwnedByCurrentThread) { Logger.Warning?.PrintMsg(LogClass.Gpu, "Metal doesn't currently support scaled blit on background thread."); @@ -256,29 +256,29 @@ namespace Ryujinx.Graphics.Metal Console.WriteLine("shit"); } - _pipeline.Blit(this, destination, srcRegion, dstRegion, isDepthOrStencil, linearFilter); + Pipeline.Blit(this, destination, srcRegion, dstRegion, isDepthOrStencil, linearFilter); } public void CopyTo(BufferRange range, int layer, int level, int stride) { - var cbs = _pipeline.Cbs; + var 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 autoBuffer = Renderer.BufferManager.GetBuffer(range.Handle, true); var mtlBuffer = autoBuffer.Get(cbs, range.Offset, outSize).Value; // TODO: D32S8 conversion via temp copy holder - CopyFromOrToBuffer(cbs, mtlBuffer, _mtlTexture, hostSize, true, layer, level, 1, 1, singleSlice: true, offset: offset, stride: stride); + CopyFromOrToBuffer(cbs, mtlBuffer, MtlTexture, hostSize, true, layer, level, 1, 1, singleSlice: true, offset: offset, stride: stride); } public ITexture CreateView(TextureCreateInfo info, int firstLayer, int firstLevel) { - return new Texture(_device, _renderer, _pipeline, info, _identitySwizzleHandle, firstLayer, firstLevel); + return new Texture(Device, Renderer, Pipeline, info, _identitySwizzleHandle, firstLayer, firstLevel); } private int GetBufferDataLength(int size) @@ -415,13 +415,13 @@ namespace Ryujinx.Graphics.Metal public PinnedSpan GetData() { - BackgroundResource resources = _renderer.BackgroundResources.Get(); + BackgroundResource resources = Renderer.BackgroundResources.Get(); - if (_renderer.CommandBufferPool.OwnedByCurrentThread) + if (Renderer.CommandBufferPool.OwnedByCurrentThread) { - _renderer.FlushAllCommands(); + Renderer.FlushAllCommands(); - return PinnedSpan.UnsafeFromSpan(GetData(_renderer.CommandBufferPool, resources.GetFlushBuffer())); + return PinnedSpan.UnsafeFromSpan(GetData(Renderer.CommandBufferPool, resources.GetFlushBuffer())); } return PinnedSpan.UnsafeFromSpan(GetData(resources.GetPool(), resources.GetFlushBuffer())); @@ -429,13 +429,13 @@ namespace Ryujinx.Graphics.Metal public PinnedSpan GetData(int layer, int level) { - BackgroundResource resources = _renderer.BackgroundResources.Get(); + BackgroundResource resources = Renderer.BackgroundResources.Get(); - if (_renderer.CommandBufferPool.OwnedByCurrentThread) + if (Renderer.CommandBufferPool.OwnedByCurrentThread) { - _renderer.FlushAllCommands(); + Renderer.FlushAllCommands(); - return PinnedSpan.UnsafeFromSpan(GetData(_renderer.CommandBufferPool, resources.GetFlushBuffer(), layer, level)); + return PinnedSpan.UnsafeFromSpan(GetData(Renderer.CommandBufferPool, resources.GetFlushBuffer(), layer, level)); } return PinnedSpan.UnsafeFromSpan(GetData(resources.GetPool(), resources.GetFlushBuffer(), layer, level)); @@ -443,13 +443,13 @@ namespace Ryujinx.Graphics.Metal public void SetData(IMemoryOwner data) { - var blitCommandEncoder = _pipeline.GetOrCreateBlitEncoder(); + var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); var dataSpan = data.Memory.Span; - var buffer = _renderer.BufferManager.Create(dataSpan.Length); + var buffer = Renderer.BufferManager.Create(dataSpan.Length); buffer.SetDataUnchecked(0, dataSpan); - var mtlBuffer = buffer.GetBuffer(false).Get(_pipeline.Cbs).Value; + var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; int width = Info.Width; int height = Info.Height; @@ -478,7 +478,7 @@ namespace Ryujinx.Graphics.Metal (ulong)Info.GetMipStride(level), (ulong)mipSize, new MTLSize { width = (ulong)width, height = (ulong)height, depth = is3D ? (ulong)depth : 1 }, - _mtlTexture, + MtlTexture, (ulong)layer, (ulong)level, new MTLOrigin() @@ -504,11 +504,11 @@ namespace Ryujinx.Graphics.Metal { int bufferDataLength = GetBufferDataLength(data.Length); - using var bufferHolder = _renderer.BufferManager.Create(bufferDataLength); + using var bufferHolder = Renderer.BufferManager.Create(bufferDataLength); // TODO: loadInline logic - var cbs = _pipeline.Cbs; + var cbs = Pipeline.Cbs; CopyDataToBuffer(bufferHolder.GetDataStorage(0, bufferDataLength), data); @@ -527,20 +527,20 @@ namespace Ryujinx.Graphics.Metal public void SetData(IMemoryOwner data, int layer, int level, Rectangle region) { - var blitCommandEncoder = _pipeline.GetOrCreateBlitEncoder(); + var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); ulong bytesPerRow = (ulong)Info.GetMipStride(level); ulong bytesPerImage = 0; - if (_mtlTexture.TextureType == MTLTextureType.Type3D) + if (MtlTexture.TextureType == MTLTextureType.Type3D) { bytesPerImage = bytesPerRow * (ulong)Info.Height; } var dataSpan = data.Memory.Span; - var buffer = _renderer.BufferManager.Create(dataSpan.Length); + var buffer = Renderer.BufferManager.Create(dataSpan.Length); buffer.SetDataUnchecked(0, dataSpan); - var mtlBuffer = buffer.GetBuffer(false).Get(_pipeline.Cbs).Value; + var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; blitCommandEncoder.CopyFromBuffer( mtlBuffer, @@ -548,7 +548,7 @@ namespace Ryujinx.Graphics.Metal bytesPerRow, bytesPerImage, new MTLSize { width = (ulong)region.Width, height = (ulong)region.Height, depth = 1 }, - _mtlTexture, + MtlTexture, (ulong)layer, (ulong)level, new MTLOrigin { x = (ulong)region.X, y = (ulong)region.Y } diff --git a/src/Ryujinx.Graphics.Metal/TextureBase.cs b/src/Ryujinx.Graphics.Metal/TextureBase.cs index 80d9751a8..964f06e22 100644 --- a/src/Ryujinx.Graphics.Metal/TextureBase.cs +++ b/src/Ryujinx.Graphics.Metal/TextureBase.cs @@ -10,14 +10,13 @@ namespace Ryujinx.Graphics.Metal { private bool _disposed; - protected readonly TextureCreateInfo _info; - protected readonly Pipeline _pipeline; - protected readonly MTLDevice _device; - protected readonly MetalRenderer _renderer; + protected readonly Pipeline Pipeline; + protected readonly MTLDevice Device; + protected readonly MetalRenderer Renderer; - protected MTLTexture _mtlTexture; + protected MTLTexture MtlTexture; - public TextureCreateInfo Info => _info; + public readonly TextureCreateInfo Info; public int Width => Info.Width; public int Height => Info.Height; public int Depth => Info.Depth; @@ -28,10 +27,10 @@ namespace Ryujinx.Graphics.Metal public TextureBase(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info) { - _device = device; - _renderer = renderer; - _pipeline = pipeline; - _info = info; + Device = device; + Renderer = renderer; + Pipeline = pipeline; + Info = info; } public MTLTexture GetHandle() @@ -41,7 +40,7 @@ namespace Ryujinx.Graphics.Metal return new MTLTexture(IntPtr.Zero); } - return _mtlTexture; + return MtlTexture; } public virtual void Release() @@ -51,9 +50,9 @@ namespace Ryujinx.Graphics.Metal public void Dispose() { - if (_mtlTexture != IntPtr.Zero) + if (MtlTexture != IntPtr.Zero) { - _mtlTexture.Dispose(); + MtlTexture.Dispose(); } _disposed = true; } diff --git a/src/Ryujinx.Graphics.Metal/TextureBuffer.cs b/src/Ryujinx.Graphics.Metal/TextureBuffer.cs index 033e12105..388b77e23 100644 --- a/src/Ryujinx.Graphics.Metal/TextureBuffer.cs +++ b/src/Ryujinx.Graphics.Metal/TextureBuffer.cs @@ -37,23 +37,23 @@ namespace Ryujinx.Graphics.Metal // Find the parent buffer, and try to build a texture from it. // TODO: texture uses should register read/write usage on the assigned buffer. - Auto bufferAuto = _renderer.BufferManager.GetBuffer(_bufferHandle, false); + Auto bufferAuto = Renderer.BufferManager.GetBuffer(_bufferHandle, false); - if (_mtlTexture.NativePtr != 0) + if (MtlTexture.NativePtr != 0) { - _mtlTexture.Dispose(); + MtlTexture.Dispose(); } if (bufferAuto == null) { - _mtlTexture = default; + MtlTexture = default; } else { - DisposableBuffer buffer = bufferAuto.Get(_pipeline.Cbs, _offset, _size); + DisposableBuffer buffer = bufferAuto.Get(Pipeline.Cbs, _offset, _size); _descriptor.Width = (uint)(_size / Info.BytesPerPixel); - _mtlTexture = buffer.Value.NewTexture(_descriptor, (ulong)_offset, (ulong)_size); + MtlTexture = buffer.Value.NewTexture(_descriptor, (ulong)_offset, (ulong)_size); } } @@ -79,7 +79,7 @@ namespace Ryujinx.Graphics.Metal public PinnedSpan GetData() { - return _renderer.GetBufferData(_bufferHandle, _offset, _size); + return Renderer.GetBufferData(_bufferHandle, _offset, _size); } public PinnedSpan GetData(int layer, int level) @@ -94,7 +94,7 @@ namespace Ryujinx.Graphics.Metal public void SetData(IMemoryOwner data) { - _renderer.SetBufferData(_bufferHandle, _offset, data.Memory.Span); + Renderer.SetBufferData(_bufferHandle, _offset, data.Memory.Span); data.Dispose(); } @@ -113,7 +113,7 @@ namespace Ryujinx.Graphics.Metal if (_bufferHandle == buffer.Handle && _offset == buffer.Offset && _size == buffer.Size && - _bufferCount == _renderer.BufferManager.BufferCount) + _bufferCount == Renderer.BufferManager.BufferCount) { return; } @@ -121,7 +121,7 @@ namespace Ryujinx.Graphics.Metal _bufferHandle = buffer.Handle; _offset = buffer.Offset; _size = buffer.Size; - _bufferCount = _renderer.BufferManager.BufferCount; + _bufferCount = Renderer.BufferManager.BufferCount; RebuildStorage(); }