1 #pragma once
2 #include <wiiu/types.h>
3 #include "enum.h"
4 #include "surface.h"
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 typedef struct
11 {
12    uint32_t pa_sc_aa_mask;
13 } GX2AAMaskReg;
14 
15 typedef struct
16 {
17    uint32_t sx_alpha_test_control;
18    uint32_t sx_alpha_ref;
19 } GX2AlphaTestReg;
20 
21 typedef struct
22 {
23    uint32_t db_alpha_to_mask;
24 } GX2AlphaToMaskReg;
25 
26 typedef struct
27 {
28    GX2RenderTarget target;
29    uint32_t cb_blend_control;
30 } GX2BlendControlReg;
31 
32 typedef struct
33 {
34    float red;
35    float green;
36    float blue;
37    float alpha;
38 } GX2BlendConstantColorReg;
39 
40 typedef struct
41 {
42    uint32_t cb_color_control;
43 } GX2ColorControlReg;
44 
45 typedef struct
46 {
47    uint32_t db_depth_control;
48 } GX2DepthStencilControlReg;
49 
50 typedef struct
51 {
52    uint32_t db_stencilrefmask;
53    uint32_t db_stencilrefmask_bf;
54 } GX2StencilMaskReg;
55 
56 typedef struct
57 {
58    uint32_t pa_su_line_cntl;
59 } GX2LineWidthReg;
60 
61 typedef struct
62 {
63    uint32_t pa_su_point_size;
64 } GX2PointSizeReg;
65 
66 typedef struct
67 {
68    uint32_t pa_su_point_minmax;
69 } GX2PointLimitsReg;
70 
71 typedef struct
72 {
73    uint32_t pa_su_sc_mode_cntl;
74 } GX2PolygonControlReg;
75 
76 typedef struct
77 {
78    uint32_t pa_su_poly_offset_front_scale;
79    uint32_t pa_su_poly_offset_front_offset;
80    uint32_t pa_su_poly_offset_back_scale;
81    uint32_t pa_su_poly_offset_back_offset;
82    uint32_t pa_su_poly_offset_clamp;
83 } GX2PolygonOffsetReg;
84 
85 typedef struct
86 {
87    uint32_t pa_sc_generic_scissor_tl;
88    uint32_t pa_sc_generic_scissor_br;
89 } GX2ScissorReg;
90 
91 typedef struct
92 {
93    uint32_t cb_target_mask;
94 } GX2TargetChannelMaskReg;
95 
96 typedef struct
97 {
98    uint32_t pa_cl_vport_xscale;
99    uint32_t pa_cl_vport_xoffset;
100    uint32_t pa_cl_vport_yscale;
101    uint32_t pa_cl_vport_yoffset;
102    uint32_t pa_cl_vport_zscale;
103    uint32_t pa_cl_vport_zoffset;
104    uint32_t pa_cl_gb_vert_clip_adj;
105    uint32_t pa_cl_gb_vert_disc_adj;
106    uint32_t pa_cl_gb_horz_clip_adj;
107    uint32_t pa_cl_gb_horz_disc_adj;
108    uint32_t pa_sc_vport_zmin;
109    uint32_t pa_sc_vport_zmax;
110 } GX2ViewportReg;
111 
112 void GX2SetAAMask(uint8_t upperLeft, uint8_t upperRight, uint8_t lowerLeft, uint8_t lowerRight);
113 void GX2InitAAMaskReg(GX2AAMaskReg *reg, uint8_t upperLeft, uint8_t upperRight, uint8_t lowerLeft,
114                       uint8_t lowerRight);
115 void GX2GetAAMaskReg(GX2AAMaskReg *reg, uint8_t *upperLeft, uint8_t *upperRight, uint8_t *lowerLeft,
116                      uint8_t *lowerRight);
117 void GX2SetAAMaskReg(GX2AAMaskReg *reg);
118 void GX2SetAlphaTest(BOOL alphaTest, GX2CompareFunction func, float ref);
119 void GX2InitAlphaTestReg(GX2AlphaTestReg *reg, BOOL alphaTest, GX2CompareFunction func, float ref);
120 void GX2GetAlphaTestReg(const GX2AlphaTestReg *reg, BOOL *alphaTest, GX2CompareFunction *func,
121                         float *ref);
122 void GX2SetAlphaTestReg(GX2AlphaTestReg *reg);
123 void GX2SetAlphaToMask(BOOL alphaToMask, GX2AlphaToMaskMode mode);
124 void GX2InitAlphaToMaskReg(GX2AlphaToMaskReg *reg, BOOL alphaToMask, GX2AlphaToMaskMode mode);
125 void GX2GetAlphaToMaskReg(const GX2AlphaToMaskReg *reg, BOOL *alphaToMask,
126                           GX2AlphaToMaskMode *mode);
127 void GX2SetAlphaToMaskReg(GX2AlphaToMaskReg *reg);
128 void GX2SetBlendConstantColor(float red, float green, float blue, float alpha);
129 void GX2InitBlendConstantColorReg(GX2BlendConstantColorReg *reg, float red, float green, float blue,
130                                   float alpha);
131 void GX2GetBlendConstantColorReg(GX2BlendConstantColorReg *reg, float *red, float *green,
132                                  float *blue, float *alpha);
133 void GX2SetBlendConstantColorReg(GX2BlendConstantColorReg *reg);
134 void GX2SetBlendControl(GX2RenderTarget target, GX2BlendMode colorSrcBlend,
135                         GX2BlendMode colorDstBlend, GX2BlendCombineMode colorCombine, BOOL useAlphaBlend,
136                         GX2BlendMode alphaSrcBlend, GX2BlendMode alphaDstBlend, GX2BlendCombineMode alphaCombine);
137 void GX2InitBlendControlReg(GX2BlendControlReg *reg, GX2RenderTarget target,
138                             GX2BlendMode colorSrcBlend, GX2BlendMode colorDstBlend, GX2BlendCombineMode colorCombine,
139                             BOOL useAlphaBlend, GX2BlendMode alphaSrcBlend, GX2BlendMode alphaDstBlend,
140                             GX2BlendCombineMode alphaCombine);
141 void GX2GetBlendControlReg(GX2BlendControlReg *reg, GX2RenderTarget *target,
142                            GX2BlendMode *colorSrcBlend, GX2BlendMode *colorDstBlend, GX2BlendCombineMode *colorCombine,
143                            BOOL *useAlphaBlend, GX2BlendMode *alphaSrcBlend, GX2BlendMode *alphaDstBlend,
144                            GX2BlendCombineMode *alphaCombine);
145 void GX2SetBlendControlReg(GX2BlendControlReg *reg);
146 void GX2SetColorControl(GX2LogicOp rop3, uint8_t targetBlendEnable, BOOL multiWriteEnable,
147                         BOOL colorWriteEnable);
148 void GX2InitColorControlReg(GX2ColorControlReg *reg, GX2LogicOp rop3, uint8_t targetBlendEnable,
149                             BOOL multiWriteEnable, BOOL colorWriteEnable);
150 void GX2GetColorControlReg(GX2ColorControlReg *reg, GX2LogicOp *rop3, uint8_t *targetBlendEnable,
151                            BOOL *multiWriteEnable, BOOL *colorWriteEnable);
152 void GX2SetColorControlReg(GX2ColorControlReg *reg);
153 void GX2SetDepthOnlyControl(BOOL depthTest, BOOL depthWrite, GX2CompareFunction depthCompare);
154 void GX2SetDepthStencilControl(BOOL depthTest, BOOL depthWrite,  GX2CompareFunction depthCompare,
155                                BOOL stencilTest, BOOL backfaceStencil, GX2CompareFunction frontStencilFunc,
156                                GX2StencilFunction frontStencilZPass,  GX2StencilFunction frontStencilZFail,
157                                GX2StencilFunction frontStencilFail, GX2CompareFunction backStencilFunc,
158                                GX2StencilFunction backStencilZPass, GX2StencilFunction backStencilZFail,
159                                GX2StencilFunction backStencilFail);
160 void GX2InitDepthStencilControlReg(GX2DepthStencilControlReg *reg, BOOL depthTest, BOOL depthWrite,
161                                    GX2CompareFunction depthCompare, BOOL stencilTest, BOOL backfaceStencil,
162                                    GX2CompareFunction frontStencilFunc, GX2StencilFunction frontStencilZPass,
163                                    GX2StencilFunction frontStencilZFail, GX2StencilFunction frontStencilFail,
164                                    GX2CompareFunction backStencilFunc, GX2StencilFunction backStencilZPass,
165                                    GX2StencilFunction backStencilZFail, GX2StencilFunction backStencilFail);
166 void GX2GetDepthStencilControlReg(GX2DepthStencilControlReg *reg, BOOL *depthTest, BOOL *depthWrite,
167                                   GX2CompareFunction *depthCompare, BOOL *stencilTest, BOOL *backfaceStencil,
168                                   GX2CompareFunction *frontStencilFunc, GX2StencilFunction *frontStencilZPass,
169                                   GX2StencilFunction *frontStencilZFail, GX2StencilFunction *frontStencilFail,
170                                   GX2CompareFunction *backStencilFunc, GX2StencilFunction *backStencilZPass,
171                                   GX2StencilFunction *backStencilZFail, GX2StencilFunction *backStencilFail);
172 void GX2SetDepthStencilControlReg(GX2DepthStencilControlReg *reg);
173 void GX2SetStencilMask(uint8_t frontMask, uint8_t frontWriteMask, uint8_t frontRef,
174                        uint8_t backMask, uint8_t backWriteMask, uint8_t backRef);
175 void GX2InitStencilMaskReg(GX2StencilMaskReg *reg, uint8_t frontMask, uint8_t frontWriteMask,
176                            uint8_t frontRef, uint8_t backMask, uint8_t backWriteMask, uint8_t backRef);
177 void GX2GetStencilMaskReg(GX2StencilMaskReg *reg, uint8_t *frontMask, uint8_t *frontWriteMask,
178                           uint8_t *frontRef, uint8_t *backMask, uint8_t *backWriteMask, uint8_t *backRef);
179 void GX2SetStencilMaskReg(GX2StencilMaskReg *reg);
180 void GX2SetLineWidth(float width);
181 void GX2InitLineWidthReg(GX2LineWidthReg *reg, float width);
182 void GX2GetLineWidthReg(GX2LineWidthReg *reg, float *width);
183 void GX2SetLineWidthReg(GX2LineWidthReg *reg);
184 void GX2SetPointSize(float width, float height);
185 void GX2InitPointSizeReg(GX2PointSizeReg *reg, float width, float height);
186 void GX2GetPointSizeReg(GX2PointSizeReg *reg, float *width, float *height);
187 void GX2SetPointSizeReg(GX2PointSizeReg *reg);
188 void GX2SetPointLimits(float min, float max);
189 void GX2InitPointLimitsReg(GX2PointLimitsReg *reg, float min, float max);
190 void GX2GetPointLimitsReg(GX2PointLimitsReg *reg, float *min, float *max);
191 void GX2SetPointLimitsReg(GX2PointLimitsReg *reg);
192 void GX2SetCullOnlyControl(GX2FrontFace frontFace, BOOL cullFront, BOOL cullBack);
193 void GX2SetPolygonControl(GX2FrontFace frontFace, BOOL cullFront, BOOL cullBack, BOOL polyMode,
194                           GX2PolygonMode polyModeFront, GX2PolygonMode polyModeBack, BOOL polyOffsetFrontEnable,
195                           BOOL polyOffsetBackEnable, BOOL polyOffsetParaEnable);
196 void GX2InitPolygonControlReg(GX2PolygonControlReg *reg, GX2FrontFace frontFace, BOOL cullFront,
197                               BOOL cullBack, BOOL polyMode, GX2PolygonMode polyModeFront, GX2PolygonMode polyModeBack,
198                               BOOL polyOffsetFrontEnable, BOOL polyOffsetBackEnable, BOOL polyOffsetParaEnable);
199 void GX2GetPolygonControlReg(GX2PolygonControlReg *reg, GX2FrontFace *frontFace, BOOL *cullFront,
200                              BOOL *cullBack, BOOL *polyMode, GX2PolygonMode *polyModeFront, GX2PolygonMode *polyModeBack,
201                              BOOL *polyOffsetFrontEnable, BOOL *polyOffsetBackEnable, BOOL *polyOffsetParaEnable);
202 void GX2SetPolygonControlReg(GX2PolygonControlReg *reg);
203 void GX2SetPolygonOffset(float frontOffset, float frontScale, float backOffset, float backScale,
204                          float clamp);
205 void GX2InitPolygonOffsetReg(GX2PolygonOffsetReg *reg, float frontOffset, float frontScale,
206                              float backOffset, float backScale, float clamp);
207 void GX2GetPolygonOffsetReg(GX2PolygonOffsetReg *reg, float *frontOffset, float *frontScale,
208                             float *backOffset, float *backScale, float *clamp);
209 void GX2SetPolygonOffsetReg(GX2PolygonOffsetReg *reg);
210 void GX2SetScissor(uint32_t x, uint32_t y, uint32_t width, uint32_t height);
211 void GX2InitScissorReg(GX2ScissorReg *reg, uint32_t x, uint32_t y, uint32_t width, uint32_t height);
212 void GX2GetScissorReg(GX2ScissorReg *reg, uint32_t *x, uint32_t *y, uint32_t *width,
213                       uint32_t *height);
214 void GX2SetScissorReg(GX2ScissorReg *reg);
215 void GX2SetTargetChannelMasks(GX2ChannelMask mask0, GX2ChannelMask mask1, GX2ChannelMask mask2,
216                               GX2ChannelMask mask3, GX2ChannelMask mask4, GX2ChannelMask mask5, GX2ChannelMask mask6,
217                               GX2ChannelMask mask7);
218 void GX2InitTargetChannelMasksReg(GX2TargetChannelMaskReg *reg, GX2ChannelMask mask0,
219                                   GX2ChannelMask mask1, GX2ChannelMask mask2, GX2ChannelMask mask3, GX2ChannelMask mask4,
220                                   GX2ChannelMask mask5, GX2ChannelMask mask6, GX2ChannelMask mask7);
221 void GX2GetTargetChannelMasksReg(GX2TargetChannelMaskReg *reg, GX2ChannelMask *mask0,
222                                  GX2ChannelMask *mask1, GX2ChannelMask *mask2, GX2ChannelMask *mask3, GX2ChannelMask *mask4,
223                                  GX2ChannelMask *mask5, GX2ChannelMask *mask6, GX2ChannelMask *mask7);
224 void GX2SetTargetChannelMasksReg(GX2TargetChannelMaskReg *reg);
225 void GX2SetViewport(float x, float y, float width, float height, float nearZ, float farZ);
226 void GX2InitViewportReg(GX2ViewportReg *reg, float x, float y, float width, float height,
227                         float nearZ, float farZ);
228 void GX2GetViewportReg(GX2ViewportReg *reg, float *x, float *y, float *width, float *height,
229                        float *nearZ, float *farZ);
230 void GX2SetViewportReg(GX2ViewportReg *reg);
231 #ifdef __cplusplus
232 }
233 #endif
234 
235 /** @} */
236