]> Chaos Git - corbenik/ctrulib.git/commitdiff
minor GSP adjustments
authorsmea <smealum@gmail.com>
Mon, 25 Aug 2014 04:01:21 +0000 (21:01 -0700)
committersmea <smealum@gmail.com>
Mon, 25 Aug 2014 04:01:21 +0000 (21:01 -0700)
libctru/include/3ds/GSP.h
libctru/source/services/gsp.c

index b0c34102df8be091f3e9686a92913ae9b0563cfd..faf2ca87a887be1643d3710ada3d2ac2aef6d0a7 100644 (file)
@@ -14,6 +14,15 @@ typedef struct
        u32 unk;//"?"
 } GSP_FramebufferInfo;
 
+typedef enum
+{
+       GSP_RGBA8_OES=0,
+       GSP_BGR8_OES=1,
+       GSP_RGB565_OES=2,
+       GSP_RGB5_A1_OES=3,
+       GSP_RGBA4_OES=4
+}GSP_FramebufferFormats;
+
 typedef struct//See this for GSP_CaptureInfoEntry and GSP_CaptureInfo: http://3dbrew.org/wiki/GSPGPU:ImportDisplayCaptureInfo
 {
        u32 *framebuf0_vaddr;
index fcdb2729ad33e4d91e6499cb5c604acd2968cdaf..1e96a90097df9e32742cfb3aeac93d13759186f1 100644 (file)
@@ -101,28 +101,18 @@ void gspEventThreadMain(u32 arg)
        svcExitThread();
 }
 
-Result GSPGPU_AcquireRight(Handle* handle, u8 flags)
+Result GSPGPU_WriteHWRegs(Handle* handle, u32 regAddr, u32* data, u8 size)
 {
        if(!handle)handle=&gspGpuHandle;
        
-       u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x160042; //request header code
-       cmdbuf[1]=flags;
-       cmdbuf[2]=0x0;
-       cmdbuf[3]=0xffff8001;
-
-       Result ret=0;
-       if((ret=svcSendSyncRequest(*handle)))return ret;
-
-       return cmdbuf[1];
-}
+       if(size>0x80 || !data)return -1;
 
-Result GSPGPU_ReleaseRight(Handle* handle)
-{
-       if(!handle)handle=&gspGpuHandle;
-       
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x170000; //request header code
+       cmdbuf[0]=0x00010082; //request header code
+       cmdbuf[1]=regAddr;
+       cmdbuf[2]=size;
+       cmdbuf[3]=(size<<14)|2;
+       cmdbuf[4]=(u32)data;
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
@@ -130,32 +120,20 @@ Result GSPGPU_ReleaseRight(Handle* handle)
        return cmdbuf[1];
 }
 
-Result GSPGPU_ImportDisplayCaptureInfo(Handle* handle, GSP_CaptureInfo *captureinfo)
+Result GSPGPU_WriteHWRegsWithMask(Handle* handle, u32 regAddr, u32* data, u8 datasize, u32* maskdata, u8 masksize)
 {
        if(!handle)handle=&gspGpuHandle;
        
-       u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x00180000; //request header code
-
-       Result ret=0;
-       if((ret=svcSendSyncRequest(*handle)))return ret;
-
-       ret = cmdbuf[1];
-
-       if(ret==0)
-       {
-               memcpy(captureinfo, &cmdbuf[2], 0x20);
-       }
-
-       return ret;
-}
+       if(datasize>0x80 || !data)return -1;
 
-Result GSPGPU_SaveVramSysArea(Handle* handle)
-{
-       if(!handle)handle=&gspGpuHandle;
-       
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x00190000; //request header code
+       cmdbuf[0]=0x00020084; //request header code
+       cmdbuf[1]=regAddr;
+       cmdbuf[2]=datasize;
+       cmdbuf[3]=(datasize<<14)|2;
+       cmdbuf[4]=(u32)data;
+       cmdbuf[5]=(masksize<<14)|0x402;
+       cmdbuf[6]=(u32)maskdata;
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
@@ -163,26 +141,18 @@ Result GSPGPU_SaveVramSysArea(Handle* handle)
        return cmdbuf[1];
 }
 
-Result GSPGPU_RestoreVramSysArea(Handle* handle)
+Result GSPGPU_ReadHWRegs(Handle* handle, u32 regAddr, u32* data, u8 size)
 {
        if(!handle)handle=&gspGpuHandle;
        
-       u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x001A0000; //request header code
-
-       Result ret=0;
-       if((ret=svcSendSyncRequest(*handle)))return ret;
-
-       return cmdbuf[1];
-}
+       if(size>0x80 || !data)return -1;
 
-Result GSPGPU_SetLcdForceBlack(Handle* handle, u8 flags)
-{
-       if(!handle)handle=&gspGpuHandle;
-       
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0xB0040; //request header code
-       cmdbuf[1]=flags;
+       cmdbuf[0]=0x00040080; //request header code
+       cmdbuf[1]=regAddr;
+       cmdbuf[2]=size;
+       cmdbuf[0x40]=(size<<14)|2;
+       cmdbuf[0x40+1]=(u32)data;
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
@@ -211,7 +181,7 @@ Result GSPGPU_FlushDataCache(Handle* handle, u8* adr, u32 size)
        if(!handle)handle=&gspGpuHandle;
        
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x80082; //request header code
+       cmdbuf[0]=0x00080082; //request header code
        cmdbuf[1]=(u32)adr;
        cmdbuf[2]=size;
        cmdbuf[3]=0x0;
@@ -241,18 +211,13 @@ Result GSPGPU_InvalidateDataCache(Handle* handle, u8* adr, u32 size)
        return cmdbuf[1];
 }
 
