PANDORA: Make GLES context compatible with latest driver (FB only, no X11)
[mupen64plus-pandora.git] / source / rice_gles / src / Config.h
CommitLineData
d07c171f 1/*
2Copyright (C) 2002 Rice1964
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18*/
19
20#ifndef _RICE_CONFIG_H_
21#define _RICE_CONFIG_H_
22
23#include <stdio.h>
24
25#include "typedefs.h"
26
27typedef enum
28{
29 OGL_DEVICE,
30 OGL_1_1_DEVICE,
31 OGL_1_2_DEVICE,
32 OGL_1_3_DEVICE,
33 OGL_1_4_DEVICE,
34 OGL_1_4_V2_DEVICE,
35 OGL_TNT2_DEVICE,
36 NVIDIA_OGL_DEVICE,
37 OGL_FRAGMENT_PROGRAM,
38
39 DIRECTX_DEVICE,
40} SupportedDeviceType;
41
42enum DirectXCombinerType
43{
44 DX_DISABLE_COMBINER,
45 DX_BEST_FIT,
46 DX_LOW_END,
47 DX_HIGH_END,
48 DX_NVIDIA_TNT,
49 DX_2_STAGES,
50 DX_3_STAGES,
51 DX_4_STAGES,
52 DX_PIXEL_SHADER,
53 DX_SEMI_PIXEL_SHADER,
54};
55
56
57typedef struct
58{
59 const char* name;
60 SupportedDeviceType type;
61} RenderEngineSetting;
62
63enum {
64 FRM_BUF_NONE,
65 FRM_BUF_IGNORE,
66 FRM_BUF_BASIC,
67 FRM_BUF_BASIC_AND_WRITEBACK,
68 FRM_BUF_WRITEBACK_AND_RELOAD,
69 FRM_BUF_COMPLETE,
70 FRM_BUF_WITH_EMULATOR,
71 FRM_BUF_BASIC_AND_WITH_EMULATOR,
72 FRM_BUF_WITH_EMULATOR_READ_ONLY,
73 FRM_BUF_WITH_EMULATOR_WRITE_ONLY,
74};
75
76enum {
77 FRM_BUF_WRITEBACK_NORMAL,
78 FRM_BUF_WRITEBACK_1_2,
79 FRM_BUF_WRITEBACK_1_3,
80 FRM_BUF_WRITEBACK_1_4,
81 FRM_BUF_WRITEBACK_1_5,
82 FRM_BUF_WRITEBACK_1_6,
83 FRM_BUF_WRITEBACK_1_7,
84 FRM_BUF_WRITEBACK_1_8,
85};
86
87enum {
88 TXT_BUF_NONE,
89 TXT_BUF_IGNORE,
90 TXT_BUF_NORMAL,
91 TXT_BUF_WRITE_BACK,
92 TXT_BUF_WRITE_BACK_AND_RELOAD,
93};
94
95enum {
96 TXT_QUALITY_DEFAULT,
97 TXT_QUALITY_32BIT,
98 TXT_QUALITY_16BIT,
99};
100
101enum {
102 FORCE_DEFAULT_FILTER,
103 FORCE_POINT_FILTER,
104 FORCE_LINEAR_FILTER,
105};
106
107enum {
108 TEXTURE_NO_MIPMAP = 0,
109 TEXTURE_NO_FILTER,
110 TEXTURE_BILINEAR_FILTER,
111 TEXTURE_TRILINEAR_FILTER,
112};
113
114enum {
115 TEXTURE_NO_ENHANCEMENT,
116 TEXTURE_2X_ENHANCEMENT,
117 TEXTURE_2XSAI_ENHANCEMENT,
118 TEXTURE_HQ2X_ENHANCEMENT,
119 TEXTURE_LQ2X_ENHANCEMENT,
120 TEXTURE_HQ4X_ENHANCEMENT,
121 TEXTURE_SHARPEN_ENHANCEMENT,
122 TEXTURE_SHARPEN_MORE_ENHANCEMENT,
123 TEXTURE_EXTERNAL,
124 TEXTURE_MIRRORED,
125};
126
127enum {
128 TEXTURE_ENHANCEMENT_NORMAL,
129 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_1,
130 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_2,
131 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_3,
132 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_4,
133};
134
135enum {
136 SCREEN_UPDATE_DEFAULT = 0,
137 SCREEN_UPDATE_AT_VI_UPDATE = 1,
138 SCREEN_UPDATE_AT_VI_CHANGE = 2,
139 SCREEN_UPDATE_AT_CI_CHANGE = 3,
140 SCREEN_UPDATE_AT_1ST_CI_CHANGE = 4,
141 SCREEN_UPDATE_AT_1ST_PRIMITIVE = 5,
142 SCREEN_UPDATE_BEFORE_SCREEN_CLEAR = 6,
143 SCREEN_UPDATE_AT_VI_UPDATE_AND_DRAWN = 7, // Update screen at VI origin is updated and the screen has been drawn
144};
145
146enum {
147 ONSCREEN_DISPLAY_NOTHING = 0,
148 ONSCREEN_DISPLAY_DLIST_PER_SECOND,
149 ONSCREEN_DISPLAY_FRAME_PER_SECOND,
150 ONSCREEN_DISPLAY_DEBUG_INFORMATION_ONLY,
151 ONSCREEN_DISPLAY_TEXT_FROM_CORE_ONLY,
152 ONSCREEN_DISPLAY_DLIST_PER_SECOND_WITH_CORE_MSG,
153 ONSCREEN_DISPLAY_FRAME_PER_SECOND_WITH_CORE_MSG,
154 ONSCREEN_DISPLAY_DEBUG_INFORMATION_WITH_CORE_MSG,
155};
156
157enum HACK_FOR_GAMES
158{
159 NO_HACK_FOR_GAME,
160 HACK_FOR_BANJO_TOOIE,
161 HACK_FOR_DR_MARIO,
162 HACK_FOR_ZELDA,
163 HACK_FOR_MARIO_TENNIS,
164 HACK_FOR_BANJO,
165 HACK_FOR_PD,
166 HACK_FOR_GE,
167 HACK_FOR_PILOT_WINGS,
168 HACK_FOR_YOSHI,
169 HACK_FOR_NITRO,
170 HACK_FOR_TONYHAWK,
171 HACK_FOR_NASCAR,
172 HACK_FOR_SUPER_BOWLING,
173 HACK_FOR_CONKER,
174 HACK_FOR_ALL_STAR_BASEBALL,
175 HACK_FOR_TIGER_HONEY_HUNT,
176 HACK_REVERSE_XY_COOR,
177 HACK_REVERSE_Y_COOR,
178 HACK_FOR_GOLDEN_EYE,
179 HACK_FOR_FZERO,
180 HACK_FOR_COMMANDCONQUER,
181 HACK_FOR_RUMBLE,
182 HACK_FOR_SOUTH_PARK_RALLY,
183 HACK_FOR_BUST_A_MOVE,
184 HACK_FOR_OGRE_BATTLE,
185 HACK_FOR_TWINE,
186 HACK_FOR_EXTREME_G2,
187 HACK_FOR_ROGUE_SQUADRON,
188 HACK_FOR_MARIO_GOLF,
189 HACK_FOR_MLB,
190 HACK_FOR_POLARISSNOCROSS,
191 HACK_FOR_TOPGEARRALLY,
192 HACK_FOR_DUKE_NUKEM,
193 HACK_FOR_ZELDA_MM,
194 HACK_FOR_MARIO_KART,
195};
196
197enum {
198 NOT_USE_CI_WIDTH_AND_RATIO,
199 USE_CI_WIDTH_AND_RATIO_FOR_NTSC,
200 USE_CI_WIDTH_AND_RATIO_FOR_PAL,
201};
202
203typedef struct {
204 BOOL bEnableHacks;
205 BOOL bWinFrameMode;
206 BOOL bOGLVertexClipper;
207 BOOL bEnableSSE;
208 BOOL bEnableVertexShader;
209 BOOL bSkipFrame;
210 BOOL bFullTMEM;
211 BOOL bUseFullTMEM;
212
213 BOOL bShowFPS;
214
215 uint32 mipmapping;
216 uint32 fogMethod;
217 uint32 forceTextureFilter;
218 uint32 textureEnhancement;
219 uint32 textureEnhancementControl;
220 uint32 textureQuality;
221 uint32 anisotropicFiltering;
222 uint32 multiSampling;
223 BOOL bTexRectOnly;
224 BOOL bSmallTextureOnly;
225 BOOL bDumpTexturesToFiles;
226 BOOL bLoadHiResTextures;
227 BOOL bLoadHiResCRCOnly;
228
229 int OpenglDepthBufferSetting;
230 int OpenglRenderSetting;
231 uint32 colorQuality;
232
233 HACK_FOR_GAMES enableHackForGames;
234} GlobalOptions;
235
236typedef struct {
237 bool bUpdateCIInfo;
238
239 bool bCheckBackBufs; // Check texture again against the recent backbuffer addresses
240 bool bWriteBackBufToRDRAM; // If a recent backbuffer is used, write its content back to RDRAM
241 bool bLoadBackBufFromRDRAM; // Load content from RDRAM and draw into backbuffer
242 bool bIgnore; // Ignore all rendering into texture buffers
243
244 bool bSupportRenderTextures; // Support render-to-texture
245 bool bCheckRenderTextures; // Check texture again against the the last render_texture addresses
246 bool bRenderTextureWriteBack; // Write back render_texture into RDRAM
247 bool bLoadRDRAMIntoRenderTexture; // Load RDRAM content and render into render_texture
248
249 bool bAtEachFrameUpdate; // Reload and write back at each frame buffer and CI update
250
251 bool bProcessCPUWrite;
252 bool bProcessCPURead;
253
254 bool bFillRectNextTextureBuffer;
255 bool bIgnoreRenderTextureIfHeightUnknown;
256 //bool bFillColor;
257} FrameBufferOptions;
258
259typedef struct {
260 uint32 N64FrameBufferEmuType;
261 uint32 N64FrameBufferWriteBackControl;
262 uint32 N64RenderToTextureEmuType;
263 uint32 screenUpdateSetting;
264 BOOL bNormalCombiner;
265 BOOL bNormalBlender;
266 BOOL bFastTexCRC;
267 BOOL bAccurateTextureMapping;
268 BOOL bInN64Resolution;
269 BOOL bDoubleSizeForSmallTxtrBuf;
270 BOOL bSaveVRAM;
271} RomOptions;
272
273typedef struct IniSection
274{
275 bool bOutput;
276 char crccheck[50];
277 char name[50];
278
279 // Options with changeable default values
280 uint32 dwNormalCombiner;
281 uint32 dwNormalBlender;
282 uint32 dwFastTextureCRC;
283 uint32 dwAccurateTextureMapping;
284 uint32 dwFrameBufferOption;
285 uint32 dwRenderToTextureOption;
286 uint32 dwScreenUpdateSetting;
287
288 // Options with FALSE as default values
289 BOOL bDisableBlender;
290 BOOL bForceScreenClear;
291 BOOL bEmulateClear;
292 BOOL bForceDepthBuffer;
293
294 // Less useful options
295 BOOL bDisableObjBG;
296 BOOL bDisableTextureCRC;
297 BOOL bIncTexRectEdge;
298 BOOL bZHack;
299 BOOL bTextureScaleHack;
300 BOOL bFastLoadTile;
301 BOOL bUseSmallerTexture;
302 BOOL bPrimaryDepthHack;
303 BOOL bTexture1Hack;
304 BOOL bDisableCulling;
305
306 int VIWidth;
307 int VIHeight;
308 uint32 UseCIWidthAndRatio;
309
310 uint32 dwFullTMEM;
311 BOOL bTxtSizeMethod2;
312 BOOL bEnableTxtLOD;
313} section;
314
315struct ROMHeader
316{
317 uint8 x1, x2, x3, x4;
318 uint32 dwClockRate;
319 uint32 dwBootAddressOffset;
320 uint32 dwRelease;
321 uint32 dwCRC1;
322 uint32 dwCRC2;
323 uint64 qwUnknown1;
324 char szName[20];
325 uint32 dwUnknown2;
326 uint16 wUnknown3;
327 uint8 nUnknown4;
328 uint8 nManufacturer;
329 uint16 wCartID;
330 s8 nCountryID;
331 uint8 nUnknown5;
332};
333
334typedef struct
335{
336 // Other info from the rom. This is for convenience
337 unsigned char szGameName[50+1];
338 s8 nCountryID;
339
340 // Copy of the ROM header
341 ROMHeader romheader;
342
343 // With changeable default values
344 uint32 dwNormalCombiner;
345 uint32 dwNormalBlender;
346 uint32 dwAccurateTextureMapping;
347 uint32 dwFastTextureCRC;
348 uint32 dwFrameBufferOption;
349 uint32 dwRenderToTextureOption;
350 uint32 dwScreenUpdateSetting;
351
352 // With FALSE as its default values
353 BOOL bForceScreenClear;
354 BOOL bEmulateClear;
355 BOOL bForceDepthBuffer;
356 BOOL bDisableBlender;
357
358 // Less useful options
359 BOOL bDisableObjBG;
360 BOOL bDisableTextureCRC;
361 BOOL bIncTexRectEdge;
362 BOOL bZHack;
363 BOOL bTextureScaleHack;
364 BOOL bFastLoadTile;
365 BOOL bUseSmallerTexture;
366 BOOL bPrimaryDepthHack;
367 BOOL bTexture1Hack;
368 BOOL bDisableCulling;
369 int VIWidth;
370 int VIHeight;
371 uint32 UseCIWidthAndRatio;
372
373 uint32 dwFullTMEM;
374 BOOL bTxtSizeMethod2;
375 BOOL bEnableTxtLOD;
376} GameSetting, *LPGAMESETTING;
377
378typedef struct
379{
380 s8 nCountryID;
381 char* szName;
382 uint32 nTvType;
383} CountryIDInfo;
384
385#define TV_SYSTEM_NTSC 1
386#define TV_SYSTEM_PAL 0
387
388extern GlobalOptions options;
389extern FrameBufferOptions frameBufferOptions;
390extern RomOptions defaultRomOptions;
391extern RomOptions currentRomOptions;
392extern const CountryIDInfo g_CountryCodeInfo[];
393extern GameSetting g_curRomInfo;
394extern bool bIniIsChanged;
395extern char szIniFileName[300];
396
397extern BOOL InitConfiguration(void);
398extern BOOL LoadConfiguration(void);
399extern void WriteIniFile();
400extern BOOL ReadIniFile();
401extern void OutputSectionDetails(uint32 i, FILE * fh);
402extern void GenerateCurrentRomOptions();
403extern void Ini_GetRomOptions(LPGAMESETTING pGameSetting);
404extern void Ini_StoreRomOptions(LPGAMESETTING pGameSetting);
405extern uint32 CountryCodeToTVSystem(uint32 countryCode);
406extern void ROM_GetRomNameFromHeader(unsigned char * szName, ROMHeader * pHdr);
407
408#endif
409