Use correct swizzle on depth-stencil textures (#1196)

This commit is contained in:
gdkchan 2020-05-03 18:18:00 -03:00 committed by GitHub
parent ea3d5fde73
commit 1758424208
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -179,6 +179,22 @@ namespace Ryujinx.Graphics.Gpu.Image
swizzleB,
swizzleA);
if (IsDepthStencil(formatInfo.Format))
{
swizzleR = SwizzleComponent.Red;
swizzleG = SwizzleComponent.Red;
swizzleB = SwizzleComponent.Red;
if (depthStencilMode == DepthStencilMode.Depth)
{
swizzleA = SwizzleComponent.One;
}
else
{
swizzleA = SwizzleComponent.Red;
}
}
return new TextureInfo(
address,
width,
@ -252,6 +268,26 @@ namespace Ryujinx.Graphics.Gpu.Image
component == SwizzleComponent.Green;
}
/// <summary>
/// Checks if the texture format is a depth, stencil or depth-stencil format.
/// </summary>
/// <param name="format">Texture format</param>
/// <returns>True if the format is a depth, stencil or depth-stencil format, false otherwise</returns>
private static bool IsDepthStencil(Format format)
{
switch (format)
{
case Format.D16Unorm:
case Format.D24UnormS8Uint:
case Format.D24X8Unorm:
case Format.D32Float:
case Format.D32FloatS8Uint:
return true;
}
return false;
}
/// <summary>
/// Decrements the reference count of the texture.
/// This indicates that the texture pool is not using it anymore.