mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-08-20 07:38:42 +02:00
* Update sparsely mapped texture ranges without recreating Important TODO in TexturePool. Smaller TODO: should I look into making textures with views also do this? It needs to be able to detect if the views can be instantly deleted without issue if they're now remapped. * Actually do partial updates * Signal group dirty after mappings changed * Fix various issues (should work now) * Further optimisation Should load a lot less data (16x) when partial updating 3d textures. * Improve stability * Allow granular uploads on large textures, improve rules * Actually avoid updating slices that aren't modified. * Address some feedback, minor optimisation * Small tweak * Refactor DereferenceRequest More specific initialization methods. * Improve code for resetting handles * Explain data loading a bit more * Add some safety for setting null from different threads. All texture sets come from the one thread, but null sets can come from multiple. Only decrement ref count if we succeeded the null set first. * Address feedback 1 * Make a bit safer
38 lines
1.4 KiB
C#
38 lines
1.4 KiB
C#
using Ryujinx.Memory.Tracking;
|
|
using System;
|
|
|
|
namespace Ryujinx.Cpu.Tracking
|
|
{
|
|
public class CpuRegionHandle : IRegionHandle
|
|
{
|
|
private readonly RegionHandle _impl;
|
|
|
|
public bool Dirty => _impl.Dirty;
|
|
public bool Unmapped => _impl.Unmapped;
|
|
public ulong Address => _impl.Address;
|
|
public ulong Size => _impl.Size;
|
|
public ulong EndAddress => _impl.EndAddress;
|
|
|
|
internal CpuRegionHandle(RegionHandle impl)
|
|
{
|
|
_impl = impl;
|
|
}
|
|
|
|
public void Dispose() => _impl.Dispose();
|
|
public bool DirtyOrVolatile() => _impl.DirtyOrVolatile();
|
|
public void ForceDirty() => _impl.ForceDirty();
|
|
public IRegionHandle GetHandle() => _impl;
|
|
public void RegisterAction(RegionSignal action) => _impl.RegisterAction(action);
|
|
public void RegisterPreciseAction(PreciseRegionSignal action) => _impl.RegisterPreciseAction(action);
|
|
public void RegisterDirtyEvent(Action action) => _impl.RegisterDirtyEvent(action);
|
|
public void Reprotect(bool asDirty = false) => _impl.Reprotect(asDirty);
|
|
|
|
public bool OverlapsWith(ulong address, ulong size) => _impl.OverlapsWith(address, size);
|
|
|
|
public bool RangeEquals(CpuRegionHandle other)
|
|
{
|
|
return _impl.RealAddress == other._impl.RealAddress && _impl.RealSize == other._impl.RealSize;
|
|
}
|
|
}
|
|
}
|