diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs')
-rw-r--r-- | Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs index 3689975d..14bc27a9 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs @@ -119,7 +119,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// <param name="samplerIndex">Type of the sampler pool indexing used for bound samplers</param> public void SetSamplerPool(ulong gpuVa, int maximumId, SamplerIndex samplerIndex) { - ulong address = _context.MemoryManager.Translate(gpuVa); + ulong address = _channel.MemoryManager.Translate(gpuVa); if (_samplerPool != null) { @@ -131,7 +131,7 @@ namespace Ryujinx.Graphics.Gpu.Image _samplerPool.Dispose(); } - _samplerPool = new SamplerPool(_context, address, maximumId); + _samplerPool = new SamplerPool(_context, _channel.MemoryManager.Physical, address, maximumId); _samplerIndex = samplerIndex; } @@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// <param name="maximumId">Maximum ID of the pool (total count minus one)</param> public void SetTexturePool(ulong gpuVa, int maximumId) { - ulong address = _context.MemoryManager.Translate(gpuVa); + ulong address = _channel.MemoryManager.Translate(gpuVa); _texturePoolAddress = address; _texturePoolMaximumId = maximumId; @@ -228,6 +228,7 @@ namespace Ryujinx.Graphics.Gpu.Image public void CommitBindings() { TexturePool texturePool = _texturePoolCache.FindOrCreate( + _channel, _texturePoolAddress, _texturePoolMaximumId); @@ -437,9 +438,9 @@ namespace Ryujinx.Graphics.Gpu.Image var poolState = state.Get<PoolState>(MethodOffset.TexturePoolState); - ulong poolAddress = _context.MemoryManager.Translate(poolState.Address.Pack()); + ulong poolAddress = _channel.MemoryManager.Translate(poolState.Address.Pack()); - TexturePool texturePool = _texturePoolCache.FindOrCreate(poolAddress, poolState.MaximumId); + TexturePool texturePool = _texturePoolCache.FindOrCreate(_channel, poolAddress, poolState.MaximumId); return texturePool.GetDescriptor(textureId); } @@ -455,12 +456,11 @@ namespace Ryujinx.Graphics.Gpu.Image /// <returns>The packed texture and sampler ID (the real texture handle)</returns> private int ReadPackedId(int stageIndex, int wordOffset, int textureBufferIndex, int samplerBufferIndex) { - var bufferManager = _context.Methods.BufferCache; ulong textureBufferAddress = _isCompute ? _channel.BufferManager.GetComputeUniformBufferAddress(textureBufferIndex) : _channel.BufferManager.GetGraphicsUniformBufferAddress(stageIndex, textureBufferIndex); - int handle = _context.PhysicalMemory.Read<int>(textureBufferAddress + (ulong)(wordOffset & HandleMask) * 4); + int handle = _channel.MemoryManager.Physical.Read<int>(textureBufferAddress + (ulong)(wordOffset & HandleMask) * 4); // The "wordOffset" (which is really the immediate value used on texture instructions on the shader) // is a 13-bit value. However, in order to also support separate samplers and textures (which uses @@ -474,7 +474,7 @@ namespace Ryujinx.Graphics.Gpu.Image ? _channel.BufferManager.GetComputeUniformBufferAddress(samplerBufferIndex) : _channel.BufferManager.GetGraphicsUniformBufferAddress(stageIndex, samplerBufferIndex); - handle |= _context.PhysicalMemory.Read<int>(samplerBufferAddress + (ulong)((wordOffset >> HandleHigh) - 1) * 4); + handle |= _channel.MemoryManager.Physical.Read<int>(samplerBufferAddress + (ulong)((wordOffset >> HandleHigh) - 1) * 4); } return handle; @@ -514,7 +514,6 @@ namespace Ryujinx.Graphics.Gpu.Image public void Dispose() { _samplerPool?.Dispose(); - _texturePoolCache.Dispose(); } } }
\ No newline at end of file |