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:
parent
5c1757f7c2
commit
b18ef8e3a0
7 changed files with 222 additions and 119 deletions
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue