aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image/TextureGroup.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureGroup.cs36
1 files changed, 32 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
index d9b620aa..b59a9d08 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
@@ -989,7 +989,8 @@ namespace Ryujinx.Graphics.Gpu.Image
/// Update the views in this texture group, rebuilding the memory tracking if required.
/// </summary>
/// <param name="views">The views list of the storage texture</param>
- public void UpdateViews(List<Texture> views)
+ /// <param name="texture">The texture that has been added, if that is the only change, otherwise null</param>
+ public void UpdateViews(List<Texture> views, Texture texture)
{
// This is saved to calculate overlapping views for each handle.
_views = views;
@@ -1027,17 +1028,44 @@ namespace Ryujinx.Graphics.Gpu.Image
if (!regionsRebuilt)
{
- // Must update the overlapping views on all handles, but only if they were not just recreated.
+ if (texture != null)
+ {
+ int offset = FindOffset(texture);
- foreach (TextureGroupHandle handle in _handles)
+ foreach (TextureGroupHandle handle in _handles)
+ {
+ handle.AddOverlap(offset, texture);
+ }
+ }
+ else
{
- handle.RecalculateOverlaps(this, views);
+ // Must update the overlapping views on all handles, but only if they were not just recreated.
+
+ foreach (TextureGroupHandle handle in _handles)
+ {
+ handle.RecalculateOverlaps(this, views);
+ }
}
}
SignalAllDirty();
}
+
+ /// <summary>
+ /// Removes a view from the group, removing it from all overlap lists.
+ /// </summary>
+ /// <param name="view">View to remove from the group</param>
+ public void RemoveView(Texture view)
+ {
+ int offset = FindOffset(view);
+
+ foreach (TextureGroupHandle handle in _handles)
+ {
+ handle.RemoveOverlap(offset, view);
+ }
+ }
+
/// <summary>
/// Inherit handle state from an old set of handles, such as modified and dirty flags.
/// </summary>