mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Report block transfers we don't support.
Ones involving framebuffers.
This commit is contained in:
parent
88a6a0789a
commit
b0a1340a80
3 changed files with 36 additions and 0 deletions
|
@ -1603,6 +1603,36 @@ void FramebufferManager::UpdateFromMemory(u32 addr, int size, bool safe) {
|
|||
}
|
||||
}
|
||||
|
||||
void FramebufferManager::NotifyBlockTransfer(u32 dst, u32 src) {
|
||||
#ifndef USING_GLES2
|
||||
if (!reportedBlits_.insert(std::make_pair(dst, src)).second) {
|
||||
// Already reported/checked.
|
||||
return;
|
||||
}
|
||||
|
||||
bool dstBuffer = false;
|
||||
bool srcBuffer = false;
|
||||
|
||||
for (size_t i = 0; i < vfbs_.size(); ++i) {
|
||||
VirtualFramebuffer *vfb = vfbs_[i];
|
||||
if (MaskedEqual(vfb->fb_address, dst)) {
|
||||
dstBuffer = true;
|
||||
}
|
||||
if (MaskedEqual(vfb->fb_address, src)) {
|
||||
srcBuffer = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (dstBuffer && srcBuffer) {
|
||||
WARN_LOG_REPORT(G3D, "Intra buffer block transfer (not supported) %08x -> %08x", src, dst);
|
||||
} else if (dstBuffer) {
|
||||
WARN_LOG_REPORT(G3D, "Block transfer upload (not supported) %08x -> %08x", src, dst);
|
||||
} else if (srcBuffer && g_Config.iRenderingMode == FB_BUFFERED_MODE) {
|
||||
WARN_LOG_REPORT(G3D, "Block transfer download (not supported) %08x -> %08x", src, dst);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void FramebufferManager::Resized() {
|
||||
resized_ = true;
|
||||
}
|
||||
|
|
|
@ -138,6 +138,9 @@ public:
|
|||
void UpdateFromMemory(u32 addr, int size, bool safe);
|
||||
void SetLineWidth();
|
||||
|
||||
// Just for logging right now. Might remove/change.
|
||||
void NotifyBlockTransfer(u32 dst, u32 src);
|
||||
|
||||
#ifdef USING_GLES2
|
||||
void ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool sync = true);
|
||||
#else
|
||||
|
@ -230,4 +233,6 @@ private:
|
|||
AsyncPBO *pixelBufObj_; //this isn't that large
|
||||
u8 currentPBO_;
|
||||
#endif
|
||||
|
||||
std::set<std::pair<u32, u32>> reportedBlits_;
|
||||
};
|
||||
|
|
|
@ -1571,6 +1571,7 @@ void GLES_GPU::DoBlockTransfer() {
|
|||
}
|
||||
|
||||
// TODO: Notify all overlapping FBOs that they need to reload.
|
||||
framebufferManager_.NotifyBlockTransfer(dstBasePtr, srcBasePtr);
|
||||
|
||||
textureCache_.Invalidate(dstBasePtr + (dstY * dstStride + dstX) * bpp, height * dstStride * bpp, GPU_INVALIDATE_HINT);
|
||||
if (Memory::IsRAMAddress(srcBasePtr) && Memory::IsVRAMAddress(dstBasePtr)) {
|
||||
|
|
Loading…
Add table
Reference in a new issue