Fix wrong maximum id on sampler pool in some cases
This commit is contained in:
@@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
|
||||
}
|
||||
|
||||
// Pools.
|
||||
if (state.QueryModified(MethodOffset.SamplerPoolState))
|
||||
if (state.QueryModified(MethodOffset.SamplerPoolState, MethodOffset.SamplerIndex))
|
||||
{
|
||||
UpdateSamplerPoolState(state);
|
||||
}
|
||||
@@ -422,11 +422,16 @@ namespace Ryujinx.Graphics.Gpu.Engine
|
||||
|
||||
private void UpdateSamplerPoolState(GpuState state)
|
||||
{
|
||||
var texturePool = state.Get<PoolState>(MethodOffset.TexturePoolState);
|
||||
var samplerPool = state.Get<PoolState>(MethodOffset.SamplerPoolState);
|
||||
|
||||
var samplerIndex = state.Get<SamplerIndex>(MethodOffset.SamplerIndex);
|
||||
|
||||
_textureManager.SetGraphicsSamplerPool(samplerPool.Address.Pack(), samplerPool.MaximumId, samplerIndex);
|
||||
int maximumId = samplerIndex == SamplerIndex.ViaHeaderIndex
|
||||
? texturePool.MaximumId
|
||||
: samplerPool.MaximumId;
|
||||
|
||||
_textureManager.SetGraphicsSamplerPool(samplerPool.Address.Pack(), maximumId, samplerIndex);
|
||||
}
|
||||
|
||||
private void UpdateTexturePoolState(GpuState state)
|
||||
|
@@ -11,12 +11,15 @@ namespace Ryujinx.Graphics.Gpu.Image
|
||||
|
||||
protected T[] Items;
|
||||
|
||||
public int MaximumId { get; }
|
||||
|
||||
public ulong Address { get; }
|
||||
public ulong Size { get; }
|
||||
|
||||
public Pool(GpuContext context, ulong address, int maximumId)
|
||||
{
|
||||
Context = context;
|
||||
Context = context;
|
||||
MaximumId = maximumId;
|
||||
|
||||
int count = maximumId + 1;
|
||||
|
||||
|
@@ -76,7 +76,7 @@ namespace Ryujinx.Graphics.Gpu.Image
|
||||
|
||||
if (_samplerPool != null)
|
||||
{
|
||||
if (_samplerPool.Address == address)
|
||||
if (_samplerPool.Address == address && _samplerPool.MaximumId >= maximumId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user