Change image format view handling to allow view incompatible formats (#7311)

* Allow creating texture aliases on texture pool

* Delete old image format override code

* New format incompatible alias

* Missing bounds check

* GetForBinding now takes FormatInfo

* Make FormatInfo struct more compact
This commit is contained in:
gdkchan 2024-09-17 15:52:30 -03:00 committed by GitHub
parent ccf96bf5e6
commit eb8132b627
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 294 additions and 279 deletions

View file

@ -7,6 +7,11 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary>
readonly struct FormatInfo
{
/// <summary>
/// An invalid texture format.
/// </summary>
public static FormatInfo Invalid { get; } = new(0, 0, 0, 0, 0);
/// <summary>
/// A default, generic RGBA8 texture format.
/// </summary>
@ -23,7 +28,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <remarks>
/// Must be 1 for non-compressed formats.
/// </remarks>
public int BlockWidth { get; }
public byte BlockWidth { get; }
/// <summary>
/// The block height for compressed formats.
@ -31,17 +36,17 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <remarks>
/// Must be 1 for non-compressed formats.
/// </remarks>
public int BlockHeight { get; }
public byte BlockHeight { get; }
/// <summary>
/// The number of bytes occupied by a single pixel in memory of the texture data.
/// </summary>
public int BytesPerPixel { get; }
public byte BytesPerPixel { get; }
/// <summary>
/// The maximum number of components this format has defined (in RGBA order).
/// </summary>
public int Components { get; }
public byte Components { get; }
/// <summary>
/// Whenever or not the texture format is a compressed format. Determined from block size.
@ -57,10 +62,10 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <param name="bytesPerPixel">The number of bytes occupied by a single pixel in memory of the texture data</param>
public FormatInfo(
Format format,
int blockWidth,
int blockHeight,
int bytesPerPixel,
int components)
byte blockWidth,
byte blockHeight,
byte bytesPerPixel,
byte components)
{
Format = format;
BlockWidth = blockWidth;