X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpu_neon%2Fpsx_gpu%2Fpsx_gpu_parse.c;h=32895e15b5c6963d777fd84b34690aae0360253a;hp=2ef823d7a312067b6b7e471deae3e111c69adfc5;hb=1dca68f8b58612b3839d915a1244230372627ded;hpb=b7ed06327bf625bdc1aa55899665f544757e9b76 diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c index 2ef823d7..32895e15 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c +++ b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c @@ -210,8 +210,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) break; case 0x02: - render_block_fill(psx_gpu, list[0] & 0xFFFFFF, list_s16[2], list_s16[3], - list_s16[4] & 0x3FF, list_s16[5] & 0x3FF); + render_block_fill(psx_gpu, list[0] & 0xFFFFFF, list_s16[2] & 0x3FF, + list_s16[3] & 0x1FF, list_s16[4] & 0x3FF, list_s16[5] & 0x1FF); break; case 0x20 ... 0x23: @@ -433,8 +433,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x60 ... 0x63: { - u32 x = list_s16[2] + psx_gpu->offset_x; - u32 y = list_s16[3] + psx_gpu->offset_y; + u32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + u32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; u32 width = list_s16[4] & 0x3FF; u32 height = list_s16[5] & 0x1FF; @@ -444,8 +444,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x64 ... 0x67: { - u32 x = list_s16[2] + psx_gpu->offset_x; - u32 y = list_s16[3] + psx_gpu->offset_y; + u32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + u32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; u32 uv = list_s16[4]; u32 width = list_s16[6] & 0x3FF; u32 height = list_s16[7] & 0x1FF; @@ -462,8 +462,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x6A: case 0x6B: { - s32 x = list_s16[2] + psx_gpu->offset_x; - s32 y = list_s16[3] + psx_gpu->offset_y; + s32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + s32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; render_sprite(psx_gpu, x, y, 0, 0, 1, 1, current_command, list[0]); break; @@ -474,8 +474,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x72: case 0x73: { - s32 x = list_s16[2] + psx_gpu->offset_x; - s32 y = list_s16[3] + psx_gpu->offset_y; + s32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + s32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; render_sprite(psx_gpu, x, y, 0, 0, 8, 8, current_command, list[0]); break; @@ -486,8 +486,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x76: case 0x77: { - s32 x = list_s16[2] + psx_gpu->offset_x; - s32 y = list_s16[3] + psx_gpu->offset_y; + s32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + s32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; u32 uv = list_s16[4]; set_clut(psx_gpu, list_s16[5]); @@ -502,8 +502,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x7A: case 0x7B: { - s32 x = list_s16[2] + psx_gpu->offset_x; - s32 y = list_s16[3] + psx_gpu->offset_y; + s32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + s32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; render_sprite(psx_gpu, x, y, 0, 0, 16, 16, current_command, list[0]); break; @@ -514,8 +514,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0x7E: case 0x7F: { - s32 x = list_s16[2] + psx_gpu->offset_x; - s32 y = list_s16[3] + psx_gpu->offset_y; + s32 x = sign_extend_12bit(list_s16[2]) + psx_gpu->offset_x; + s32 y = sign_extend_12bit(list_s16[3]) + psx_gpu->offset_y; u32 uv = list_s16[4]; set_clut(psx_gpu, list_s16[5]); @@ -532,10 +532,10 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0xA0: // sys -> vid { - u32 load_x = list_s16[2]; - u32 load_y = list_s16[3]; - u32 load_width = list_s16[4]; - u32 load_height = list_s16[5]; + u32 load_x = list_s16[2] & 0x3FF; + u32 load_y = list_s16[3] & 0x1FF; + u32 load_width = list_s16[4] & 0x3FF; + u32 load_height = list_s16[5] & 0x1FF; u32 load_size = load_width * load_height; command_length += load_size / 2;