Workaround for AMD and Intel view format bug (#1050)

* Workaround for Intel view format bug

* Dispose of the intermmediate texture aswell

* Apply workaround on AMD aswell
This commit is contained in:
gdkchan 2020-03-29 09:48:39 -03:00 committed by GitHub
parent 5c1757f7c2
commit b18ef8e3a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 222 additions and 119 deletions

View file

@ -19,14 +19,14 @@ namespace Ryujinx.Graphics.OpenGL
private PrimitiveType _primitiveType;
private int _stencilFrontMask;
private int _stencilFrontMask;
private bool _depthMask;
private bool _depthTest;
private bool _hasDepthBuffer;
private TextureView _unit0Texture;
private ClipOrigin _clipOrigin;
private ClipOrigin _clipOrigin;
private ClipDepthMode _clipDepthMode;
private uint[] _componentMasks;
@ -35,7 +35,7 @@ namespace Ryujinx.Graphics.OpenGL
internal Pipeline()
{
_clipOrigin = ClipOrigin.LowerLeft;
_clipOrigin = ClipOrigin.LowerLeft;
_clipDepthMode = ClipDepthMode.NegativeOneToOne;
_scissorEnable = new bool[8];
@ -60,6 +60,8 @@ namespace Ryujinx.Graphics.OpenGL
GL.ClearBuffer(ClearBuffer.Color, index, colors);
RestoreComponentMask(index);
_framebuffer.SignalModified();
}
public void ClearRenderTargetDepthStencil(float depthValue, bool depthMask, int stencilValue, int stencilMask)
@ -102,6 +104,8 @@ namespace Ryujinx.Graphics.OpenGL
{
GL.DepthMask(_depthMask);
}
_framebuffer.SignalModified();
}
public void DispatchCompute(int groupsX, int groupsY, int groupsZ)
@ -141,6 +145,8 @@ namespace Ryujinx.Graphics.OpenGL
{
DrawImpl(vertexCount, instanceCount, firstVertex, firstInstance);
}
_framebuffer.SignalModified();
}
private void DrawQuadsImpl(
@ -251,7 +257,7 @@ namespace Ryujinx.Graphics.OpenGL
switch (_elementsType)
{
case DrawElementsType.UnsignedShort: indexElemSize = 2; break;
case DrawElementsType.UnsignedInt: indexElemSize = 4; break;
case DrawElementsType.UnsignedInt: indexElemSize = 4; break;
}
IntPtr indexBaseOffset = _indexBaseOffset + firstIndex * indexElemSize;
@ -285,15 +291,17 @@ namespace Ryujinx.Graphics.OpenGL
firstVertex,
firstInstance);
}
_framebuffer.SignalModified();
}
private void DrawQuadsIndexedImpl(
int indexCount,
int instanceCount,
int indexCount,
int instanceCount,
IntPtr indexBaseOffset,
int indexElemSize,
int firstVertex,
int firstInstance)
int indexElemSize,
int firstVertex,
int firstInstance)
{
int quadsCount = indexCount / 4;
@ -367,12 +375,12 @@ namespace Ryujinx.Graphics.OpenGL
}
private void DrawQuadStripIndexedImpl(
int indexCount,
int instanceCount,
int indexCount,
int instanceCount,
IntPtr indexBaseOffset,
int indexElemSize,
int firstVertex,
int firstInstance)
int indexElemSize,
int firstVertex,
int firstInstance)
{
// TODO: Instanced rendering.
int quadsCount = (indexCount - 2) / 2;
@ -408,11 +416,11 @@ namespace Ryujinx.Graphics.OpenGL
}
private void DrawIndexedImpl(
int indexCount,
int instanceCount,
int indexCount,
int instanceCount,
IntPtr indexBaseOffset,
int firstVertex,
int firstInstance)
int firstVertex,
int firstInstance)
{
if (firstInstance == 0 && firstVertex == 0 && instanceCount == 1)
{