From 1f88961fb70bfdffa9c60fcc0c5c9cdc8108e742 Mon Sep 17 00:00:00 2001 From: Exophase Date: Fri, 23 Dec 2011 18:51:42 +0200 Subject: [PATCH] psx_gpu: some argument checks --- plugins/gpu_neon/psx_gpu/psx_gpu.c | 8 +++++++- plugins/gpu_neon/psx_gpu/psx_gpu_parse.c | 12 ++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu.c b/plugins/gpu_neon/psx_gpu/psx_gpu.c index 5c49b228..49e8c8bf 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu.c +++ b/plugins/gpu_neon/psx_gpu/psx_gpu.c @@ -3767,7 +3767,7 @@ void render_sprite(psx_gpu_struct *psx_gpu, s32 x, s32 y, u32 u, u32 v, RENDER_FLAGS_TEXTURE_MAP); render_state |= (psx_gpu->render_state_base & ~RENDER_STATE_DITHER); - + if((psx_gpu->render_state != render_state) || (psx_gpu->primitive_type != PRIMITIVE_TYPE_SPRITE)) { @@ -4316,6 +4316,9 @@ void render_line(psx_gpu_struct *psx_gpu, vertex_struct *vertexes, u32 flags, void render_block_fill(psx_gpu_struct *psx_gpu, u32 color, u32 x, u32 y, u32 width, u32 height) { + if((width == 0) || (height == 0)) + return; + invalidate_texture_cache_region(psx_gpu, x, y, x + width - 1, y + height - 1); #ifndef NEON_BUILD @@ -4350,6 +4353,9 @@ void render_block_copy(psx_gpu_struct *psx_gpu, u16 *source, u32 x, u32 y, u16 *vram_ptr = psx_gpu->vram_ptr + x + (y * 1024); u32 draw_x, draw_y; + if((width == 0) || (height == 0)) + return; + invalidate_texture_cache_region(psx_gpu, x, y, x + width - 1, y + height - 1); for(draw_y = 0; draw_y < height; draw_y++) diff --git a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c index dc7a6c14..32895e15 100644 --- a/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c +++ b/plugins/gpu_neon/psx_gpu/psx_gpu_parse.c @@ -210,8 +210,8 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) break; case 0x02: - render_block_fill(psx_gpu, list[0] & 0xFFFFFF, list_s16[2], list_s16[3], - list_s16[4] & 0x3FF, list_s16[5] & 0x3FF); + render_block_fill(psx_gpu, list[0] & 0xFFFFFF, list_s16[2] & 0x3FF, + list_s16[3] & 0x1FF, list_s16[4] & 0x3FF, list_s16[5] & 0x1FF); break; case 0x20 ... 0x23: @@ -532,10 +532,10 @@ void gpu_parse(psx_gpu_struct *psx_gpu, u32 *list, u32 size) case 0xA0: // sys -> vid { - u32 load_x = list_s16[2]; - u32 load_y = list_s16[3]; - u32 load_width = list_s16[4]; - u32 load_height = list_s16[5]; + u32 load_x = list_s16[2] & 0x3FF; + u32 load_y = list_s16[3] & 0x1FF; + u32 load_width = list_s16[4] & 0x3FF; + u32 load_height = list_s16[5] & 0x1FF; u32 load_size = load_width * load_height; command_length += load_size / 2; -- 2.39.2