appgfxinit.c
4.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
appgfxiinit.c
Copyright (C) 1997-1999, NINTENDO Co,Ltd.
*/
#include <nusys.h>
#include "graphic.h"
/*------------------------------------------------------*/
/* 登録するグラフィックマイクロコード */
/* マイクロコードを変更する場合は,ここに追加するか */
/* 変更するようにしてください */
/*------------------------------------------------------*/
static NUUcode nugfx_ucode[] = {
{(u64*)gspF3DEX2_fifoTextStart, (u64*)gspF3DEX2_fifoDataStart}, /*0*/
};
static u16* FrameBuf[3] = {
(u16*)NU_GFX_FRAMEBUFFER0_ADDR,
(u16*)NU_GFX_FRAMEBUFFER1_ADDR,
(u16*)NU_GFX_FRAMEBUFFER2_ADDR
};
/*------------------------------------------------------*/
/* 最初にRDPを初期化するディスプレイリスト */
/*------------------------------------------------------*/
static Gfx rdpstateinit_dl[] = {
/* set all of the attribute registers to zero */
gsDPSetEnvColor(0,0,0,0),
gsDPSetPrimColor(0,0,0,0,0,0),
gsDPSetBlendColor(0,0,0,0),
gsDPSetFogColor(0,0,0,0),
gsDPSetFillColor(0),
gsDPSetPrimDepth(0,0),
gsDPSetConvert(0,0,0,0,0,0),
gsDPSetKeyR(0,0,0),
gsDPSetKeyGB(0,0,0,0,0,0),
/* set combine mode */
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
/* initialize the scissor box */
gsDPSetScissor(G_SC_NON_INTERLACE, 0, 0,
NU_GFX_INIT_SCREEN_WD, NU_GFX_INIT_SCREEN_HT),
/* initialize all the texture tile descriptors to zero */
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0),
gsDPSetTileSize(0, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(1, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(2, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(3, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(4, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(5, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(6, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPSetTileSize(7, 0, 0, (1 - 1) << G_TEXTURE_IMAGE_FRAC, (1 - 1) <<
G_TEXTURE_IMAGE_FRAC),
gsDPPipeSync(),
gsSPEndDisplayList(),
};
/*----------------------------------------------------------------------*/
/* appGfxInit - グラフィックスレッド,マネージャの初期化 */
/* IN: 特になし */
/* RET: 無し */
/*----------------------------------------------------------------------*/
void appGfxInit(void)
{
Gfx gfxList[0x100];
Gfx* gfxList_ptr;
/* グラフィックスレッドの起動 */
nuGfxThreadStart();
nuGfxSetCfb(FrameBuf, 3); /* フレームバッファの登録 */
nuGfxSetZBuffer((u16*)NU_GFX_ZBUFFER_ADDR);
/* フレームバッファ切り替えのコールバック関数登録 */
nuGfxSwapCfbFuncSet(nuGfxSwapCfb);
/* FIFOマイクロコードのFIFOバッファ設定 */
nuGfxSetUcodeFifo(nuRDPOutputBuf, NU_GFX_RDP_OUTPUTBUFF_SIZE);
/* グラフィックスマイクロコードの登録 */
nuGfxSetUcode(nugfx_ucode);
/* グラフィックタスクマネージャの初期化 */
nuGfxTaskMgrInit();
/* 最初に1回だけ必要なRDPの初期化をここでおこないます */
gfxList_ptr = gfxList;
gSPDisplayList(gfxList_ptr++, OS_K0_TO_PHYSICAL(rdpstateinit_dl));
gDPFullSync(gfxList_ptr++);
gSPEndDisplayList(gfxList_ptr++);
nuGfxTaskStart(gfxList,
(s32)(gfxList_ptr - gfxList) * sizeof (Gfx),
APP_GFX_UCODE_F3DEX2 , 0);
/* タスクが終了するのを待ちます */
nuGfxTaskAllEndWait();
}