aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-09-28 18:52:27 -0300
committerGitHub <noreply@github.com>2021-09-28 23:52:27 +0200
commit83bdafccdab01322af8503e9ad21f52981e646c1 (patch)
tree4941d53d24474643a8153d304af2e056505ba1eb
parent405840a24b75ecd7cab52c1960464071e2bc9b81 (diff)
Share scales array for graphics and compute (#2653)
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs11
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureManager.cs7
2 files changed, 8 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
index 597c527d..d7691e13 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
@@ -62,12 +62,14 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <param name="context">The GPU context that the texture bindings manager belongs to</param>
/// <param name="channel">The GPU channel that the texture bindings manager belongs to</param>
/// <param name="poolCache">Texture pools cache used to get texture pools from</param>
+ /// <param name="scales">Array where the scales for the currently bound textures are stored</param>
/// <param name="isCompute">True if the bindings manager is used for the compute engine</param>
- public TextureBindingsManager(GpuContext context, GpuChannel channel, TexturePoolCache poolCache, bool isCompute)
+ public TextureBindingsManager(GpuContext context, GpuChannel channel, TexturePoolCache poolCache, float[] scales, bool isCompute)
{
_context = context;
_channel = channel;
_texturePoolCache = poolCache;
+ _scales = scales;
_isCompute = isCompute;
int stages = isCompute ? 1 : Constants.ShaderStages;
@@ -89,13 +91,6 @@ namespace Ryujinx.Graphics.Gpu.Image
_textureState[stage] = new TextureStatePerStage[InitialTextureStateSize];
_imageState[stage] = new TextureStatePerStage[InitialImageStateSize];
}
-
- _scales = new float[64];
-
- for (int i = 0; i < 64; i++)
- {
- _scales[i] = 1f;
- }
}
/// <summary>
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
index 1d7b8df2..a6373872 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
@@ -35,8 +35,11 @@ namespace Ryujinx.Graphics.Gpu.Image
TexturePoolCache texturePoolCache = new TexturePoolCache(context);
- _cpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, isCompute: true);
- _gpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, isCompute: false);
+ float[] scales = new float[64];
+ new Span<float>(scales).Fill(1f);
+
+ _cpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, scales, isCompute: true);
+ _gpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, scales, isCompute: false);
_rtColors = new Texture[Constants.TotalRenderTargets];
_rtHostColors = new ITexture[Constants.TotalRenderTargets];