Remember bound framebuffer to avoid glGetInteger use. (#1273)
glGetInteger seems to sync with GPU which is less than ideal, and slowing down texture copies.
This commit is contained in:
parent
6416bc1938
commit
d941f4c070
4 changed files with 14 additions and 6 deletions
|
@ -20,9 +20,10 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
_colors = new TextureView[8];
|
||||
}
|
||||
|
||||
public void Bind()
|
||||
public int Bind()
|
||||
{
|
||||
GL.BindFramebuffer(FramebufferTarget.Framebuffer, Handle);
|
||||
return Handle;
|
||||
}
|
||||
|
||||
public void AttachColor(int index, TextureView color)
|
||||
|
|
|
@ -23,8 +23,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||
Extents2D dstRegion,
|
||||
bool linearFilter)
|
||||
{
|
||||
int oldReadFramebufferHandle = GL.GetInteger(GetPName.ReadFramebufferBinding);
|
||||
int oldDrawFramebufferHandle = GL.GetInteger(GetPName.DrawFramebufferBinding);
|
||||
(int oldDrawFramebufferHandle, int oldReadFramebufferHandle) = ((Pipeline)_renderer.Pipeline).GetBoundFramebuffers();
|
||||
|
||||
GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, GetSrcFramebufferLazy());
|
||||
GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, GetDstFramebufferLazy());
|
||||
|
|
|
@ -28,6 +28,9 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
private bool _depthTest;
|
||||
private bool _hasDepthBuffer;
|
||||
|
||||
private int _boundDrawFramebuffer;
|
||||
private int _boundReadFramebuffer;
|
||||
|
||||
private TextureBase _unit0Texture;
|
||||
|
||||
private ClipOrigin _clipOrigin;
|
||||
|
@ -956,12 +959,18 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
{
|
||||
_framebuffer = new Framebuffer();
|
||||
|
||||
_framebuffer.Bind();
|
||||
int boundHandle = _framebuffer.Bind();
|
||||
_boundDrawFramebuffer = _boundReadFramebuffer = boundHandle;
|
||||
|
||||
GL.Enable(EnableCap.FramebufferSrgb);
|
||||
}
|
||||
}
|
||||
|
||||
internal (int drawHandle, int readHandle) GetBoundFramebuffers()
|
||||
{
|
||||
return (_boundDrawFramebuffer, _boundReadFramebuffer);
|
||||
}
|
||||
|
||||
private void UpdateDepthTest()
|
||||
{
|
||||
// Enabling depth operations is only valid when we have
|
||||
|
|
|
@ -44,8 +44,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
{
|
||||
bool[] oldFramebufferColorWritemask = new bool[4];
|
||||
|
||||
int oldReadFramebufferHandle = GL.GetInteger(GetPName.ReadFramebufferBinding);
|
||||
int oldDrawFramebufferHandle = GL.GetInteger(GetPName.DrawFramebufferBinding);
|
||||
(int oldDrawFramebufferHandle, int oldReadFramebufferHandle) = ((Pipeline)_renderer.Pipeline).GetBoundFramebuffers();
|
||||
|
||||
GL.GetBoolean(GetIndexedPName.ColorWritemask, drawFramebuffer, oldFramebufferColorWritemask);
|
||||
|
||||
|
|
Reference in a new issue