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=920c6388381a07554b088e862ef620af7658586f;hp=3fc040d858c28a4e2a305de3ccdf72ead56d03a1;hb=c8eaa363acbafb84840b8d29b532ae1225d6d61c;hpb=b243416b907e6ce366b051e77ed8a434f7668d5d diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c index 3fc040d8..920c6388 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: @@ -597,7 +594,8 @@ u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command) case 0x80: // vid -> vid render_block_move(psx_gpu, list_s16[2] & 0x3FF, list_s16[3] & 0x1FF, - list_s16[4] & 0x3FF, list_s16[5] & 0x1FF, list_s16[6], list_s16[7]); + list_s16[4] & 0x3FF, list_s16[5] & 0x1FF, + ((list_s16[6] - 1) & 0x3FF) + 1, ((list_s16[7] - 1) & 0x1FF) + 1); break; #ifdef PCSX