mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-24 14:00:03 +00:00
Take the nearest fbo for a y-offset memcpy().
This commit is contained in:
parent
392897d447
commit
ac6cbf3524
@ -2024,9 +2024,9 @@ bool FramebufferManager::NotifyFramebufferCopy(u32 src, u32 dst, int size, bool
|
|||||||
|
|
||||||
VirtualFramebuffer *dstBuffer = 0;
|
VirtualFramebuffer *dstBuffer = 0;
|
||||||
VirtualFramebuffer *srcBuffer = 0;
|
VirtualFramebuffer *srcBuffer = 0;
|
||||||
u32 dstY = 0;
|
u32 dstY = (u32)-1;
|
||||||
u32 dstH = 0;
|
u32 dstH = 0;
|
||||||
u32 srcY = 0;
|
u32 srcY = (u32)-1;
|
||||||
u32 srcH = 0;
|
u32 srcH = 0;
|
||||||
for (size_t i = 0; i < vfbs_.size(); ++i) {
|
for (size_t i = 0; i < vfbs_.size(); ++i) {
|
||||||
VirtualFramebuffer *vfb = vfbs_[i];
|
VirtualFramebuffer *vfb = vfbs_[i];
|
||||||
@ -2038,18 +2038,20 @@ bool FramebufferManager::NotifyFramebufferCopy(u32 src, u32 dst, int size, bool
|
|||||||
|
|
||||||
if (dst >= vfb_address && (dst + size <= vfb_address + vfb_size || dst == vfb_address)) {
|
if (dst >= vfb_address && (dst + size <= vfb_address + vfb_size || dst == vfb_address)) {
|
||||||
const u32 offset = dst - vfb_address;
|
const u32 offset = dst - vfb_address;
|
||||||
if ((offset % vfb_byteStride) == 0 && (size == vfb_byteWidth || (size % vfb_byteStride) == 0)) {
|
const u32 yOffset = offset / vfb_byteStride;
|
||||||
|
if ((offset % vfb_byteStride) == 0 && (size == vfb_byteWidth || (size % vfb_byteStride) == 0) && yOffset < dstY) {
|
||||||
dstBuffer = vfb;
|
dstBuffer = vfb;
|
||||||
dstY = offset / vfb_byteStride;
|
dstY = yOffset;
|
||||||
dstH = size == vfb_byteWidth ? 1 : std::min((u32)size / vfb_byteStride, (u32)vfb->height);
|
dstH = size == vfb_byteWidth ? 1 : std::min((u32)size / vfb_byteStride, (u32)vfb->height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src >= vfb_address && (src + size <= vfb_address + vfb_size || src == vfb_address)) {
|
if (src >= vfb_address && (src + size <= vfb_address + vfb_size || src == vfb_address)) {
|
||||||
const u32 offset = src - vfb_address;
|
const u32 offset = src - vfb_address;
|
||||||
if ((offset % vfb_byteStride) == 0 && (size == vfb_byteWidth || (size % vfb_byteStride) == 0)) {
|
const u32 yOffset = offset / vfb_byteStride;
|
||||||
|
if ((offset % vfb_byteStride) == 0 && (size == vfb_byteWidth || (size % vfb_byteStride) == 0) && yOffset < srcY) {
|
||||||
srcBuffer = vfb;
|
srcBuffer = vfb;
|
||||||
srcY = offset / vfb_byteStride;
|
srcY = yOffset;
|
||||||
srcH = size == vfb_byteWidth ? 1 : std::min((u32)size / vfb_byteStride, (u32)vfb->height);
|
srcH = size == vfb_byteWidth ? 1 : std::min((u32)size / vfb_byteStride, (u32)vfb->height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user