37static void drawTR8(int16_t w, int16_t h, uint8_t u, uint8_t v) {
39 rasterClearTestRegion(0, 0, 32, 16);
41 setTextureWindow(0, 0, 0, 0);
43 rasterFlushPrimitive();
47static void drawTR15(int16_t w, int16_t h, uint8_t u, uint8_t v) {
49 rasterClearTestRegion(0, 0, 32, 16);
51 setTextureWindow(0, 0, 0, 0);
53 rasterFlushPrimitive();
62static void drawTR8Semi(uint8_t abr) {
66 setTextureWindow(0, 0, 0, 0);
68 rasterFlushPrimitive();
77static void drawTR15SemiMasked(uint8_t abr) {
82 setTextureWindow(0, 0, 0, 0);
84 rasterFlushPrimitive();
86 restoreTex15Standard();
90static void drawTR8SetMask(
void) {
92 rasterClearTestRegion(0, 0, 32, 16);
94 setTextureWindow(0, 0, 0, 0);
95 rasterSetMaskCtrl(1, 0);
97 rasterFlushPrimitive();
98 rasterSetMaskCtrl(0, 0);
103static void drawTR15CheckMask(
void) {
105 uint16_t bg = (uint16_t)(rasterVram555(8, 0, 0) | 0x8000u);
106 rasterFillRect(0, 0, 32, 16, bg);
108 setTextureWindow(0, 0, 0, 0);
109 rasterSetMaskCtrl(0, 1);
111 rasterFlushPrimitive();
112 rasterSetMaskCtrl(0, 0);
131CESTER_TEST(tr8_basic_8x4_just_past_8, gpu_raster_phase13,
138CESTER_TEST(tr8_basic_8x4_bottom_row, gpu_raster_phase13,
143CESTER_TEST(tr8_basic_8x4_past_bottom, gpu_raster_phase13,
154CESTER_TEST(tr8_1x1_neighbor_right, gpu_raster_phase13,
158CESTER_TEST(tr8_1x1_neighbor_below, gpu_raster_phase13,
187 drawTR8(4, 1, 10, 0);
191CESTER_TEST(tr8_uv_offset_10_far, gpu_raster_phase13,
192 drawTR8(4, 1, 10, 0);
203 drawTR15(8, 4, 0, 0);
208 drawTR15(8, 4, 0, 0);
213 drawTR15(8, 4, 0, 0);
218 drawTR15(8, 4, 0, 0);
225 drawTR15(1, 1, 4, 4);
230 drawTR15(1, 1, 4, 4);
235CESTER_TEST(tr15_1x4_v_walk_row0, gpu_raster_phase13,
236 drawTR15(1, 4, 2, 0);
240CESTER_TEST(tr15_1x4_v_walk_row3, gpu_raster_phase13,
241 drawTR15(1, 4, 2, 0);
248 drawTR15(4, 1, 3, 5);
253 drawTR15(4, 1, 3, 5);
264CESTER_TEST(tr8_window_mask01_off00_basic, gpu_raster_phase13,
266 rasterClearTestRegion(0, 0, 32, 16);
268 setTextureWindow(0x01, 0, 0, 0);
270 rasterFlushPrimitive();
275CESTER_TEST(tr8_window_mask01_off00_wrap_7, gpu_raster_phase13,
277 rasterClearTestRegion(0, 0, 32, 16);
279 setTextureWindow(0x01, 0, 0, 0);
281 rasterFlushPrimitive();
292CESTER_TEST(tr8_semi_abr0_no_blend, gpu_raster_phase13,
297CESTER_TEST(tr8_semi_abr1_no_blend, gpu_raster_phase13,
314CESTER_TEST(tr15_semi_masked_abr0, gpu_raster_phase13,
315 drawTR15SemiMasked(0);
319CESTER_TEST(tr15_semi_masked_abr1, gpu_raster_phase13,
320 drawTR15SemiMasked(1);
324CESTER_TEST(tr15_semi_masked_abr2, gpu_raster_phase13,
325 drawTR15SemiMasked(2);
329CESTER_TEST(tr15_semi_masked_abr3, gpu_raster_phase13,
330 drawTR15SemiMasked(3);
339CESTER_TEST(tr8_setmask_output_carries_bit15, gpu_raster_phase13,
345CESTER_TEST(tr15_checkmask_writes_skipped, gpu_raster_phase13,
CESTER_BODY(static int s_got40;static int s_got80;static uint32_t s_cause;static uint32_t s_epc;static uint32_t s_from;static uint32_t *s_resume;static uint32_t *s_regs;static uint32_t(*s_customhandler)()=NULL;static uint32_t s_oldIMASK;static uint32_t s_oldDPCR;static uint32_t s_oldDICR;uint32_t handler(uint32_t *regs, uint32_t from) { if(from==0x40) s_got40=1;if(from==0x80) s_got80=1;uint32_t cause;uint32_t epc;s_from=from;asm("mfc0 %0, $13\nnop\nmfc0 %1, $14\nnop" :"=r"(cause), "=r"(epc));s_cause=cause;s_epc=epc;if(s_customhandler) { return s_customhandler();} else { return s_resume ?((uint32_t) s_resume) :(epc+4);} } void installExceptionHandlers(uint32_t(*handler)(uint32_t *regs, uint32_t from));void uninstallExceptionHandlers();uint32_t branchbranch1();uint32_t branchbranch2();uint32_t jumpjump1();uint32_t jumpjump2();uint32_t cpu_LWR_LWL_half(uint32_t buff[], uint32_t initial);uint32_t cpu_LWR_LWL_nodelay(uint32_t buff[], uint32_t initial);uint32_t cpu_LWR_LWL_delayed(uint32_t buff[], uint32_t initial);uint32_t cpu_LWR_LWL_load_different(uint32_t buff[], uint32_t initial);uint32_t cpu_LW_LWR(uint32_t buff[], uint32_t initial);uint32_t cpu_delayed_load(uint32_t buff[], uint32_t override);uint32_t cpu_delayed_load_cancelled(uint32_t buff[], uint32_t override);uint64_t cpu_delayed_load_load(uint32_t buff[], uint32_t override);uint32_t linkandload();uint32_t lwandlink();uint32_t nolink();static int s_interruptsWereEnabled;) CESTER_BEFORE_EACH(cpu_tests
CESTER_TEST(cpu_cop0_basic_write_bp, cpu_tests, uint32_t expectedEPC;uint32_t t;volatile uint32_t *ptr=(volatile uint32_t *) 0x58; *ptr=1;__asm__ volatile("" " lui %0, 0b1100101010000000\n" " mtc0 %0, $7\n" " li %0, 0x58\n" " mtc0 %0, $5\n" " li %0, 0xfffffff0\n" " mtc0 %0, $9\n" :"=r"(t));cester_assert_uint_eq(1, *ptr);__asm__ volatile("la %0, 1f\n1:\nsw $0, 0x58($0)" :"=r"(expectedEPC));__asm__ volatile("mtc0 $0, $7\n");cester_assert_uint_eq(0, *ptr);cester_assert_uint_eq(1, s_got40);cester_assert_uint_eq(0, s_got80);cester_assert_uint_eq(0x40, s_from);cester_assert_uint_eq(expectedEPC, s_epc);) CESTER_TEST(cpu_cop0_kseg_write_bp
#define TR15_CHECKMASK_PREFILL
Definition raster-expected-phase13.h:56
#define TR15_SEMI_ABR1_BLEND
Definition raster-expected-phase13.h:47
#define TR15_SEMI_ABR3_BLEND
Definition raster-expected-phase13.h:49
#define TR8_SETMASK_OUTPUT
Definition raster-expected-phase13.h:53
#define TR15_SEMI_ABR2_BLEND
Definition raster-expected-phase13.h:48
#define TR15_SEMI_ABR0_BLEND
Definition raster-expected-phase13.h:46
#define ASSERT_PIXEL_UNTOUCHED(x_, y_)
Definition raster-helpers.h:485
#define RASTER_VRAM_RED
Definition raster-helpers.h:124
#define ASSERT_PIXEL_EQ(expected, x_, y_)
Definition raster-helpers.h:472
#define CLUT8_FIELD
Definition texture-fixtures.h:84
#define TEX15_TY
Definition texture-fixtures.h:66
#define TEX8_TY
Definition texture-fixtures.h:61
#define CLUT15_FIELD
Definition texture-fixtures.h:85
#define TEX15_TX
Definition texture-fixtures.h:65
#define TEX8_TX
Definition texture-fixtures.h:60
#define TEX_MOD_NEUTRAL
Definition texture-fixtures.h:328