aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-10-29 18:57:34 -0300
committerGitHub <noreply@github.com>2020-10-29 22:57:34 +0100
commit423da5cc911bf7545746ad4fd184eff42f32dd9b (patch)
treec554fe100de8be953a8a492d4386e23e6a91b7e8 /Ryujinx.Graphics.Gpu/Image/TextureManager.cs
parent780c7530d69068dd651c33e18828e23dc6977d90 (diff)
Scale texture resolution before sending to backend (#1646)
* Work * Propagate scale factor to copy temp. Not really needed, just here for consistency * PR feedback
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image/TextureManager.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureManager.cs15
1 files changed, 11 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
index 27292f56..b0e715ea 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
@@ -754,7 +754,7 @@ namespace Ryujinx.Graphics.Gpu.Image
}
break;
- }
+ }
else if (overlapCompatibility == TextureViewCompatibility.CopyOnly)
{
// TODO: Copy rules for targets created after the container texture. See below.
@@ -833,7 +833,7 @@ namespace Ryujinx.Graphics.Gpu.Image
TextureInfo overlapInfo = AdjustSizes(texture, overlap.Info, oInfo.FirstLevel);
- TextureCreateInfo createInfo = GetCreateInfo(overlapInfo, _context.Capabilities);
+ TextureCreateInfo createInfo = GetCreateInfo(overlapInfo, _context.Capabilities, overlap.ScaleFactor);
if (texture.ScaleFactor != overlap.ScaleFactor)
{
@@ -944,7 +944,7 @@ namespace Ryujinx.Graphics.Gpu.Image
}
else
{
- // Bpp may be a mismatch between the target texture and the param.
+ // Bpp may be a mismatch between the target texture and the param.
// Due to the way linear strided and block layouts work, widths can be multiplied by Bpp for comparison.
// Note: tex.Width is the aligned texture size. Prefer param.XCount, as the destination should be a texture with that exact size.
@@ -1054,8 +1054,9 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary>
/// <param name="info">Texture information</param>
/// <param name="caps">GPU capabilities</param>
+ /// <param name="scale">Texture scale factor, to be applied to the texture size</param>
/// <returns>The texture creation information</returns>
- public static TextureCreateInfo GetCreateInfo(TextureInfo info, Capabilities caps)
+ public static TextureCreateInfo GetCreateInfo(TextureInfo info, Capabilities caps, float scale)
{
FormatInfo formatInfo = info.FormatInfo;
@@ -1092,6 +1093,12 @@ namespace Ryujinx.Graphics.Gpu.Image
int depth = info.GetDepth() * info.GetLayers();
+ if (scale != 1f)
+ {
+ width = (int)MathF.Ceiling(width * scale);
+ height = (int)MathF.Ceiling(height * scale);
+ }
+
return new TextureCreateInfo(
width,
height,