Rice Video Plugin for GLES1.1
[mupen64plus-pandora.git] / source / rice_gles / src / Config.h
diff --git a/source/rice_gles/src/Config.h b/source/rice_gles/src/Config.h
new file mode 100644 (file)
index 0000000..c834b97
--- /dev/null
@@ -0,0 +1,409 @@
+/*
+Copyright (C) 2002 Rice1964
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+*/
+
+#ifndef _RICE_CONFIG_H_
+#define _RICE_CONFIG_H_
+
+#include <stdio.h>
+
+#include "typedefs.h"
+
+typedef enum
+{
+    OGL_DEVICE,
+    OGL_1_1_DEVICE,
+    OGL_1_2_DEVICE,
+    OGL_1_3_DEVICE,
+    OGL_1_4_DEVICE,
+    OGL_1_4_V2_DEVICE,
+    OGL_TNT2_DEVICE,
+    NVIDIA_OGL_DEVICE,
+    OGL_FRAGMENT_PROGRAM,
+
+    DIRECTX_DEVICE,
+} SupportedDeviceType;
+
+enum DirectXCombinerType
+{
+    DX_DISABLE_COMBINER,
+    DX_BEST_FIT,
+    DX_LOW_END,
+    DX_HIGH_END,
+    DX_NVIDIA_TNT,
+    DX_2_STAGES,
+    DX_3_STAGES,
+    DX_4_STAGES,
+    DX_PIXEL_SHADER,
+    DX_SEMI_PIXEL_SHADER,
+};
+
+
+typedef struct
+{
+    const char* name;
+    SupportedDeviceType type;
+} RenderEngineSetting;
+
+enum {
+    FRM_BUF_NONE,
+    FRM_BUF_IGNORE,
+    FRM_BUF_BASIC,
+    FRM_BUF_BASIC_AND_WRITEBACK,
+    FRM_BUF_WRITEBACK_AND_RELOAD,
+    FRM_BUF_COMPLETE,
+    FRM_BUF_WITH_EMULATOR,
+    FRM_BUF_BASIC_AND_WITH_EMULATOR,
+    FRM_BUF_WITH_EMULATOR_READ_ONLY,
+    FRM_BUF_WITH_EMULATOR_WRITE_ONLY,
+};
+
+enum {
+    FRM_BUF_WRITEBACK_NORMAL,
+    FRM_BUF_WRITEBACK_1_2,
+    FRM_BUF_WRITEBACK_1_3,
+    FRM_BUF_WRITEBACK_1_4,
+    FRM_BUF_WRITEBACK_1_5,
+    FRM_BUF_WRITEBACK_1_6,
+    FRM_BUF_WRITEBACK_1_7,
+    FRM_BUF_WRITEBACK_1_8,
+};
+
+enum {
+    TXT_BUF_NONE,
+    TXT_BUF_IGNORE,
+    TXT_BUF_NORMAL,
+    TXT_BUF_WRITE_BACK,
+    TXT_BUF_WRITE_BACK_AND_RELOAD,
+};
+
+enum {
+    TXT_QUALITY_DEFAULT,
+    TXT_QUALITY_32BIT,
+    TXT_QUALITY_16BIT,
+};
+
+enum {
+    FORCE_DEFAULT_FILTER,
+    FORCE_POINT_FILTER,
+    FORCE_LINEAR_FILTER,
+};
+
+enum {
+    TEXTURE_NO_MIPMAP = 0,
+    TEXTURE_NO_FILTER,
+    TEXTURE_BILINEAR_FILTER,
+    TEXTURE_TRILINEAR_FILTER,
+};
+
+enum {
+    TEXTURE_NO_ENHANCEMENT,
+    TEXTURE_2X_ENHANCEMENT,
+    TEXTURE_2XSAI_ENHANCEMENT,
+    TEXTURE_HQ2X_ENHANCEMENT,
+    TEXTURE_LQ2X_ENHANCEMENT,
+    TEXTURE_HQ4X_ENHANCEMENT,
+    TEXTURE_SHARPEN_ENHANCEMENT,
+    TEXTURE_SHARPEN_MORE_ENHANCEMENT,
+    TEXTURE_EXTERNAL,
+    TEXTURE_MIRRORED,
+};
+
+enum {
+    TEXTURE_ENHANCEMENT_NORMAL,
+    TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_1,
+    TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_2,
+    TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_3,
+    TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_4,
+};
+
+enum {
+    SCREEN_UPDATE_DEFAULT = 0,
+    SCREEN_UPDATE_AT_VI_UPDATE = 1,
+    SCREEN_UPDATE_AT_VI_CHANGE = 2,
+    SCREEN_UPDATE_AT_CI_CHANGE = 3,
+    SCREEN_UPDATE_AT_1ST_CI_CHANGE = 4,
+    SCREEN_UPDATE_AT_1ST_PRIMITIVE = 5,
+    SCREEN_UPDATE_BEFORE_SCREEN_CLEAR = 6,
+    SCREEN_UPDATE_AT_VI_UPDATE_AND_DRAWN = 7,   // Update screen at VI origin is updated and the screen has been drawn
+};
+
+enum {
+    ONSCREEN_DISPLAY_NOTHING = 0,
+    ONSCREEN_DISPLAY_DLIST_PER_SECOND,
+    ONSCREEN_DISPLAY_FRAME_PER_SECOND,
+    ONSCREEN_DISPLAY_DEBUG_INFORMATION_ONLY,
+    ONSCREEN_DISPLAY_TEXT_FROM_CORE_ONLY,
+    ONSCREEN_DISPLAY_DLIST_PER_SECOND_WITH_CORE_MSG,
+    ONSCREEN_DISPLAY_FRAME_PER_SECOND_WITH_CORE_MSG,
+    ONSCREEN_DISPLAY_DEBUG_INFORMATION_WITH_CORE_MSG,
+};
+
+enum HACK_FOR_GAMES
+{
+    NO_HACK_FOR_GAME,
+    HACK_FOR_BANJO_TOOIE,
+    HACK_FOR_DR_MARIO,
+    HACK_FOR_ZELDA,
+    HACK_FOR_MARIO_TENNIS,
+    HACK_FOR_BANJO,
+    HACK_FOR_PD,
+    HACK_FOR_GE,
+    HACK_FOR_PILOT_WINGS,
+    HACK_FOR_YOSHI,
+    HACK_FOR_NITRO,
+    HACK_FOR_TONYHAWK,
+    HACK_FOR_NASCAR,
+    HACK_FOR_SUPER_BOWLING,
+    HACK_FOR_CONKER,
+    HACK_FOR_ALL_STAR_BASEBALL,
+    HACK_FOR_TIGER_HONEY_HUNT,
+    HACK_REVERSE_XY_COOR,
+    HACK_REVERSE_Y_COOR,
+    HACK_FOR_GOLDEN_EYE,
+    HACK_FOR_FZERO,
+    HACK_FOR_COMMANDCONQUER,
+    HACK_FOR_RUMBLE,
+    HACK_FOR_SOUTH_PARK_RALLY,
+    HACK_FOR_BUST_A_MOVE,
+    HACK_FOR_OGRE_BATTLE,
+    HACK_FOR_TWINE,
+    HACK_FOR_EXTREME_G2,
+    HACK_FOR_ROGUE_SQUADRON,
+    HACK_FOR_MARIO_GOLF,
+    HACK_FOR_MLB,
+    HACK_FOR_POLARISSNOCROSS,
+    HACK_FOR_TOPGEARRALLY,
+    HACK_FOR_DUKE_NUKEM,
+    HACK_FOR_ZELDA_MM,
+    HACK_FOR_MARIO_KART,
+};
+
+enum {
+    NOT_USE_CI_WIDTH_AND_RATIO,
+    USE_CI_WIDTH_AND_RATIO_FOR_NTSC,
+    USE_CI_WIDTH_AND_RATIO_FOR_PAL,
+};
+
+typedef struct {
+    BOOL    bEnableHacks;
+    BOOL    bWinFrameMode;
+    BOOL    bOGLVertexClipper;
+    BOOL    bEnableSSE;
+    BOOL    bEnableVertexShader;
+    BOOL    bSkipFrame;
+    BOOL    bFullTMEM;
+    BOOL    bUseFullTMEM;
+
+    BOOL    bShowFPS;
+
+    uint32  mipmapping;
+    uint32  fogMethod;
+    uint32  forceTextureFilter;
+    uint32  textureEnhancement;
+    uint32  textureEnhancementControl;
+    uint32  textureQuality;
+    uint32  anisotropicFiltering;
+    uint32  multiSampling;
+    BOOL    bTexRectOnly;
+    BOOL    bSmallTextureOnly;
+    BOOL    bDumpTexturesToFiles;
+    BOOL    bLoadHiResTextures;
+    BOOL    bLoadHiResCRCOnly;
+
+    int     OpenglDepthBufferSetting;
+    int     OpenglRenderSetting;
+    uint32  colorQuality;
+
+    HACK_FOR_GAMES  enableHackForGames;
+} GlobalOptions;
+
+typedef struct {
+    bool    bUpdateCIInfo;
+
+    bool    bCheckBackBufs;         // Check texture again against the recent backbuffer addresses
+    bool    bWriteBackBufToRDRAM;   // If a recent backbuffer is used, write its content back to RDRAM
+    bool    bLoadBackBufFromRDRAM;  // Load content from RDRAM and draw into backbuffer
+    bool    bIgnore;                // Ignore all rendering into texture buffers
+
+    bool    bSupportRenderTextures;     // Support render-to-texture
+    bool    bCheckRenderTextures;           // Check texture again against the the last render_texture addresses
+    bool    bRenderTextureWriteBack;        // Write back render_texture into RDRAM
+    bool    bLoadRDRAMIntoRenderTexture;    // Load RDRAM content and render into render_texture
+
+    bool    bAtEachFrameUpdate;     // Reload and write back at each frame buffer and CI update
+
+    bool    bProcessCPUWrite;
+    bool    bProcessCPURead;
+
+    bool    bFillRectNextTextureBuffer;
+    bool    bIgnoreRenderTextureIfHeightUnknown;
+    //bool  bFillColor;
+} FrameBufferOptions;
+
+typedef struct {
+    uint32  N64FrameBufferEmuType;
+    uint32  N64FrameBufferWriteBackControl;
+    uint32  N64RenderToTextureEmuType;
+    uint32  screenUpdateSetting;
+    BOOL    bNormalCombiner;
+    BOOL    bNormalBlender;
+    BOOL    bFastTexCRC;
+    BOOL    bAccurateTextureMapping;
+    BOOL    bInN64Resolution;
+    BOOL    bDoubleSizeForSmallTxtrBuf;
+    BOOL    bSaveVRAM;
+} RomOptions;
+
+typedef struct IniSection
+{
+    bool    bOutput;
+    char    crccheck[50];
+    char    name[50];
+
+    // Options with changeable default values
+    uint32  dwNormalCombiner;
+    uint32  dwNormalBlender;
+    uint32  dwFastTextureCRC;
+    uint32  dwAccurateTextureMapping;
+    uint32  dwFrameBufferOption;
+    uint32  dwRenderToTextureOption;
+    uint32  dwScreenUpdateSetting;
+
+    // Options with FALSE as default values
+    BOOL    bDisableBlender;
+    BOOL    bForceScreenClear;
+    BOOL    bEmulateClear;
+    BOOL    bForceDepthBuffer;
+
+    // Less useful options
+    BOOL    bDisableObjBG;
+    BOOL    bDisableTextureCRC;
+    BOOL    bIncTexRectEdge;
+    BOOL    bZHack;
+    BOOL    bTextureScaleHack;
+    BOOL    bFastLoadTile;
+    BOOL    bUseSmallerTexture;
+    BOOL    bPrimaryDepthHack;
+    BOOL    bTexture1Hack;
+    BOOL    bDisableCulling;
+
+    int     VIWidth;
+    int     VIHeight;
+    uint32  UseCIWidthAndRatio;
+
+    uint32  dwFullTMEM;
+    BOOL    bTxtSizeMethod2;
+    BOOL    bEnableTxtLOD;
+} section;
+
+struct ROMHeader
+{
+    uint8  x1, x2, x3, x4;
+    uint32 dwClockRate;
+    uint32 dwBootAddressOffset;
+    uint32 dwRelease;
+    uint32 dwCRC1;
+    uint32 dwCRC2;
+    uint64   qwUnknown1;
+    char  szName[20];
+    uint32 dwUnknown2;
+    uint16  wUnknown3;
+    uint8  nUnknown4;
+    uint8  nManufacturer;
+    uint16  wCartID;
+    s8    nCountryID;
+    uint8  nUnknown5;
+};
+
+typedef struct 
+{
+    // Other info from the rom. This is for convenience
+    unsigned char   szGameName[50+1];
+    s8  nCountryID;
+
+    // Copy of the ROM header
+    ROMHeader   romheader;
+
+    // With changeable default values
+    uint32  dwNormalCombiner;
+    uint32  dwNormalBlender;
+    uint32  dwAccurateTextureMapping;
+    uint32  dwFastTextureCRC;
+    uint32  dwFrameBufferOption;
+    uint32  dwRenderToTextureOption;
+    uint32  dwScreenUpdateSetting;
+
+    // With FALSE as its default values
+    BOOL    bForceScreenClear;
+    BOOL    bEmulateClear;
+    BOOL    bForceDepthBuffer;
+    BOOL    bDisableBlender;
+
+    // Less useful options
+    BOOL    bDisableObjBG;
+    BOOL    bDisableTextureCRC;
+    BOOL    bIncTexRectEdge;
+    BOOL    bZHack;
+    BOOL    bTextureScaleHack;
+    BOOL    bFastLoadTile;
+    BOOL    bUseSmallerTexture;
+    BOOL    bPrimaryDepthHack;
+    BOOL    bTexture1Hack;
+    BOOL    bDisableCulling;
+    int     VIWidth;
+    int     VIHeight;
+    uint32  UseCIWidthAndRatio;
+
+    uint32  dwFullTMEM;
+    BOOL    bTxtSizeMethod2;
+    BOOL    bEnableTxtLOD;
+} GameSetting, *LPGAMESETTING;
+
+typedef struct
+{
+    s8  nCountryID;
+    char* szName;
+    uint32 nTvType;
+} CountryIDInfo;
+
+#define TV_SYSTEM_NTSC      1
+#define TV_SYSTEM_PAL       0
+
+extern GlobalOptions       options;
+extern FrameBufferOptions  frameBufferOptions;
+extern RomOptions          defaultRomOptions;
+extern RomOptions          currentRomOptions;
+extern const CountryIDInfo g_CountryCodeInfo[];
+extern GameSetting         g_curRomInfo;
+extern bool                bIniIsChanged;
+extern char                szIniFileName[300];
+
+extern BOOL InitConfiguration(void);
+extern BOOL LoadConfiguration(void);
+extern void WriteIniFile();
+extern BOOL ReadIniFile();
+extern void OutputSectionDetails(uint32 i, FILE * fh);
+extern void GenerateCurrentRomOptions();
+extern void Ini_GetRomOptions(LPGAMESETTING pGameSetting);
+extern void Ini_StoreRomOptions(LPGAMESETTING pGameSetting);
+extern uint32 CountryCodeToTVSystem(uint32 countryCode);
+extern void ROM_GetRomNameFromHeader(unsigned char * szName, ROMHeader * pHdr);
+
+#endif
+