Fix potential sign issue in Accessible() (though I don't quite get how it's failing).

This commit is contained in:
Henrik Rydgård committed 2025-06-24 17:16:59 +02:00
1 parent 14b593cdfc
commit a7a33dc414
2 files changed
+6 -13

No files matched your search

+4 -1
View File
@@ -281,7 +281,10 @@ inline OpArg MRegSum(X64Reg base, X64Reg offset)
template <typename T>
inline bool Accessible(const T *t1, const T *t2) {
ptrdiff_t diff = (const uint8_t *)t1 - (const uint8_t *)t2;
return diff > -0x7FFFFFE0 && diff < 0x7FFFFFE0;
if (diff < 0) {
diff = -diff;
}
return diff < (ptrdiff_t)0x7FFFFFE0;
}
template <typename T>
+2 -12
View File
@@ -1028,12 +1028,7 @@ void SoftGPU::Execute_FramebufPtr(u32 op, u32 diff) {
// We assume fb.data won't change while we're drawing.
if (diff) {
drawEngine_->transformUnit.Flush(this, "framebuf");
if (gstate.getFrameBufAddress() != 0) {
_dbg_assert_msg_(Memory::IsValidAddress(gstate.getFrameBufAddress()), "Invalid framebuffer address %08x", gstate.getFrameBufAddress());
fb.data = Memory::GetPointerWriteUnchecked(gstate.getFrameBufAddress());
} else {
fb.data = nullptr;
}
fb.data = Memory::GetPointerWriteUnchecked(gstate.getFrameBufAddress());
}
}
@@ -1054,12 +1049,7 @@ void SoftGPU::Execute_ZbufPtr(u32 op, u32 diff) {
drawEngine_->transformUnit.Flush(this, "depthbuf");
// For the pointer, ignore memory mirrors. This also gives some buffer for draws that go outside.
// TODO: Confirm how wrapping is handled in drawing. Adjust if we ever handle VRAM mirrors more accurately.
if (gstate.getDepthBufAddress() != 0) {
_dbg_assert_msg_(Memory::IsValidAddress(gstate.getDepthBufAddress()), "Invalid depthbuffer address %08x", gstate.getDepthBufAddress());
depthbuf.data = Memory::GetPointerWriteUnchecked(gstate.getDepthBufAddress() & 0x041FFFF0);
} else {
depthbuf.data = nullptr;
}
depthbuf.data = Memory::GetPointerWrite(gstate.getDepthBufAddress() & 0x041FFFF0);
}
}