From 8f3fda7986cee307155d75452958154757b10dcf Mon Sep 17 00:00:00 2001 From: fincs Date: Sun, 12 Nov 2017 14:25:03 +0100 Subject: [PATCH] Deprecate C3D_SafeXYZ functions & replace them with C3D_SyncXYZ --- include/c3d/renderqueue.h | 10 +++++-- source/renderqueue.c | 60 +++++++++++++++++++++++++++++++++++++-- source/texture.c | 8 ++---- 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/include/c3d/renderqueue.h b/include/c3d/renderqueue.h index 70ebfff..4efef39 100644 --- a/include/c3d/renderqueue.h +++ b/include/c3d/renderqueue.h @@ -72,6 +72,10 @@ static inline void C3D_RenderTargetClear(C3D_RenderTarget* target, C3D_ClearBits C3D_FrameBufClear(&target->frameBuf, clearBits, clearColor, clearDepth); } -void C3D_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags); -void C3D_SafeTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags); -void C3D_SafeMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1); +C3D_DEPRECATED void C3D_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags); +C3D_DEPRECATED void C3D_SafeTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags); +C3D_DEPRECATED void C3D_SafeMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1); + +void C3D_SyncDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags); +void C3D_SyncTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags); +void C3D_SyncMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1); diff --git a/source/renderqueue.c b/source/renderqueue.c index 8fb21e2..e40ab59 100644 --- a/source/renderqueue.c +++ b/source/renderqueue.c @@ -435,7 +435,7 @@ void C3D_RenderTargetSetOutput(C3D_RenderTarget* target, gfxScreen_t screen, gfx target->side = side; } -void C3D_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags) +static void C3Di_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags) { C3Di_WaitAndClearQueue(-1); inSafeTransfer = true; @@ -443,7 +443,7 @@ void C3D_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 gxCmdQueueRun(&C3Di_GetContext()->gxQueue); } -void C3D_SafeTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags) +static void C3Di_SafeTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags) { C3Di_WaitAndClearQueue(-1); inSafeTransfer = true; @@ -451,10 +451,64 @@ void C3D_SafeTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 siz gxCmdQueueRun(&C3Di_GetContext()->gxQueue); } -void C3D_SafeMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1) +static void C3Di_SafeMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1) { C3Di_WaitAndClearQueue(-1); inSafeTransfer = true; GX_MemoryFill(buf0a, buf0v, buf0e, control0, buf1a, buf1v, buf1e, control1); gxCmdQueueRun(&C3Di_GetContext()->gxQueue); } + +void C3D_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags) +{ + C3Di_SafeDisplayTransfer(inadr, indim, outadr, outdim, flags); +} + +void C3D_SafeTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags) +{ + C3Di_SafeTextureCopy(inadr, indim, outadr, outdim, size, flags); +} + +void C3D_SafeMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1) +{ + C3Di_SafeMemoryFill(buf0a, buf0v, buf0e, control0, buf1a, buf1v, buf1e, control1); +} + +void C3D_SyncDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags) +{ + if (inFrame) + { + C3D_FrameSplit(0); + GX_DisplayTransfer(inadr, indim, outadr, outdim, flags); + } else + { + C3Di_SafeDisplayTransfer(inadr, indim, outadr, outdim, flags); + gspWaitForPPF(); + } +} + +void C3D_SyncTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags) +{ + if (inFrame) + { + C3D_FrameSplit(0); + GX_TextureCopy(inadr, indim, outadr, outdim, size, flags); + } else + { + C3Di_SafeTextureCopy(inadr, indim, outadr, outdim, size, flags); + gspWaitForPPF(); + } +} + +void C3D_SyncMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1) +{ + if (inFrame) + { + C3D_FrameSplit(0); + GX_MemoryFill(buf0a, buf0v, buf0e, control0, buf1a, buf1v, buf1e, control1); + } else + { + C3Di_SafeMemoryFill(buf0a, buf0v, buf0e, control0, buf1a, buf1v, buf1e, control1); + gspWaitForPSC0(); + } +} diff --git a/source/texture.c b/source/texture.c index 9c82c10..0bdb3b7 100644 --- a/source/texture.c +++ b/source/texture.c @@ -125,10 +125,7 @@ void C3D_TexLoadImage(C3D_Tex* tex, const void* data, GPU_TEXFACE face, int leve if (!addrIsVRAM(out)) memcpy(out, data, size); else - { - C3D_SafeTextureCopy((u32*)data, 0, (u32*)out, 0, size, 8); - gspWaitForPPF(); - } + C3D_SyncTextureCopy((u32*)data, 0, (u32*)out, 0, size, 8); } static void C3Di_DownscaleRGBA8(u32* dst, const u32* src[4]) @@ -187,11 +184,10 @@ void C3D_TexGenerateMipmap(C3D_Tex* tex, GPU_TEXFACE face) u32 dst_height = src_height>>1; /* Doesn't work due to size restriction bullshit - C3D_SafeDisplayTransfer( + C3D_SyncDisplayTransfer( (u32*)src, GX_BUFFER_DIM(src_width,src_height), (u32*)dst, GX_BUFFER_DIM(dst_width,dst_height), transfer_flags); - gspWaitForPPF(); */ u32 i,j;