-Result GSPGPU_WriteHWRegs(Handle* handle, u32 regAddr, u32* data, u8 size)
+Result GSPGPU_SetLcdForceBlack(Handle* handle, u8 flags)
 {
        if(!handle)handle=&gspGpuHandle;
        
-       if(size>0x80 || !data)return -1;
-
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x10082; //request header code
-       cmdbuf[1]=regAddr;
-       cmdbuf[2]=size;
-       cmdbuf[3]=(size<<14)|2;
-       cmdbuf[4]=(u32)data;
+       cmdbuf[0]=0x000B0040; //request header code
+       cmdbuf[1]=flags;
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
@@ -260,20 +225,12 @@ Result GSPGPU_WriteHWRegs(Handle* handle, u32 regAddr, u32* data, u8 size)
        return cmdbuf[1];
 }
 
-Result GSPGPU_WriteHWRegsWithMask(Handle* handle, u32 regAddr, u32* data, u8 datasize, u32* maskdata, u8 masksize)
+Result GSPGPU_TriggerCmdReqQueue(Handle* handle)
 {
        if(!handle)handle=&gspGpuHandle;
        
-       if(datasize>0x80 || !data)return -1;
-
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x20084; //request header code
-       cmdbuf[1]=regAddr;
-       cmdbuf[2]=datasize;
-       cmdbuf[3]=(datasize<<14)|2;
-       cmdbuf[4]=(u32)data;
-       cmdbuf[5]=(masksize<<14)|0x402;
-       cmdbuf[6]=(u32)maskdata;
+       cmdbuf[0]=0x000C0000; //request header code
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
@@ -281,63 +238,106 @@ Result GSPGPU_WriteHWRegsWithMask(Handle* handle, u32 regAddr, u32* data, u8 dat
        return cmdbuf[1];
 }
 
-Result GSPGPU_ReadHWRegs(Handle* handle, u32 regAddr, u32* data, u8 size)
+Result GSPGPU_RegisterInterruptRelayQueue(Handle* handle, Handle eventHandle, u32 flags, Handle* outMemHandle, u8* threadID)
 {
        if(!handle)handle=&gspGpuHandle;
        
-       if(size>0x80 || !data)return -1;
-
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x40080; //request header code
-       cmdbuf[1]=regAddr;
-       cmdbuf[2]=size;
-       cmdbuf[0x40]=(size<<14)|2;
-       cmdbuf[0x40+1]=(u32)data;
+       cmdbuf[0]=0x00130042; //request header code
+       cmdbuf[1]=flags;
+       cmdbuf[2]=0x0;
+       cmdbuf[3]=eventHandle;
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
 
+       if(threadID)*threadID=cmdbuf[2];
+       if(outMemHandle)*outMemHandle=cmdbuf[4];
+       
        return cmdbuf[1];
 }
 
-Result GSPGPU_RegisterInterruptRelayQueue(Handle* handle, Handle eventHandle, u32 flags, Handle* outMemHandle, u8* threadID)
+Result GSPGPU_UnregisterInterruptRelayQueue(Handle* handle)
+{
+       if(!handle)handle=&gspGpuHandle;
+       
+       u32* cmdbuf=getThreadCommandBuffer();
+       cmdbuf[0]=0x00140000; //request header code
+
+       Result ret=0;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
+       
+       return cmdbuf[1];
+}
+
+Result GSPGPU_AcquireRight(Handle* handle, u8 flags)
 {
        if(!handle)handle=&gspGpuHandle;
        
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x130042; //request header code
+       cmdbuf[0]=0x160042; //request header code
        cmdbuf[1]=flags;
        cmdbuf[2]=0x0;
-       cmdbuf[3]=eventHandle;
+       cmdbuf[3]=0xffff8001;
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
 
-       if(threadID)*threadID=cmdbuf[2];
-       if(outMemHandle)*outMemHandle=cmdbuf[4];
+       return cmdbuf[1];
+}
+
+Result GSPGPU_ReleaseRight(Handle* handle)
+{
+       if(!handle)handle=&gspGpuHandle;
        
+       u32* cmdbuf=getThreadCommandBuffer();
+       cmdbuf[0]=0x170000; //request header code
+
+       Result ret=0;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
+
        return cmdbuf[1];
 }
 
-Result GSPGPU_UnregisterInterruptRelayQueue(Handle* handle)
+Result GSPGPU_ImportDisplayCaptureInfo(Handle* handle, GSP_CaptureInfo *captureinfo)
 {
        if(!handle)handle=&gspGpuHandle;
        
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0x00140000; //request header code
+       cmdbuf[0]=0x00180000; //request header code
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;
+
+       ret = cmdbuf[1];
+
+       if(ret==0)
+       {
+               memcpy(captureinfo, &cmdbuf[2], 0x20);
+       }
+
+       return ret;
+}
+
+Result GSPGPU_SaveVramSysArea(Handle* handle)
+{
+       if(!handle)handle=&gspGpuHandle;
        
+       u32* cmdbuf=getThreadCommandBuffer();
+       cmdbuf[0]=0x00190000; //request header code
+
+       Result ret=0;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
+
        return cmdbuf[1];
 }
 
-Result GSPGPU_TriggerCmdReqQueue(Handle* handle)
+Result GSPGPU_RestoreVramSysArea(Handle* handle)
 {
        if(!handle)handle=&gspGpuHandle;
        
        u32* cmdbuf=getThreadCommandBuffer();
-       cmdbuf[0]=0xC0000; //request header code
+       cmdbuf[0]=0x001A0000; //request header code
 
        Result ret=0;
        if((ret=svcSendSyncRequest(*handle)))return ret;