Citro3d
Loading...
Searching...
No Matches
internal.h
Go to the documentation of this file.
1#pragma once
2#include <c3d/attribs.h>
3#include <c3d/buffers.h>
4#include <c3d/proctex.h>
5#include <c3d/light.h>
6#include <c3d/framebuffer.h>
7#include <c3d/texenv.h>
8#include <c3d/fog.h>
9
10#define C3D_UNUSED __attribute__((unused))
11
12typedef struct
13{
16 u32 zScale, zOffset;
17 GPU_CULLMODE cullMode;
18 bool zBuffer, earlyDepth;
19 GPU_EARLYDEPTHFUNC earlyDepthFunc;
21
23 u32 stencilMode, stencilOp;
25
28 GPU_LOGICOP clrLogicOp;
30
31typedef struct
32{
33 gxCmdQueue_s gxQueue;
34 u32* cmdBuf;
35 size_t cmdBufSize;
37
38 u32 flags;
39 shaderProgram_s* program;
40
41 C3D_AttrInfo attrInfo;
42 C3D_BufInfo bufInfo;
44 C3D_LightEnv* lightEnv;
45
48 C3D_Tex* tex[3];
49 C3D_TexEnv texEnv[6];
50
51 u32 texEnvBuf, texEnvBufClr;
52 u32 fogClr;
53 C3D_FogLut* fogLut;
54
55 u16 gasAttn, gasAccMax;
56 u32 gasLightXY, gasLightZ, gasLightZColor;
57 u32 gasDeltaZ : 24;
58 u32 gasFlags : 8;
59 C3D_GasLut* gasLut;
60
61 C3D_ProcTex* procTex;
62 C3D_ProcTexLut* procTexLut[3];
63 C3D_ProcTexColorLut* procTexColorLut;
64
65 C3D_FrameBuf fb;
66 u32 viewport[5];
67 u32 scissor[3];
68
69 u16 fixedAttribDirty, fixedAttribEverDirty;
70 C3D_FVec fixedAttribs[12];
72
73enum
74{
75 C3DiF_Active = BIT(0),
78 C3DiF_BufInfo = BIT(3),
79 C3DiF_Effect = BIT(4),
82 C3DiF_Scissor = BIT(7),
83 C3DiF_Program = BIT(8),
85 C3DiF_LightEnv = BIT(10),
86 C3DiF_VshCode = BIT(11),
87 C3DiF_GshCode = BIT(12),
88 C3DiF_TexStatus = BIT(14),
89 C3DiF_ProcTex = BIT(15),
91 C3DiF_FogLut = BIT(17),
92 C3DiF_Gas = BIT(18),
93 C3DiF_GasLut = BIT(19),
94
95#define C3DiF_ProcTexLut(n) BIT(20+(n))
97#define C3DiF_Tex(n) BIT(23+(n))
98 C3DiF_TexAll = 7 << 23,
99#define C3DiF_TexEnv(n) BIT(26+(n))
100 C3DiF_TexEnvAll = 0x3F << 26,
101};
102
103enum
104{
109};
110
111static inline C3D_Context* C3Di_GetContext(void)
112{
114 return &__C3D_Context;
115}
116
117static inline bool typeIsCube(GPU_TEXTURE_MODE_PARAM type)
118{
119 return type == GPU_TEX_CUBE_MAP || type == GPU_TEX_SHADOW_CUBE;
120}
121
122static inline bool C3Di_TexIs2D(C3D_Tex* tex)
123{
124 return !typeIsCube(C3D_TexGetType(tex));
125}
126
127static inline bool addrIsVRAM(const void* addr)
128{
129 u32 vaddr = (u32)addr;
130 return vaddr >= OS_VRAM_VADDR && vaddr < OS_VRAM_VADDR + OS_VRAM_SIZE;
131}
132
133static inline vramAllocPos addrGetVRAMBank(const void* addr)
134{
135 u32 vaddr = (u32)addr;
136 return vaddr < OS_VRAM_VADDR + OS_VRAM_SIZE/2 ? VRAM_ALLOC_A : VRAM_ALLOC_B;
137}
138
139void C3Di_UpdateContext(void);
140void C3Di_AttrInfoBind(C3D_AttrInfo* info);
141void C3Di_BufInfoBind(C3D_BufInfo* info);
142void C3Di_FrameBufBind(C3D_FrameBuf* fb);
143void C3Di_TexEnvBind(int id, C3D_TexEnv* env);
144void C3Di_SetTex(int unit, C3D_Tex* tex);
145void C3Di_EffectBind(C3D_Effect* effect);
146void C3Di_GasUpdate(C3D_Context* ctx);
147
148void C3Di_LightMtlBlend(C3D_Light* light);
149
150void C3Di_DirtyUniforms(GPU_SHADER_TYPE type);
151void C3Di_LoadShaderUniforms(shaderInstance_s* si);
152void C3Di_ClearShaderUniforms(GPU_SHADER_TYPE type);
153
154bool C3Di_SplitFrame(u32** pBuf, u32* pSize);
155
156void C3Di_RenderQueueInit(void);
157void C3Di_RenderQueueExit(void);
158void C3Di_RenderQueueWaitDone(void);
C3D_Context __C3D_Context
Definition: base.c:7
@ C3DiF_Gas
Definition: internal.h:92
@ C3DiF_AttrInfo
Definition: internal.h:77
@ C3DiF_TexAll
Definition: internal.h:98
@ C3DiF_Scissor
Definition: internal.h:82
@ C3DiF_VshCode
Definition: internal.h:86
@ C3DiF_Effect
Definition: internal.h:79
@ C3DiF_Viewport
Definition: internal.h:81
@ C3DiF_Active
Definition: internal.h:75
@ C3DiF_GshCode
Definition: internal.h:87
@ C3DiF_TexEnvBuf
Definition: internal.h:84
@ C3DiF_FogLut
Definition: internal.h:91
@ C3DiF_ProcTexColorLut
Definition: internal.h:90
@ C3DiF_LightEnv
Definition: internal.h:85
@ C3DiF_DrawUsed
Definition: internal.h:76
@ C3DiF_TexStatus
Definition: internal.h:88
@ C3DiF_BufInfo
Definition: internal.h:78
@ C3DiF_ProcTex
Definition: internal.h:89
@ C3DiF_FrameBuf
Definition: internal.h:80
@ C3DiF_GasLut
Definition: internal.h:93
@ C3DiF_ProcTexLutAll
Definition: internal.h:96
@ C3DiF_Program
Definition: internal.h:83
@ C3DiF_TexEnvAll
Definition: internal.h:100
bool C3Di_SplitFrame(u32 **pBuf, u32 *pSize)
Definition: base.c:309
void C3Di_RenderQueueInit(void)
Definition: renderqueue.c:114
void C3Di_DirtyUniforms(GPU_SHADER_TYPE type)
Definition: uniforms.c:87
void C3Di_BufInfoBind(C3D_BufInfo *info)
Definition: buffers.c:49
void C3Di_UpdateContext(void)
Definition: base.c:158
void C3Di_EffectBind(C3D_Effect *effect)
Definition: effect.c:90
void C3Di_LoadShaderUniforms(shaderInstance_s *si)
Definition: uniforms.c:99
void C3Di_LightMtlBlend(C3D_Light *light)
Definition: light.c:3
void C3Di_RenderQueueDisableVBlank(void)
Definition: renderqueue.c:108
void C3Di_RenderQueueEnableVBlank(void)
Definition: renderqueue.c:102
void C3Di_RenderQueueWaitDone(void)
Definition: renderqueue.c:146
void C3Di_GasUpdate(C3D_Context *ctx)
Definition: gas.c:153
void C3Di_SetTex(int unit, C3D_Tex *tex)
Definition: texture.c:265
void C3Di_RenderQueueExit(void)
Definition: renderqueue.c:125
void C3Di_FrameBufBind(C3D_FrameBuf *fb)
Definition: framebuffer.c:49
void C3Di_AttrInfoBind(C3D_AttrInfo *info)
Definition: attribs.c:59
void C3Di_TexEnvBind(int id, C3D_TexEnv *env)
Definition: texenv.c:40
@ C3DiG_BeginAcc
Definition: internal.h:105
@ C3DiG_RenderStage
Definition: internal.h:108
@ C3DiG_SetAccMax
Definition: internal.h:107
@ C3DiG_AccStage
Definition: internal.h:106
void C3Di_ClearShaderUniforms(GPU_SHADER_TYPE type)
Definition: uniforms.c:129
u32 flags
Definition: internal.h:38
C3D_BufInfo bufInfo
Definition: internal.h:42
u32 gasLightXY
Definition: internal.h:56
u16 fixedAttribDirty
Definition: internal.h:69
u32 * cmdBuf
Definition: internal.h:34
u32 texConfig
Definition: internal.h:46
u16 gasAccMax
Definition: internal.h:55
u32 gasFlags
Definition: internal.h:58
gxCmdQueue_s gxQueue
Definition: internal.h:33
u32 texEnvBuf
Definition: internal.h:51
u32 gasDeltaZ
Definition: internal.h:57
C3D_AttrInfo attrInfo
Definition: internal.h:41
C3D_ProcTexColorLut * procTexColorLut
Definition: internal.h:63
C3D_GasLut * gasLut
Definition: internal.h:59
shaderProgram_s * program
Definition: internal.h:39
u32 fogClr
Definition: internal.h:52
C3D_FogLut * fogLut
Definition: internal.h:53
float cmdBufUsage
Definition: internal.h:36
C3D_Effect effect
Definition: internal.h:43
u32 texShadow
Definition: internal.h:47
C3D_LightEnv * lightEnv
Definition: internal.h:44
size_t cmdBufSize
Definition: internal.h:35
C3D_FrameBuf fb
Definition: internal.h:65
C3D_ProcTex * procTex
Definition: internal.h:61
u32 stencilMode
Definition: internal.h:23
u32 blendClr
Definition: internal.h:26
u32 alphaTest
Definition: internal.h:22
bool earlyDepth
Definition: internal.h:18
GPU_CULLMODE cullMode
Definition: internal.h:17
u32 zOffset
Definition: internal.h:16
u32 depthTest
Definition: internal.h:24
u32 fragOpMode
Definition: internal.h:14
u32 earlyDepthRef
Definition: internal.h:20
GPU_LOGICOP clrLogicOp
Definition: internal.h:28
GPU_EARLYDEPTHFUNC earlyDepthFunc
Definition: internal.h:19
u32 alphaBlend
Definition: internal.h:27
u32 fragOpShadow
Definition: internal.h:15