X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fgpu_unai%2Fgpulib_if.cpp;h=02f6b92217ff8278954bfbff294a35849e1fdf34;hb=2da2fc7676c1fc40d26226a7a4c43728d9a2eedf;hp=38e7ce1a0035043269a58b2b43bcdea8cfb29cc0;hpb=9ed4ca47610027e8a0448d61389df5a583bd659b;p=pcsx_rearmed.git diff --git a/plugins/gpu_unai/gpulib_if.cpp b/plugins/gpu_unai/gpulib_if.cpp index 38e7ce1a..02f6b922 100644 --- a/plugins/gpu_unai/gpulib_if.cpp +++ b/plugins/gpu_unai/gpulib_if.cpp @@ -23,6 +23,7 @@ #include #include #include "../gpulib/gpu.h" +#include "arm_features.h" #define u8 uint8_t #define s8 int8_t @@ -154,6 +155,18 @@ int renderer_init(void) return 0; } +void renderer_finish(void) +{ +} + +void renderer_notify_res_change(void) +{ +} + +void renderer_notify_scanout_change(int x, int y) +{ +} + extern const unsigned char cmd_lengths[256]; int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) @@ -163,8 +176,8 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) unsigned int *list_end = list + list_len; linesInterlace = force_interlace; -#ifndef __ARM_ARCH_7A__ /* XXX */ - linesInterlace |= gpu.status.interlace; +#ifdef HAVE_PRE_ARMV7 /* XXX */ + linesInterlace |= !!(gpu.status & PSX_GPU_STATUS_INTERLACE); #endif for (; list < list_end; list += 1 + len) @@ -299,7 +312,11 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) gpuDrawLF(gpuPixelDrivers [ (Blending_Mode | Masking | Blending | (PixelMSB>>3)) >> 1]); num_vertexes++; - if((*list_position & 0xf000f000) == 0x50005000 || list_position >= list_end) + if(list_position >= list_end) { + cmd = -1; + goto breakloop; + } + if((*list_position & 0xf000f000) == 0x50005000) break; } @@ -330,7 +347,11 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) gpuDrawLG(gpuPixelDrivers [ (Blending_Mode | Masking | Blending | (PixelMSB>>3)) >> 1]); num_vertexes++; - if((*list_position & 0xf000f000) == 0x50005000 || list_position >= list_end) + if(list_position >= list_end) { + cmd = -1; + goto breakloop; + } + if((*list_position & 0xf000f000) == 0x50005000) break; } @@ -417,10 +438,10 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) gpuDrawS(gpuSpriteSpanDrivers [Blending_Mode | TEXT_MODE | Masking | Blending | Lighting | (enableAbbeyHack<<7) | PixelMSB]); break; +#ifdef TEST case 0x80: // vid -> vid gpuMoveImage(); // prim handles updateLace && skip break; -#ifdef TEST case 0xA0: // sys -> vid { u32 load_width = list[2] & 0xffff; @@ -433,8 +454,10 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) case 0xC0: break; #else - case 0xA0: // sys ->vid - case 0xC0: // vid -> sys + case 0x80 ... 0x9F: // vid -> vid + case 0xA0 ... 0xBF: // sys -> vid + case 0xC0 ... 0xDF: // vid -> sys + // Handled by gpulib goto breakloop; #endif case 0xE1: { @@ -474,8 +497,8 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) } case 0xE5: { const u32 temp = PacketBuffer.U4[0]; - DrawingOffset[0] = ((long)temp<<(32-11))>>(32-11); - DrawingOffset[1] = ((long)temp<<(32-22))>>(32-11); + DrawingOffset[0] = ((s32)temp<<(32-11))>>(32-11); + DrawingOffset[1] = ((s32)temp<<(32-22))>>(32-11); gpu.ex_regs[5] = temp; break; } @@ -503,7 +526,7 @@ void renderer_sync_ecmds(uint32_t *ecmds) do_cmd_list(&ecmds[1], 6, &dummy); } -void renderer_update_caches(int x, int y, int w, int h) +void renderer_update_caches(int x, int y, int w, int h, int state_changed) { } @@ -525,6 +548,8 @@ void renderer_set_config(const struct rearmed_cbs *cbs) enableAbbeyHack = cbs->gpu_unai.abe_hack; light = !cbs->gpu_unai.no_light; blend = !cbs->gpu_unai.no_blend; + + GPU_FrameBuffer = (u16 *)gpu.vram; } #endif