Browse Source

Texture Cache: Correctly fix Blits Rescaling.

nce_cpp
Fernando Sahmkow 4 years ago
parent
commit
6933f82023
  1. 21
      src/video_core/texture_cache/texture_cache.h

21
src/video_core/texture_cache/texture_cache.h

@ -473,18 +473,21 @@ void TextureCache<P>::BlitImage(const Tegra::Engines::Fermi2D::Surface& dst,
PrepareImage(dst_id, true, false); PrepareImage(dst_id, true, false);
Image& dst_image = slot_images[dst_id]; Image& dst_image = slot_images[dst_id];
const Image& src_image = slot_images[src_id];
Image& src_image = slot_images[src_id];
const bool is_src_rescaled = True(src_image.flags & ImageFlagBits::Rescaled);
bool is_src_rescaled = True(src_image.flags & ImageFlagBits::Rescaled);
bool is_dst_rescaled = True(dst_image.flags & ImageFlagBits::Rescaled); bool is_dst_rescaled = True(dst_image.flags & ImageFlagBits::Rescaled);
// TODO: This requires the rendertarget image views to be updated with the upscaled sizes,
// otherwise the blit will use a larger framebuffer size than the image view attachment.
// if (is_src_rescaled && !is_dst_rescaled) {
// if (ImageCanRescale(dst_image)) {
// is_dst_rescaled = dst_image.ScaleUp();
// }
// }
if (is_src_rescaled != is_dst_rescaled) {
if (ImageCanRescale(dst_image)) {
ScaleUp(dst_image);
is_dst_rescaled = True(dst_image.flags & ImageFlagBits::Rescaled);
}
if (ImageCanRescale(src_image)) {
ScaleUp(src_image);
is_src_rescaled = True(src_image.flags & ImageFlagBits::Rescaled);
}
}
const auto& resolution = Settings::values.resolution_info; const auto& resolution = Settings::values.resolution_info;
const auto scale_up = [&](u32 value) -> u32 { const auto scale_up = [&](u32 value) -> u32 {

Loading…
Cancel
Save