Revert "OpenGL Cache: Ignore format reinterpretation hack"
Testing found a few games that did some crazy things which breaks the assumptions made in that commit.
This commit is contained in:
parent
72034b772d
commit
34ff77f5f7
|
@ -1271,15 +1271,11 @@ void RasterizerCacheOpenGL::ValidateSurface(const Surface& surface, PAddr addr,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto validate_regions = surface->invalid_regions & validate_interval;
|
const auto validate_regions = surface->invalid_regions.find(validate_interval);
|
||||||
auto notify_validated = [&](SurfaceInterval interval) {
|
|
||||||
surface->invalid_regions.erase(interval);
|
|
||||||
validate_regions.erase(interval);
|
|
||||||
};
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
const auto it = validate_regions.begin();
|
const auto it = validate_regions.begin();
|
||||||
if (it == validate_regions.end())
|
if (it == surface->invalid_regions.end())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
const auto interval = *it & validate_interval;
|
const auto interval = *it & validate_interval;
|
||||||
|
@ -1291,28 +1287,15 @@ void RasterizerCacheOpenGL::ValidateSurface(const Surface& surface, PAddr addr,
|
||||||
if (copy_surface != nullptr) {
|
if (copy_surface != nullptr) {
|
||||||
SurfaceInterval copy_interval = params.GetCopyableInterval(copy_surface);
|
SurfaceInterval copy_interval = params.GetCopyableInterval(copy_surface);
|
||||||
CopySurface(copy_surface, surface, copy_interval);
|
CopySurface(copy_surface, surface, copy_interval);
|
||||||
notify_validated(copy_interval);
|
validate_regions.erase(interval);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// HACK HACK HACK: Ignore format reinterpretation
|
|
||||||
// this is a placeholder for HW texture decoding/encoding
|
|
||||||
constexpr bool IGNORE_FORMAT_REINTERPRETING = true;
|
|
||||||
bool retry = false;
|
|
||||||
if (IGNORE_FORMAT_REINTERPRETING) {
|
|
||||||
for (const auto& pair : RangeFromInterval(dirty_regions, interval)) {
|
|
||||||
validate_regions.erase(pair.first & interval);
|
|
||||||
retry = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (retry)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Load data from 3DS memory
|
// Load data from 3DS memory
|
||||||
FlushRegion(params.addr, params.size);
|
FlushRegion(params.addr, params.size);
|
||||||
surface->LoadGLBuffer(params.addr, params.end);
|
surface->LoadGLBuffer(params.addr, params.end);
|
||||||
surface->UploadGLTexture(surface->GetSubRect(params));
|
surface->UploadGLTexture(surface->GetSubRect(params));
|
||||||
notify_validated(params.GetInterval());
|
validate_regions.erase(interval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue