修改gpu_cmd的内容,让其容易阅读

This commit is contained in:
anod 2023-07-04 06:18:03 +08:00
parent f4f3a00bdb
commit fc4d244e67
2 changed files with 70 additions and 31 deletions

View File

@ -508,7 +508,7 @@ alignas(16) u8 gbaGpuInitList[1136] =
// 74 @0960 GPUREG_FIXEDATTRIB_DATA0 0,3e10,0
0x00, 0x00, 0x00, 0x00,
0x33, 0x02, 0x2f, 0x80,
0x10, 0x3e, 0x00, 0x00,
0x10, 0x3e, 0x00, 0x00, // <---- 968 003e10改为003e60
0x00, 0x00, 0x00, 0x00,
// 75 @0976 GPUREG_FIXEDATTRIB_DATA0 3f00003e,0,477c00
@ -520,8 +520,8 @@ alignas(16) u8 gbaGpuInitList[1136] =
// 76 @0992 GPUREG_FIXEDATTRIB_DATA0 0,3e10,3e6800
0x00, 0x00, 0x00, 0x00,
0x33, 0x02, 0x2f, 0x80,
0x10, 0x3e, 0x00, 0x00,
0x00, 0x68, 0x3e, 0x00,
0x10, 0x3e, 0x00, 0x00, // <---- 1000 003e10改为003e60
0x00, 0x68, 0x3e, 0x00, // <---- 1004 3e6800改为3de000
// 77 @1008 GPUREG_FIXEDATTRIB_DATA0 3f00003e,46e0,434000
0x3e, 0x00, 0x00, 0x3f,
@ -545,7 +545,7 @@ alignas(16) u8 gbaGpuInitList[1136] =
0x00, 0x00, 0x00, 0x00,
0x33, 0x02, 0x2f, 0x80,
0x00, 0x3f, 0x00, 0x00,
0x00, 0x68, 0x3e, 0x00,
0x00, 0x68, 0x3e, 0x00, // <---- 1068 3e6800改为3de000
// 81 @1072 GPUREG_START_DRAW_FUNC0 1
0x01, 0x00, 0x00, 0x00,
@ -731,7 +731,7 @@ alignas(16) u8 gbaGpuList2[448] =
// 20 @0272 GPUREG_FIXEDATTRIB_DATA0 0,3e10,0
0x00, 0x00, 0x00, 0x00,
0x33, 0x02, 0x2f, 0x80,
0x10, 0x3e, 0x00, 0x00,
0x10, 0x3e, 0x00, 0x00, // <---- 280 003e10改为003e60
0x00, 0x00, 0x00, 0x00,
// 21 @0288 GPUREG_FIXEDATTRIB_DATA0 3f00003e,0,477c00
@ -743,8 +743,8 @@ alignas(16) u8 gbaGpuList2[448] =
// 22 @0304 GPUREG_FIXEDATTRIB_DATA0 0,3e10,3e6800
0x00, 0x00, 0x00, 0x00,
0x33, 0x02, 0x2f, 0x80,
0x10, 0x3e, 0x00, 0x00,
0x00, 0x68, 0x3e, 0x00,
0x10, 0x3e, 0x00, 0x00, // <---- 312 003e10改为003e60
0x00, 0x68, 0x3e, 0x00, // <---- 316 3e6800改为3de000
// 23 @0320 GPUREG_FIXEDATTRIB_DATA0 3f00003e,46e0,434000
0x3e, 0x00, 0x00, 0x3f,
@ -768,7 +768,7 @@ alignas(16) u8 gbaGpuList2[448] =
0x00, 0x00, 0x00, 0x00,
0x33, 0x02, 0x2f, 0x80,
0x00, 0x3f, 0x00, 0x00,
0x00, 0x68, 0x3e, 0x00,
0x00, 0x68, 0x3e, 0x00, // <---- 380 3e6800改为3de000
// 27 @0384 GPUREG_START_DRAW_FUNC0 1
0x01, 0x00, 0x00, 0x00,
@ -803,35 +803,74 @@ alignas(16) u8 gbaGpuList2[448] =
0x10, 0x00, 0x0f, 0x00
};
#define LB_INDEX1 (944/4)
#define RB_INDEX1 (976/4)
#define LT_INDEX1 (1008/4)
#define RT_INDEX1 (1040/4)
#define LB_INDEX2 (256/4)
#define RB_INDEX2 (288/4)
#define LT_INDEX2 (320/4)
#define RT_INDEX2 (352/4)
static void patchCoord( u32 *initarr, u32 *updatearr )
{
initarr[LB_INDEX1] = updatearr[LB_INDEX2] = 0x3f00003e;
initarr[LB_INDEX1+2] = updatearr[LB_INDEX2+2] = 0x4440;
initarr[LB_INDEX1+3] = updatearr[LB_INDEX2+3] = 0;
initarr[RB_INDEX1] = updatearr[RB_INDEX2] = 0x3f00003e;
initarr[RB_INDEX1+2] = updatearr[RB_INDEX2+2] = 0x4440;
initarr[RB_INDEX1+3] = updatearr[RB_INDEX2+3] = 0x46e000;
initarr[LT_INDEX1] = updatearr[LT_INDEX2] = 0x3f00003e;
initarr[LT_INDEX1+2] = updatearr[LT_INDEX2+2] = 0x4690;
initarr[LT_INDEX1+3] = updatearr[LT_INDEX2+3] = 0;
initarr[RT_INDEX1] = updatearr[RT_INDEX2] = 0x3f00003e;
initarr[RT_INDEX1+2] = updatearr[RT_INDEX2+2] = 0x4690;
initarr[RT_INDEX1+3] = updatearr[RT_INDEX2+3] = 0x46e000;
}
void patchGbaGpuCmdList(u8 scaleType)
{
// 73 75 77 79 | 19 21 23 25 coord
// 74 76 78 80 | 20 22 24 26 texuv
if(scaleType == 0u || scaleType == 3u)
{
gbaGpuInitList[958] = 0x45u;
gbaGpuInitList[968] = 0x60u;
gbaGpuInitList[989] = 0x40u;
gbaGpuInitList[1000] = 0x60u;
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u;
gbaGpuInitList[1016] = 0x40u;
gbaGpuInitList[1022] = 0x45u;
gbaGpuInitList[1048] = 0x40u;
gbaGpuInitList[1053] = 0x40u;
*((u32*)&gbaGpuInitList[1068]) = 0x003DE000u;
/* // 这部分修改quad坐标可以干掉了
gbaGpuInitList[958] = 0x45u; // 73
gbaGpuInitList[989] = 0x40u; // 75
gbaGpuInitList[1016] = 0x40u; // 77
gbaGpuInitList[1022] = 0x45u; // 77
gbaGpuInitList[1048] = 0x40u; // 79
gbaGpuInitList[1053] = 0x40u; // 79
gbaGpuList2[270] = 0x45u;
gbaGpuList2[280] = 0x60u;
gbaGpuList2[301] = 0x40u;
gbaGpuList2[312] = 0x60u;
*((u32*)&gbaGpuList2[316]) = 0x003DE000u;
gbaGpuList2[328] = 0x40u;
gbaGpuList2[334] = 0x45u;
gbaGpuList2[360] = 0x40u;
gbaGpuList2[365] = 0x40u;
*((u32*)&gbaGpuList2[380]) = 0x003DE000u;
gbaGpuList2[270] = 0x45u; // 19
gbaGpuList2[301] = 0x40u; // 21
gbaGpuList2[328] = 0x40u; // 23
gbaGpuList2[334] = 0x45u; // 23
gbaGpuList2[360] = 0x40u; // 25
gbaGpuList2[365] = 0x40u; // 25
*/
patchCoord( gbaGpuInitList, gbaGpuList2 );
// 以下8行代码修正纹理坐标
gbaGpuInitList[968] = 0x60u; // 74
gbaGpuInitList[1000] = 0x60u; // 76
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u; // 76
*((u32*)&gbaGpuInitList[1068]) = 0x003DE000u; // 80
gbaGpuList2[280] = 0x60u; // 20
gbaGpuList2[312] = 0x60u; // 22
*((u32*)&gbaGpuList2[316]) = 0x003DE000u; // 22
*((u32*)&gbaGpuList2[380]) = 0x003DE000u; // 26
}
else if(scaleType == 1u)
{
gbaGpuInitList[572] = 0x02u;
gbaGpuInitList[572] = 0x02u; // 49
// 以下8行代码修正纹理坐标
gbaGpuInitList[968] = 0x60u;
gbaGpuInitList[1000] = 0x60u;
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u;

View File

@ -689,14 +689,14 @@ static void gbaGfxHandler(void *args)
// 地址0x18180000保存的是400x240大小的贴图数据rgb888(序列:↑↘↑)
// 地址0x18200000保存的是512x512大小的GBA的240x160贴图数据(序列:→↙→)
// 所以GPU做的事情就是将18200000的数据逆时针旋转90°
/*if( g_oafConfig.scaler == 0 )
if( g_oafConfig.scaler == 0 ) // 上屏无缩放
{
int base_offset = 96; // 3ds高240, gba高160居中需要平移40个像素rgb888每个像素3字节共120字节
// 但是gpu的transfer engine只支持16字节对齐的地址。所以只能选择16和3的公约数就是48,96,144,192,240
GX_displayTransfer((u32*)(0x18180000 + 16*240*3), 368u<<16 | 240u,
GFX_getFramebuffer(SCREEN_TOP) + 16*240*3 + base_offset, 368u<<16 | 240u, 1u<<12 | 1u<<8);
}
else */if( g_oafConfig.scaler == 3 )//下屏无缩放
else if( g_oafConfig.scaler == 3 )//下屏无缩放
{
int base_offset = 16*240*3;
GX_displayTransfer((u32*)(0x18180000), 320u<<16 | 240u,