43static void drawTriOk(
void) {
45 rasterClearTestRegion(0, 0, 32, 32);
48 rasterFlushPrimitive();
51static void drawTriEdgeDx(int16_t dx) {
53 rasterClearTestRegion(0, 0, 32, 32);
56 rasterFlushPrimitive();
59static void drawTriEdgeDy(int16_t dy) {
61 rasterClearTestRegion(0, 0, 32, 32);
64 rasterFlushPrimitive();
69static void drawGTriOk(
void) {
71 rasterClearTestRegion(0, 0, 32, 32);
75 rasterFlushPrimitive();
78static void drawGTriEdgeDx(int16_t dx) {
80 rasterClearTestRegion(0, 0, 32, 32);
84 rasterFlushPrimitive();
89static void drawTexTriOk(
void) {
91 rasterClearTestRegion(0, 0, 32, 32);
93 setTextureWindow(0, 0, 0, 0);
99 rasterFlushPrimitive();
102static void drawTexTriEdgeDx(int16_t dx) {
104 rasterClearTestRegion(0, 0, 32, 32);
106 setTextureWindow(0, 0, 0, 0);
112 rasterFlushPrimitive();
117static void drawQuadOk(
void) {
119 rasterClearTestRegion(0, 0, 32, 32);
121 rasterFlushPrimitive();
124static void drawQuadEdgeDx(int16_t dx) {
126 rasterClearTestRegion(0, 0, 32, 32);
129 rasterFlushPrimitive();
132static void drawQuadEdgeDy(int16_t dy) {
134 rasterClearTestRegion(0, 0, 32, 32);
136 rasterFlushPrimitive();
141static void drawTexQuadOk(
void) {
143 rasterClearTestRegion(0, 0, 32, 32);
145 setTextureWindow(0, 0, 0, 0);
152 rasterFlushPrimitive();
155static void drawTexQuadEdgeDx(int16_t dx) {
157 rasterClearTestRegion(0, 0, 32, 32);
159 setTextureWindow(0, 0, 0, 0);
166 rasterFlushPrimitive();
171static void drawLineEdgeDx(int16_t dx) {
173 rasterClearTestRegion(0, 0, 32, 32);
177 rasterFlushPrimitive();
182static void drawRectSize(int16_t w, int16_t h) {
184 rasterClearTestRegion(0, 0, 32, 32);
186 rasterFlushPrimitive();
197static void drawDropMechProbe(
void) {
199 rasterClearTestRegion(0, 0, 32, 32);
204 rasterFlushPrimitive();
226CESTER_TEST(ct_tri_dx_1024_drop, gpu_raster_phase14,
232CESTER_TEST(ct_tri_dx_1025_drop, gpu_raster_phase14,
237CESTER_TEST(ct_tri_dx_2047_drop, gpu_raster_phase14,
258CESTER_TEST(ct_tri_dy_1023_drop, gpu_raster_phase14,
271 drawGTriEdgeDx(1023);
275CESTER_TEST(ct_gtri_dx_1024_drop, gpu_raster_phase14,
276 drawGTriEdgeDx(1024);
280CESTER_TEST(ct_gtri_dx_2047_drop, gpu_raster_phase14,
281 drawGTriEdgeDx(2047);
297CESTER_TEST(ct_textri_dx_1023_ok, gpu_raster_phase14,
298 drawTexTriEdgeDx(1023);
305CESTER_TEST(ct_textri_dx_1024_drop, gpu_raster_phase14,
306 drawTexTriEdgeDx(1024);
310CESTER_TEST(ct_textri_dx_2047_drop, gpu_raster_phase14,
311 drawTexTriEdgeDx(2047);
323 drawQuadEdgeDx(1023);
327CESTER_TEST(ct_quad_dx_1024_drop, gpu_raster_phase14,
328 drawQuadEdgeDx(1024);
332CESTER_TEST(ct_quad_dx_2047_drop, gpu_raster_phase14,
333 drawQuadEdgeDx(2047);
342CESTER_TEST(ct_quad_dy_512_drop, gpu_raster_phase14,
349CESTER_TEST(ct_texquad_baseline, gpu_raster_phase14,
357CESTER_TEST(ct_texquad_dx_1023_ok, gpu_raster_phase14,
358 drawTexQuadEdgeDx(1023);
365CESTER_TEST(ct_texquad_dx_1024_drop, gpu_raster_phase14,
366 drawTexQuadEdgeDx(1024);
370CESTER_TEST(ct_texquad_dx_2047_drop, gpu_raster_phase14,
371 drawTexQuadEdgeDx(2047);
382CESTER_TEST(ct_line_dx_100_baseline, gpu_raster_phase14,
389 drawLineEdgeDx(1023);
393CESTER_TEST(ct_line_dx_1024_drop, gpu_raster_phase14,
394 drawLineEdgeDx(1024);
398CESTER_TEST(ct_line_dx_2047_drop, gpu_raster_phase14,
399 drawLineEdgeDx(2047);
409CESTER_TEST(ct_rect_w16_baseline, gpu_raster_phase14,
410 drawRectSize(16, 16);
415 drawRectSize(1023, 16);
421 drawRectSize(1024, 16);
427 drawRectSize(1025, 16);
434 drawRectSize(16, 511);
439 drawRectSize(16, 512);
445 drawRectSize(16, 513);
453CESTER_TEST(ct_drop_mech_second_renders, gpu_raster_phase14,
461CESTER_TEST(ct_drop_mech_oversized_not_rendered, gpu_raster_phase14,
475CESTER_TEST(ct_tri_vertex_abs_just_low_edges, gpu_raster_phase14,
477 rasterClearTestRegion(0, 0, 32, 32);
486 rasterFlushPrimitive();
501CESTER_TEST(ct_tri_pretrunc_baseline, gpu_raster_phase14,
503 rasterClearTestRegion(0, 0, 32, 32);
506 rasterFlushPrimitive();
509CESTER_TEST(ct_tri_pretrunc_bit11, gpu_raster_phase14,
511 rasterClearTestRegion(0, 0, 32, 32);
518 rasterFlushPrimitive();
521CESTER_TEST(ct_tri_pretrunc_bit15, gpu_raster_phase14,
523 rasterClearTestRegion(0, 0, 32, 32);
529 rasterFlushPrimitive();
CESTER_TEST(cddaLevelHalf, test_instances, static const uint8_t atv[4]={0x40, 0x00, 0x40, 0x00};unsigned changes=0;int peak=cddaPeak(atv, 1, &changes);ramsyscall_printf("CD-DA level at half ATV: peak %i, %u sign changes\n", peak, changes);cester_assert_int_ge(peak, 11300);cester_assert_int_le(peak, 11800);cester_assert_uint_ge(changes, 4);) CESTER_TEST(cddaLevelClipped
CESTER_BODY(static uint16_t s_cddaCapture;static int cddaSpuDma(uint32_t spuAddr, void *buf, uint32_t bytes, int isRead) { const uint16_t tsa=spuAddr > > 3;const uint16_t mode=isRead ? 0x30 :0x20;SPU_RAM_DTA=tsa;for(int i=0;i< 0xf01 &&SPU_RAM_DTA !=tsa;i++);SPU_CTRL=(SPU_CTRL &~0x30)|mode;for(volatile int i=0;i< 60;i++);for(int i=0;i< 0xf01 &&(SPU_STATUS &0x30) !=mode;i++);CDDA_SPU_DELAY=(CDDA_SPU_DELAY &0xf0ffffff)|(isRead ? 0x22000000 :0x20000000);DMA_CTRL[DMA_SPU].MADR=(uint32_t) buf &0x1fffffff;DMA_CTRL[DMA_SPU].BCR=((bytes > > 6)<< 16)|0x10;DMA_CTRL[DMA_SPU].CHCR=isRead ? 0x01000200 :0x01000201;int ok=0;for(unsigned t=0;t< 4000000u;t++) { if((DMA_CTRL[DMA_SPU].CHCR &0x01000000)==0) { ok=1;break;} } SPU_CTRL=SPU_CTRL &~0x30;for(volatile int i=0;i< 60;i++);return ok;} static int cddaSimpleCmd(uint8_t cmd) { uint8_t response[16];CDROM_REG0=0;CDROM_REG1=cmd;uint32_t timeout=2000000;int ok=waitCDRomIRQWithTimeout(&timeout);ackCDRomCause();readResponse(response);return ok;} static void cddaWaitPauseComplete() { initializeTime();uint32_t elapsed=0;while(elapsed< 5000000u) { uint32_t budget=200000u;int ok=waitCDRomIRQWithTimeout(&budget);elapsed=budget;if(!ok) continue;uint8_t cause=ackCDRomCause();uint8_t response[16];readResponse(response);if(cause==2) return;} } static int cddaAudioSetup(const uint8_t atv[4], int demute) { if(!resetCDRom()) return 0;DPCR|=0x000b0000;SPU_CTRL=0;for(volatile int i=0;i< 20000;i++);SPU_VOL_MAIN_LEFT=0;SPU_VOL_MAIN_RIGHT=0;SPU_KEY_OFF_LOW=0xffff;SPU_KEY_OFF_HIGH=0xffff;SPU_RAM_DTC=4;SPU_CTRL=0x8001;for(volatile int i=0;i< 20000;i++);for(int i=0;i< 0x400;i++) s_cddaCapture[i]=CDDA_MARKER;if(!cddaSpuDma(0x000, s_cddaCapture, 0x800, 0)) return 0;if(!cddaSimpleCmd(demute ? CDL_DEMUTE :CDL_MUTE)) return 0;CDROM_REG0=2;CDROM_REG2=atv[0];CDROM_REG3=atv[1];CDROM_REG0=3;CDROM_REG1=atv[2];CDROM_REG2=atv[3];CDROM_REG0=3;CDROM_REG3=0x20;CDROM_REG0=0;SPU_VOL_CD_LEFT=0x7fff;SPU_VOL_CD_RIGHT=0x7fff;SPU_CTRL=SPU_CTRL|0x8001;return 1;} static int cddaBufferPeak(unsigned *signChanges) { int peak=0;unsigned changes=0;int prev=0;for(int i=0;i< 0x200;i++) { int v=(int16_t) s_cddaCapture[i];int a=v< 0 ? -v :v;if(a > peak) peak=a;int sign=v >=0 ? 1 :-1;if(i &&sign !=prev) changes++;prev=sign;} *signChanges=changes;return peak;} static int cddaCapturePeak(unsigned *signChanges) { int peak=0;for(unsigned attempt=0;attempt< 8;attempt++) { if(attempt) { initializeTime();while(updateTime()< 250000u);} if(!cddaSpuDma(0x000, s_cddaCapture, 0x800, 1)) return -1;peak=cddaBufferPeak(signChanges);if(peak) { if(attempt) ramsyscall_printf("capture was empty %u time(s) before audio\n", attempt);break;} } return peak;} static int cddaPeak(const uint8_t atv[4], int demute, unsigned *signChanges) { if(!cddaAudioSetup(atv, demute)) return -1;if(!setMode(0)) return -1;CDROM_REG0=0;CDROM_REG2=0x02;if(!cddaSimpleCmd(CDL_PLAY)) return -1;initializeTime();while(updateTime()< 1500000u);int peak=cddaCapturePeak(signChanges);CDROM_REG0=0;CDROM_REG1=CDL_PAUSE;cddaWaitPauseComplete();CDROM_REG0=0;CDROM_REG2=0x00;CDROM_REG2=0x02;CDROM_REG2=0x16;if(cddaSimpleCmd(CDL_SETLOC) &&cddaSimpleCmd(CDL_SEEKL)) cddaWaitPauseComplete();return peak;}[0x400])
Definition cdda.c:37
cester_assert_uint_eq(5, cause1)
ramsyscall_printf("T21 phase=%s t=%u v=%02x cause=%u size=%u stat=%02x\n", phase, t/1000, response[0], cause, size,(nopCause==3 &&nopSize >=1) ? stat[0] :0xff)
#define CT_TEXTRI_DX_1023
Definition raster-expected-phase14.h:55
#define CT_RECT_H_512
Definition raster-expected-phase14.h:94
#define CT_TRI_VERTEX_ABS_OVER
Definition raster-expected-phase14.h:98
#define CT_TEXTRI_DX_1024
Definition raster-expected-phase14.h:56
#define CT_TEXTRI_DX_2047
Definition raster-expected-phase14.h:57
#define CT_QUAD_DY_512
Definition raster-expected-phase14.h:64
#define CT_TRI_DX_2047
Definition raster-expected-phase14.h:41
#define CT_TRI_DX_1025
Definition raster-expected-phase14.h:40
#define CT_TRI_DY_513
Definition raster-expected-phase14.h:44
#define CT_RECT_W_1025
Definition raster-expected-phase14.h:92
#define CT_TRI_DX_1023
Definition raster-expected-phase14.h:38
#define CT_RECT_W_1024
Definition raster-expected-phase14.h:91
#define CT_LINE_DX_2047
Definition raster-expected-phase14.h:75
#define CT_TEXQUAD_DX_1023
Definition raster-expected-phase14.h:68
#define CT_TRI_DX_1024
Definition raster-expected-phase14.h:39
#define CT_GTRI_DX_2047
Definition raster-expected-phase14.h:50
#define CT_TRI_PRETRUNC_BIT15
Definition raster-expected-phase14.h:107
#define CT_TRI_PRETRUNC_BIT11
Definition raster-expected-phase14.h:106
#define CT_RECT_H_511
Definition raster-expected-phase14.h:93
#define CT_LINE_DX_1023
Definition raster-expected-phase14.h:73
#define CT_RECT_W_1023
Definition raster-expected-phase14.h:90
#define CT_GTRI_DX_1023
Definition raster-expected-phase14.h:48
#define CT_TRI_DY_512
Definition raster-expected-phase14.h:43
#define CT_TRI_DY_1023
Definition raster-expected-phase14.h:45
#define CT_RECT_H_513
Definition raster-expected-phase14.h:95
#define CT_GTRI_DX_1024
Definition raster-expected-phase14.h:49
#define CT_TEXQUAD_DX_2047
Definition raster-expected-phase14.h:70
#define CT_TEXQUAD_DX_1024
Definition raster-expected-phase14.h:69
#define CT_QUAD_DY_511
Definition raster-expected-phase14.h:63
#define CT_QUAD_DX_2047
Definition raster-expected-phase14.h:62
#define CT_QUAD_DX_1023
Definition raster-expected-phase14.h:60
#define CT_LINE_DX_1024
Definition raster-expected-phase14.h:74
#define CT_TRI_DY_511
Definition raster-expected-phase14.h:42
#define CT_QUAD_DX_1024
Definition raster-expected-phase14.h:61
#define RASTER_VRAM_GREEN
Definition raster-helpers.h:127
#define RASTER_VRAM_BLUE
Definition raster-helpers.h:129
#define RASTER_VRAM_WHITE
Definition raster-helpers.h:131
#define ASSERT_PIXEL_UNTOUCHED(x_, y_)
Definition raster-helpers.h:486
#define RASTER_VRAM_RED
Definition raster-helpers.h:125
#define RASTER_CMD_BLUE
Definition raster-helpers.h:128
#define RASTER_CMD_RED
Definition raster-helpers.h:124
#define RASTER_CMD_WHITE
Definition raster-helpers.h:130
#define RASTER_CMD_GREEN
Definition raster-helpers.h:126
#define ASSERT_PIXEL_EQ(expected, x_, y_)
Definition raster-helpers.h:473
#define RASTER_SENTINEL
Definition raster-helpers.h:95
cester_assert_uint_ne(0, before)
#define TEX15_TY
Definition texture-fixtures.h:66
#define TEX15_TPAGE
Definition texture-fixtures.h:102
#define CLUT15_FIELD
Definition texture-fixtures.h:85
#define TEX15_TX
Definition texture-fixtures.h:65
#define TEX_MOD_NEUTRAL
Definition texture-fixtures.h:308