Report block transfers we don't support.

Ones involving framebuffers.
This commit is contained in:
Unknown W. Brackets 2014-01-20 01:47:20 -08:00
parent 88a6a0789a
commit b0a1340a80
3 changed files with 36 additions and 0 deletions

View file

@ -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;
}

View file

@ -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_;
};

View file

@ -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)) {