Allow copy destination to have a different scale from source (#1711)
* Allow copy destination to have a different scale from source Will result in more scaled copy destinations, but allows scaling in some games that copy textures to the output framebuffer. * Support copying multiple levels/layers Uses glFramebufferTextureLayer to copy multiple layers, copies levels individually (and scales the regions). Remove CopyArrayScaled, since the backend copy handles it now.
This commit is contained in:
parent
cf7044e37b
commit
9493cdfe55
5 changed files with 99 additions and 98 deletions
|
@ -387,7 +387,7 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
/// <returns>True if eligible</returns>
|
||||
public bool IsUpscaleCompatible(TextureInfo info)
|
||||
{
|
||||
return (info.Target == Target.Texture2D || info.Target == Target.Texture2DArray) && info.Levels == 1 && !info.FormatInfo.IsCompressed && UpscaleSafeMode(info);
|
||||
return (info.Target == Target.Texture2D || info.Target == Target.Texture2DArray) && !info.FormatInfo.IsCompressed && UpscaleSafeMode(info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -401,6 +401,13 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
// While upscaling works for all targets defined by IsUpscaleCompatible, we additionally blacklist targets here that
|
||||
// may have undesirable results (upscaling blur textures) or simply waste GPU resources (upscaling texture atlas).
|
||||
|
||||
if (info.Levels > 3)
|
||||
{
|
||||
// Textures with more than 3 levels are likely to be game textures, rather than render textures.
|
||||
// Small textures with full mips are likely to be removed by the next check.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(info.FormatInfo.Format.IsDepthOrStencil() || info.FormatInfo.Components == 1))
|
||||
{
|
||||
// Discount square textures that aren't depth-stencil like. (excludes game textures, cubemap faces, most 3D texture LUT, texture atlas)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue