forked from Mirror/Ryujinx
b530f0e110
* Initial implementation (3d tex mips broken) This works rather well for most games, just need to fix 3d texture mips. * Cleanup * Address feedback * Copy Dependencies and various other fixes * Fix layer/level offset for copy from view<->view. * Remove dirty flag from dependency The dirty flag behaviour is not needed - DeferredCopy is all we need. * Fix tracking mip slices. * Propagate granularity (fix astral chain) * Address Feedback pt 1 * Save slice sizes as part of SizeInfo * Fix nits * Fix disposing multiple dependencies causing a crash This list is obviously modified when removing dependencies, so create a copy of it.
60 lines
1.5 KiB
C#
60 lines
1.5 KiB
C#
using Ryujinx.Cpu.Tracking;
|
|
using Ryujinx.Memory.Tracking;
|
|
using System;
|
|
|
|
namespace Ryujinx.Graphics.Gpu.Memory
|
|
{
|
|
class GpuRegionHandle : IRegionHandle
|
|
{
|
|
private readonly CpuRegionHandle[] _cpuRegionHandles;
|
|
|
|
public bool Dirty
|
|
{
|
|
get
|
|
{
|
|
foreach (var regionHandle in _cpuRegionHandles)
|
|
{
|
|
if (regionHandle.Dirty)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public ulong Address => throw new NotSupportedException();
|
|
public ulong Size => throw new NotSupportedException();
|
|
public ulong EndAddress => throw new NotSupportedException();
|
|
|
|
public GpuRegionHandle(CpuRegionHandle[] cpuRegionHandles)
|
|
{
|
|
_cpuRegionHandles = cpuRegionHandles;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
foreach (var regionHandle in _cpuRegionHandles)
|
|
{
|
|
regionHandle.Dispose();
|
|
}
|
|
}
|
|
|
|
public void RegisterAction(RegionSignal action)
|
|
{
|
|
foreach (var regionHandle in _cpuRegionHandles)
|
|
{
|
|
regionHandle.RegisterAction(action);
|
|
}
|
|
}
|
|
|
|
public void Reprotect(bool asDirty = false)
|
|
{
|
|
foreach (var regionHandle in _cpuRegionHandles)
|
|
{
|
|
regionHandle.Reprotect(asDirty);
|
|
}
|
|
}
|
|
}
|
|
}
|