mirror of
https://gitlab.com/suyu-emu/suyu.git
synced 2024-03-15 23:15:44 +00:00
gl_rasterizer_cache: Implement depth format Z16_UNORM.
This commit is contained in:
parent
2cb3fdca86
commit
e21190f47f
|
@ -112,6 +112,8 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form
|
||||||
{GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, ComponentType::UNorm,
|
{GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, ComponentType::UNorm,
|
||||||
false}, // S8Z24
|
false}, // S8Z24
|
||||||
{GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, ComponentType::Float, false}, // Z32F
|
{GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, ComponentType::Float, false}, // Z32F
|
||||||
|
{GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, ComponentType::UNorm,
|
||||||
|
false}, // Z16
|
||||||
}};
|
}};
|
||||||
|
|
||||||
static const FormatTuple& GetFormatTuple(PixelFormat pixel_format, ComponentType component_type) {
|
static const FormatTuple& GetFormatTuple(PixelFormat pixel_format, ComponentType component_type) {
|
||||||
|
@ -195,7 +197,7 @@ static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr),
|
||||||
MortonCopy<true, PixelFormat::DXT45>, MortonCopy<true, PixelFormat::DXN1>,
|
MortonCopy<true, PixelFormat::DXT45>, MortonCopy<true, PixelFormat::DXN1>,
|
||||||
MortonCopy<true, PixelFormat::BC7U>, MortonCopy<true, PixelFormat::ASTC_2D_4X4>,
|
MortonCopy<true, PixelFormat::BC7U>, MortonCopy<true, PixelFormat::ASTC_2D_4X4>,
|
||||||
MortonCopy<true, PixelFormat::Z24S8>, MortonCopy<true, PixelFormat::S8Z24>,
|
MortonCopy<true, PixelFormat::Z24S8>, MortonCopy<true, PixelFormat::S8Z24>,
|
||||||
MortonCopy<true, PixelFormat::Z32F>,
|
MortonCopy<true, PixelFormat::Z32F>, MortonCopy<true, PixelFormat::Z16>,
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr),
|
static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr),
|
||||||
|
@ -219,6 +221,7 @@ static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr),
|
||||||
MortonCopy<false, PixelFormat::Z24S8>,
|
MortonCopy<false, PixelFormat::Z24S8>,
|
||||||
MortonCopy<false, PixelFormat::S8Z24>,
|
MortonCopy<false, PixelFormat::S8Z24>,
|
||||||
MortonCopy<false, PixelFormat::Z32F>,
|
MortonCopy<false, PixelFormat::Z32F>,
|
||||||
|
MortonCopy<false, PixelFormat::Z16>,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Allocate an uninitialized texture of appropriate size and format for the surface
|
// Allocate an uninitialized texture of appropriate size and format for the surface
|
||||||
|
|
|
@ -44,6 +44,7 @@ struct SurfaceParams {
|
||||||
Z24S8 = 14,
|
Z24S8 = 14,
|
||||||
S8Z24 = 15,
|
S8Z24 = 15,
|
||||||
Z32F = 16,
|
Z32F = 16,
|
||||||
|
Z16 = 17,
|
||||||
|
|
||||||
MaxDepthStencilFormat,
|
MaxDepthStencilFormat,
|
||||||
|
|
||||||
|
@ -98,6 +99,7 @@ struct SurfaceParams {
|
||||||
1, // Z24S8
|
1, // Z24S8
|
||||||
1, // S8Z24
|
1, // S8Z24
|
||||||
1, // Z32F
|
1, // Z32F
|
||||||
|
1, // Z16
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ASSERT(static_cast<size_t>(format) < compression_factor_table.size());
|
ASSERT(static_cast<size_t>(format) < compression_factor_table.size());
|
||||||
|
@ -126,6 +128,7 @@ struct SurfaceParams {
|
||||||
32, // Z24S8
|
32, // Z24S8
|
||||||
32, // S8Z24
|
32, // S8Z24
|
||||||
32, // Z32F
|
32, // Z32F
|
||||||
|
16, // Z16
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ASSERT(static_cast<size_t>(format) < bpp_table.size());
|
ASSERT(static_cast<size_t>(format) < bpp_table.size());
|
||||||
|
@ -143,6 +146,8 @@ struct SurfaceParams {
|
||||||
return PixelFormat::Z24S8;
|
return PixelFormat::Z24S8;
|
||||||
case Tegra::DepthFormat::Z32_FLOAT:
|
case Tegra::DepthFormat::Z32_FLOAT:
|
||||||
return PixelFormat::Z32F;
|
return PixelFormat::Z32F;
|
||||||
|
case Tegra::DepthFormat::Z16_UNORM:
|
||||||
|
return PixelFormat::Z16;
|
||||||
default:
|
default:
|
||||||
LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
|
LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
|
@ -249,6 +254,8 @@ struct SurfaceParams {
|
||||||
return Tegra::DepthFormat::Z24_S8_UNORM;
|
return Tegra::DepthFormat::Z24_S8_UNORM;
|
||||||
case PixelFormat::Z32F:
|
case PixelFormat::Z32F:
|
||||||
return Tegra::DepthFormat::Z32_FLOAT;
|
return Tegra::DepthFormat::Z32_FLOAT;
|
||||||
|
case PixelFormat::Z16:
|
||||||
|
return Tegra::DepthFormat::Z16_UNORM;
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
@ -295,6 +302,7 @@ struct SurfaceParams {
|
||||||
|
|
||||||
static ComponentType ComponentTypeFromDepthFormat(Tegra::DepthFormat format) {
|
static ComponentType ComponentTypeFromDepthFormat(Tegra::DepthFormat format) {
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
case Tegra::DepthFormat::Z16_UNORM:
|
||||||
case Tegra::DepthFormat::S8_Z24_UNORM:
|
case Tegra::DepthFormat::S8_Z24_UNORM:
|
||||||
case Tegra::DepthFormat::Z24_S8_UNORM:
|
case Tegra::DepthFormat::Z24_S8_UNORM:
|
||||||
return ComponentType::UNorm;
|
return ComponentType::UNorm;
|
||||||
|
|
|
@ -77,6 +77,8 @@ u32 BytesPerPixel(TextureFormat format) {
|
||||||
|
|
||||||
static u32 DepthBytesPerPixel(DepthFormat format) {
|
static u32 DepthBytesPerPixel(DepthFormat format) {
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
case DepthFormat::Z16_UNORM:
|
||||||
|
return 2;
|
||||||
case DepthFormat::S8_Z24_UNORM:
|
case DepthFormat::S8_Z24_UNORM:
|
||||||
case DepthFormat::Z24_S8_UNORM:
|
case DepthFormat::Z24_S8_UNORM:
|
||||||
case DepthFormat::Z32_FLOAT:
|
case DepthFormat::Z32_FLOAT:
|
||||||
|
@ -133,6 +135,7 @@ std::vector<u8> UnswizzleDepthTexture(VAddr address, DepthFormat format, u32 wid
|
||||||
std::vector<u8> unswizzled_data(width * height * bytes_per_pixel);
|
std::vector<u8> unswizzled_data(width * height * bytes_per_pixel);
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
case DepthFormat::Z16_UNORM:
|
||||||
case DepthFormat::S8_Z24_UNORM:
|
case DepthFormat::S8_Z24_UNORM:
|
||||||
case DepthFormat::Z24_S8_UNORM:
|
case DepthFormat::Z24_S8_UNORM:
|
||||||
case DepthFormat::Z32_FLOAT:
|
case DepthFormat::Z32_FLOAT:
|
||||||
|
|
Loading…
Reference in a new issue