aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Pipeline.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-05-23 06:46:09 -0300
committerGitHub <noreply@github.com>2020-05-23 11:46:09 +0200
commit5011640b3086b86b0f0b39b60fdb2aa946d4f5c8 (patch)
tree1bd60b7714886dfe282ca1e52cfa6fca97912cdf /Ryujinx.Graphics.OpenGL/Pipeline.cs
parentcc8dbdd3fb58a02e1c3fc3b9d0b1c35bc7b9d00f (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.cs51
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()