|
|
|
@ -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; |
|
|
|
|