#include <stdlib.h>
#include <string.h>
#include "../gpulib/gpu.h"
+#include "arm_features.h"
#define u8 uint8_t
#define s8 int8_t
// GPU Raster Macros
#define GPU_RGB16(rgb) ((((rgb)&0xF80000)>>9)|(((rgb)&0xF800)>>6)|(((rgb)&0xF8)>>3))
-#define GPU_EXPANDSIGN_POLY(x) (((s32)(x)<<20)>>20)
-//#define GPU_EXPANDSIGN_POLY(x) (((s32)(x)<<21)>>21)
-#define GPU_EXPANDSIGN_SPRT(x) (((s32)(x)<<21)>>21)
+#define GPU_EXPANDSIGN(x) (((s32)(x)<<21)>>21)
-//#define GPU_TESTRANGE(x) { if((u32)(x+1024) > 2047) return; }
-#define GPU_TESTRANGE(x) { if ((x<-1023) || (x>1023)) return; }
+#define CHKMAX_X 1024
+#define CHKMAX_Y 512
#define GPU_SWAP(a,b,t) {(t)=(a);(a)=(b);(b)=(t);}
return 0;
}
+void renderer_finish(void)
+{
+}
+
+void renderer_notify_res_change(void)
+{
+}
+
+void renderer_notify_scanout_x_change(int x, int w)
+{
+}
+
extern const unsigned char cmd_lengths[256];
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)
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;
}
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;
}
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;
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: {
}
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;
}
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)
{
}
enableAbbeyHack = cbs->gpu_unai.abe_hack;
light = !cbs->gpu_unai.no_light;
blend = !cbs->gpu_unai.no_blend;
+
+ GPU_FrameBuffer = (u16 *)gpu.vram;
}
#endif