Use correct swizzle on depth-stencil textures (#1196)
This commit is contained in:
parent
ea3d5fde73
commit
1758424208
1 changed files with 36 additions and 0 deletions
|
@ -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.
|
||||
|
|
Reference in a new issue