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