Skip to content

Commit

Permalink
tile: Fix some tile thickness calculation errors. (#2203)
Browse files Browse the repository at this point in the history
* tile: Fix some tile thickness calculation errors.

* tile: Do not pad mip height to tile height.
  • Loading branch information
squidbus authored Jan 22, 2025
1 parent 5c62a00 commit 2a4798c
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 9 deletions.
13 changes: 6 additions & 7 deletions src/video_core/texture_cache/image_info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,6 @@ void ImageInfo::UpdateSize() {
case AmdGpu::TilingMode::Display_Linear: {
std::tie(mip_info.pitch, mip_info.size) =
ImageSizeLinearAligned(mip_w, mip_h, bpp, num_samples);
mip_info.height = mip_h;
break;
}
case AmdGpu::TilingMode::Texture_Volume:
Expand All @@ -188,12 +187,7 @@ void ImageInfo::UpdateSize() {
case AmdGpu::TilingMode::Display_MicroTiled:
case AmdGpu::TilingMode::Texture_MicroTiled: {
std::tie(mip_info.pitch, mip_info.size) =
ImageSizeMicroTiled(mip_w, mip_h, bpp, thickness, num_samples);
mip_info.height = std::max(mip_h, 8u);
if (props.is_block) {
mip_info.pitch = std::max(mip_info.pitch * 4, 32u);
mip_info.height = std::max(mip_info.height * 4, 32u);
}
ImageSizeMicroTiled(mip_w, mip_h, thickness, bpp, num_samples);
break;
}
case AmdGpu::TilingMode::Display_MacroTiled:
Expand All @@ -208,6 +202,11 @@ void ImageInfo::UpdateSize() {
UNREACHABLE();
}
}
mip_info.height = mip_h;
if (props.is_block) {
mip_info.pitch = std::max(mip_info.pitch * 4, 32u);
mip_info.height = std::max(mip_info.height * 4, 32u);
}
mip_info.size *= mip_d;
mip_info.offset = guest_size;
mips_layout.emplace_back(mip_info);
Expand Down
4 changes: 2 additions & 2 deletions src/video_core/texture_cache/tile.h
Original file line number Diff line number Diff line change
Expand Up @@ -313,8 +313,8 @@ constexpr std::pair<u32, size_t> ImageSizeMicroTiled(u32 pitch, u32 height, u32
const auto& [pitch_align, height_align] = micro_tile_extent;
auto pitch_aligned = (pitch + pitch_align - 1) & ~(pitch_align - 1);
const auto height_aligned = (height + height_align - 1) & ~(height_align - 1);
size_t log_sz = (pitch_aligned * height_aligned * bpp * num_samples * thickness + 7) / 8;
while (log_sz % 256) {
size_t log_sz = (pitch_aligned * height_aligned * bpp * num_samples + 7) / 8;
while ((log_sz * thickness) % 256) {
pitch_aligned += pitch_align;
log_sz = (pitch_aligned * height_aligned * bpp * num_samples + 7) / 8;
}
Expand Down

0 comments on commit 2a4798c

Please sign in to comment.