Nugget
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
42
43// Near-vertical degenerate triangles.
44
45static void drawNV1(void) {
46 rasterReset();
47 rasterClearTestRegion(0, 0, 8, 16);
48 rasterFlatTri(RASTER_CMD_RED, 0, 0, 1, 0, 0, 10);
49 rasterFlushPrimitive();
50}
51
52static void drawNV2(void) {
53 rasterReset();
54 rasterClearTestRegion(0, 0, 8, 16);
55 rasterFlatTri(RASTER_CMD_RED, 0, 0, 2, 10, 0, 10);
56 rasterFlushPrimitive();
57}
58
59static void drawNV3(void) {
60 rasterReset();
61 rasterClearTestRegion(0, 0, 16, 32);
62 rasterFlatTri(RASTER_CMD_GREEN, 5, 0, 6, 0, 5, 20);
63 rasterFlushPrimitive();
64}
65
66// Near-horizontal degenerate triangles.
67
68static void drawNH1(void) {
69 rasterReset();
70 rasterClearTestRegion(0, 0, 32, 4);
71 rasterFlatTri(RASTER_CMD_BLUE, 0, 0, 20, 0, 0, 1);
72 rasterFlushPrimitive();
73}
74
75static void drawNH2(void) {
76 rasterReset();
77 rasterClearTestRegion(0, 0, 32, 4);
78 rasterFlatTri(RASTER_CMD_BLUE, 0, 0, 20, 1, 0, 1);
79 rasterFlushPrimitive();
80}
81
82static void drawNH3(void) {
83 rasterReset();
84 rasterClearTestRegion(0, 0, 48, 4);
85 rasterFlatTri(RASTER_CMD_BLUE, 0, 0, 40, 0, 20, 1);
86 rasterFlushPrimitive();
87}
88
89// Longest-edge boundary cases.
90
91static void drawLE1(void) {
92 rasterReset();
93 rasterClearTestRegion(0, 0, 16, 16);
94 rasterFlatTri(RASTER_CMD_RED, 0, 0, 10, 0, 5, 9);
95 rasterFlushPrimitive();
96}
97
98static void drawLE2(void) {
99 rasterReset();
100 rasterClearTestRegion(0, 0, 24, 8);
101 rasterFlatTri(RASTER_CMD_GREEN, 0, 0, 20, 0, 10, 5);
102 rasterFlushPrimitive();
103}
104
105static void drawLE3(void) {
106 rasterReset();
107 rasterClearTestRegion(0, 0, 16, 24);
108 rasterFlatTri(RASTER_CMD_WHITE, 0, 0, 3, 0, 10, 20);
109 rasterFlushPrimitive();
110}
111
112// Slope-fraction sweep.
113
114static void drawSF1(void) {
115 rasterReset();
116 rasterClearTestRegion(0, 0, 8, 12);
117 rasterFlatTri(RASTER_CMD_RED, 0, 0, 3, 0, 0, 9);
118 rasterFlushPrimitive();
119}
120
121static void drawSF2(void) {
122 rasterReset();
123 rasterClearTestRegion(0, 0, 4, 8);
124 rasterFlatTri(RASTER_CMD_RED, 0, 0, 1, 0, 0, 5);
125 rasterFlushPrimitive();
126}
127
128static void drawSF3(void) {
129 rasterReset();
130 rasterClearTestRegion(0, 0, 8, 12);
131 rasterFlatTri(RASTER_CMD_GREEN, 0, 0, 3, 0, 0, 7);
132 rasterFlushPrimitive();
133}
134
135// 4-vertex quad sweep paths.
136
137static void drawQS1(void) {
138 rasterReset();
139 rasterClearTestRegion(0, 0, 16, 16);
140 // Skewed quad: vertices (0,0),(8,0),(1,8),(9,8). Seam runs from
141 // vertex 1 (8,0) to vertex 2 (1,8) per (1,3,2)+(0,1,2) decompose.
142 rasterFlatQuad(RASTER_CMD_BLUE, 0, 0, 8, 0, 1, 8, 9, 8);
143 rasterFlushPrimitive();
144}
145
146static void drawQS2(void) {
147 rasterReset();
148 rasterClearTestRegion(0, 0, 20, 16);
149 // Parallelogram: vertices (0,0),(10,0),(5,10),(15,10).
150 rasterFlatQuad(RASTER_CMD_GREEN, 0, 0, 10, 0, 5, 10, 15, 10);
151 rasterFlushPrimitive();
152}
153
154) // CESTER_BODY
155
156// --------------------------------------------------------------------------
157// Near-vertical degenerate triangles
158// --------------------------------------------------------------------------
159
160CESTER_TEST(nv1_top, gpu_raster_phase3,
161 drawNV1();
163)
164
165CESTER_TEST(nv1_mid, gpu_raster_phase3,
166 drawNV1();
168)
169
170CESTER_TEST(nv1_last_row, gpu_raster_phase3,
171 drawNV1();
173)
174
175CESTER_TEST(nv1_bottom_excluded, gpu_raster_phase3,
176 drawNV1();
178)
179
180CESTER_TEST(nv1_right_edge_excluded, gpu_raster_phase3,
181 drawNV1();
183)
184
185CESTER_TEST(nv2_top_xmax_eq_xmin, gpu_raster_phase3,
186 drawNV2();
188)
189
190CESTER_TEST(nv2_narrow_row, gpu_raster_phase3,
191 drawNV2();
193)
194
195CESTER_TEST(nv2_mid, gpu_raster_phase3,
196 drawNV2();
198)
199
200CESTER_TEST(nv2_near_bottom, gpu_raster_phase3,
201 drawNV2();
203)
204
205CESTER_TEST(nv2_widest_x1, gpu_raster_phase3,
206 drawNV2();
208)
209
210CESTER_TEST(nv2_right_edge, gpu_raster_phase3,
211 drawNV2();
213)
214
215CESTER_TEST(nv3_top, gpu_raster_phase3,
216 drawNV3();
218)
219
220CESTER_TEST(nv3_mid, gpu_raster_phase3,
221 drawNV3();
223)
224
225CESTER_TEST(nv3_last_row, gpu_raster_phase3,
226 drawNV3();
228)
229
230CESTER_TEST(nv3_bottom_excluded, gpu_raster_phase3,
231 drawNV3();
233)
234
235CESTER_TEST(nv3_right_edge_x6, gpu_raster_phase3,
236 drawNV3();
238)
239
240CESTER_TEST(nv3_before_left_x4, gpu_raster_phase3,
241 drawNV3();
243)
244
245// --------------------------------------------------------------------------
246// Near-horizontal degenerate triangles
247// --------------------------------------------------------------------------
248
249CESTER_TEST(nh1_left, gpu_raster_phase3,
250 drawNH1();
252)
253
254CESTER_TEST(nh1_mid, gpu_raster_phase3,
255 drawNH1();
257)
258
259CESTER_TEST(nh1_last_x, gpu_raster_phase3,
260 drawNH1();
262)
263
264CESTER_TEST(nh1_right_edge_x20, gpu_raster_phase3,
265 drawNH1();
267)
268
269CESTER_TEST(nh1_bottom_y1, gpu_raster_phase3,
270 drawNH1();
272)
273
274CESTER_TEST(nh2_apex_top_row, gpu_raster_phase3,
275 drawNH2();
277)
278
279CESTER_TEST(nh2_mid_top_row, gpu_raster_phase3,
280 drawNH2();
282)
283
284CESTER_TEST(nh3_left, gpu_raster_phase3,
285 drawNH3();
287)
288
289CESTER_TEST(nh3_apex_x_top, gpu_raster_phase3,
290 drawNH3();
292)
293
294CESTER_TEST(nh3_last_x, gpu_raster_phase3,
295 drawNH3();
297)
298
299CESTER_TEST(nh3_right_vertex, gpu_raster_phase3,
300 drawNH3();
302)
303
304CESTER_TEST(nh3_bottom_apex, gpu_raster_phase3,
305 drawNH3();
307)
308
309// --------------------------------------------------------------------------
310// Longest-edge boundary cases
311// --------------------------------------------------------------------------
312
313CESTER_TEST(le1_top_left, gpu_raster_phase3,
314 drawLE1();
316)
317
318CESTER_TEST(le1_interior, gpu_raster_phase3,
319 drawLE1();
321)
322
323CESTER_TEST(le1_top_right_end, gpu_raster_phase3,
324 drawLE1();
326)
327
328CESTER_TEST(le1_top_vertex_right, gpu_raster_phase3,
329 drawLE1();
331)
332
333CESTER_TEST(le1_apex, gpu_raster_phase3,
334 drawLE1();
336)
337
338CESTER_TEST(le2_top_left, gpu_raster_phase3,
339 drawLE2();
341)
342
343CESTER_TEST(le2_top_right_end, gpu_raster_phase3,
344 drawLE2();
346)
347
348CESTER_TEST(le2_near_apex, gpu_raster_phase3,
349 drawLE2();
351)
352
353CESTER_TEST(le2_apex, gpu_raster_phase3,
354 drawLE2();
356)
357
358CESTER_TEST(le3_top_left, gpu_raster_phase3,
359 drawLE3();
361)
362
363CESTER_TEST(le3_top_x2, gpu_raster_phase3,
364 drawLE3();
366)
367
368CESTER_TEST(le3_top_vertex, gpu_raster_phase3,
369 drawLE3();
371)
372
373CESTER_TEST(le3_mid, gpu_raster_phase3,
374 drawLE3();
376)
377
378CESTER_TEST(le3_apex, gpu_raster_phase3,
379 drawLE3();
381)
382
383// --------------------------------------------------------------------------
384// Slope-fraction sweep
385// --------------------------------------------------------------------------
386
387CESTER_TEST(sf1_top_left, gpu_raster_phase3,
388 drawSF1();
390)
391
392CESTER_TEST(sf1_top_x2, gpu_raster_phase3,
393 drawSF1();
395)
396
397CESTER_TEST(sf1_x2_y1, gpu_raster_phase3,
398 drawSF1();
400)
401
402CESTER_TEST(sf1_x2_y2, gpu_raster_phase3,
403 drawSF1();
405)
406
407CESTER_TEST(sf1_right_eq_2_excluded, gpu_raster_phase3,
408 drawSF1();
410)
411
412CESTER_TEST(sf1_x1_y3, gpu_raster_phase3,
413 drawSF1();
415)
416
417CESTER_TEST(sf1_right_eq_1_excluded, gpu_raster_phase3,
418 drawSF1();
420)
421
422CESTER_TEST(sf1_x0_y6, gpu_raster_phase3,
423 drawSF1();
425)
426
427CESTER_TEST(sf1_narrow_y7_dropped, gpu_raster_phase3,
428 drawSF1();
430)
431
432CESTER_TEST(sf1_narrow_y8_dropped, gpu_raster_phase3,
433 drawSF1();
435)
436
437CESTER_TEST(sf2_y0, gpu_raster_phase3,
438 drawSF2();
440)
441
442CESTER_TEST(sf2_y1, gpu_raster_phase3,
443 drawSF2();
445)
446
447CESTER_TEST(sf2_y4, gpu_raster_phase3,
448 drawSF2();
450)
451
452CESTER_TEST(sf3_top_left, gpu_raster_phase3,
453 drawSF3();
455)
456
457CESTER_TEST(sf3_top_x2, gpu_raster_phase3,
458 drawSF3();
460)
461
462CESTER_TEST(sf3_y1_x2, gpu_raster_phase3,
463 drawSF3();
465)
466
467CESTER_TEST(sf3_y2_x2_uncertain, gpu_raster_phase3,
468 drawSF3();
470)
471
472CESTER_TEST(sf3_y2_x1, gpu_raster_phase3,
473 drawSF3();
475)
476
477CESTER_TEST(sf3_y3_x0, gpu_raster_phase3,
478 drawSF3();
480)
481
482CESTER_TEST(sf3_y3_x1, gpu_raster_phase3,
483 drawSF3();
485)
486
487CESTER_TEST(sf3_y5_dropped, gpu_raster_phase3,
488 drawSF3();
490)
491
492// --------------------------------------------------------------------------
493// 4-vertex quad sweep paths
494// --------------------------------------------------------------------------
495
496CESTER_TEST(qs1_top_left, gpu_raster_phase3,
497 drawQS1();
499)
500
501CESTER_TEST(qs1_top_right_interior, gpu_raster_phase3,
502 drawQS1();
504)
505
506CESTER_TEST(qs1_vertex1, gpu_raster_phase3,
507 drawQS1();
509)
510
511CESTER_TEST(qs1_seam_mid, gpu_raster_phase3,
512 drawQS1();
514)
515
516CESTER_TEST(qs1_near_vertex2, gpu_raster_phase3,
517 drawQS1();
519)
520
521CESTER_TEST(qs1_bottom_right_interior, gpu_raster_phase3,
522 drawQS1();
524)
525
526CESTER_TEST(qs1_outside_left, gpu_raster_phase3,
527 drawQS1();
529)
530
531CESTER_TEST(qs1_bottom_edge, gpu_raster_phase3,
532 drawQS1();
534)
535
536CESTER_TEST(qs2_top_left, gpu_raster_phase3,
537 drawQS2();
539)
540
541CESTER_TEST(qs2_top_mid, gpu_raster_phase3,
542 drawQS2();
544)
545
546CESTER_TEST(qs2_top_right, gpu_raster_phase3,
547 drawQS2();
549)
550
551CESTER_TEST(qs2_top_vertex, gpu_raster_phase3,
552 drawQS2();
554)
555
556CESTER_TEST(qs2_mid_left_interior, gpu_raster_phase3,
557 drawQS2();
559)
560
561CESTER_TEST(qs2_mid_right_interior, gpu_raster_phase3,
562 drawQS2();
564)
565
566CESTER_TEST(qs2_near_vertex2, gpu_raster_phase3,
567 drawQS2();
569)
570
571CESTER_TEST(qs2_bottom_excluded, gpu_raster_phase3,
572 drawQS2();
574)
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 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:127
#define RASTER_CMD_RED
Definition raster-helpers.h:123
#define RASTER_CMD_WHITE
Definition raster-helpers.h:129
#define RASTER_CMD_GREEN
Definition raster-helpers.h:125
#define ASSERT_PIXEL_EQ(expected, x_, y_)
Definition raster-helpers.h:472