Nugget
Bare-metal libraries and examples for the original PlayStation
Loading...
Searching...
No Matches
edge-walker-stress.c
Go to the documentation of this file.
1/*
2
3MIT License
4
5Copyright (c) 2026 PCSX-Redux authors
6
7Permission is hereby granted, free of charge, to any person obtaining a copy
8of this software and associated documentation files (the "Software"), to deal
9in the Software without restriction, including without limitation the rights
10to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11copies of the Software, and to permit persons to whom the Software is
12furnished to do so, subject to the following conditions:
13
14The above copyright notice and this permission notice shall be included in all
15copies or substantial portions of the Software.
16
17THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23SOFTWARE.
24
25*/
26
27// Edge-walker stress suite: configurations that exercise soft.cc's
28// setupSections* / nextRow* family in non-trivial ways. Targets:
29// - Near-vertical degenerate triangles (height >> width).
30// - Near-horizontal degenerate triangles (width >> height).
31// - Longest-edge boundary cases (which edge gets "longest" status).
32// - Slope-fraction sweep (probes 16.16 accumulator behavior via
33// non-power-of-two slope ratios).
34// - 4-vertex quad sweep paths (untextured decompose path).
35//
36// All flat untextured - no texpage state needed. The Phase 4 refactor
37// thread is unifying edge walkers across 3-vert and 4-vert families;
38// this suite gives that work a regression surface that was previously
39// uncovered.
40
41// clang-format off
42
44
45// Near-vertical degenerate triangles.
46
47static void drawNV1(void) {
48 rasterReset();
49 rasterClearTestRegion(0, 0, 8, 16);
50 rasterFlatTri(RASTER_CMD_RED, 0, 0, 1, 0, 0, 10);
51 rasterFlushPrimitive();
52}
53
54static void drawNV2(void) {
55 rasterReset();
56 rasterClearTestRegion(0, 0, 8, 16);
57 rasterFlatTri(RASTER_CMD_RED, 0, 0, 2, 10, 0, 10);
58 rasterFlushPrimitive();
59}
60
61static void drawNV3(void) {
62 rasterReset();
63 rasterClearTestRegion(0, 0, 16, 32);
64 rasterFlatTri(RASTER_CMD_GREEN, 5, 0, 6, 0, 5, 20);
65 rasterFlushPrimitive();
66}
67
68// Near-horizontal degenerate triangles.
69
70static void drawNH1(void) {
71 rasterReset();
72 rasterClearTestRegion(0, 0, 32, 4);
73 rasterFlatTri(RASTER_CMD_BLUE, 0, 0, 20, 0, 0, 1);
74 rasterFlushPrimitive();
75}
76
77static void drawNH2(void) {
78 rasterReset();
79 rasterClearTestRegion(0, 0, 32, 4);
80 rasterFlatTri(RASTER_CMD_BLUE, 0, 0, 20, 1, 0, 1);
81 rasterFlushPrimitive();
82}
83
84static void drawNH3(void) {
85 rasterReset();
86 rasterClearTestRegion(0, 0, 48, 4);
87 rasterFlatTri(RASTER_CMD_BLUE, 0, 0, 40, 0, 20, 1);
88 rasterFlushPrimitive();
89}
90
91// Longest-edge boundary cases.
92
93static void drawLE1(void) {
94 rasterReset();
95 rasterClearTestRegion(0, 0, 16, 16);
96 rasterFlatTri(RASTER_CMD_RED, 0, 0, 10, 0, 5, 9);
97 rasterFlushPrimitive();
98}
99
100static void drawLE2(void) {
101 rasterReset();
102 rasterClearTestRegion(0, 0, 24, 8);
103 rasterFlatTri(RASTER_CMD_GREEN, 0, 0, 20, 0, 10, 5);
104 rasterFlushPrimitive();
105}
106
107static void drawLE3(void) {
108 rasterReset();
109 rasterClearTestRegion(0, 0, 16, 24);
110 rasterFlatTri(RASTER_CMD_WHITE, 0, 0, 3, 0, 10, 20);
111 rasterFlushPrimitive();
112}
113
114// Slope-fraction sweep.
115
116static void drawSF1(void) {
117 rasterReset();
118 rasterClearTestRegion(0, 0, 8, 12);
119 rasterFlatTri(RASTER_CMD_RED, 0, 0, 3, 0, 0, 9);
120 rasterFlushPrimitive();
121}
122
123static void drawSF2(void) {
124 rasterReset();
125 rasterClearTestRegion(0, 0, 4, 8);
126 rasterFlatTri(RASTER_CMD_RED, 0, 0, 1, 0, 0, 5);
127 rasterFlushPrimitive();
128}
129
130static void drawSF3(void) {
131 rasterReset();
132 rasterClearTestRegion(0, 0, 8, 12);
133 rasterFlatTri(RASTER_CMD_GREEN, 0, 0, 3, 0, 0, 7);
134 rasterFlushPrimitive();
135}
136
137// 4-vertex quad sweep paths.
138
139static void drawQS1(void) {
140 rasterReset();
141 rasterClearTestRegion(0, 0, 16, 16);
142 // Skewed quad: vertices (0,0),(8,0),(1,8),(9,8). Seam runs from
143 // vertex 1 (8,0) to vertex 2 (1,8) per (1,3,2)+(0,1,2) decompose.
144 rasterFlatQuad(RASTER_CMD_BLUE, 0, 0, 8, 0, 1, 8, 9, 8);
145 rasterFlushPrimitive();
146}
147
148static void drawQS2(void) {
149 rasterReset();
150 rasterClearTestRegion(0, 0, 20, 16);
151 // Parallelogram: vertices (0,0),(10,0),(5,10),(15,10).
152 rasterFlatQuad(RASTER_CMD_GREEN, 0, 0, 10, 0, 5, 10, 15, 10);
153 rasterFlushPrimitive();
154}
155
156) // CESTER_BODY
157
158// --------------------------------------------------------------------------
159// Near-vertical degenerate triangles
160// --------------------------------------------------------------------------
161
162CESTER_TEST(nv1_top, gpu_raster_phase3,
163 drawNV1();
165)
166
167CESTER_TEST(nv1_mid, gpu_raster_phase3,
168 drawNV1();
170)
171
172CESTER_TEST(nv1_last_row, gpu_raster_phase3,
173 drawNV1();
175)
176
177CESTER_TEST(nv1_bottom_excluded, gpu_raster_phase3,
178 drawNV1();
180)
181
182CESTER_TEST(nv1_right_edge_excluded, gpu_raster_phase3,
183 drawNV1();
185)
186
187CESTER_TEST(nv2_top_xmax_eq_xmin, gpu_raster_phase3,
188 drawNV2();
190)
191
192CESTER_TEST(nv2_narrow_row, gpu_raster_phase3,
193 drawNV2();
195)
196
197CESTER_TEST(nv2_mid, gpu_raster_phase3,
198 drawNV2();
200)
201
202CESTER_TEST(nv2_near_bottom, gpu_raster_phase3,
203 drawNV2();
205)
206
207CESTER_TEST(nv2_widest_x1, gpu_raster_phase3,
208 drawNV2();
210)
211
212CESTER_TEST(nv2_right_edge, gpu_raster_phase3,
213 drawNV2();
215)
216
217CESTER_TEST(nv3_top, gpu_raster_phase3,
218 drawNV3();
220)
221
222CESTER_TEST(nv3_mid, gpu_raster_phase3,
223 drawNV3();
225)
226
227CESTER_TEST(nv3_last_row, gpu_raster_phase3,
228 drawNV3();
230)
231
232CESTER_TEST(nv3_bottom_excluded, gpu_raster_phase3,
233 drawNV3();
235)
236
237CESTER_TEST(nv3_right_edge_x6, gpu_raster_phase3,
238 drawNV3();
240)
241
242CESTER_TEST(nv3_before_left_x4, gpu_raster_phase3,
243 drawNV3();
245)
246
247// --------------------------------------------------------------------------
248// Near-horizontal degenerate triangles
249// --------------------------------------------------------------------------
250
251CESTER_TEST(nh1_left, gpu_raster_phase3,
252 drawNH1();
254)
255
256CESTER_TEST(nh1_mid, gpu_raster_phase3,
257 drawNH1();
259)
260
261CESTER_TEST(nh1_last_x, gpu_raster_phase3,
262 drawNH1();
264)
265
266CESTER_TEST(nh1_right_edge_x20, gpu_raster_phase3,
267 drawNH1();
269)
270
271CESTER_TEST(nh1_bottom_y1, gpu_raster_phase3,
272 drawNH1();
274)
275
276CESTER_TEST(nh2_apex_top_row, gpu_raster_phase3,
277 drawNH2();
279)
280
281CESTER_TEST(nh2_mid_top_row, gpu_raster_phase3,
282 drawNH2();
284)
285
286CESTER_TEST(nh3_left, gpu_raster_phase3,
287 drawNH3();
289)
290
291CESTER_TEST(nh3_apex_x_top, gpu_raster_phase3,
292 drawNH3();
294)
295
296CESTER_TEST(nh3_last_x, gpu_raster_phase3,
297 drawNH3();
299)
300
301CESTER_TEST(nh3_right_vertex, gpu_raster_phase3,
302 drawNH3();
304)
305
306CESTER_TEST(nh3_bottom_apex, gpu_raster_phase3,
307 drawNH3();
309)
310
311// --------------------------------------------------------------------------
312// Longest-edge boundary cases
313// --------------------------------------------------------------------------
314
315CESTER_TEST(le1_top_left, gpu_raster_phase3,
316 drawLE1();
318)
319
320CESTER_TEST(le1_interior, gpu_raster_phase3,
321 drawLE1();
323)
324
325CESTER_TEST(le1_top_right_end, gpu_raster_phase3,
326 drawLE1();
328)
329
330CESTER_TEST(le1_top_vertex_right, gpu_raster_phase3,
331 drawLE1();
333)
334
335CESTER_TEST(le1_apex, gpu_raster_phase3,
336 drawLE1();
338)
339
340CESTER_TEST(le2_top_left, gpu_raster_phase3,
341 drawLE2();
343)
344
345CESTER_TEST(le2_top_right_end, gpu_raster_phase3,
346 drawLE2();
348)
349
350CESTER_TEST(le2_near_apex, gpu_raster_phase3,
351 drawLE2();
353)
354
355CESTER_TEST(le2_apex, gpu_raster_phase3,
356 drawLE2();
358)
359
360CESTER_TEST(le3_top_left, gpu_raster_phase3,
361 drawLE3();
363)
364
365CESTER_TEST(le3_top_x2, gpu_raster_phase3,
366 drawLE3();
368)
369
370CESTER_TEST(le3_top_vertex, gpu_raster_phase3,
371 drawLE3();
373)
374
375CESTER_TEST(le3_mid, gpu_raster_phase3,
376 drawLE3();
378)
379
380CESTER_TEST(le3_apex, gpu_raster_phase3,
381 drawLE3();
383)
384
385// --------------------------------------------------------------------------
386// Slope-fraction sweep
387// --------------------------------------------------------------------------
388
389CESTER_TEST(sf1_top_left, gpu_raster_phase3,
390 drawSF1();
392)
393
394CESTER_TEST(sf1_top_x2, gpu_raster_phase3,
395 drawSF1();
397)
398
399CESTER_TEST(sf1_x2_y1, gpu_raster_phase3,
400 drawSF1();
402)
403
404CESTER_TEST(sf1_x2_y2, gpu_raster_phase3,
405 drawSF1();
407)
408
409CESTER_TEST(sf1_right_eq_2_excluded, gpu_raster_phase3,
410 drawSF1();
412)
413
414CESTER_TEST(sf1_x1_y3, gpu_raster_phase3,
415 drawSF1();
417)
418
419CESTER_TEST(sf1_right_eq_1_excluded, gpu_raster_phase3,
420 drawSF1();
422)
423
424CESTER_TEST(sf1_x0_y6, gpu_raster_phase3,
425 drawSF1();
427)
428
429CESTER_TEST(sf1_narrow_y7_dropped, gpu_raster_phase3,
430 drawSF1();
432)
433
434CESTER_TEST(sf1_narrow_y8_dropped, gpu_raster_phase3,
435 drawSF1();
437)
438
439CESTER_TEST(sf2_y0, gpu_raster_phase3,
440 drawSF2();
442)
443
444CESTER_TEST(sf2_y1, gpu_raster_phase3,
445 drawSF2();
447)
448
449CESTER_TEST(sf2_y4, gpu_raster_phase3,
450 drawSF2();
452)
453
454CESTER_TEST(sf3_top_left, gpu_raster_phase3,
455 drawSF3();
457)
458
459CESTER_TEST(sf3_top_x2, gpu_raster_phase3,
460 drawSF3();
462)
463
464CESTER_TEST(sf3_y1_x2, gpu_raster_phase3,
465 drawSF3();
467)
468
469CESTER_TEST(sf3_y2_x2_uncertain, gpu_raster_phase3,
470 drawSF3();
472)
473
474CESTER_TEST(sf3_y2_x1, gpu_raster_phase3,
475 drawSF3();
477)
478
479CESTER_TEST(sf3_y3_x0, gpu_raster_phase3,
480 drawSF3();
482)
483
484CESTER_TEST(sf3_y3_x1, gpu_raster_phase3,
485 drawSF3();
487)
488
489CESTER_TEST(sf3_y5_dropped, gpu_raster_phase3,
490 drawSF3();
492)
493
494// --------------------------------------------------------------------------
495// 4-vertex quad sweep paths
496// --------------------------------------------------------------------------
497
498CESTER_TEST(qs1_top_left, gpu_raster_phase3,
499 drawQS1();
501)
502
503CESTER_TEST(qs1_top_right_interior, gpu_raster_phase3,
504 drawQS1();
506)
507
508CESTER_TEST(qs1_vertex1, gpu_raster_phase3,
509 drawQS1();
511)
512
513CESTER_TEST(qs1_seam_mid, gpu_raster_phase3,
514 drawQS1();
516)
517
518CESTER_TEST(qs1_near_vertex2, gpu_raster_phase3,
519 drawQS1();
521)
522
523CESTER_TEST(qs1_bottom_right_interior, gpu_raster_phase3,
524 drawQS1();
526)
527
528CESTER_TEST(qs1_outside_left, gpu_raster_phase3,
529 drawQS1();
531)
532
533CESTER_TEST(qs1_bottom_edge, gpu_raster_phase3,
534 drawQS1();
536)
537
538CESTER_TEST(qs2_top_left, gpu_raster_phase3,
539 drawQS2();
541)
542
543CESTER_TEST(qs2_top_mid, gpu_raster_phase3,
544 drawQS2();
546)
547
548CESTER_TEST(qs2_top_right, gpu_raster_phase3,
549 drawQS2();
551)
552
553CESTER_TEST(qs2_top_vertex, gpu_raster_phase3,
554 drawQS2();
556)
557
558CESTER_TEST(qs2_mid_left_interior, gpu_raster_phase3,
559 drawQS2();
561)
562
563CESTER_TEST(qs2_mid_right_interior, gpu_raster_phase3,
564 drawQS2();
566)
567
568CESTER_TEST(qs2_near_vertex2, gpu_raster_phase3,
569 drawQS2();
571)
572
573CESTER_TEST(qs2_bottom_excluded, gpu_raster_phase3,
574 drawQS2();
576)
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 EXPECT_NH1_PIXEL_10_0
Definition raster-expected-phase3.h:103
#define EXPECT_LE2_PIXEL_19_0
Definition raster-expected-phase3.h:143
#define EXPECT_NV2_PIXEL_0_9
Definition raster-expected-phase3.h:80
#define EXPECT_SF1_PIXEL_2_0
Definition raster-expected-phase3.h:176
#define EXPECT_SF1_PIXEL_2_3
Definition raster-expected-phase3.h:179
#define EXPECT_SF3_PIXEL_0_0
Definition raster-expected-phase3.h:209
#define EXPECT_NH2_PIXEL_0_0
Definition raster-expected-phase3.h:113
#define EXPECT_SF3_PIXEL_2_2
Definition raster-expected-phase3.h:212
#define EXPECT_QS2_PIXEL_5_9
Definition raster-expected-phase3.h:254
#define EXPECT_LE3_PIXEL_5_10
Definition raster-expected-phase3.h:153
#define EXPECT_SF3_PIXEL_1_3
Definition raster-expected-phase3.h:215
#define EXPECT_QS2_PIXEL_9_0
Definition raster-expected-phase3.h:245
#define EXPECT_NV1_PIXEL_0_5
Definition raster-expected-phase3.h:62
#define EXPECT_NH1_PIXEL_0_0
Definition raster-expected-phase3.h:102
#define EXPECT_NH3_PIXEL_40_0
Definition raster-expected-phase3.h:122
#define EXPECT_NH3_PIXEL_0_0
Definition raster-expected-phase3.h:119
#define EXPECT_SF2_PIXEL_0_0
Definition raster-expected-phase3.h:196
#define EXPECT_LE3_PIXEL_2_0
Definition raster-expected-phase3.h:151
#define EXPECT_NV2_PIXEL_0_1
Definition raster-expected-phase3.h:78
#define EXPECT_LE2_PIXEL_0_0
Definition raster-expected-phase3.h:142
#define EXPECT_NH3_PIXEL_20_0
Definition raster-expected-phase3.h:120
#define EXPECT_QS1_PIXEL_8_7
Definition raster-expected-phase3.h:237
#define EXPECT_NH2_PIXEL_10_0
Definition raster-expected-phase3.h:114
#define EXPECT_SF3_PIXEL_0_5
Definition raster-expected-phase3.h:216
#define EXPECT_NH1_PIXEL_20_0
Definition raster-expected-phase3.h:105
#define EXPECT_SF1_PIXEL_1_3
Definition raster-expected-phase3.h:180
#define EXPECT_SF3_PIXEL_2_0
Definition raster-expected-phase3.h:210
#define EXPECT_NV2_PIXEL_0_0
Definition raster-expected-phase3.h:77
#define EXPECT_LE2_PIXEL_10_4
Definition raster-expected-phase3.h:144
#define EXPECT_QS2_PIXEL_0_0
Definition raster-expected-phase3.h:243
#define EXPECT_NV2_PIXEL_2_9
Definition raster-expected-phase3.h:82
#define EXPECT_SF2_PIXEL_0_1
Definition raster-expected-phase3.h:197
#define EXPECT_SF3_PIXEL_2_1
Definition raster-expected-phase3.h:211
#define EXPECT_NV3_PIXEL_5_10
Definition raster-expected-phase3.h:89
#define EXPECT_QS2_PIXEL_10_0
Definition raster-expected-phase3.h:246
#define EXPECT_NV1_PIXEL_0_9
Definition raster-expected-phase3.h:63
#define EXPECT_NV3_PIXEL_6_0
Definition raster-expected-phase3.h:92
#define EXPECT_SF2_PIXEL_0_4
Definition raster-expected-phase3.h:198
#define EXPECT_NV1_PIXEL_0_0
Definition raster-expected-phase3.h:61
#define EXPECT_LE1_PIXEL_0_0
Definition raster-expected-phase3.h:133
#define EXPECT_SF1_PIXEL_0_8
Definition raster-expected-phase3.h:184
#define EXPECT_SF3_PIXEL_0_3
Definition raster-expected-phase3.h:214
#define EXPECT_QS1_PIXEL_0_7
Definition raster-expected-phase3.h:238
#define EXPECT_QS1_PIXEL_1_7
Definition raster-expected-phase3.h:236
#define EXPECT_NH3_PIXEL_39_0
Definition raster-expected-phase3.h:121
#define EXPECT_SF3_PIXEL_1_2
Definition raster-expected-phase3.h:213
#define EXPECT_QS1_PIXEL_0_0
Definition raster-expected-phase3.h:232
#define EXPECT_QS2_PIXEL_2_5
Definition raster-expected-phase3.h:252
#define EXPECT_QS1_PIXEL_1_8
Definition raster-expected-phase3.h:239
#define EXPECT_SF1_PIXEL_2_2
Definition raster-expected-phase3.h:178
#define EXPECT_SF1_PIXEL_2_1
Definition raster-expected-phase3.h:177
#define EXPECT_QS1_PIXEL_8_0
Definition raster-expected-phase3.h:234
#define EXPECT_NV3_PIXEL_5_20
Definition raster-expected-phase3.h:91
#define EXPECT_SF1_PIXEL_1_6
Definition raster-expected-phase3.h:181
#define EXPECT_LE1_PIXEL_5_4
Definition raster-expected-phase3.h:134
#define EXPECT_LE1_PIXEL_10_0
Definition raster-expected-phase3.h:136
#define EXPECT_SF1_PIXEL_0_6
Definition raster-expected-phase3.h:182
#define EXPECT_NV2_PIXEL_0_5
Definition raster-expected-phase3.h:79
#define EXPECT_LE2_PIXEL_10_5
Definition raster-expected-phase3.h:145
#define EXPECT_QS1_PIXEL_7_0
Definition raster-expected-phase3.h:233
#define EXPECT_SF1_PIXEL_0_7
Definition raster-expected-phase3.h:183
#define EXPECT_NV1_PIXEL_0_10
Definition raster-expected-phase3.h:64
#define EXPECT_NH1_PIXEL_19_0
Definition raster-expected-phase3.h:104
#define EXPECT_NV3_PIXEL_5_0
Definition raster-expected-phase3.h:88
#define EXPECT_NV2_PIXEL_1_9
Definition raster-expected-phase3.h:81
#define EXPECT_LE1_PIXEL_5_9
Definition raster-expected-phase3.h:137
#define EXPECT_NV3_PIXEL_4_0
Definition raster-expected-phase3.h:93
#define EXPECT_NH3_PIXEL_20_1
Definition raster-expected-phase3.h:123
#define EXPECT_NH1_PIXEL_0_1
Definition raster-expected-phase3.h:106
#define EXPECT_LE3_PIXEL_3_0
Definition raster-expected-phase3.h:152
#define EXPECT_QS2_PIXEL_5_10
Definition raster-expected-phase3.h:255
#define EXPECT_QS1_PIXEL_4_4
Definition raster-expected-phase3.h:235
#define EXPECT_QS2_PIXEL_12_5
Definition raster-expected-phase3.h:253
#define EXPECT_NV1_PIXEL_1_0
Definition raster-expected-phase3.h:65
#define EXPECT_LE3_PIXEL_10_20
Definition raster-expected-phase3.h:154
#define EXPECT_SF1_PIXEL_0_0
Definition raster-expected-phase3.h:175
#define EXPECT_LE3_PIXEL_0_0
Definition raster-expected-phase3.h:150
#define EXPECT_QS2_PIXEL_5_0
Definition raster-expected-phase3.h:244
#define EXPECT_NV3_PIXEL_5_19
Definition raster-expected-phase3.h:90
#define EXPECT_LE1_PIXEL_9_0
Definition raster-expected-phase3.h:135
#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