From c8eaa363acbafb84840b8d29b532ae1225d6d61c Mon Sep 17 00:00:00 2001 From: notaz Date: Wed, 18 Jul 2012 02:29:25 +0300 Subject: psx_gpu: change line parsing fixes some Tenka problems --- plugins/gpu_neon/psx_gpu/psx_gpu_parse.c | 39 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'plugins/gpu_neon/psx_gpu') diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c index e409aa5..920c638 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c +++ b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c @@ -412,31 +412,29 @@ u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command) vertexes[1].x = (xy & 0xFFFF) + psx_gpu->offset_x; vertexes[1].y = (xy >> 16) + psx_gpu->offset_y; + xy = *list_position; while(1) { - xy = *list_position; - - if((xy & 0xF000F000) == 0x50005000) - break; - vertexes[0] = vertexes[1]; vertexes[1].x = (xy & 0xFFFF) + psx_gpu->offset_x; vertexes[1].y = (xy >> 16) + psx_gpu->offset_y; + render_line(psx_gpu, vertexes, current_command, list[0]); + list_position++; num_vertexes++; - if(list_position > list_end) + if(list_position >= list_end) break; - render_line(psx_gpu, vertexes, current_command, list[0]); + xy = *list_position; + if((xy & 0xF000F000) == 0x50005000) + break; } - if(num_vertexes > 2) - command_length += (num_vertexes - 2); - - break; + command_length += (num_vertexes - 2); + break; } case 0x50 ... 0x57: @@ -470,12 +468,9 @@ u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command) vertexes[1].x = (xy & 0xFFFF) + psx_gpu->offset_x; vertexes[1].y = (xy >> 16) + psx_gpu->offset_y; + color = list_position[0]; while(1) { - color = list_position[0]; - if((color & 0xF000F000) == 0x50005000) - break; - xy = list_position[1]; vertexes[0] = vertexes[1]; @@ -486,19 +481,21 @@ u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command) vertexes[1].x = (xy & 0xFFFF) + psx_gpu->offset_x; vertexes[1].y = (xy >> 16) + psx_gpu->offset_y; + render_line(psx_gpu, vertexes, current_command, 0); + list_position += 2; num_vertexes++; - if(list_position > list_end) + if(list_position >= list_end) break; - render_line(psx_gpu, vertexes, current_command, 0); + color = list_position[0]; + if((color & 0xF000F000) == 0x50005000) + break; } - if(num_vertexes > 2) - command_length += ((num_vertexes - 2) * 2); - - break; + command_length += ((num_vertexes - 2) * 2); + break; } case 0x60 ... 0x63: -- cgit v1.2.3