diff options
author | gdkchan <gab.dark.100@gmail.com> | 2020-05-23 06:46:09 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-23 11:46:09 +0200 |
commit | 5011640b3086b86b0f0b39b60fdb2aa946d4f5c8 (patch) | |
tree | 1bd60b7714886dfe282ca1e52cfa6fca97912cdf /Ryujinx.Graphics.OpenGL/Pipeline.cs | |
parent | cc8dbdd3fb58a02e1c3fc3b9d0b1c35bc7b9d00f (diff) |
Spanify Graphics Abstraction Layer (#1226)
* Spanify Graphics Abstraction Layer
* Be explicit about BufferHandle size
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Pipeline.cs')
-rw-r--r-- | Ryujinx.Graphics.OpenGL/Pipeline.cs | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs index 80b07108..05383f5d 100644 --- a/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -1,6 +1,7 @@ using OpenTK.Graphics.OpenGL; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.OpenGL.Image; using Ryujinx.Graphics.OpenGL.Queries; using Ryujinx.Graphics.Shader; using System; @@ -32,7 +33,7 @@ namespace Ryujinx.Graphics.OpenGL private ClipOrigin _clipOrigin; private ClipDepthMode _clipDepthMode; - private uint[] _componentMasks; + private readonly uint[] _componentMasks; private bool _scissor0Enable = false; @@ -43,6 +44,13 @@ namespace Ryujinx.Graphics.OpenGL _rasterizerDiscard = false; _clipOrigin = ClipOrigin.LowerLeft; _clipDepthMode = ClipDepthMode.NegativeOneToOne; + + _componentMasks = new uint[Constants.MaxRenderTargets]; + + for (int index = 0; index < Constants.MaxRenderTargets; index++) + { + _componentMasks[index] = 0xf; + } } public void Barrier() @@ -112,6 +120,11 @@ namespace Ryujinx.Graphics.OpenGL _framebuffer.SignalModified(); } + public void CopyBuffer(BufferHandle source, BufferHandle destination, int srcOffset, int dstOffset, int size) + { + Buffer.Copy(source, destination, srcOffset, dstOffset, size); + } + public void DispatchCompute(int groupsX, int groupsY, int groupsZ) { if (!_program.IsLinked) @@ -631,7 +644,7 @@ namespace Ryujinx.Graphics.OpenGL EnsureVertexArray(); - _vertexArray.SetIndexBuffer((Buffer)buffer.Buffer); + _vertexArray.SetIndexBuffer(buffer.Handle); } public void SetPointSize(float size) @@ -661,7 +674,6 @@ namespace Ryujinx.Graphics.OpenGL public void SetProgram(IProgram program) { _program = (Program)program; - _program.Bind(); } @@ -679,12 +691,12 @@ namespace Ryujinx.Graphics.OpenGL _rasterizerDiscard = discard; } - public void SetRenderTargetColorMasks(uint[] componentMasks) + public void SetRenderTargetColorMasks(ReadOnlySpan<uint> componentMasks) { - _componentMasks = (uint[])componentMasks.Clone(); - for (int index = 0; index < componentMasks.Length; index++) { + _componentMasks[index] = componentMasks[index]; + RestoreComponentMask(index); } } @@ -823,21 +835,21 @@ namespace Ryujinx.Graphics.OpenGL GL.Enable(EnableCap.ClipDistance0 + index); } - public void SetVertexAttribs(VertexAttribDescriptor[] vertexAttribs) + public void SetVertexAttribs(ReadOnlySpan<VertexAttribDescriptor> vertexAttribs) { EnsureVertexArray(); _vertexArray.SetVertexAttributes(vertexAttribs); } - public void SetVertexBuffers(VertexBufferDescriptor[] vertexBuffers) + public void SetVertexBuffers(ReadOnlySpan<VertexBufferDescriptor> vertexBuffers) { EnsureVertexArray(); _vertexArray.SetVertexBuffers(vertexBuffers); } - public void SetViewports(int first, Viewport[] viewports) + public void SetViewports(int first, ReadOnlySpan<Viewport> viewports) { bool flipY = false; @@ -906,18 +918,16 @@ namespace Ryujinx.Graphics.OpenGL ? BufferRangeTarget.ShaderStorageBuffer : BufferRangeTarget.UniformBuffer; - if (buffer.Buffer == null) + if (buffer.Handle == null) { GL.BindBufferRange(target, bindingPoint, 0, IntPtr.Zero, 0); return; } - int bufferHandle = ((Buffer)buffer.Buffer).Handle; - IntPtr bufferOffset = (IntPtr)buffer.Offset; - GL.BindBufferRange(target, bindingPoint, bufferHandle, bufferOffset, buffer.Size); + GL.BindBufferRange(target, bindingPoint, buffer.Handle.ToInt32(), bufferOffset, buffer.Size); } private void SetOrigin(ClipOrigin origin) @@ -997,15 +1007,12 @@ namespace Ryujinx.Graphics.OpenGL private void RestoreComponentMask(int index) { - if (_componentMasks != null) - { - GL.ColorMask( - index, - (_componentMasks[index] & 1u) != 0, - (_componentMasks[index] & 2u) != 0, - (_componentMasks[index] & 4u) != 0, - (_componentMasks[index] & 8u) != 0); - } + GL.ColorMask( + index, + (_componentMasks[index] & 1u) != 0, + (_componentMasks[index] & 2u) != 0, + (_componentMasks[index] & 4u) != 0, + (_componentMasks[index] & 8u) != 0); } public void RestoreScissor0Enable() |