mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Add a matching PerformMemoryUpload().
Just so we have both Download and Upload to use later.
This commit is contained in:
parent
5bd1d9d009
commit
adee76cd62
9 changed files with 34 additions and 1 deletions
|
@ -1330,6 +1330,11 @@ bool DIRECTX9_GPU::PerformMemoryDownload(u32 dest, int size) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool DIRECTX9_GPU::PerformMemoryUpload(u32 dest, int size) {
|
||||
InvalidateCache(dest, size, GPU_INVALIDATE_HINT);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DIRECTX9_GPU::PerformStencilUpload(u32 dest, int size) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@ public:
|
|||
virtual bool PerformMemoryCopy(u32 dest, u32 src, int size);
|
||||
virtual bool PerformMemorySet(u32 dest, u8 v, int size);
|
||||
virtual bool PerformMemoryDownload(u32 dest, int size);
|
||||
virtual bool PerformMemoryUpload(u32 dest, int size);
|
||||
virtual bool PerformStencilUpload(u32 dest, int size);
|
||||
virtual void ClearCacheNextFrame();
|
||||
virtual void DeviceLost(); // Only happens on Android. Drop all textures and shaders.
|
||||
|
|
|
@ -1997,7 +1997,11 @@ void GLES_GPU::InvalidateCacheInternal(u32 addr, int size, GPUInvalidationType t
|
|||
|
||||
void GLES_GPU::PerformMemoryCopyInternal(u32 dest, u32 src, int size) {
|
||||
if (!framebufferManager_.NotifyFramebufferCopy(src, dest, size)) {
|
||||
Memory::Memcpy(dest, Memory::GetPointer(src), size);
|
||||
// We use a little hack for Download/Upload using a VRAM mirror.
|
||||
// Since they're identical we don't need to copy.
|
||||
if (!Memory::IsVRAMAddress(dest) || (dest ^ 0x00400000) != src) {
|
||||
Memory::Memcpy(dest, Memory::GetPointer(src), size);
|
||||
}
|
||||
}
|
||||
InvalidateCache(dest, size, GPU_INVALIDATE_HINT);
|
||||
}
|
||||
|
@ -2064,6 +2068,12 @@ bool GLES_GPU::PerformMemoryDownload(u32 dest, int size) {
|
|||
return gpu->PerformMemoryCopy(dest ^ 0x00400000, dest, size);
|
||||
}
|
||||
|
||||
bool GLES_GPU::PerformMemoryUpload(u32 dest, int size) {
|
||||
// Cheat a bit to force a download of the framebuffer.
|
||||
// VRAM + 0x00400000 is simply a VRAM mirror.
|
||||
return gpu->PerformMemoryCopy(dest, dest ^ 0x00400000, size);
|
||||
}
|
||||
|
||||
bool GLES_GPU::PerformStencilUpload(u32 dest, int size) {
|
||||
if (framebufferManager_.MayIntersectFramebuffer(dest)) {
|
||||
if (IsOnSeparateCPUThread()) {
|
||||
|
|
|
@ -48,6 +48,7 @@ public:
|
|||
virtual bool PerformMemoryCopy(u32 dest, u32 src, int size);
|
||||
virtual bool PerformMemorySet(u32 dest, u8 v, int size);
|
||||
virtual bool PerformMemoryDownload(u32 dest, int size);
|
||||
virtual bool PerformMemoryUpload(u32 dest, int size);
|
||||
virtual bool PerformStencilUpload(u32 dest, int size);
|
||||
virtual void ClearCacheNextFrame();
|
||||
virtual void DeviceLost(); // Only happens on Android. Drop all textures and shaders.
|
||||
|
|
|
@ -250,6 +250,7 @@ public:
|
|||
virtual bool PerformMemoryCopy(u32 dest, u32 src, int size) = 0;
|
||||
virtual bool PerformMemorySet(u32 dest, u8 v, int size) = 0;
|
||||
virtual bool PerformMemoryDownload(u32 dest, int size) = 0;
|
||||
virtual bool PerformMemoryUpload(u32 dest, int size) = 0;
|
||||
virtual bool PerformStencilUpload(u32 dest, int size) = 0;
|
||||
|
||||
// Will cause the texture cache to be cleared at the start of the next frame.
|
||||
|
|
|
@ -675,6 +675,12 @@ bool NullGPU::PerformMemoryDownload(u32 dest, int size) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool NullGPU::PerformMemoryUpload(u32 dest, int size) {
|
||||
// Nothing to update.
|
||||
InvalidateCache(dest, size, GPU_INVALIDATE_HINT);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool NullGPU::PerformStencilUpload(u32 dest, int size) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ public:
|
|||
virtual bool PerformMemoryCopy(u32 dest, u32 src, int size);
|
||||
virtual bool PerformMemorySet(u32 dest, u8 v, int size);
|
||||
virtual bool PerformMemoryDownload(u32 dest, int size);
|
||||
virtual bool PerformMemoryUpload(u32 dest, int size);
|
||||
virtual bool PerformStencilUpload(u32 dest, int size);
|
||||
virtual void ClearCacheNextFrame() {};
|
||||
|
||||
|
|
|
@ -876,6 +876,13 @@ bool SoftGPU::PerformMemoryDownload(u32 dest, int size)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool SoftGPU::PerformMemoryUpload(u32 dest, int size)
|
||||
{
|
||||
// Nothing to update.
|
||||
InvalidateCache(dest, size, GPU_INVALIDATE_HINT);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SoftGPU::PerformStencilUpload(u32 dest, int size)
|
||||
{
|
||||
return false;
|
||||
|
|
|
@ -62,6 +62,7 @@ public:
|
|||
virtual bool PerformMemoryCopy(u32 dest, u32 src, int size);
|
||||
virtual bool PerformMemorySet(u32 dest, u8 v, int size);
|
||||
virtual bool PerformMemoryDownload(u32 dest, int size);
|
||||
virtual bool PerformMemoryUpload(u32 dest, int size);
|
||||
virtual bool PerformStencilUpload(u32 dest, int size);
|
||||
virtual void ClearCacheNextFrame() {};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue