aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-04-02 11:33:39 -0300
committerGitHub <noreply@github.com>2021-04-02 16:33:39 +0200
commitf665e1b40969d1673c7a12c44235aefb2a2ea627 (patch)
treeb97dc6b308ffb3b8ccacd09c9eaa2512a0c2fdd8 /Ryujinx.Graphics.Gpu/Image/TextureManager.cs
parent9ae60207c4e93388b97e10af5ead090a038f8a7c (diff)
Hold reference for render targets in use (#2156)
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image/TextureManager.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureManager.cs52
1 files changed, 26 insertions, 26 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
index 2b756e4c..17bb553f 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
@@ -198,6 +198,27 @@ namespace Ryujinx.Graphics.Gpu.Image
}
/// <summary>
+ /// Sets the render target depth-stencil buffer.
+ /// </summary>
+ /// <param name="depthStencil">The depth-stencil buffer texture</param>
+ /// <returns>True if render target scale must be updated.</returns>
+ public bool SetRenderTargetDepthStencil(Texture depthStencil)
+ {
+ bool hasValue = depthStencil != null;
+ bool changesScale = (hasValue != (_rtDepthStencil != null)) || (hasValue && RenderTargetScale != depthStencil.ScaleFactor);
+
+ if (_rtDepthStencil != depthStencil)
+ {
+ _rtDepthStencil?.SignalModifying(false);
+ depthStencil?.SignalModifying(true);
+
+ _rtDepthStencil = depthStencil;
+ }
+
+ return changesScale || (hasValue && depthStencil.ScaleMode != TextureScaleMode.Blacklisted && depthStencil.ScaleFactor != GraphicsConfig.ResScale);
+ }
+
+ /// <summary>
/// Gets the first available bound colour target, or the depth stencil target if not present.
/// </summary>
/// <returns>The first bound colour target, otherwise the depth stencil target</returns>
@@ -291,27 +312,6 @@ namespace Ryujinx.Graphics.Gpu.Image
}
/// <summary>
- /// Sets the render target depth-stencil buffer.
- /// </summary>
- /// <param name="depthStencil">The depth-stencil buffer texture</param>
- /// <returns>True if render target scale must be updated.</returns>
- public bool SetRenderTargetDepthStencil(Texture depthStencil)
- {
- bool hasValue = depthStencil != null;
- bool changesScale = (hasValue != (_rtDepthStencil != null)) || (hasValue && RenderTargetScale != depthStencil.ScaleFactor);
-
- if (_rtDepthStencil != depthStencil)
- {
- _rtDepthStencil?.SignalModifying(false);
- depthStencil?.SignalModifying(true);
-
- _rtDepthStencil = depthStencil;
- }
-
- return changesScale || (hasValue && depthStencil.ScaleMode != TextureScaleMode.Blacklisted && depthStencil.ScaleFactor != GraphicsConfig.ResScale);
- }
-
- /// <summary>
/// Commits bindings on the compute pipeline.
/// </summary>
public void CommitComputeBindings()
@@ -716,7 +716,7 @@ namespace Ryujinx.Graphics.Gpu.Image
// If they don't, it may still be mapped to the same physical region, so we
// do a more expensive check to tell if they are mapped into the same physical regions.
// If the GPU VA for the texture has ever been unmapped, then the range must be checked regardless.
- if ((overlap.Info.GpuAddress != info.GpuAddress || overlap.ChangedMapping) &&
+ if ((overlap.Info.GpuAddress != info.GpuAddress || overlap.ChangedMapping) &&
!_context.MemoryManager.CompareRange(overlap.Range, info.GpuAddress))
{
continue;
@@ -775,7 +775,7 @@ namespace Ryujinx.Graphics.Gpu.Image
Array.Resize(ref _overlapInfo, _textureOverlaps.Length);
}
- // =============== Find Texture View of Existing Texture ===============
+ // =============== Find Texture View of Existing Texture ===============
int fullyCompatible = 0;
@@ -841,7 +841,7 @@ namespace Ryujinx.Graphics.Gpu.Image
if (texture != null)
{
// This texture could be a view of multiple parent textures with different storages, even if it is a view.
- // When a texture is created, make sure all possible dependencies to other textures are created as copies.
+ // When a texture is created, make sure all possible dependencies to other textures are created as copies.
// (even if it could be fulfilled without a copy)
for (int index = 0; index < overlapsCount; index++)
@@ -859,7 +859,7 @@ namespace Ryujinx.Graphics.Gpu.Image
texture.SynchronizeMemory();
}
- // =============== Create a New Texture ===============
+ // =============== Create a New Texture ===============
// No match, create a new texture.
if (texture == null)
@@ -993,7 +993,7 @@ namespace Ryujinx.Graphics.Gpu.Image
overlap.ReplaceView(texture, overlapInfo, newView, oInfo.FirstLayer, oInfo.FirstLevel);
}
}
-
+
texture.SynchronizeMemory();
}