GSP : critical fix in GSPGPU_submitGxCommand

GX : updated GX_SetMemoryFill
GPU : various crap
This commit is contained in:
smea 2014-03-19 23:23:53 +01:00
parent 9d68fa3d7a
commit 1c2d235c64
4 changed files with 13 additions and 10 deletions

View File

@ -5,7 +5,7 @@
Result GX_RequestDma(u32* gxbuf, u32* src, u32* dst, u32 length);
Result GX_SetCommandList_Last(u32* gxbuf, u32* buf0a, u32 buf0s, u8 flags);
Result GX_SetMemoryFill(u32* gxbuf, u32* buf0a, u32 buf0s, u32 buf0d, u16 width0, u32* buf1a, u32 buf1s, u32 buf1d, u16 width1);
Result GX_SetMemoryFill(u32* gxbuf, u32* buf0a, u32 buf0v, u32* buf0e, u16 width0, u32* buf1a, u32 buf1v, u32* buf1e, u16 width1);
Result GX_SetDisplayTransfer(u32* gxbuf, u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags);
Result GX_SetTextureCopy(u32* gxbuf, u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags);
Result GX_SetCommandList_First(u32* gxbuf, u32* buf0a, u32 buf0s, u32* buf1a, u32 buf1s, u32* buf2a, u32 buf2s);

View File

@ -150,6 +150,7 @@ void GPU_Reset(u32* gxbuf, u32* gpuBuf, u32 gpuBufSize)
GPUCMD_AddSingleParam(0x000F0112, 0x0000000F);
GPUCMD_AddSingleParam(0x000F0114, 0x00000003);
GPUCMD_AddSingleParam(0x000F0115, 0x00000003);
GPUCMD_AddSingleParam(0x000F01C5, 0x00000000);
for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
@ -201,6 +202,7 @@ void GPU_SetUniform(u32 startreg, u32* data, u32 numreg)
u32 f32tof24(float f)
{
if(!f)return 0;
u32 v=*((u32*)&f);
u8 s=v>>31;
u32 exp=((v>>23)&0xFF)-0x40;
@ -251,8 +253,8 @@ void GPU_SetViewport(u32* depthBuffer, u32* colorBuffer, u32 x, u32 y, u32 w, u3
GPUCMD_Add(0x800F011C, param, 0x00000003);
GPUCMD_AddSingleParam(0x000F006E, f116e);
GPUCMD_AddSingleParam(0x000F0116, 0x00000003); //?
GPUCMD_AddSingleParam(0x000F0117, 0x00000002); //?
GPUCMD_AddSingleParam(0x000F0116, 0x00000003); //depth format
GPUCMD_AddSingleParam(0x000F0117, 0x00000002); //color format
GPUCMD_AddSingleParam(0x000F011B, 0x00000000); //?
param[0x0]=f32tof24(fw/2);

View File

@ -214,7 +214,7 @@ Result GSPGPU_submitGxCommand(u32* sharedGspCmdBuf, u32 gxCommand[0x8], Handle*
__asm__ ("ldrex %[result], [%[adr]]" : [result] "=r" (cmdBufHeader) : [adr] "r" (sharedGspCmdBuf));
totalCommands=((cmdBufHeader&0xFF00)>>8)+1;
cmdBufHeader=((cmdBufHeader)&0xFFFF00FF)|((totalCommands<<8)|0xFF00);
cmdBufHeader=((cmdBufHeader)&0xFFFF00FF)|((totalCommands<<8)&0xFF00);
}
if(totalCommands==1)return GSPGPU_TriggerCmdReqQueue(handle);

View File

@ -31,16 +31,17 @@ Result GX_SetCommandList_Last(u32* gxbuf, u32* buf0a, u32 buf0s, u8 flags)
return GSPGPU_submitGxCommand(gxbuf, gxCommand, NULL);
}
Result GX_SetMemoryFill(u32* gxbuf, u32* buf0a, u32 buf0s, u32 buf0d, u16 width0, u32* buf1a, u32 buf1s, u32 buf1d, u16 width1)
Result GX_SetMemoryFill(u32* gxbuf, u32* buf0a, u32 buf0v, u32* buf0e, u16 width0, u32* buf1a, u32 buf1v, u32* buf1e, u16 width1)
{
u32 gxCommand[0x8];
gxCommand[0]=0x02; //CommandID
// gxCommand[0]=0x02; //CommandID
gxCommand[0]=0x01000102; //CommandID
gxCommand[1]=(u32)buf0a; //buf0 address
gxCommand[2]=buf0s; //buf0 size
gxCommand[3]=buf0d; //buf0 data
gxCommand[2]=buf0v; //buf0 value
gxCommand[3]=(u32*)buf0e; //buf0 end addr
gxCommand[4]=(u32)buf1a; //buf1 address
gxCommand[5]=buf1s; //buf1 size
gxCommand[6]=buf1d; //buf1 data
gxCommand[5]=buf1v; //buf1 value
gxCommand[6]=(u32*)buf1e; //buf1 end addr
gxCommand[7]=(width0)|(width1<<16);
return GSPGPU_submitGxCommand(gxbuf, gxCommand, NULL);