softgpu: Avoid texture/CLUT flush unless overlap.

Only need to flush here if there's some overlap in the target.
This commit is contained in:
Unknown W. Brackets committed 2022-01-16 08:22:13 -08:00
1 parent 9466dc6397
commit cc155ec460
5 files changed
+34 -12

No files matched your search

+19 -1
View File
@@ -613,7 +613,25 @@ void TransformUnit::Flush() {
GPUDebug::NotifyDraw();
}
void TransformUnit::NotifyClutUpdate(void *src) {
void TransformUnit::FlushIfOverlap(uint32_t addr, uint32_t sz) {
if (!Memory::IsVRAMAddress(addr))
return;
addr &= 0x0FFFFFFF;
uint32_t targetHeight = gstate.getScissorY2() + 1;
uint32_t target = gstate.getFrameBufAddress() & 0x0FFFFFFF;
uint32_t targetStride = gstate.FrameBufStride() * (gstate.FrameBufFormat() == GE_FORMAT_8888 ? 4 : 2);
uint32_t ztarget = gstate.getDepthBufAddress() & 0x0FFFFFFF;
uint32_t ztargetStride = gstate.DepthBufStride() * 2;
// TODO: Skip if the texture is between width and stride?
if (addr < target + targetHeight * targetStride && addr + sz >= target)
Flush();
else if (addr < ztarget + targetHeight * ztargetStride && addr + sz >= ztarget)
Flush();
}
void TransformUnit::NotifyClutUpdate(const void *src) {
binner_->UpdateClut(src);
}