diff options
Diffstat (limited to 'src/Ryujinx.Graphics.GAL')
15 files changed, 25 insertions, 196 deletions
diff --git a/src/Ryujinx.Graphics.GAL/IPipeline.cs b/src/Ryujinx.Graphics.GAL/IPipeline.cs index 0a362081..f5978cef 100644 --- a/src/Ryujinx.Graphics.GAL/IPipeline.cs +++ b/src/Ryujinx.Graphics.GAL/IPipeline.cs @@ -79,7 +79,6 @@ namespace Ryujinx.Graphics.GAL void SetRasterizerDiscard(bool discard); - void SetRenderTargetScale(float scale); void SetRenderTargetColorMasks(ReadOnlySpan<uint> componentMask); void SetRenderTargets(ITexture[] colors, ITexture depthStencil); @@ -99,7 +98,7 @@ namespace Ryujinx.Graphics.GAL void SetVertexAttribs(ReadOnlySpan<VertexAttribDescriptor> vertexAttribs); void SetVertexBuffers(ReadOnlySpan<VertexBufferDescriptor> vertexBuffers); - void SetViewports(ReadOnlySpan<Viewport> viewports, bool disableTransform); + void SetViewports(ReadOnlySpan<Viewport> viewports); void TextureBarrier(); void TextureBarrierTiled(); @@ -107,7 +106,5 @@ namespace Ryujinx.Graphics.GAL bool TryHostConditionalRendering(ICounterEvent value, ulong compare, bool isEqual); bool TryHostConditionalRendering(ICounterEvent value, ICounterEvent compare, bool isEqual); void EndHostConditionalRendering(); - - void UpdateRenderScale(ReadOnlySpan<float> scales, int totalCount, int fragmentCount); } } diff --git a/src/Ryujinx.Graphics.GAL/IRenderer.cs b/src/Ryujinx.Graphics.GAL/IRenderer.cs index b668d56e..1dabbdae 100644 --- a/src/Ryujinx.Graphics.GAL/IRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/IRenderer.cs @@ -17,7 +17,6 @@ namespace Ryujinx.Graphics.GAL void BackgroundContextAction(Action action, bool alwaysBackground = false); BufferHandle CreateBuffer(int size, BufferHandle storageHint); - BufferHandle CreateBuffer(int size) { return CreateBuffer(size, BufferHandle.Null); @@ -28,7 +27,7 @@ namespace Ryujinx.Graphics.GAL IProgram CreateProgram(ShaderSource[] shaders, ShaderInfo info); ISampler CreateSampler(SamplerCreateInfo info); - ITexture CreateTexture(TextureCreateInfo info, float scale); + ITexture CreateTexture(TextureCreateInfo info); bool PrepareHostMapping(nint address, ulong size); void CreateSync(ulong id, bool strict); @@ -49,7 +48,7 @@ namespace Ryujinx.Graphics.GAL void PreFrame(); - ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, bool hostReserved); + ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, float divisor, bool hostReserved); void ResetCounter(CounterType type); diff --git a/src/Ryujinx.Graphics.GAL/ITexture.cs b/src/Ryujinx.Graphics.GAL/ITexture.cs index d39b5949..5a4623a6 100644 --- a/src/Ryujinx.Graphics.GAL/ITexture.cs +++ b/src/Ryujinx.Graphics.GAL/ITexture.cs @@ -6,7 +6,6 @@ namespace Ryujinx.Graphics.GAL { int Width { get; } int Height { get; } - float ScaleFactor { get; } void CopyTo(ITexture destination, int firstLayer, int firstLevel); void CopyTo(ITexture destination, int srcLayer, int dstLayer, int srcLevel, int dstLevel); diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/CommandHelper.cs b/src/Ryujinx.Graphics.GAL/Multithreading/CommandHelper.cs index 12c5245a..6cd6f159 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/CommandHelper.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/CommandHelper.cs @@ -125,7 +125,6 @@ namespace Ryujinx.Graphics.GAL.Multithreading Register<SetProgramCommand>(CommandType.SetProgram); Register<SetRasterizerDiscardCommand>(CommandType.SetRasterizerDiscard); Register<SetRenderTargetColorMasksCommand>(CommandType.SetRenderTargetColorMasks); - Register<SetRenderTargetScaleCommand>(CommandType.SetRenderTargetScale); Register<SetRenderTargetsCommand>(CommandType.SetRenderTargets); Register<SetScissorsCommand>(CommandType.SetScissor); Register<SetStencilTestCommand>(CommandType.SetStencilTest); @@ -138,7 +137,6 @@ namespace Ryujinx.Graphics.GAL.Multithreading Register<TextureBarrierTiledCommand>(CommandType.TextureBarrierTiled); Register<TryHostConditionalRenderingCommand>(CommandType.TryHostConditionalRendering); Register<TryHostConditionalRenderingFlushCommand>(CommandType.TryHostConditionalRenderingFlush); - Register<UpdateRenderScaleCommand>(CommandType.UpdateRenderScale); return maxCommandSize; } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/CommandType.cs b/src/Ryujinx.Graphics.GAL/Multithreading/CommandType.cs index 1e73fba6..c24a934a 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/CommandType.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/CommandType.cs @@ -87,7 +87,6 @@ SetProgram, SetRasterizerDiscard, SetRenderTargetColorMasks, - SetRenderTargetScale, SetRenderTargets, SetScissor, SetStencilTest, @@ -100,6 +99,5 @@ TextureBarrierTiled, TryHostConditionalRendering, TryHostConditionalRenderingFlush, - UpdateRenderScale, } } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/CreateTextureCommand.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/CreateTextureCommand.cs index f52db30a..6ec0daae 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/CreateTextureCommand.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/CreateTextureCommand.cs @@ -8,18 +8,16 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Renderer public readonly CommandType CommandType => CommandType.CreateTexture; private TableRef<ThreadedTexture> _texture; private TextureCreateInfo _info; - private float _scale; - public void Set(TableRef<ThreadedTexture> texture, TextureCreateInfo info, float scale) + public void Set(TableRef<ThreadedTexture> texture, TextureCreateInfo info) { _texture = texture; _info = info; - _scale = scale; } public static void Run(ref CreateTextureCommand command, ThreadedRenderer threaded, IRenderer renderer) { - command._texture.Get(threaded).Base = renderer.CreateTexture(command._info, command._scale); + command._texture.Get(threaded).Base = renderer.CreateTexture(command._info); } } } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/ReportCounterCommand.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/ReportCounterCommand.cs index 2a373f5b..659cf475 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/ReportCounterCommand.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Renderer/ReportCounterCommand.cs @@ -10,13 +10,15 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Renderer private TableRef<ThreadedCounterEvent> _event; private CounterType _type; private TableRef<EventHandler<ulong>> _resultHandler; + private float _divisor; private bool _hostReserved; - public void Set(TableRef<ThreadedCounterEvent> evt, CounterType type, TableRef<EventHandler<ulong>> resultHandler, bool hostReserved) + public void Set(TableRef<ThreadedCounterEvent> evt, CounterType type, TableRef<EventHandler<ulong>> resultHandler, float divisor, bool hostReserved) { _event = evt; _type = type; _resultHandler = resultHandler; + _divisor = divisor; _hostReserved = hostReserved; } @@ -24,7 +26,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Renderer { ThreadedCounterEvent evt = command._event.Get(threaded); - evt.Create(renderer, command._type, command._resultHandler.Get(threaded), command._hostReserved); + evt.Create(renderer, command._type, command._resultHandler.Get(threaded), command._divisor, command._hostReserved); } } } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetRenderTargetScaleCommand.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetRenderTargetScaleCommand.cs deleted file mode 100644 index 7207fd9d..00000000 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetRenderTargetScaleCommand.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Ryujinx.Graphics.GAL.Multithreading.Commands -{ - struct SetRenderTargetScaleCommand : IGALCommand, IGALCommand<SetRenderTargetScaleCommand> - { - public readonly CommandType CommandType => CommandType.SetRenderTargetScale; - private float _scale; - - public void Set(float scale) - { - _scale = scale; - } - - public static void Run(ref SetRenderTargetScaleCommand command, ThreadedRenderer threaded, IRenderer renderer) - { - renderer.Pipeline.SetRenderTargetScale(command._scale); - } - } -} diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetViewportsCommand.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetViewportsCommand.cs index a0ad026a..4ad26478 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetViewportsCommand.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/SetViewportsCommand.cs @@ -7,18 +7,16 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Commands { public readonly CommandType CommandType => CommandType.SetViewports; private SpanRef<Viewport> _viewports; - private bool _disableTransform; - public void Set(SpanRef<Viewport> viewports, bool disableTransform) + public void Set(SpanRef<Viewport> viewports) { _viewports = viewports; - _disableTransform = disableTransform; } public static void Run(ref SetViewportsCommand command, ThreadedRenderer threaded, IRenderer renderer) { ReadOnlySpan<Viewport> viewports = command._viewports.Get(threaded); - renderer.Pipeline.SetViewports(viewports, command._disableTransform); + renderer.Pipeline.SetViewports(viewports); command._viewports.Dispose(threaded); } } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/UpdateRenderScaleCommand.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Commands/UpdateRenderScaleCommand.cs deleted file mode 100644 index c3c24045..00000000 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Commands/UpdateRenderScaleCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Ryujinx.Graphics.GAL.Multithreading.Model; - -namespace Ryujinx.Graphics.GAL.Multithreading.Commands -{ - struct UpdateRenderScaleCommand : IGALCommand, IGALCommand<UpdateRenderScaleCommand> - { - public readonly CommandType CommandType => CommandType.UpdateRenderScale; - private SpanRef<float> _scales; - private int _totalCount; - private int _fragmentCount; - - public void Set(SpanRef<float> scales, int totalCount, int fragmentCount) - { - _scales = scales; - _totalCount = totalCount; - _fragmentCount = fragmentCount; - } - - public static void Run(ref UpdateRenderScaleCommand command, ThreadedRenderer threaded, IRenderer renderer) - { - renderer.Pipeline.UpdateRenderScale(command._scales.Get(threaded), command._totalCount, command._fragmentCount); - command._scales.Dispose(threaded); - } - } -} diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedCounterEvent.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedCounterEvent.cs index e4e197eb..2992b4a8 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedCounterEvent.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedCounterEvent.cs @@ -70,10 +70,10 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources } } - public void Create(IRenderer renderer, CounterType type, System.EventHandler<ulong> eventHandler, bool hostReserved) + public void Create(IRenderer renderer, CounterType type, System.EventHandler<ulong> eventHandler, float divisor, bool hostReserved) { ThreadedHelpers.SpinUntilExchange(ref _createLock, 1, 0); - Base = renderer.ReportCounter(type, eventHandler, hostReserved || _reserved); + Base = renderer.ReportCounter(type, eventHandler, divisor, hostReserved || _reserved); Volatile.Write(ref _createLock, 0); } } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedTexture.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedTexture.cs index b82e286a..68f25853 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedTexture.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedTexture.cs @@ -17,13 +17,10 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources public int Height => _info.Height; - public float ScaleFactor { get; } - - public ThreadedTexture(ThreadedRenderer renderer, TextureCreateInfo info, float scale) + public ThreadedTexture(ThreadedRenderer renderer, TextureCreateInfo info) { _renderer = renderer; _info = info; - ScaleFactor = scale; } private TableRef<T> Ref<T>(T reference) @@ -64,7 +61,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources public ITexture CreateView(TextureCreateInfo info, int firstLayer, int firstLevel) { - ThreadedTexture newTex = new(_renderer, info, ScaleFactor); + ThreadedTexture newTex = new(_renderer, info); _renderer.New<TextureCreateViewCommand>().Set(Ref(this), Ref(newTex), info, firstLayer, firstLevel); _renderer.QueueCommand(); diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs index de6ba18d..69c67d64 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs @@ -261,12 +261,6 @@ namespace Ryujinx.Graphics.GAL.Multithreading _renderer.QueueCommand(); } - public void SetRenderTargetScale(float scale) - { - _renderer.New<SetRenderTargetScaleCommand>().Set(scale); - _renderer.QueueCommand(); - } - public void SetScissors(ReadOnlySpan<Rectangle<int>> scissors) { _renderer.New<SetScissorsCommand>().Set(_renderer.CopySpan(scissors)); @@ -321,9 +315,9 @@ namespace Ryujinx.Graphics.GAL.Multithreading _renderer.QueueCommand(); } - public void SetViewports(ReadOnlySpan<Viewport> viewports, bool disableTransform) + public void SetViewports(ReadOnlySpan<Viewport> viewports) { - _renderer.New<SetViewportsCommand>().Set(_renderer.CopySpan(viewports), disableTransform); + _renderer.New<SetViewportsCommand>().Set(_renderer.CopySpan(viewports)); _renderer.QueueCommand(); } @@ -368,11 +362,5 @@ namespace Ryujinx.Graphics.GAL.Multithreading _renderer.QueueCommand(); return false; } - - public void UpdateRenderScale(ReadOnlySpan<float> scales, int totalCount, int fragmentCount) - { - _renderer.New<UpdateRenderScaleCommand>().Set(_renderer.CopySpan(scales[..totalCount]), totalCount, fragmentCount); - _renderer.QueueCommand(); - } } } diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs index dc7aab36..e59a3928 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs @@ -320,21 +320,21 @@ namespace Ryujinx.Graphics.GAL.Multithreading QueueCommand(); } - public ITexture CreateTexture(TextureCreateInfo info, float scale) + public ITexture CreateTexture(TextureCreateInfo info) { if (IsGpuThread()) { - var texture = new ThreadedTexture(this, info, scale); - New<CreateTextureCommand>().Set(Ref(texture), info, scale); + var texture = new ThreadedTexture(this, info); + New<CreateTextureCommand>().Set(Ref(texture), info); QueueCommand(); return texture; } else { - var texture = new ThreadedTexture(this, info, scale) + var texture = new ThreadedTexture(this, info) { - Base = _baseRenderer.CreateTexture(info, scale), + Base = _baseRenderer.CreateTexture(info), }; return texture; @@ -410,10 +410,10 @@ namespace Ryujinx.Graphics.GAL.Multithreading QueueCommand(); } - public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, bool hostReserved) + public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, float divisor, bool hostReserved) { - ThreadedCounterEvent evt = new(this, type, _lastSampleCounterClear); - New<ReportCounterCommand>().Set(Ref(evt), type, Ref(resultHandler), hostReserved); + ThreadedCounterEvent evt = new ThreadedCounterEvent(this, type, _lastSampleCounterClear); + New<ReportCounterCommand>().Set(Ref(evt), type, Ref(resultHandler), divisor, hostReserved); QueueCommand(); if (type == CounterType.SamplesPassed) diff --git a/src/Ryujinx.Graphics.GAL/SupportBufferUpdater.cs b/src/Ryujinx.Graphics.GAL/SupportBufferUpdater.cs deleted file mode 100644 index 84936e54..00000000 --- a/src/Ryujinx.Graphics.GAL/SupportBufferUpdater.cs +++ /dev/null @@ -1,102 +0,0 @@ -using Ryujinx.Graphics.Shader; -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Ryujinx.Graphics.GAL -{ - public class SupportBufferUpdater : IDisposable - { - public SupportBuffer Data; - public BufferHandle Handle; - - private readonly IRenderer _renderer; - private int _startOffset = -1; - private int _endOffset = -1; - - public SupportBufferUpdater(IRenderer renderer) - { - _renderer = renderer; - Handle = renderer.CreateBuffer(SupportBuffer.RequiredSize); - renderer.Pipeline.ClearBuffer(Handle, 0, SupportBuffer.RequiredSize, 0); - } - - private void MarkDirty(int startOffset, int byteSize) - { - int endOffset = startOffset + byteSize; - - if (_startOffset == -1) - { - _startOffset = startOffset; - _endOffset = endOffset; - } - else - { - if (startOffset < _startOffset) - { - _startOffset = startOffset; - } - - if (endOffset > _endOffset) - { - _endOffset = endOffset; - } - } - } - - public void UpdateFragmentRenderScaleCount(int count) - { - if (Data.FragmentRenderScaleCount.X != count) - { - Data.FragmentRenderScaleCount.X = count; - - MarkDirty(SupportBuffer.FragmentRenderScaleCountOffset, sizeof(int)); - } - } - - private void UpdateGenericField<T>(int baseOffset, ReadOnlySpan<T> data, Span<T> target, int offset, int count) where T : unmanaged - { - data[..count].CopyTo(target[offset..]); - - int elemSize = Unsafe.SizeOf<T>(); - - MarkDirty(baseOffset + offset * elemSize, count * elemSize); - } - - public void UpdateRenderScale(ReadOnlySpan<Vector4<float>> data, int offset, int count) - { - UpdateGenericField(SupportBuffer.GraphicsRenderScaleOffset, data, Data.RenderScale.AsSpan(), offset, count); - } - - public void UpdateFragmentIsBgra(ReadOnlySpan<Vector4<int>> data, int offset, int count) - { - UpdateGenericField(SupportBuffer.FragmentIsBgraOffset, data, Data.FragmentIsBgra.AsSpan(), offset, count); - } - - public void UpdateViewportInverse(Vector4<float> data) - { - Data.ViewportInverse = data; - - MarkDirty(SupportBuffer.ViewportInverseOffset, SupportBuffer.FieldSize); - } - - public void Commit() - { - if (_startOffset != -1) - { - ReadOnlySpan<byte> data = MemoryMarshal.Cast<SupportBuffer, byte>(MemoryMarshal.CreateSpan(ref Data, 1)); - - _renderer.SetBufferData(Handle, _startOffset, data[_startOffset.._endOffset]); - - _startOffset = -1; - _endOffset = -1; - } - } - - public void Dispose() - { - GC.SuppressFinalize(this); - _renderer.DeleteBuffer(Handle); - } - } -} |