early-access version 2228

This commit is contained in:
pineappleEA 2021-11-21 06:28:04 +01:00
parent 00b81fba84
commit f5993d8d87
3 changed files with 7 additions and 30 deletions

View File

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 2227. This is the source code for early-access 2228.
## Legal Notice ## Legal Notice

View File

@ -1079,7 +1079,7 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA
template <class P> template <class P>
typename TextureCache<P>::BlitImages TextureCache<P>::GetBlitImages( typename TextureCache<P>::BlitImages TextureCache<P>::GetBlitImages(
const Tegra::Engines::Fermi2D::Surface& dst, const Tegra::Engines::Fermi2D::Surface& src) { const Tegra::Engines::Fermi2D::Surface& dst, const Tegra::Engines::Fermi2D::Surface& src) {
static constexpr auto FIND_OPTIONS = RelaxedOptions::Format | RelaxedOptions::Samples; static constexpr auto FIND_OPTIONS = RelaxedOptions::Samples;
const GPUVAddr dst_addr = dst.Address(); const GPUVAddr dst_addr = dst.Address();
const GPUVAddr src_addr = src.Address(); const GPUVAddr src_addr = src.Address();
ImageInfo dst_info(dst); ImageInfo dst_info(dst);
@ -1093,9 +1093,7 @@ typename TextureCache<P>::BlitImages TextureCache<P>::GetBlitImages(
const ImageBase* const dst_image = dst_id ? &slot_images[dst_id] : nullptr; const ImageBase* const dst_image = dst_id ? &slot_images[dst_id] : nullptr;
const ImageBase* const src_image = src_id ? &slot_images[src_id] : nullptr; const ImageBase* const src_image = src_id ? &slot_images[src_id] : nullptr;
DeduceBlitImages(dst_info, src_info, dst_image, src_image); DeduceBlitImages(dst_info, src_info, dst_image, src_image);
if (GetFormatType(dst_info.format) != GetFormatType(src_info.format)) { ASSERT(GetFormatType(dst_info.format) == GetFormatType(src_info.format));
continue;
}
RelaxedOptions find_options{}; RelaxedOptions find_options{};
if (src_info.num_samples > 1) { if (src_info.num_samples > 1) {
// it's a resolve, we must enforce the same format. // it's a resolve, we must enforce the same format.

View File

@ -1152,36 +1152,15 @@ bool IsSubresource(const ImageInfo& candidate, const ImageBase& image, GPUVAddr
void DeduceBlitImages(ImageInfo& dst_info, ImageInfo& src_info, const ImageBase* dst, void DeduceBlitImages(ImageInfo& dst_info, ImageInfo& src_info, const ImageBase* dst,
const ImageBase* src) { const ImageBase* src) {
bool is_resolve = false; bool is_resolve = false;
const auto original_src_format = src_info.format;
const auto original_dst_format = dst_info.format;
if (src) { if (src) {
if (GetFormatType(src->info.format) != SurfaceType::ColorTexture) {
src_info.format = src->info.format;
}
is_resolve = src->info.num_samples > 1; is_resolve = src->info.num_samples > 1;
src_info.num_samples = src->info.num_samples; src_info.num_samples = src->info.num_samples;
src_info.size = src->info.size; src_info.size = src->info.size;
} }
if (dst && GetFormatType(dst->info.format) != SurfaceType::ColorTexture) { if (dst) {
dst_info.format = dst->info.format; is_resolve = dst->info.num_samples > 1;
} dst_info.num_samples = dst->info.num_samples;
if (src && GetFormatType(src->info.format) != SurfaceType::ColorTexture) { dst_info.size = dst->info.size;
if (dst) {
if (GetFormatType(dst->info.format) == SurfaceType::ColorTexture) {
src_info.format = original_src_format;
}
} else {
dst_info.format = src->info.format;
}
}
if (dst && GetFormatType(dst->info.format) != SurfaceType::ColorTexture) {
if (src) {
if (GetFormatType(src->info.format) == SurfaceType::ColorTexture) {
dst_info.format = original_dst_format;
}
} else {
src_info.format = dst->info.format;
}
} }
ASSERT(!is_resolve || dst_info.format == src_info.format); ASSERT(!is_resolve || dst_info.format == src_info.format);
} }