libdragon
rdpq_macros.h
Go to the documentation of this file.
1
12#ifndef LIBDRAGON_RDPQ_MACROS_H
13#define LIBDRAGON_RDPQ_MACROS_H
14
15#ifndef __ASSEMBLER__
16
18typedef uint64_t rdpq_combiner_t;
20typedef uint32_t rdpq_blender_t;
21
22#endif
23
25#ifndef __ASSEMBLER__
26#include <stdint.h>
27#define cast64(x) (uint64_t)(x)
28#define castcc(x) (rdpq_combiner_t)(x)
29#define castbl(x) (rdpq_blender_t)(x)
30#else
31#define cast64(x) x
32#define castcc(x) x
33#define castbl(x) x
34#endif
36
38// Internal helpers to build a color combiner setting
39#define _RDPQ_COMB1_RGB_SUBA_TEX0 cast64(1)
40#define _RDPQ_COMB1_RGB_SUBA_PRIM cast64(3)
41#define _RDPQ_COMB1_RGB_SUBA_SHADE cast64(4)
42#define _RDPQ_COMB1_RGB_SUBA_ENV cast64(5)
43#define _RDPQ_COMB1_RGB_SUBA_ONE cast64(6)
44#define _RDPQ_COMB1_RGB_SUBA_1 cast64(6)
45#define _RDPQ_COMB1_RGB_SUBA_NOISE cast64(7)
46#define _RDPQ_COMB1_RGB_SUBA_ZERO cast64(8)
47#define _RDPQ_COMB1_RGB_SUBA_0 cast64(8)
48
49#define _RDPQ_COMB2A_RGB_SUBA_TEX0 cast64(1)
50#define _RDPQ_COMB2A_RGB_SUBA_TEX1 cast64(2)
51#define _RDPQ_COMB2A_RGB_SUBA_PRIM cast64(3)
52#define _RDPQ_COMB2A_RGB_SUBA_SHADE cast64(4)
53#define _RDPQ_COMB2A_RGB_SUBA_ENV cast64(5)
54#define _RDPQ_COMB2A_RGB_SUBA_ONE cast64(6)
55#define _RDPQ_COMB2A_RGB_SUBA_1 cast64(6)
56#define _RDPQ_COMB2A_RGB_SUBA_NOISE cast64(7)
57#define _RDPQ_COMB2A_RGB_SUBA_ZERO cast64(8)
58#define _RDPQ_COMB2A_RGB_SUBA_0 cast64(8)
59
60#define _RDPQ_COMB2B_RGB_SUBA_COMBINED cast64(0)
61#define _RDPQ_COMB2B_RGB_SUBA_TEX1 cast64(1) // TEX0 not available in 2nd cycle (pipelined)
62#define _RDPQ_COMB2B_RGB_SUBA_PRIM cast64(3)
63#define _RDPQ_COMB2B_RGB_SUBA_SHADE cast64(4)
64#define _RDPQ_COMB2B_RGB_SUBA_ENV cast64(5)
65#define _RDPQ_COMB2B_RGB_SUBA_ONE cast64(6)
66#define _RDPQ_COMB2B_RGB_SUBA_1 cast64(6)
67#define _RDPQ_COMB2B_RGB_SUBA_NOISE cast64(7)
68#define _RDPQ_COMB2B_RGB_SUBA_ZERO cast64(8)
69#define _RDPQ_COMB2B_RGB_SUBA_0 cast64(8)
70
71#define _RDPQ_COMB1_RGB_SUBB_TEX0 cast64(1)
72#define _RDPQ_COMB1_RGB_SUBB_PRIM cast64(3)
73#define _RDPQ_COMB1_RGB_SUBB_SHADE cast64(4)
74#define _RDPQ_COMB1_RGB_SUBB_ENV cast64(5)
75#define _RDPQ_COMB1_RGB_SUBB_KEYCENTER cast64(6)
76#define _RDPQ_COMB1_RGB_SUBB_K4 cast64(7)
77#define _RDPQ_COMB1_RGB_SUBB_ZERO cast64(8)
78#define _RDPQ_COMB1_RGB_SUBB_0 cast64(8)
79
80#define _RDPQ_COMB2A_RGB_SUBB_TEX0 cast64(1)
81#define _RDPQ_COMB2A_RGB_SUBB_TEX1 cast64(2)
82#define _RDPQ_COMB2A_RGB_SUBB_PRIM cast64(3)
83#define _RDPQ_COMB2A_RGB_SUBB_SHADE cast64(4)
84#define _RDPQ_COMB2A_RGB_SUBB_ENV cast64(5)
85#define _RDPQ_COMB2A_RGB_SUBB_KEYCENTER cast64(6)
86#define _RDPQ_COMB2A_RGB_SUBB_K4 cast64(7)
87#define _RDPQ_COMB2A_RGB_SUBB_ZERO cast64(8)
88#define _RDPQ_COMB2A_RGB_SUBB_0 cast64(8)
89
90#define _RDPQ_COMB2B_RGB_SUBB_COMBINED cast64(0)
91#define _RDPQ_COMB2B_RGB_SUBB_TEX1 cast64(1) // TEX0 not available in 2nd cycle (pipelined)
92#define _RDPQ_COMB2B_RGB_SUBB_PRIM cast64(3)
93#define _RDPQ_COMB2B_RGB_SUBB_SHADE cast64(4)
94#define _RDPQ_COMB2B_RGB_SUBB_ENV cast64(5)
95#define _RDPQ_COMB2B_RGB_SUBB_KEYCENTER cast64(6)
96#define _RDPQ_COMB2B_RGB_SUBB_K4 cast64(7)
97#define _RDPQ_COMB2B_RGB_SUBB_ZERO cast64(8)
98#define _RDPQ_COMB2B_RGB_SUBB_0 cast64(8)
99
100#define _RDPQ_COMB1_RGB_MUL_TEX0 cast64(1)
101#define _RDPQ_COMB1_RGB_MUL_PRIM cast64(3)
102#define _RDPQ_COMB1_RGB_MUL_SHADE cast64(4)
103#define _RDPQ_COMB1_RGB_MUL_ENV cast64(5)
104#define _RDPQ_COMB1_RGB_MUL_KEYSCALE cast64(6)
105#define _RDPQ_COMB1_RGB_MUL_TEX0_ALPHA cast64(8)
106#define _RDPQ_COMB1_RGB_MUL_PRIM_ALPHA cast64(10)
107#define _RDPQ_COMB1_RGB_MUL_SHADE_ALPHA cast64(11)
108#define _RDPQ_COMB1_RGB_MUL_ENV_ALPHA cast64(12)
109#define _RDPQ_COMB1_RGB_MUL_LOD_FRAC cast64(13)
110#define _RDPQ_COMB1_RGB_MUL_PRIM_LOD_FRAC cast64(14)
111#define _RDPQ_COMB1_RGB_MUL_K5 cast64(15)
112#define _RDPQ_COMB1_RGB_MUL_ZERO cast64(16)
113#define _RDPQ_COMB1_RGB_MUL_0 cast64(16)
114
115#define _RDPQ_COMB2A_RGB_MUL_TEX0 cast64(1)
116#define _RDPQ_COMB2A_RGB_MUL_TEX1 cast64(2)
117#define _RDPQ_COMB2A_RGB_MUL_PRIM cast64(3)
118#define _RDPQ_COMB2A_RGB_MUL_SHADE cast64(4)
119#define _RDPQ_COMB2A_RGB_MUL_ENV cast64(5)
120#define _RDPQ_COMB2A_RGB_MUL_KEYSCALE cast64(6)
121#define _RDPQ_COMB2A_RGB_MUL_TEX0_ALPHA cast64(8)
122#define _RDPQ_COMB2A_RGB_MUL_TEX1_ALPHA cast64(9)
123#define _RDPQ_COMB2A_RGB_MUL_PRIM_ALPHA cast64(10)
124#define _RDPQ_COMB2A_RGB_MUL_SHADE_ALPHA cast64(11)
125#define _RDPQ_COMB2A_RGB_MUL_ENV_ALPHA cast64(12)
126#define _RDPQ_COMB2A_RGB_MUL_LOD_FRAC cast64(13)
127#define _RDPQ_COMB2A_RGB_MUL_PRIM_LOD_FRAC cast64(14)
128#define _RDPQ_COMB2A_RGB_MUL_K5 cast64(15)
129#define _RDPQ_COMB2A_RGB_MUL_ZERO cast64(16)
130#define _RDPQ_COMB2A_RGB_MUL_0 cast64(16)
131
132#define _RDPQ_COMB2B_RGB_MUL_COMBINED cast64(0)
133#define _RDPQ_COMB2B_RGB_MUL_TEX1 cast64(1) // TEX0 not available in 2nd cycle (pipelined)
134#define _RDPQ_COMB2B_RGB_MUL_PRIM cast64(3)
135#define _RDPQ_COMB2B_RGB_MUL_SHADE cast64(4)
136#define _RDPQ_COMB2B_RGB_MUL_ENV cast64(5)
137#define _RDPQ_COMB2B_RGB_MUL_KEYSCALE cast64(6)
138#define _RDPQ_COMB2B_RGB_MUL_COMBINED_ALPHA cast64(7)
139#define _RDPQ_COMB2B_RGB_MUL_TEX1_ALPHA cast64(8) // TEX0_ALPHA not available in 2nd cycle (pipelined)
140#define _RDPQ_COMB2B_RGB_MUL_PRIM_ALPHA cast64(10)
141#define _RDPQ_COMB2B_RGB_MUL_SHADE_ALPHA cast64(11)
142#define _RDPQ_COMB2B_RGB_MUL_ENV_ALPHA cast64(12)
143#define _RDPQ_COMB2B_RGB_MUL_LOD_FRAC cast64(13)
144#define _RDPQ_COMB2B_RGB_MUL_PRIM_LOD_FRAC cast64(14)
145#define _RDPQ_COMB2B_RGB_MUL_K5 cast64(15)
146#define _RDPQ_COMB2B_RGB_MUL_ZERO cast64(16)
147#define _RDPQ_COMB2B_RGB_MUL_0 cast64(16)
148
149#define _RDPQ_COMB1_RGB_ADD_TEX0 cast64(1)
150#define _RDPQ_COMB1_RGB_ADD_PRIM cast64(3)
151#define _RDPQ_COMB1_RGB_ADD_SHADE cast64(4)
152#define _RDPQ_COMB1_RGB_ADD_ENV cast64(5)
153#define _RDPQ_COMB1_RGB_ADD_ONE cast64(6)
154#define _RDPQ_COMB1_RGB_ADD_1 cast64(6)
155#define _RDPQ_COMB1_RGB_ADD_ZERO cast64(7)
156#define _RDPQ_COMB1_RGB_ADD_0 cast64(7)
157
158#define _RDPQ_COMB2A_RGB_ADD_TEX0 cast64(1)
159#define _RDPQ_COMB2A_RGB_ADD_TEX1 cast64(2)
160#define _RDPQ_COMB2A_RGB_ADD_PRIM cast64(3)
161#define _RDPQ_COMB2A_RGB_ADD_SHADE cast64(4)
162#define _RDPQ_COMB2A_RGB_ADD_ENV cast64(5)
163#define _RDPQ_COMB2A_RGB_ADD_ONE cast64(6)
164#define _RDPQ_COMB2A_RGB_ADD_1 cast64(6)
165#define _RDPQ_COMB2A_RGB_ADD_ZERO cast64(7)
166#define _RDPQ_COMB2A_RGB_ADD_0 cast64(7)
167
168#define _RDPQ_COMB2B_RGB_ADD_COMBINED cast64(0)
169#define _RDPQ_COMB2B_RGB_ADD_TEX1 cast64(1) // TEX0 not available in 2nd cycle (pipelined)
170#define _RDPQ_COMB2B_RGB_ADD_PRIM cast64(3)
171#define _RDPQ_COMB2B_RGB_ADD_SHADE cast64(4)
172#define _RDPQ_COMB2B_RGB_ADD_ENV cast64(5)
173#define _RDPQ_COMB2B_RGB_ADD_ONE cast64(6)
174#define _RDPQ_COMB2B_RGB_ADD_1 cast64(6)
175#define _RDPQ_COMB2B_RGB_ADD_ZERO cast64(7)
176#define _RDPQ_COMB2B_RGB_ADD_0 cast64(7)
177
178#define _RDPQ_COMB1_ALPHA_ADDSUB_TEX0 cast64(1)
179#define _RDPQ_COMB1_ALPHA_ADDSUB_PRIM cast64(3)
180#define _RDPQ_COMB1_ALPHA_ADDSUB_SHADE cast64(4)
181#define _RDPQ_COMB1_ALPHA_ADDSUB_ENV cast64(5)
182#define _RDPQ_COMB1_ALPHA_ADDSUB_ONE cast64(6)
183#define _RDPQ_COMB1_ALPHA_ADDSUB_1 cast64(6)
184#define _RDPQ_COMB1_ALPHA_ADDSUB_ZERO cast64(7)
185#define _RDPQ_COMB1_ALPHA_ADDSUB_0 cast64(7)
186
187#define _RDPQ_COMB2A_ALPHA_ADDSUB_TEX0 cast64(1)
188#define _RDPQ_COMB2A_ALPHA_ADDSUB_TEX1 cast64(2)
189#define _RDPQ_COMB2A_ALPHA_ADDSUB_PRIM cast64(3)
190#define _RDPQ_COMB2A_ALPHA_ADDSUB_SHADE cast64(4)
191#define _RDPQ_COMB2A_ALPHA_ADDSUB_ENV cast64(5)
192#define _RDPQ_COMB2A_ALPHA_ADDSUB_ONE cast64(6)
193#define _RDPQ_COMB2A_ALPHA_ADDSUB_1 cast64(6)
194#define _RDPQ_COMB2A_ALPHA_ADDSUB_ZERO cast64(7)
195#define _RDPQ_COMB2A_ALPHA_ADDSUB_0 cast64(7)
196
197#define _RDPQ_COMB2B_ALPHA_ADDSUB_COMBINED cast64(0)
198#define _RDPQ_COMB2B_ALPHA_ADDSUB_TEX1 cast64(1) // TEX0 not available in 2nd cycle (pipelined)
199#define _RDPQ_COMB2B_ALPHA_ADDSUB_PRIM cast64(3)
200#define _RDPQ_COMB2B_ALPHA_ADDSUB_SHADE cast64(4)
201#define _RDPQ_COMB2B_ALPHA_ADDSUB_ENV cast64(5)
202#define _RDPQ_COMB2B_ALPHA_ADDSUB_ONE cast64(6)
203#define _RDPQ_COMB2B_ALPHA_ADDSUB_1 cast64(6)
204#define _RDPQ_COMB2B_ALPHA_ADDSUB_ZERO cast64(7)
205#define _RDPQ_COMB2B_ALPHA_ADDSUB_0 cast64(7)
206
207#define _RDPQ_COMB1_ALPHA_MUL_LOD_FRAC cast64(0)
208#define _RDPQ_COMB1_ALPHA_MUL_TEX0 cast64(1)
209#define _RDPQ_COMB1_ALPHA_MUL_PRIM cast64(3)
210#define _RDPQ_COMB1_ALPHA_MUL_SHADE cast64(4)
211#define _RDPQ_COMB1_ALPHA_MUL_ENV cast64(5)
212#define _RDPQ_COMB1_ALPHA_MUL_PRIM_LOD_FRAC cast64(6)
213#define _RDPQ_COMB1_ALPHA_MUL_ZERO cast64(7)
214#define _RDPQ_COMB1_ALPHA_MUL_0 cast64(7)
215
216#define _RDPQ_COMB2A_ALPHA_MUL_LOD_FRAC cast64(0)
217#define _RDPQ_COMB2A_ALPHA_MUL_TEX0 cast64(1)
218#define _RDPQ_COMB2A_ALPHA_MUL_TEX1 cast64(2)
219#define _RDPQ_COMB2A_ALPHA_MUL_PRIM cast64(3)
220#define _RDPQ_COMB2A_ALPHA_MUL_SHADE cast64(4)
221#define _RDPQ_COMB2A_ALPHA_MUL_ENV cast64(5)
222#define _RDPQ_COMB2A_ALPHA_MUL_PRIM_LOD_FRAC cast64(6)
223#define _RDPQ_COMB2A_ALPHA_MUL_ZERO cast64(7)
224#define _RDPQ_COMB2A_ALPHA_MUL_0 cast64(7)
225
226#define _RDPQ_COMB2B_ALPHA_MUL_LOD_FRAC cast64(0)
227#define _RDPQ_COMB2B_ALPHA_MUL_TEX1 cast64(1) // TEX0 not available in 2nd cycle (pipelined)
228#define _RDPQ_COMB2B_ALPHA_MUL_PRIM cast64(3)
229#define _RDPQ_COMB2B_ALPHA_MUL_SHADE cast64(4)
230#define _RDPQ_COMB2B_ALPHA_MUL_ENV cast64(5)
231#define _RDPQ_COMB2B_ALPHA_MUL_PRIM_LOD_FRAC cast64(6)
232#define _RDPQ_COMB2B_ALPHA_MUL_ZERO cast64(7)
233#define _RDPQ_COMB2B_ALPHA_MUL_0 cast64(7)
234
235#define __rdpq_1cyc_comb_rgb(suba, subb, mul, add) \
236 (((_RDPQ_COMB1_RGB_SUBA_ ## suba)<<52) | ((_RDPQ_COMB1_RGB_SUBB_ ## subb)<<28) | ((_RDPQ_COMB1_RGB_MUL_ ## mul)<<47) | ((_RDPQ_COMB1_RGB_ADD_ ## add)<<15) | \
237 ((_RDPQ_COMB1_RGB_SUBA_ ## suba)<<37) | ((_RDPQ_COMB1_RGB_SUBB_ ## subb)<<24) | ((_RDPQ_COMB1_RGB_MUL_ ## mul)<<32) | ((_RDPQ_COMB1_RGB_ADD_ ## add)<<6))
238#define __rdpq_1cyc_comb_alpha(suba, subb, mul, add) \
239 (((_RDPQ_COMB1_ALPHA_ADDSUB_ ## suba)<<44) | ((_RDPQ_COMB1_ALPHA_ADDSUB_ ## subb)<<12) | ((_RDPQ_COMB1_ALPHA_MUL_ ## mul)<<41) | ((_RDPQ_COMB1_ALPHA_ADDSUB_ ## add)<<9) | \
240 ((_RDPQ_COMB1_ALPHA_ADDSUB_ ## suba)<<21) | ((_RDPQ_COMB1_ALPHA_ADDSUB_ ## subb)<<3) | ((_RDPQ_COMB1_ALPHA_MUL_ ## mul)<<18) | ((_RDPQ_COMB1_ALPHA_ADDSUB_ ## add)<<0))
241
242#define __rdpq_2cyc_comb2a_rgb(suba, subb, mul, add) \
243 (((_RDPQ_COMB2A_RGB_SUBA_ ## suba)<<52) | ((_RDPQ_COMB2A_RGB_SUBB_ ## subb)<<28) | ((_RDPQ_COMB2A_RGB_MUL_ ## mul)<<47) | ((_RDPQ_COMB2A_RGB_ADD_ ## add)<<15))
244#define __rdpq_2cyc_comb2a_alpha(suba, subb, mul, add) \
245 (((_RDPQ_COMB2A_ALPHA_ADDSUB_ ## suba)<<44) | ((_RDPQ_COMB2A_ALPHA_ADDSUB_ ## subb)<<12) | ((_RDPQ_COMB2A_ALPHA_MUL_ ## mul)<<41) | ((_RDPQ_COMB2A_ALPHA_ADDSUB_ ## add)<<9))
246#define __rdpq_2cyc_comb2b_rgb(suba, subb, mul, add) \
247 (((_RDPQ_COMB2B_RGB_SUBA_ ## suba)<<37) | ((_RDPQ_COMB2B_RGB_SUBB_ ## subb)<<24) | ((_RDPQ_COMB2B_RGB_MUL_ ## mul)<<32) | ((_RDPQ_COMB2B_RGB_ADD_ ## add)<<6))
248#define __rdpq_2cyc_comb2b_alpha(suba, subb, mul, add) \
249 (((_RDPQ_COMB2B_ALPHA_ADDSUB_ ## suba)<<21) | ((_RDPQ_COMB2B_ALPHA_ADDSUB_ ## subb)<<3) | ((_RDPQ_COMB2B_ALPHA_MUL_ ## mul)<<18) | ((_RDPQ_COMB2B_ALPHA_ADDSUB_ ## add)<<0))
251
253#define RDPQ_COMB0_MASK ((cast64(0xF)<<52)|(cast64(0x1F)<<47)|(cast64(0x7)<<44)|(cast64(0x7)<<41)|(cast64(0xF)<<28)|(cast64(0x7)<<15)|(cast64(0x7)<<12)|(cast64(0x7)<<9))
255#define RDPQ_COMB1_MASK (~RDPQ_COMB0_MASK & cast64(0x00FFFFFFFFFFFFFF))
256
268#define RDPQ_COMBINER_2PASS (cast64(1)<<63)
269
429#define RDPQ_COMBINER1(rgb, alpha) \
430 castcc(__rdpq_1cyc_comb_rgb rgb | __rdpq_1cyc_comb_alpha alpha)
431
451#define RDPQ_COMBINER2(rgb0, alpha0, rgb1, alpha1) \
452 castcc(__rdpq_2cyc_comb2a_rgb rgb0 | __rdpq_2cyc_comb2a_alpha alpha0 | \
453 __rdpq_2cyc_comb2b_rgb rgb1 | __rdpq_2cyc_comb2b_alpha alpha1 | \
454 RDPQ_COMBINER_2PASS)
455
456
468#define RDPQ_COMBINER_FLAT RDPQ_COMBINER1((0,0,0,PRIM), (0,0,0,PRIM))
475#define RDPQ_COMBINER_SHADE RDPQ_COMBINER1((0,0,0,SHADE), (0,0,0,SHADE))
482#define RDPQ_COMBINER_TEX RDPQ_COMBINER1((0,0,0,TEX0), (0,0,0,TEX0))
490#define RDPQ_COMBINER_TEX_FLAT RDPQ_COMBINER1((TEX0,0,PRIM,0), (TEX0,0,PRIM,0))
499#define RDPQ_COMBINER_TEX_SHADE RDPQ_COMBINER1((TEX0,0,SHADE,0), (TEX0,0,SHADE,0))
514#define SOMX_NUMLODS_MASK ((cast64(7))<<59)
515#define SOMX_NUMLODS_SHIFT 59
516
517#define SOM_ATOMIC_PRIM ((cast64(1))<<55)
518
519#define SOM_CYCLE_1 ((cast64(0))<<52)
520#define SOM_CYCLE_2 ((cast64(1))<<52)
521#define SOM_CYCLE_COPY ((cast64(2))<<52)
522#define SOM_CYCLE_FILL ((cast64(3))<<52)
523#define SOM_CYCLE_MASK ((cast64(3))<<52)
524#define SOM_CYCLE_SHIFT 52
525
526#define SOM_TEXTURE_PERSP (cast64(1)<<51)
527#define SOM_TEXTURE_DETAIL (cast64(1)<<50)
528#define SOM_TEXTURE_SHARPEN (cast64(1)<<49)
529#define SOM_TEXTURE_LOD (cast64(1)<<48)
530#define SOM_TEXTURE_LOD_SHIFT 48
531
532#define SOM_TLUT_NONE (cast64(0)<<46)
533#define SOM_TLUT_RGBA16 (cast64(2)<<46)
534#define SOM_TLUT_IA16 (cast64(3)<<46)
535#define SOM_TLUT_MASK (cast64(3)<<46)
536#define SOM_TLUT_SHIFT 46
537
538#define SOM_SAMPLE_POINT (cast64(0)<<44)
539#define SOM_SAMPLE_BILINEAR (cast64(2)<<44)
540#define SOM_SAMPLE_MEDIAN (cast64(3)<<44)
541#define SOM_SAMPLE_MASK (cast64(3)<<44)
542#define SOM_SAMPLE_SHIFT 44
543
544#define SOM_TF0_RGB (cast64(1)<<43)
545#define SOM_TF0_YUV (cast64(0)<<43)
546#define SOM_TF1_RGB (cast64(2)<<41)
547#define SOM_TF1_YUV (cast64(0)<<41)
548#define SOM_TF1_YUVTEX0 (cast64(1)<<41)
549#define SOM_TF_MASK (cast64(7)<<41)
550#define SOM_TF_SHIFT 41
551
552#define SOM_RGBDITHER_SQUARE ((cast64(0))<<38)
553#define SOM_RGBDITHER_BAYER ((cast64(1))<<38)
554#define SOM_RGBDITHER_NOISE ((cast64(2))<<38)
555#define SOM_RGBDITHER_NONE ((cast64(3))<<38)
556#define SOM_RGBDITHER_MASK ((cast64(3))<<38)
557#define SOM_RGBDITHER_SHIFT 38
558
559#define SOM_ALPHADITHER_SAME ((cast64(0))<<36)
560#define SOM_ALPHADITHER_INVERT ((cast64(1))<<36)
561#define SOM_ALPHADITHER_NOISE ((cast64(2))<<36)
562#define SOM_ALPHADITHER_NONE ((cast64(3))<<36)
563#define SOM_ALPHADITHER_MASK ((cast64(3))<<36)
564#define SOM_ALPHADITHER_SHIFT 36
565
566#define SOMX_FOG ((cast64(1))<<32)
567#define SOMX_UPDATE_FREEZE ((cast64(1))<<33)
568#define SOMX_AA_REDUCED ((cast64(1))<<34)
569#define SOMX_LOD_INTERPOLATE ((cast64(1))<<35)
570
571#define SOM_BLEND0_MASK (cast64(0xCCCC0000) | SOM_BLENDING | SOM_READ_ENABLE | SOMX_BLEND_2PASS)
572#define SOM_BLEND1_MASK (cast64(0x33330000) | SOM_BLENDING | SOM_READ_ENABLE | SOMX_BLEND_2PASS)
573#define SOM_BLEND_MASK (SOM_BLEND0_MASK | SOM_BLEND1_MASK)
574
575#define SOMX_BLEND_2PASS ((cast64(1))<<15)
576
577#define SOM_BLENDING ((cast64(1))<<14)
578
579#define SOM_BLALPHA_CC ((cast64(0))<<12)
580#define SOM_BLALPHA_CVG ((cast64(2))<<12)
581#define SOM_BLALPHA_CVG_TIMES_CC ((cast64(3))<<12)
582#define SOM_BLALPHA_MASK ((cast64(3))<<12)
583#define SOM_BLALPHA_SHIFT 12
584
585#define SOM_ZMODE_OPAQUE ((cast64(0))<<10)
586#define SOM_ZMODE_INTERPENETRATING ((cast64(1))<<10)
587#define SOM_ZMODE_TRANSPARENT ((cast64(2))<<10)
588#define SOM_ZMODE_DECAL ((cast64(3))<<10)
589#define SOM_ZMODE_MASK ((cast64(3))<<10)
590#define SOM_ZMODE_SHIFT 10
591
592#define SOM_Z_WRITE ((cast64(1))<<5)
593#define SOM_Z_WRITE_SHIFT 5
594
595#define SOM_Z_COMPARE ((cast64(1))<<4)
596#define SOM_Z_COMPARE_SHIFT 4
597
598#define SOM_ZSOURCE_PIXEL ((cast64(0))<<2)
599#define SOM_ZSOURCE_PRIM ((cast64(1))<<2)
600#define SOM_ZSOURCE_MASK ((cast64(1))<<2)
601#define SOM_ZSOURCE_SHIFT 2
602
603#define SOM_ALPHACOMPARE_NONE ((cast64(0))<<0)
604#define SOM_ALPHACOMPARE_THRESHOLD ((cast64(1))<<0)
605#define SOM_ALPHACOMPARE_NOISE ((cast64(3))<<0)
606#define SOM_ALPHACOMPARE_MASK ((cast64(3))<<0)
607#define SOM_ALPHACOMPARE_SHIFT 0
608
609#define SOM_READ_ENABLE ((cast64(1)) << 6)
610#define SOM_AA_ENABLE ((cast64(1)) << 3)
611
612#define SOM_COVERAGE_DEST_CLAMP ((cast64(0)) << 8)
613#define SOM_COVERAGE_DEST_WRAP ((cast64(1)) << 8)
614#define SOM_COVERAGE_DEST_ZAP ((cast64(2)) << 8)
615#define SOM_COVERAGE_DEST_SAVE ((cast64(3)) << 8)
616#define SOM_COVERAGE_DEST_MASK ((cast64(3)) << 8)
617#define SOM_COVERAGE_DEST_SHIFT 8
618
619#define SOM_COLOR_ON_CVG_OVERFLOW ((cast64(1)) << 7)
621
623// Helpers macros for RDPQ_BLENDER
624#define _RDPQ_SOM_BLEND1_A_IN_RGB cast64(0)
625#define _RDPQ_SOM_BLEND1_A_MEMORY_RGB cast64(1)
626#define _RDPQ_SOM_BLEND1_A_BLEND_RGB cast64(2)
627#define _RDPQ_SOM_BLEND1_A_FOG_RGB cast64(3)
628
629#define _RDPQ_SOM_BLEND1_B1_IN_ALPHA cast64(0)
630#define _RDPQ_SOM_BLEND1_B1_FOG_ALPHA cast64(1)
631#define _RDPQ_SOM_BLEND1_B1_SHADE_ALPHA cast64(2)
632#define _RDPQ_SOM_BLEND1_B1_ZERO cast64(3)
633#define _RDPQ_SOM_BLEND1_B1_0 cast64(3)
634
635#define _RDPQ_SOM_BLEND1_B2_INV_MUX_ALPHA cast64(0)
636#define _RDPQ_SOM_BLEND1_B2_MEMORY_CVG cast64(1)
637#define _RDPQ_SOM_BLEND1_B2_ONE cast64(2)
638#define _RDPQ_SOM_BLEND1_B2_1 cast64(2)
639#define _RDPQ_SOM_BLEND1_B2_ZERO cast64(3)
640#define _RDPQ_SOM_BLEND1_B2_0 cast64(3)
641
642#define _RDPQ_SOM_BLEND2A_A_IN_RGB cast64(0)
643#define _RDPQ_SOM_BLEND2A_A_BLEND_RGB cast64(2)
644#define _RDPQ_SOM_BLEND2A_A_FOG_RGB cast64(3)
645
646#define _RDPQ_SOM_BLEND2A_B1_IN_ALPHA cast64(0)
647#define _RDPQ_SOM_BLEND2A_B1_FOG_ALPHA cast64(1)
648#define _RDPQ_SOM_BLEND2A_B1_SHADE_ALPHA cast64(2)
649#define _RDPQ_SOM_BLEND2A_B1_ZERO cast64(3)
650#define _RDPQ_SOM_BLEND2A_B1_0 cast64(3)
651
652#define _RDPQ_SOM_BLEND2A_B2_INV_MUX_ALPHA cast64(0) // only valid option is "1-b1" in the first pass
653
654#define _RDPQ_SOM_BLEND2B_A_CYCLE1_RGB cast64(0)
655#define _RDPQ_SOM_BLEND2B_A_MEMORY_RGB cast64(1)
656#define _RDPQ_SOM_BLEND2B_A_BLEND_RGB cast64(2)
657#define _RDPQ_SOM_BLEND2B_A_FOG_RGB cast64(3)
658
659#define _RDPQ_SOM_BLEND2B_B1_IN_ALPHA cast64(0)
660#define _RDPQ_SOM_BLEND2B_B1_FOG_ALPHA cast64(1)
661#define _RDPQ_SOM_BLEND2B_B1_SHADE_ALPHA cast64(2)
662#define _RDPQ_SOM_BLEND2B_B1_ZERO cast64(3)
663#define _RDPQ_SOM_BLEND2B_B1_0 cast64(3)
664
665#define _RDPQ_SOM_BLEND2B_B2_INV_MUX_ALPHA cast64(0)
666#define _RDPQ_SOM_BLEND2B_B2_MEMORY_CVG cast64(1)
667#define _RDPQ_SOM_BLEND2B_B2_ONE cast64(2)
668#define _RDPQ_SOM_BLEND2B_B2_1 cast64(2)
669#define _RDPQ_SOM_BLEND2B_B2_ZERO cast64(3)
670#define _RDPQ_SOM_BLEND2B_B2_0 cast64(3)
671
672#define _RDPQ_SOM_BLEND_EXTRA_A_IN_RGB cast64(0)
673#define _RDPQ_SOM_BLEND_EXTRA_A_CYCLE1_RGB cast64(0)
674#define _RDPQ_SOM_BLEND_EXTRA_A_MEMORY_RGB (SOM_READ_ENABLE)
675#define _RDPQ_SOM_BLEND_EXTRA_A_BLEND_RGB cast64(0)
676#define _RDPQ_SOM_BLEND_EXTRA_A_FOG_RGB cast64(0)
677
678#define _RDPQ_SOM_BLEND_EXTRA_B1_IN_ALPHA cast64(0)
679#define _RDPQ_SOM_BLEND_EXTRA_B1_FOG_ALPHA cast64(0)
680#define _RDPQ_SOM_BLEND_EXTRA_B1_SHADE_ALPHA cast64(0)
681#define _RDPQ_SOM_BLEND_EXTRA_B1_ZERO cast64(0)
682#define _RDPQ_SOM_BLEND_EXTRA_B1_0 cast64(0)
683
684#define _RDPQ_SOM_BLEND_EXTRA_B2_INV_MUX_ALPHA cast64(0)
685#define _RDPQ_SOM_BLEND_EXTRA_B2_MEMORY_CVG (SOM_READ_ENABLE)
686#define _RDPQ_SOM_BLEND_EXTRA_B2_ONE cast64(0)
687#define _RDPQ_SOM_BLEND_EXTRA_B2_1 cast64(0)
688#define _RDPQ_SOM_BLEND_EXTRA_B2_ZERO cast64(0)
689#define _RDPQ_SOM_BLEND_EXTRA_B2_0 cast64(0)
690
691#define __rdpq_blend(cyc, a1, b1, a2, b2, sa1, sb1, sa2, sb2) (\
692 ((_RDPQ_SOM_BLEND ## cyc ## _A_ ## a1) << sa1) | \
693 ((_RDPQ_SOM_BLEND ## cyc ## _B1_ ## b1) << sb1) | \
694 ((_RDPQ_SOM_BLEND ## cyc ## _A_ ## a2) << sa2) | \
695 ((_RDPQ_SOM_BLEND ## cyc ## _B2_ ## b2) << sb2) | \
696 (_RDPQ_SOM_BLEND_EXTRA_A_ ## a1) | \
697 (_RDPQ_SOM_BLEND_EXTRA_B1_ ## b1) | \
698 (_RDPQ_SOM_BLEND_EXTRA_A_ ## a2) | \
699 (_RDPQ_SOM_BLEND_EXTRA_B2_ ## b2) \
700)
701
702#define __rdpq_blend_1cyc_0(a1, b1, a2, b2) __rdpq_blend(1, a1, b1, a2, b2, 30, 26, 22, 18)
703#define __rdpq_blend_1cyc_1(a1, b1, a2, b2) __rdpq_blend(1, a1, b1, a2, b2, 28, 24, 20, 16)
704#define __rdpq_blend_2cyc_0(a1, b1, a2, b2) __rdpq_blend(2A, a1, b1, a2, b2, 30, 26, 22, 18)
705#define __rdpq_blend_2cyc_1(a1, b1, a2, b2) __rdpq_blend(2B, a1, b1, a2, b2, 28, 24, 20, 16)
707
826#define RDPQ_BLENDER(bl) castbl(__rdpq_blend_1cyc_0 bl | __rdpq_blend_1cyc_1 bl)
827
860#define RDPQ_BLENDER2(bl0, bl1) castbl(__rdpq_blend_2cyc_0 bl0 | __rdpq_blend_2cyc_1 bl1 | SOMX_BLEND_2PASS)
861
862#endif
uint64_t rdpq_combiner_t
A combiner formula, created by RDPQ_COMBINER1 or RDPQ_COMBINER2.
Definition: rdpq_macros.h:18
uint32_t rdpq_blender_t
A blender formula, created by RDPQ_BLENDER or RDPQ_BLENDER2.
Definition: rdpq_macros.h:20