aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2012-01-02 00:55:33 +0200
committernotaz2012-01-02 01:50:28 +0200
commit9e1462065c70531c06f40af2fa74660a27f5b410 (patch)
treeb03bc9e3ccfcf677ad92db1098a7a16b95db2772
parent87c45ad1e2a265cedb7970cc1b7777591d0050b7 (diff)
downloadpcsx_rearmed-9e1462065c70531c06f40af2fa74660a27f5b410.tar.gz
pcsx_rearmed-9e1462065c70531c06f40af2fa74660a27f5b410.tar.bz2
pcsx_rearmed-9e1462065c70531c06f40af2fa74660a27f5b410.zip
gpu_neon: flush queues before reads too
also small refactoring to read function, might be more accurate (but surely wrong for width 1)
-rw-r--r--plugins/gpu_neon/gpu.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/plugins/gpu_neon/gpu.c b/plugins/gpu_neon/gpu.c
index 4fc2897..a18e05f 100644
--- a/plugins/gpu_neon/gpu.c
+++ b/plugins/gpu_neon/gpu.c
@@ -270,10 +270,13 @@ static void start_vram_transfer(uint32_t pos_word, uint32_t size_word, int is_re
gpu.dma.h = size_word >> 16;
gpu.dma.offset = 0;
- if (is_read)
+ renderer_flush_queues();
+ if (is_read) {
gpu.status.img = 1;
+ // XXX: wrong for width 1
+ memcpy(&gpu.gp0, VRAM_MEM_XY(gpu.dma.x, gpu.dma.y), 4);
+ }
else {
- renderer_flush_queues();
renderer_invalidate_caches(gpu.dma.x, gpu.dma.y, gpu.dma.w, gpu.dma.h);
}
@@ -467,15 +470,17 @@ void GPUreadDataMem(uint32_t *mem, int count)
uint32_t GPUreadData(void)
{
- log_io("gpu_read\n");
+ uint32_t ret;
if (unlikely(gpu.cmd_len > 0))
flush_cmd_buffer();
+ ret = gpu.gp0;
if (gpu.dma.h)
- do_vram_io(&gpu.gp0, 1, 1);
+ do_vram_io(&ret, 1, 1);
- return gpu.gp0;
+ log_io("gpu_read %08x\n", ret);
+ return ret;
}
uint32_t GPUreadStatus(void)