mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-18 17:00:30 +02:00
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:
1 parent
9466dc6397
commit
cc155ec460
5 files changed
+34
-12
No files matched your search
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user