aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2012-07-18 01:56:37 +0300
committernotaz2012-07-18 23:56:54 +0300
commitb8d961effdd3fc2a00dc073cae06b6d937682420 (patch)
treebe4fff79448744d0dde320e2a5132fa365f6d8c1
parent8ca6b0a6dcf5ce986f6dd2deacf1f95dbf1a8e92 (diff)
downloadpcsx_rearmed-b8d961effdd3fc2a00dc073cae06b6d937682420.tar.gz
pcsx_rearmed-b8d961effdd3fc2a00dc073cae06b6d937682420.tar.bz2
pcsx_rearmed-b8d961effdd3fc2a00dc073cae06b6d937682420.zip
psx_gpu: fix line cmd length and move w/h masking
w/h masking untested, I'm lazy
-rw-r--r--plugins/gpu_neon/psx_gpu/psx_gpu_parse.c5
-rw-r--r--plugins/gpulib/gpu.c1
2 files changed, 4 insertions, 2 deletions
diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c
index 3fc040d..e409aa5 100644
--- a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c
+++ b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c
@@ -496,7 +496,7 @@ u32 gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size, u32 *last_command)
}
if(num_vertexes > 2)
- command_length += ((num_vertexes * 2) - 2);
+ command_length += ((num_vertexes - 2) * 2);
break;
}
@@ -597,7 +597,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
diff --git a/plugins/gpulib/gpu.c b/plugins/gpulib/gpu.c
index ea17237..79a5fa4 100644
--- a/plugins/gpulib/gpu.c
+++ b/plugins/gpulib/gpu.c
@@ -333,6 +333,7 @@ static noinline int do_cmd_list_skip(uint32_t *data, int count, int *last_cmd)
int cmd = 0, pos = 0, len, dummy;
int skip = 1;
+ // XXX: polylines are not properly handled
while (pos < count && skip) {
uint32_t *list = data + pos;
cmd = list[0] >> 24;