aboutsummaryrefslogtreecommitdiff
path: root/plugins/gpu_unai/gpu_raster_sprite.h
diff options
context:
space:
mode:
authornotaz2011-12-20 02:38:53 +0200
committernotaz2011-12-20 23:40:51 +0200
commitb3db94096d7e5b4f60d610a441e370d639b3fd06 (patch)
tree2b8d0aa0d4e2a07b36cb21b3725b79e2b6990f72 /plugins/gpu_unai/gpu_raster_sprite.h
parent89c0de4234815e0fa9e8399b940ecec6c89a062b (diff)
downloadpcsx_rearmed-b3db94096d7e5b4f60d610a441e370d639b3fd06.tar.gz
pcsx_rearmed-b3db94096d7e5b4f60d610a441e370d639b3fd06.tar.bz2
pcsx_rearmed-b3db94096d7e5b4f60d610a441e370d639b3fd06.zip
gpu_unai: add 4bpp asm sprite blitter
Diffstat (limited to 'plugins/gpu_unai/gpu_raster_sprite.h')
-rw-r--r--plugins/gpu_unai/gpu_raster_sprite.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/plugins/gpu_unai/gpu_raster_sprite.h b/plugins/gpu_unai/gpu_raster_sprite.h
index 041fcbd..5075227 100644
--- a/plugins/gpu_unai/gpu_raster_sprite.h
+++ b/plugins/gpu_unai/gpu_raster_sprite.h
@@ -84,6 +84,47 @@ void gpuDrawS(const PS gpuSpriteSpanDriver)
}
}
+#ifdef __arm__
+#include "gpu_arm.h"
+
+void gpuDrawS16(void)
+{
+ s32 x0, y0;
+ s32 u0, v0;
+ s32 xmin, xmax;
+ s32 ymin, ymax;
+ u32 h = 16;
+
+ x0 = GPU_EXPANDSIGN_SPRT(PacketBuffer.S2[2]) + DrawingOffset[0];
+ y0 = GPU_EXPANDSIGN_SPRT(PacketBuffer.S2[3]) + DrawingOffset[1];
+
+ xmin = DrawingArea[0]; xmax = DrawingArea[2];
+ ymin = DrawingArea[1]; ymax = DrawingArea[3];
+ u0 = PacketBuffer.U1[8];
+ v0 = PacketBuffer.U1[9];
+
+ if (x0 > xmax - 16 || x0 < xmin ||
+ ((u0 | v0) & 15) || !(TextureWindow[2] & TextureWindow[3] & 8)) {
+ // send corner cases to general handler
+ PacketBuffer.U4[3] = 0x00100010;
+ gpuDrawS(gpuSpriteSpanFn<0x20>);
+ return;
+ }
+
+ if (y0 >= ymax || y0 <= ymin - 16)
+ return;
+ if (y0 < ymin) {
+ h -= ymin - y0;
+ v0 += ymin - y0;
+ y0 = ymin;
+ }
+ else if (ymax - y0 < 16)
+ h = ymax - y0;
+
+ draw_spr16_full(&GPU_FrameBuffer[FRAME_OFFSET(x0, y0)], &TBA[FRAME_OFFSET(u0/4, v0)], CBA, h);
+}
+#endif // __arm__
+
///////////////////////////////////////////////////////////////////////////////
void gpuDrawT(const PT gpuTileSpanDriver)
{