diff --git a/libctru/include/3ds/gpu/gpu.h b/libctru/include/3ds/gpu/gpu.h index dc0628d..c865867 100644 --- a/libctru/include/3ds/gpu/gpu.h +++ b/libctru/include/3ds/gpu/gpu.h @@ -4,6 +4,8 @@ void GPU_Init(Handle *gsphandle); void GPU_Reset(u32* gxbuf, u32* gpuBuf, u32 gpuBufSize); void GPUCMD_SetBuffer(u32* adr, u32 size, u32 offset); +void GPUCMD_GetBuffer(u32** adr, u32* size, u32* offset); +void GPUCMD_AddRawCommands(u32* cmd, u32 size); void GPUCMD_Run(u32* gxbuf); void GPUCMD_FlushAndRun(u32* gxbuf); void GPUCMD_Add(u32 cmd, u32* param, u32 paramlength); diff --git a/libctru/source/gpu/gpu.c b/libctru/source/gpu/gpu.c index 8f1b7bc..d3ff287 100644 --- a/libctru/source/gpu/gpu.c +++ b/libctru/source/gpu/gpu.c @@ -26,6 +26,21 @@ void GPUCMD_SetBuffer(u32* adr, u32 size, u32 offset) gpuCmdBufOffset=offset; } +void GPUCMD_GetBuffer(u32** adr, u32* size, u32* offset) +{ + if(adr)*adr=gpuCmdBuf; + if(size)*size=gpuCmdBufSize; + if(offset)*offset=gpuCmdBufOffset; +} + +void GPUCMD_AddRawCommands(u32* cmd, u32 size) +{ + if(!cmd || !size)return; + + memcpy(&gpuCmdBuf[gpuCmdBufOffset], cmd, size*4); + gpuCmdBufOffset+=size; +} + void GPUCMD_Run(u32* gxbuf) { GX_SetCommandList_First(gxbuf, gpuCmdBuf, gpuCmdBufOffset*4, NULL, 0, NULL, 0);