implement no-mem test and start validating / tuning with real hardware
This commit is contained in:
169
Draw.c
169
Draw.c
@@ -28,64 +28,157 @@ static inline uint32_t f32u(const float f)
|
||||
}
|
||||
|
||||
void
|
||||
drawRect( const SstRegs * const sst,
|
||||
drawRect( const SstRegs * const sstregs,
|
||||
const unsigned char ucNumTMU,
|
||||
const int16_t x,
|
||||
const int16_t y,
|
||||
const int16_t tSizeX,
|
||||
const int16_t tSizeY)
|
||||
{
|
||||
ISET(sst->sARGB,0xFFFFFFFF);
|
||||
ISET(sst->sOowfbi,f32u(1.0f));
|
||||
ISET(sst->sVx, f32u((float)x));
|
||||
ISET(sst->sVy, f32u((float)y));
|
||||
ISET(sst->sSow0,f32u(0.0f));
|
||||
ISET(sst->sTow0,f32u(0.0f));
|
||||
ISET(sstregs->sSetupMode, 0x0020);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sARGB,0xFFFFFFFF);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sOowfbi,f32u(1.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0,f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0,f32u(0.0f));
|
||||
/* 0b10 0000 (Update only S0/T0), doc page 76 */
|
||||
ISET(sst->sSetupMode, 0x0020);
|
||||
ISET(sst->sBeginTriCMD, 1);
|
||||
ISET(sstregs->sBeginTriCMD, 1);
|
||||
|
||||
ISET(sst->sVx, f32u((float)(x+tSizeX)));
|
||||
ISET(sst->sVy, f32u((float)y));
|
||||
ISET(sst->sSow0,f32u((float)tSizeX));
|
||||
ISET(sst->sTow0,f32u(0.0f));
|
||||
ISET(sst->sDrawTriCMD, 1);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)(x+tSizeX)));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0,f32u((float)tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0,f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(sst->sVx, f32u((float)x));
|
||||
ISET(sst->sVy, f32u((float)y+tSizeY));
|
||||
ISET(sst->sSow0,f32u(0.0f));
|
||||
ISET(sst->sTow0,f32u((float)tSizeY));
|
||||
ISET(sst->sDrawTriCMD, 1);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y+tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0,f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0,f32u((float)tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(sst->sVx, f32u((float)x+tSizeX));
|
||||
ISET(sst->sVy, f32u((float)y+tSizeY));
|
||||
ISET(sst->sSow0,f32u((float)tSizeX));
|
||||
ISET(sst->sTow0,f32u((float)tSizeY));
|
||||
ISET(sst->sDrawTriCMD, 1);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x+tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y+tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0,f32u((float)tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0,f32u((float)tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(sst->nopCMD, 0x1);
|
||||
ISET(sstregs->nopCMD, 0x1);
|
||||
}
|
||||
|
||||
void
|
||||
drawRect2( const SstRegs * const sstregs,
|
||||
const unsigned char ucNumTMU,
|
||||
const int16_t x,
|
||||
const int16_t y,
|
||||
const int16_t tSizeX,
|
||||
const int16_t tSizeY)
|
||||
{
|
||||
ISET(sstregs->sSetupMode, 0x0020);
|
||||
//ISET(SST_TREX(sstregs,ucNumTMU)->sARGB,0xFF55AA55);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sOowfbi, f32u(1.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u(0.0f));
|
||||
/* 0b10 0000 (Update only S0/T0), doc page 76 */
|
||||
ISET(sstregs->sBeginTriCMD, 1);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)(x+tSizeX)));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u((float)tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y+tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u((float)tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x+tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y+tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u((float)tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u((float)tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(sstregs->nopCMD, 0x1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
clearScreen( const SstRegs * const sst,
|
||||
clearScreen( const SstRegs * const sstregs,
|
||||
const uint32_t u32Color,
|
||||
const int16_t u16SizeX,
|
||||
const int16_t u16SizeY)
|
||||
{
|
||||
ISET(sst->clipLeftRight, u16SizeX);
|
||||
ISET(sst->clipBottomTop, u16SizeY);
|
||||
ISET(sst->zaColor, u32Color);
|
||||
//ISET(sst->zaColor, 0x0000);
|
||||
ISET(sstregs->clipLeftRight, u16SizeX);
|
||||
ISET(sstregs->clipBottomTop, u16SizeY);
|
||||
ISET(sstregs->zaColor, u32Color);
|
||||
//ISET(sstregs->zaColor, 0x0000);
|
||||
|
||||
const uint32_t fbz_saved = IGET(sst->fbzMode);
|
||||
ISET(sst->c1,u32Color);
|
||||
ISET(sst->c0,0x0);
|
||||
ISET(sst->zaColor,0x0);
|
||||
ISET(sst->fbzMode, SST_RGBWRMASK | SST_ZAWRMASK);
|
||||
ISET(sst->fastfillCMD, 0);
|
||||
ISET(sst->nopCMD, 0x1);
|
||||
ISET(sst->fbzMode, fbz_saved);
|
||||
const uint32_t fbz_saved = IGET(sstregs->fbzMode);
|
||||
ISET(sstregs->c1,u32Color);
|
||||
ISET(sstregs->c0,0x0);
|
||||
ISET(sstregs->zaColor,0x0F);
|
||||
ISET(sstregs->fbzMode, SST_RGBWRMASK | SST_ZAWRMASK);
|
||||
ISET(sstregs->fastfillCMD, 0);
|
||||
ISET(sstregs->nopCMD, 0x1);
|
||||
ISET(sstregs->fbzMode, fbz_saved);
|
||||
}
|
||||
|
||||
#define XY_ONE (1<<SST_XY_FRACBITS)
|
||||
|
||||
void
|
||||
drawPixel( const SstRegs *sstregs,
|
||||
const unsigned char ucNumTMU,
|
||||
const int x,
|
||||
const int y)
|
||||
{
|
||||
ISET( SST_TREX(sstregs,ucNumTMU)->vA.x,x*XY_ONE);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->vA.y,y*XY_ONE);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->vB.x,(x+2)*XY_ONE);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->vB.y,y*XY_ONE);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->vC.x,x*XY_ONE);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->vC.y,(y+1)*XY_ONE);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->triangleCMD,0);
|
||||
}
|
||||
|
||||
void
|
||||
drawTriangle( const SstRegs * const sstregs,
|
||||
const unsigned char ucNumTMU,
|
||||
const int16_t x,
|
||||
const int16_t y,
|
||||
const int16_t tSizeX,
|
||||
const int16_t tSizeY)
|
||||
{
|
||||
ISET(sstregs->sSetupMode, 0x0020);
|
||||
//ISET(SST_TREX(sstregs,ucNumTMU)->sARGB,0xFF55AA55);
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sOowfbi, f32u(1.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u(0.0f));
|
||||
/* 0b10 0000 (Update only S0/T0), doc page 76 */
|
||||
ISET(sstregs->sBeginTriCMD, 1);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)(x+tSizeX)));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u((float)tSizeX));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVx, f32u((float)x));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sVy, f32u((float)y+tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sSow0, f32u(0.0f));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sTow0, f32u((float)tSizeY));
|
||||
ISET(SST_TREX(sstregs,ucNumTMU)->sDrawTriCMD, 1);
|
||||
|
||||
ISET(sstregs->nopCMD, 0x1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user