|
|
|
@ -38,14 +38,15 @@ struct SurfaceParams {
|
|
|
|
|
ASTC_2D_4X4 = 13,
|
|
|
|
|
G8R8 = 14,
|
|
|
|
|
BGRA8 = 15,
|
|
|
|
|
RGBA32F = 16,
|
|
|
|
|
|
|
|
|
|
MaxColorFormat,
|
|
|
|
|
|
|
|
|
|
// DepthStencil formats
|
|
|
|
|
Z24S8 = 16,
|
|
|
|
|
S8Z24 = 17,
|
|
|
|
|
Z32F = 18,
|
|
|
|
|
Z16 = 19,
|
|
|
|
|
Z24S8 = 17,
|
|
|
|
|
S8Z24 = 18,
|
|
|
|
|
Z32F = 19,
|
|
|
|
|
Z16 = 20,
|
|
|
|
|
|
|
|
|
|
MaxDepthStencilFormat,
|
|
|
|
|
|
|
|
|
@ -99,6 +100,7 @@ struct SurfaceParams {
|
|
|
|
|
4, // ASTC_2D_4X4
|
|
|
|
|
1, // G8R8
|
|
|
|
|
1, // BGRA8
|
|
|
|
|
1, // RGBA32F
|
|
|
|
|
1, // Z24S8
|
|
|
|
|
1, // S8Z24
|
|
|
|
|
1, // Z32F
|
|
|
|
@ -130,6 +132,7 @@ struct SurfaceParams {
|
|
|
|
|
32, // ASTC_2D_4X4
|
|
|
|
|
16, // G8R8
|
|
|
|
|
32, // BGRA8
|
|
|
|
|
128, // RGBA32F
|
|
|
|
|
32, // Z24S8
|
|
|
|
|
32, // S8Z24
|
|
|
|
|
32, // Z32F
|
|
|
|
@ -171,6 +174,8 @@ struct SurfaceParams {
|
|
|
|
|
return PixelFormat::A2B10G10R10;
|
|
|
|
|
case Tegra::RenderTargetFormat::RGBA16_FLOAT:
|
|
|
|
|
return PixelFormat::RGBA16F;
|
|
|
|
|
case Tegra::RenderTargetFormat::RGBA32_FLOAT:
|
|
|
|
|
return PixelFormat::RGBA32F;
|
|
|
|
|
case Tegra::RenderTargetFormat::R11G11B10_FLOAT:
|
|
|
|
|
return PixelFormat::R11FG11FB10F;
|
|
|
|
|
case Tegra::RenderTargetFormat::RGBA32_UINT:
|
|
|
|
@ -181,7 +186,8 @@ struct SurfaceParams {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static PixelFormat PixelFormatFromTextureFormat(Tegra::Texture::TextureFormat format) {
|
|
|
|
|
static PixelFormat PixelFormatFromTextureFormat(Tegra::Texture::TextureFormat format,
|
|
|
|
|
Tegra::Texture::ComponentType component_type) {
|
|
|
|
|
// TODO(Subv): Properly implement this
|
|
|
|
|
switch (format) {
|
|
|
|
|
case Tegra::Texture::TextureFormat::A8R8G8B8:
|
|
|
|
@ -201,7 +207,15 @@ struct SurfaceParams {
|
|
|
|
|
case Tegra::Texture::TextureFormat::BF10GF11RF11:
|
|
|
|
|
return PixelFormat::R11FG11FB10F;
|
|
|
|
|
case Tegra::Texture::TextureFormat::R32_G32_B32_A32:
|
|
|
|
|
return PixelFormat::RGBA32UI;
|
|
|
|
|
switch (component_type) {
|
|
|
|
|
case Tegra::Texture::ComponentType::FLOAT:
|
|
|
|
|
return PixelFormat::RGBA32F;
|
|
|
|
|
case Tegra::Texture::ComponentType::UINT:
|
|
|
|
|
return PixelFormat::RGBA32UI;
|
|
|
|
|
}
|
|
|
|
|
LOG_CRITICAL(HW_GPU, "Unimplemented component_type={}",
|
|
|
|
|
static_cast<u32>(component_type));
|
|
|
|
|
UNREACHABLE();
|
|
|
|
|
case Tegra::Texture::TextureFormat::DXT1:
|
|
|
|
|
return PixelFormat::DXT1;
|
|
|
|
|
case Tegra::Texture::TextureFormat::DXT23:
|
|
|
|
@ -215,7 +229,8 @@ struct SurfaceParams {
|
|
|
|
|
case Tegra::Texture::TextureFormat::ASTC_2D_4X4:
|
|
|
|
|
return PixelFormat::ASTC_2D_4X4;
|
|
|
|
|
default:
|
|
|
|
|
LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
|
|
|
|
|
LOG_CRITICAL(HW_GPU, "Unimplemented format={}, component_type={}",
|
|
|
|
|
static_cast<u32>(format), static_cast<u32>(component_type));
|
|
|
|
|
UNREACHABLE();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -257,6 +272,8 @@ struct SurfaceParams {
|
|
|
|
|
// TODO(bunnei): This is fine for unswizzling (since we just need the right component
|
|
|
|
|
// sizes), but could be a bug if we used this function in different ways.
|
|
|
|
|
return Tegra::Texture::TextureFormat::A8R8G8B8;
|
|
|
|
|
case PixelFormat::RGBA32F:
|
|
|
|
|
return Tegra::Texture::TextureFormat::R32_G32_B32_A32;
|
|
|
|
|
default:
|
|
|
|
|
LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
|
|
|
|
|
UNREACHABLE();
|
|
|
|
@ -284,6 +301,8 @@ struct SurfaceParams {
|
|
|
|
|
switch (type) {
|
|
|
|
|
case Tegra::Texture::ComponentType::UNORM:
|
|
|
|
|
return ComponentType::UNorm;
|
|
|
|
|
case Tegra::Texture::ComponentType::FLOAT:
|
|
|
|
|
return ComponentType::Float;
|
|
|
|
|
default:
|
|
|
|
|
LOG_CRITICAL(HW_GPU, "Unimplemented component type={}", static_cast<u32>(type));
|
|
|
|
|
UNREACHABLE();
|
|
|
|
@ -300,6 +319,7 @@ struct SurfaceParams {
|
|
|
|
|
return ComponentType::UNorm;
|
|
|
|
|
case Tegra::RenderTargetFormat::RGBA16_FLOAT:
|
|
|
|
|
case Tegra::RenderTargetFormat::R11G11B10_FLOAT:
|
|
|
|
|
case Tegra::RenderTargetFormat::RGBA32_FLOAT:
|
|
|
|
|
return ComponentType::Float;
|
|
|
|
|
case Tegra::RenderTargetFormat::RGBA32_UINT:
|
|
|
|
|
return ComponentType::UInt;
|
|
|
|
|