vk_texture_cache: Fix early returns on unsupported scales
This commit is contained in:
parent
31478c6c1b
commit
f8339cd703
|
@ -1130,13 +1130,19 @@ bool Image::ScaleUp() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ASSERT(info.type != ImageType::Linear);
|
ASSERT(info.type != ImageType::Linear);
|
||||||
flags |= ImageFlagBits::Rescaled;
|
|
||||||
|
|
||||||
const auto& resolution = runtime->resolution;
|
const auto& resolution = runtime->resolution;
|
||||||
if (!resolution.active) {
|
if (!resolution.active) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
const auto& device = runtime->device;
|
const auto& device = runtime->device;
|
||||||
|
const PixelFormat format = StorageFormat(info.format);
|
||||||
|
const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, false, format);
|
||||||
|
const auto similar = device.GetSupportedFormat(
|
||||||
|
format_info.format, (VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT),
|
||||||
|
FormatType::Optimal);
|
||||||
|
if (similar != format_info.format) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (!scaled_image) {
|
if (!scaled_image) {
|
||||||
const u32 up = resolution.up_scale;
|
const u32 up = resolution.up_scale;
|
||||||
const u32 down = resolution.down_shift;
|
const u32 down = resolution.down_shift;
|
||||||
|
@ -1155,23 +1161,9 @@ bool Image::ScaleUp() {
|
||||||
if (aspect_mask == 0) {
|
if (aspect_mask == 0) {
|
||||||
aspect_mask = ImageAspectMask(info.format);
|
aspect_mask = ImageAspectMask(info.format);
|
||||||
}
|
}
|
||||||
if (info.num_samples > 1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
const PixelFormat format = StorageFormat(info.format);
|
|
||||||
const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, false, format);
|
|
||||||
const auto similar = device.GetSupportedFormat(
|
|
||||||
format_info.format, (VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT),
|
|
||||||
FormatType::Optimal);
|
|
||||||
|
|
||||||
if (similar != format_info.format) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (aspect_mask == 0) {
|
|
||||||
aspect_mask = ImageAspectMask(info.format);
|
|
||||||
}
|
|
||||||
BlitScale(*scheduler, *original_image, *scaled_image, info, aspect_mask, resolution, true);
|
BlitScale(*scheduler, *original_image, *scaled_image, info, aspect_mask, resolution, true);
|
||||||
current_image = *scaled_image;
|
current_image = *scaled_image;
|
||||||
|
flags |= ImageFlagBits::Rescaled;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -857,7 +857,7 @@ u64 TextureCache<P>::GetScaledImageSizeBytes(Image& image) {
|
||||||
const f32 add_to_size = Settings::values.resolution_info.up_factor - 1.0f;
|
const f32 add_to_size = Settings::values.resolution_info.up_factor - 1.0f;
|
||||||
const bool sign = std::signbit(add_to_size);
|
const bool sign = std::signbit(add_to_size);
|
||||||
const u32 image_size_bytes = std::max(image.guest_size_bytes, image.unswizzled_size_bytes);
|
const u32 image_size_bytes = std::max(image.guest_size_bytes, image.unswizzled_size_bytes);
|
||||||
const u64 tentative_size = static_cast<u64>(image_size_bytes * std::abs(add_to_size));
|
const u64 tentative_size = image_size_bytes * static_cast<u32>(std::abs(add_to_size));
|
||||||
const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
|
const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
|
||||||
return sign ? -fitted_size : fitted_size;
|
return sign ? -fitted_size : fitted_size;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue