mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-17 22:07:57 -05:00
Texture Cache: Fix Rescaling on Multisample
This commit is contained in:
@ -101,7 +101,7 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept {
|
||||
// FIXME: Call this without passing *this
|
||||
layer_stride = CalculateLayerStride(*this);
|
||||
maybe_unaligned_layer_stride = CalculateLayerSize(*this);
|
||||
rescaleable &= (block.depth == 0) && resources.levels == 1 && num_samples == 1;
|
||||
rescaleable &= (block.depth == 0) && resources.levels == 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,7 +134,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Maxwell3D::Regs& regs, size_t index)
|
||||
type = ImageType::e3D;
|
||||
size.depth = rt.depth;
|
||||
} else {
|
||||
rescaleable = block.depth == 0 && size.height > 256 && num_samples == 1;
|
||||
rescaleable = block.depth == 0 && size.height > 256;
|
||||
type = ImageType::e2D;
|
||||
resources.layers = rt.depth;
|
||||
}
|
||||
|
@ -476,17 +476,26 @@ void TextureCache<P>::BlitImage(const Tegra::Engines::Fermi2D::Surface& dst,
|
||||
Image& dst_image = slot_images[dst_id];
|
||||
Image& src_image = slot_images[src_id];
|
||||
|
||||
bool is_resolve = src_image.info.num_samples != 1 && dst_image.info.num_samples == 1;
|
||||
|
||||
bool is_src_rescaled = True(src_image.flags & ImageFlagBits::Rescaled);
|
||||
bool is_dst_rescaled = True(dst_image.flags & ImageFlagBits::Rescaled);
|
||||
|
||||
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);
|
||||
if (is_resolve) {
|
||||
dst_image.info.rescaleable = true;
|
||||
for (const auto& alias : dst_image.aliased_images) {
|
||||
Image& other_image = slot_images[alias.id];
|
||||
other_image.info.rescaleable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ImageCanRescale(dst_image)) {
|
||||
ScaleUp(dst_image);
|
||||
is_dst_rescaled = True(dst_image.flags & ImageFlagBits::Rescaled);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user