aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2023-08-14 13:57:39 -0300
committerGitHub <noreply@github.com>2023-08-14 13:57:39 -0300
commit550fd4a7338eded794bf961ef6fd0c38643471c8 (patch)
tree1ed7aac2471fa887449e21102dea5a8b53e06715 /src
parent33f544fd9248361440afd6013e0ef9d69971d6da (diff)
Simplify resolution scale updates (#5541)1.1.987
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs21
-rw-r--r--src/Ryujinx.Graphics.Gpu/Image/TextureManager.cs7
-rw-r--r--src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs33
-rw-r--r--src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs2
4 files changed, 20 insertions, 43 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
index d1454fc9..8eca18b4 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
@@ -61,8 +61,6 @@ namespace Ryujinx.Graphics.Gpu.Image
private int _textureBufferIndex;
- private readonly float[] _scales;
- private bool _scaleChanged;
private int _lastFragmentTotal;
/// <summary>
@@ -72,14 +70,12 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <param name="channel">The GPU channel that the texture bindings manager belongs to</param>
/// <param name="texturePoolCache">Texture pools cache used to get texture pools from</param>
/// <param name="samplerPoolCache">Sampler pools cache used to get sampler 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 texturePoolCache,
SamplerPoolCache samplerPoolCache,
- float[] scales,
bool isCompute)
{
_context = context;
@@ -87,7 +83,6 @@ namespace Ryujinx.Graphics.Gpu.Image
_texturePoolCache = texturePoolCache;
_samplerPoolCache = samplerPoolCache;
- _scales = scales;
_isCompute = isCompute;
int stages = isCompute ? 1 : Constants.ShaderStages;
@@ -239,12 +234,7 @@ namespace Ryujinx.Graphics.Gpu.Image
}
}
- if (result != _scales[index])
- {
- _scaleChanged = true;
-
- _scales[index] = result;
- }
+ _context.SupportBufferUpdater.UpdateRenderScale(index, result);
return changed;
}
@@ -290,11 +280,6 @@ namespace Ryujinx.Graphics.Gpu.Image
// - Vertex stage has bindings that require scale.
// - Fragment stage binding count has been updated since last render scale update.
- _scaleChanged = true;
- }
-
- if (_scaleChanged)
- {
if (!_isCompute)
{
total += fragmentTotal; // Add the fragment bindings to the total.
@@ -302,9 +287,7 @@ namespace Ryujinx.Graphics.Gpu.Image
_lastFragmentTotal = fragmentTotal;
- _context.SupportBufferUpdater.UpdateRenderScale(_scales, total, fragmentTotal);
-
- _scaleChanged = false;
+ _context.SupportBufferUpdater.UpdateRenderScaleFragmentCount(total, fragmentTotal);
}
}
diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
index 63b9b47c..ed181640 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
@@ -44,11 +44,8 @@ namespace Ryujinx.Graphics.Gpu.Image
TexturePoolCache texturePoolCache = new(context);
SamplerPoolCache samplerPoolCache = new(context);
- float[] scales = new float[64];
- new Span<float>(scales).Fill(1f);
-
- _cpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, samplerPoolCache, scales, isCompute: true);
- _gpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, samplerPoolCache, scales, isCompute: false);
+ _cpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, samplerPoolCache, isCompute: true);
+ _gpBindingsManager = new TextureBindingsManager(context, channel, texturePoolCache, samplerPoolCache, isCompute: false);
_texturePoolCache = texturePoolCache;
_samplerPoolCache = samplerPoolCache;
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs
index b236476e..409c7a78 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs
@@ -136,33 +136,30 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// <summary>
/// Updates the render scales for shader input textures or images.
/// </summary>
- /// <param name="scales">Scale values</param>
- /// <param name="totalCount">Total number of scales across all stages</param>
- /// <param name="fragmentCount">Total number of scales on the fragment shader stage</param>
- public void UpdateRenderScale(ReadOnlySpan<float> scales, int totalCount, int fragmentCount)
+ /// <param name="index">Index of the scale</param>
+ /// <param name="scale">Scale value</param>
+ public void UpdateRenderScale(int index, float scale)
{
- bool changed = false;
-
- for (int index = 0; index < totalCount; index++)
+ if (_data.RenderScale[1 + index].X != scale)
{
- if (_data.RenderScale[1 + index].X != scales[index])
- {
- _data.RenderScale[1 + index].X = scales[index];
- changed = true;
- }
+ _data.RenderScale[1 + index].X = scale;
+ DirtyRenderScale(1 + index, 1);
}
+ }
+ /// <summary>
+ /// Updates the render scales for shader input textures or images.
+ /// </summary>
+ /// <param name="totalCount">Total number of scales across all stages</param>
+ /// <param name="fragmentCount">Total number of scales on the fragment shader stage</param>
+ public void UpdateRenderScaleFragmentCount(int totalCount, int fragmentCount)
+ {
// Only update fragment count if there are scales after it for the vertex stage.
if (fragmentCount != totalCount && fragmentCount != _data.FragmentRenderScaleCount.X)
{
_data.FragmentRenderScaleCount.X = fragmentCount;
DirtyFragmentRenderScaleCount();
}
-
- if (changed)
- {
- DirtyRenderScale(0, 1 + totalCount);
- }
}
/// <summary>
@@ -172,7 +169,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// <param name="isBgra">True if the format is BGRA< false otherwise</param>
public void SetRenderTargetIsBgra(int index, bool isBgra)
{
- bool isBgraChanged = (_data.FragmentIsBgra[index].X != 0) != isBgra;
+ bool isBgraChanged = _data.FragmentIsBgra[index].X != 0 != isBgra;
if (isBgraChanged)
{
diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
index 89471091..45392b64 100644
--- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
+++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
@@ -376,7 +376,7 @@ namespace Ryujinx.Graphics.Vulkan
var program = _program;
var bindingSegments = program.BindingSegments[setIndex];
- if (bindingSegments.Length == 0 && setIndex != PipelineBase.UniformSetIndex)
+ if (bindingSegments.Length == 0)
{
return;
}