52static void drawGC1(
void) {
54 rasterClearTestRegion(0, 0, 16, 16);
58 rasterFlushPrimitive();
61static void drawGC2(
void) {
63 rasterClearTestRegion(0, 0, 48, 48);
67 rasterFlushPrimitive();
70static void drawGC3(
void) {
73 rasterClearTestRegion(0, 0, 144, 144);
77 rasterFlushPrimitive();
87static void drawGV(
int n) {
90 rasterClearTestRegion(0, 0, 32, 32);
94 rasterFlushPrimitive();
102static void drawGH(
int n) {
104 rasterClearTestRegion(0, 0, 32, 32);
108 rasterFlushPrimitive();
115static void drawGSNearMax(
void) {
118 rasterClearTestRegion(0, 0, 32, 32);
119 rasterGouraudTri(rasterCmdColor(31, 0, 0), 0, 0,
120 rasterCmdColor(30, 0, 0), 16, 0,
121 rasterCmdColor(30, 0, 0), 0, 16);
122 rasterFlushPrimitive();
125static void drawGSNearMin(
void) {
128 rasterClearTestRegion(0, 0, 32, 32);
129 rasterGouraudTri(rasterCmdColor(0, 0, 0), 0, 0,
130 rasterCmdColor(1, 0, 0), 16, 0,
131 rasterCmdColor(1, 0, 0), 0, 16);
132 rasterFlushPrimitive();
135static void drawGSHalfOfLSB(
void) {
140 rasterClearTestRegion(0, 0, 16, 16);
141 rasterGouraudTri(rasterCmdColor(1, 0, 0), 0, 0,
142 rasterCmdColor(0, 0, 0), 8, 0,
143 rasterCmdColor(0, 0, 0), 0, 8);
144 rasterFlushPrimitive();
151static void drawGD(
void) {
153 rasterClearTestRegion(0, 0, 48, 48);
158 rasterFlushPrimitive();
167#define GO_TRI_R_FIRST_GB() \
168 rasterGouraudTri(RASTER_CMD_RED, 0, 0, RASTER_CMD_GREEN, 7, 0, RASTER_CMD_BLUE, 0, 7)
169#define GO_TRI_R_FIRST_BG() \
170 rasterGouraudTri(RASTER_CMD_RED, 0, 0, RASTER_CMD_BLUE, 0, 7, RASTER_CMD_GREEN, 7, 0)
171#define GO_TRI_G_FIRST_RB() \
172 rasterGouraudTri(RASTER_CMD_GREEN, 7, 0, RASTER_CMD_RED, 0, 0, RASTER_CMD_BLUE, 0, 7)
173#define GO_TRI_G_FIRST_BR() \
174 rasterGouraudTri(RASTER_CMD_GREEN, 7, 0, RASTER_CMD_BLUE, 0, 7, RASTER_CMD_RED, 0, 0)
175#define GO_TRI_B_FIRST_RG() \
176 rasterGouraudTri(RASTER_CMD_BLUE, 0, 7, RASTER_CMD_RED, 0, 0, RASTER_CMD_GREEN, 7, 0)
177#define GO_TRI_B_FIRST_GR() \
178 rasterGouraudTri(RASTER_CMD_BLUE, 0, 7, RASTER_CMD_GREEN, 7, 0, RASTER_CMD_RED, 0, 0)
180static void drawGOPerm(
int perm) {
182 rasterClearTestRegion(0, 0, 16, 16);
191 rasterFlushPrimitive();
426CESTER_TEST(gs_near_max_interior, gpu_raster_phase7,
437CESTER_TEST(gs_near_min_interior, gpu_raster_phase7,
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
#define GO_TRI_G_FIRST_BR()
#define GO_TRI_B_FIRST_RG()
#define GO_TRI_G_FIRST_RB()
#define GO_TRI_R_FIRST_BG()
#define GO_TRI_B_FIRST_GR()
#define GO_TRI_R_FIRST_GB()
#define GC3_TOP_X64
Definition raster-expected-phase7.h:112
#define GV3_X0_Y1
Definition raster-expected-phase7.h:129
#define GV5_X0_Y3
Definition raster-expected-phase7.h:136
#define GC2_INTERIOR_1_1
Definition raster-expected-phase7.h:107
#define GC3_INTERIOR_32_64
Definition raster-expected-phase7.h:117
#define GC2_INTERIOR_8_8
Definition raster-expected-phase7.h:104
#define GC1_INTERIOR_2_2
Definition raster-expected-phase7.h:95
#define GS_NEAR_MIN_INTERIOR
Definition raster-expected-phase7.h:217
#define GH7_Y0_X5
Definition raster-expected-phase7.h:185
#define GD_10_11
Definition raster-expected-phase7.h:247
#define GV11_X0_Y10
Definition raster-expected-phase7.h:157
#define GS_NEAR_MIN_APEX
Definition raster-expected-phase7.h:216
#define GD_8_10
Definition raster-expected-phase7.h:241
#define GC1_LEFT_Y4
Definition raster-expected-phase7.h:93
#define GD_11_10
Definition raster-expected-phase7.h:244
#define GV5_X0_Y4
Definition raster-expected-phase7.h:137
#define GS_HALF_OF_LSB_Y4
Definition raster-expected-phase7.h:220
#define GH11_Y0_X10
Definition raster-expected-phase7.h:194
#define GV7_X0_Y4
Definition raster-expected-phase7.h:147
#define GV7_X0_Y1
Definition raster-expected-phase7.h:144
#define GD_11_11
Definition raster-expected-phase7.h:248
#define GV3_X0_Y0
Definition raster-expected-phase7.h:128
#define GV7_X0_Y2
Definition raster-expected-phase7.h:145
#define GC2_INTERIOR_16_8
Definition raster-expected-phase7.h:105
#define GH7_Y0_X6
Definition raster-expected-phase7.h:186
#define GV7_X0_Y3
Definition raster-expected-phase7.h:146
#define GC2_V0_R
Definition raster-expected-phase7.h:101
#define GS_HALF_OF_LSB_Y6
Definition raster-expected-phase7.h:221
#define GV7_X0_Y5
Definition raster-expected-phase7.h:148
#define GV11_X0_Y0
Definition raster-expected-phase7.h:152
#define GV11_X0_Y8
Definition raster-expected-phase7.h:156
#define GH3_Y0_X0
Definition raster-expected-phase7.h:168
#define GC2_INTERIOR_8_16
Definition raster-expected-phase7.h:106
#define GC3_INTERIOR_1_1
Definition raster-expected-phase7.h:115
#define GD_9_11
Definition raster-expected-phase7.h:246
#define GC3_INTERIOR_96_16
Definition raster-expected-phase7.h:118
#define GH5_Y0_X0
Definition raster-expected-phase7.h:173
#define GH11_Y0_X2
Definition raster-expected-phase7.h:190
#define GV11_X0_Y4
Definition raster-expected-phase7.h:154
#define GH5_Y0_X2
Definition raster-expected-phase7.h:175
#define GD_8_9
Definition raster-expected-phase7.h:237
#define GS_HALF_OF_LSB_Y2
Definition raster-expected-phase7.h:219
#define GD_8_11
Definition raster-expected-phase7.h:245
#define GH5_Y0_X4
Definition raster-expected-phase7.h:177
#define GH7_Y0_X2
Definition raster-expected-phase7.h:182
#define GC2_TOP_X16
Definition raster-expected-phase7.h:102
#define GS_NEAR_MAX_INTERIOR
Definition raster-expected-phase7.h:215
#define GV5_X0_Y1
Definition raster-expected-phase7.h:134
#define GO_PERM_INTERIOR_2_2
Definition raster-expected-phase7.h:256
#define GC3_INTERIOR_32_32
Definition raster-expected-phase7.h:114
#define GD_10_8
Definition raster-expected-phase7.h:235
#define GV7_X0_Y6
Definition raster-expected-phase7.h:149
#define GV11_X0_Y6
Definition raster-expected-phase7.h:155
#define GH7_Y0_X0
Definition raster-expected-phase7.h:180
#define GS_HALF_OF_LSB_APEX
Definition raster-expected-phase7.h:218
#define GD_10_10
Definition raster-expected-phase7.h:243
#define GD_10_9
Definition raster-expected-phase7.h:239
#define GC1_INTERIOR_1_1
Definition raster-expected-phase7.h:94
#define GH5_Y0_X1
Definition raster-expected-phase7.h:174
#define GH11_Y0_X6
Definition raster-expected-phase7.h:192
#define GC3_LEFT_Y64
Definition raster-expected-phase7.h:113
#define GV7_X0_Y0
Definition raster-expected-phase7.h:143
#define GV11_X0_Y2
Definition raster-expected-phase7.h:153
#define GV5_X0_Y2
Definition raster-expected-phase7.h:135
#define GC1_INTERIOR_3_1
Definition raster-expected-phase7.h:98
#define GD_11_9
Definition raster-expected-phase7.h:240
#define GV3_X0_Y2
Definition raster-expected-phase7.h:130
#define GC2_INTERIOR_30_0
Definition raster-expected-phase7.h:108
#define GD_11_8
Definition raster-expected-phase7.h:236
#define GC1_INTERIOR_3_3
Definition raster-expected-phase7.h:96
#define GC2_LEFT_Y16
Definition raster-expected-phase7.h:103
#define GC1_V0_R
Definition raster-expected-phase7.h:91
#define GH7_Y0_X1
Definition raster-expected-phase7.h:181
#define GC3_INTERIOR_64_32
Definition raster-expected-phase7.h:116
#define GH11_Y0_X4
Definition raster-expected-phase7.h:191
#define GD_9_10
Definition raster-expected-phase7.h:242
#define GH5_Y0_X3
Definition raster-expected-phase7.h:176
#define GD_9_8
Definition raster-expected-phase7.h:234
#define GH7_Y0_X4
Definition raster-expected-phase7.h:184
#define GH7_Y0_X3
Definition raster-expected-phase7.h:183
#define GH11_Y0_X0
Definition raster-expected-phase7.h:189
#define GS_NEAR_MAX_APEX
Definition raster-expected-phase7.h:214
#define GC1_TOP_X4
Definition raster-expected-phase7.h:92
#define GO_PERM_INTERIOR_1_3
Definition raster-expected-phase7.h:257
#define GH11_Y0_X8
Definition raster-expected-phase7.h:193
#define GH3_Y0_X2
Definition raster-expected-phase7.h:170
#define GC1_INTERIOR_1_3
Definition raster-expected-phase7.h:97
#define GH3_Y0_X1
Definition raster-expected-phase7.h:169
#define GV5_X0_Y0
Definition raster-expected-phase7.h:133
#define GD_9_9
Definition raster-expected-phase7.h:238
#define GD_8_8
Definition raster-expected-phase7.h:233
#define GC3_V0_R
Definition raster-expected-phase7.h:111
#define RASTER_CMD_BLUE
Definition raster-helpers.h:128
#define RASTER_CMD_RED
Definition raster-helpers.h:124
#define RASTER_CMD_GREEN
Definition raster-helpers.h:126
#define ASSERT_PIXEL_EQ(expected, x_, y_)
Definition raster-helpers.h:473