Ensure render scale is initialized to 1 on the backend (#2543)
This commit is contained in:
parent
3148c0c21c
commit
0ba4ade8f1
3 changed files with 13 additions and 9 deletions
|
@ -76,13 +76,22 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
_componentMasks[index] = 0xf;
|
_componentMasks[index] = 0xf;
|
||||||
}
|
}
|
||||||
|
|
||||||
var v4Zero = new Vector4<float> { X = 0f, Y = 0f, Z = 0f, W = 0f };
|
var defaultScale = new Vector4<float> { X = 1f, Y = 0f, Z = 0f, W = 0f };
|
||||||
new Span<Vector4<float>>(_renderScale).Fill(v4Zero);
|
new Span<Vector4<float>>(_renderScale).Fill(defaultScale);
|
||||||
|
|
||||||
_tfbs = new BufferHandle[Constants.MaxTransformFeedbackBuffers];
|
_tfbs = new BufferHandle[Constants.MaxTransformFeedbackBuffers];
|
||||||
_tfbTargets = new BufferRange[Constants.MaxTransformFeedbackBuffers];
|
_tfbTargets = new BufferRange[Constants.MaxTransformFeedbackBuffers];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Initialize()
|
||||||
|
{
|
||||||
|
_supportBuffer = Buffer.Create(SupportBuffer.RequiredSize);
|
||||||
|
GL.BindBufferBase(BufferRangeTarget.UniformBuffer, 0, Unsafe.As<BufferHandle, int>(ref _supportBuffer));
|
||||||
|
|
||||||
|
SetSupportBufferData<Vector4<int>>(SupportBuffer.FragmentIsBgraOffset, _fpIsBgra, SupportBuffer.FragmentIsBgraCount);
|
||||||
|
SetSupportBufferData<Vector4<float>>(SupportBuffer.FragmentRenderScaleOffset, _renderScale, SupportBuffer.RenderScaleMaxCount);
|
||||||
|
}
|
||||||
|
|
||||||
public void Barrier()
|
public void Barrier()
|
||||||
{
|
{
|
||||||
GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits);
|
GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits);
|
||||||
|
@ -1207,12 +1216,6 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
|
|
||||||
private void SetSupportBufferData<T>(int offset, ReadOnlySpan<T> data, int count) where T : unmanaged
|
private void SetSupportBufferData<T>(int offset, ReadOnlySpan<T> data, int count) where T : unmanaged
|
||||||
{
|
{
|
||||||
if (_supportBuffer == BufferHandle.Null)
|
|
||||||
{
|
|
||||||
_supportBuffer = Buffer.Create(SupportBuffer.RequiredSize);
|
|
||||||
GL.BindBufferBase(BufferRangeTarget.UniformBuffer, 0, Unsafe.As<BufferHandle, int>(ref _supportBuffer));
|
|
||||||
}
|
|
||||||
|
|
||||||
Buffer.SetData(_supportBuffer, offset, MemoryMarshal.Cast<T, byte>(data.Slice(0, count)));
|
Buffer.SetData(_supportBuffer, offset, MemoryMarshal.Cast<T, byte>(data.Slice(0, count)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,7 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
GL.Arb.MaxShaderCompilerThreads(Math.Min(Environment.ProcessorCount, 8));
|
GL.Arb.MaxShaderCompilerThreads(Math.Min(Environment.ProcessorCount, 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pipeline.Initialize();
|
||||||
_counters.Initialize();
|
_counters.Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace Ryujinx.Graphics.Shader
|
||||||
public const int ComputeRenderScaleOffset = FragmentRenderScaleOffset + FieldSize; // Skip first scale that is used for the render target
|
public const int ComputeRenderScaleOffset = FragmentRenderScaleOffset + FieldSize; // Skip first scale that is used for the render target
|
||||||
|
|
||||||
// One for the render target, 32 for the textures, and 8 for the images.
|
// One for the render target, 32 for the textures, and 8 for the images.
|
||||||
private const int RenderScaleMaxCount = 1 + 32 + 8;
|
public const int RenderScaleMaxCount = 1 + 32 + 8;
|
||||||
|
|
||||||
public const int RequiredSize = FragmentRenderScaleOffset + RenderScaleMaxCount * FieldSize;
|
public const int RequiredSize = FragmentRenderScaleOffset + RenderScaleMaxCount * FieldSize;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue