Small optimizations on texture and sampler pool invalidation

This commit is contained in:
gdk 2019-11-23 02:17:22 -03:00 committed by Thog
parent 3ac023bb60
commit b2b2e04669
4 changed files with 68 additions and 22 deletions

View file

@ -3,7 +3,6 @@ using Ryujinx.Graphics.GAL.InputAssembler;
using Ryujinx.Graphics.Gpu.State;
using Ryujinx.Graphics.Shader;
using System;
using System.Runtime.InteropServices;
namespace Ryujinx.Graphics.Gpu.Memory
{
@ -48,6 +47,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
private bool _indexBufferDirty;
private bool _vertexBuffersDirty;
private uint _vertexBuffersEnableMask;
private bool _rebind;
@ -93,6 +93,15 @@ namespace Ryujinx.Graphics.Gpu.Memory
_vertexBuffers[index].Divisor = divisor;
_vertexBuffersDirty = true;
if (address != 0)
{
_vertexBuffersEnableMask |= 1u << index;
}
else
{
_vertexBuffersEnableMask &= ~(1u << index);
}
}
public void SetComputeStorageBuffer(int index, ulong gpuVa, ulong size)
@ -322,13 +331,15 @@ namespace Ryujinx.Graphics.Gpu.Memory
SynchronizeBufferRange(_indexBuffer.Address, _indexBuffer.Size);
}
uint vbEnableMask = _vertexBuffersEnableMask;
if (_vertexBuffersDirty || _rebind)
{
_vertexBuffersDirty = false;
VertexBufferDescriptor[] vertexBuffers = new VertexBufferDescriptor[Constants.TotalVertexBuffers];
for (int index = 0; index < Constants.TotalVertexBuffers; index++)
for (int index = 0; (vbEnableMask >> index) != 0; index++)
{
VertexBuffer vb = _vertexBuffers[index];
@ -346,7 +357,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
}
else
{
for (int index = 0; index < Constants.TotalVertexBuffers; index++)
for (int index = 0; (vbEnableMask >> index) != 0; index++)
{
VertexBuffer vb = _vertexBuffers[index];