|
@@ -179,6 +179,22 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|
|
swizzleB,
|
|
swizzleB,
|
|
|
swizzleA);
|
|
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(
|
|
return new TextureInfo(
|
|
|
address,
|
|
address,
|
|
|
width,
|
|
width,
|
|
@@ -252,6 +268,26 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|
|
component == SwizzleComponent.Green;
|
|
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>
|
|
/// <summary>
|
|
|
/// Decrements the reference count of the texture.
|
|
/// Decrements the reference count of the texture.
|
|
|
/// This indicates that the texture pool is not using it anymore.
|
|
/// This indicates that the texture pool is not using it anymore.
|