aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2012-07-18 02:29:25 +0300
committernotaz2012-07-18 23:56:54 +0300
commitc8eaa363acbafb84840b8d29b532ae1225d6d61c (patch)
tree8fea4e040140f1eb5720a907b7305bb489316dcc
parentb8d961effdd3fc2a00dc073cae06b6d937682420 (diff)
downloadpcsx_rearmed-c8eaa363acbafb84840b8d29b532ae1225d6d61c.tar.gz
pcsx_rearmed-c8eaa363acbafb84840b8d29b532ae1225d6d61c.tar.bz2
pcsx_rearmed-c8eaa363acbafb84840b8d29b532ae1225d6d61c.zip
psx_gpu: change line parsing
fixes some Tenka problems
-rw-r--r--plugins/gpu_neon/psx_gpu/psx_gpu_parse.c39
1 files changed, 18 insertions, 21 deletions
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: