[Video] Remove GRCOLORCOMBINEEXT definition

This commit is contained in:
zilmar 2017-05-21 20:44:34 +10:00
parent 9d6fea8549
commit 34c481c04f
6 changed files with 82 additions and 182 deletions

View File

@ -15908,21 +15908,8 @@ void InitCombine()
{ {
WriteTrace(TraceGlide64, TraceDebug, "-"); WriteTrace(TraceGlide64, TraceDebug, "-");
memset(&cmb, 0, sizeof(cmb)); memset(&cmb, 0, sizeof(cmb));
cmb.grColorCombineExt = (GRCOLORCOMBINEEXT)grColorCombineExt;
cmb.grAlphaCombineExt = (GRCOLORCOMBINEEXT)grAlphaCombineExt;
cmb.grTexColorCombineExt = (GRTEXCOLORCOMBINEEXT)grTexColorCombineExt;
cmb.grTexAlphaCombineExt = (GRTEXCOLORCOMBINEEXT)grTexAlphaCombineExt;
cmb.grConstantColorValueExt = (GRCONSTANTCOLORVALUEEXT)grConstantColorValueExt;
if (cmb.grColorCombineExt && cmb.grAlphaCombineExt &&
cmb.grTexColorCombineExt && cmb.grTexAlphaCombineExt)
{
cmb.combine_ext = TRUE; cmb.combine_ext = TRUE;
WriteTrace(TraceGlide64, TraceDebug, "initialized."); WriteTrace(TraceGlide64, TraceDebug, "initialized.");
}
else
{
cmb.combine_ext = FALSE;
}
cmb.dc0_lodbias = cmb.dc1_lodbias = 31; cmb.dc0_lodbias = cmb.dc1_lodbias = 31;
cmb.dc0_detailscale = cmb.dc1_detailscale = 7; cmb.dc0_detailscale = cmb.dc1_detailscale = 7;
cmb.lodbias0 = cmb.lodbias1 = 1.0f; cmb.lodbias0 = cmb.lodbias1 = 1.0f;

View File

@ -69,11 +69,6 @@ typedef struct
int t1c_ext_c_invert, t1c_ext_d_invert; int t1c_ext_c_invert, t1c_ext_d_invert;
uint32_t t1a_ext_a, t1a_ext_a_mode, t1a_ext_b, t1a_ext_b_mode, t1a_ext_c, t1a_ext_d; uint32_t t1a_ext_a, t1a_ext_a_mode, t1a_ext_b, t1a_ext_b_mode, t1a_ext_c, t1a_ext_d;
int t1a_ext_c_invert, t1a_ext_d_invert; int t1a_ext_c_invert, t1a_ext_d_invert;
GRCOLORCOMBINEEXT grColorCombineExt;
GRCOLORCOMBINEEXT grAlphaCombineExt;
GRTEXCOLORCOMBINEEXT grTexColorCombineExt;
GRTEXCOLORCOMBINEEXT grTexAlphaCombineExt;
GRCONSTANTCOLORVALUEEXT grConstantColorValueExt;
uint32_t tex_ccolor; uint32_t tex_ccolor;
int combine_ext; int combine_ext;
uint8_t cmb_ext_use; uint8_t cmb_ext_use;
@ -83,13 +78,13 @@ typedef struct
extern COMBINE cmb; extern COMBINE cmb;
void Combine (); void Combine();
void CombineBlender (); void CombineBlender();
void CountCombine (); void CountCombine();
void InitCombine (); void InitCombine();
void ColorCombinerToExtension (); void ColorCombinerToExtension();
void AlphaCombinerToExtension (); void AlphaCombinerToExtension();
void TexColorCombinerToExtension (GrChipID_t tmu); void TexColorCombinerToExtension(GrChipID_t tmu);
void TexAlphaCombinerToExtension (GrChipID_t tmu); void TexAlphaCombinerToExtension(GrChipID_t tmu);
#endif //COMBINE _H #endif //COMBINE _H

View File

@ -25,7 +25,6 @@
#include "Settings.h" #include "Settings.h"
#if defined __VISUALC__ #if defined __VISUALC__
typedef unsigned char boolean;
#define GLIDE64_TRY __try #define GLIDE64_TRY __try
#define GLIDE64_CATCH __except (EXCEPTION_EXECUTE_HANDLER) #define GLIDE64_CATCH __except (EXCEPTION_EXECUTE_HANDLER)
#else #else
@ -164,44 +163,12 @@ extern "C" {
extern GFX_INFO gfx; extern GFX_INFO gfx;
extern bool no_dlist; extern bool no_dlist;
typedef void (FX_CALL *GRCOLORCOMBINEEXT) (GrCCUColor_t a, enum
GrCombineMode_t a_mode, {
GrCCUColor_t b, GFX_STIPPLE_DISABLE = 0x0,
GrCombineMode_t b_mode, GFX_STIPPLE_PATTERN = 0x1,
GrCCUColor_t c, GFX_STIPPLE_ROTATE = 0x2,
FxBool c_invert, };
GrCCUColor_t d,
FxBool d_invert,
FxU32 shift,
FxBool invert);
typedef void (FX_CALL *GRTEXCOLORCOMBINEEXT) (GrChipID_t tmu,
GrTCCUColor_t a,
GrCombineMode_t a_mode,
GrTCCUColor_t b,
GrCombineMode_t b_mode,
GrTCCUColor_t c,
FxBool c_invert,
GrTCCUColor_t d,
FxBool d_invert,
FxU32 shift,
FxBool invert);
typedef void (FX_CALL *GRCONSTANTCOLORVALUEEXT)
(GrChipID_t tmu,
GrColor_t value);
typedef void (FX_CALL *GRSTIPPLE)(FxI32 mode);
typedef int(*GETTEXADDR)(int tmu, int texsize);
extern GETTEXADDR GetTexAddr;
#ifndef GR_STIPPLE_DISABLE
#define GR_STIPPLE_DISABLE 0x0
#define GR_STIPPLE_PATTERN 0x1
#define GR_STIPPLE_ROTATE 0x2
#endif
/****************************************************************** /******************************************************************
Function: CaptureScreen Function: CaptureScreen
@ -468,5 +435,5 @@ extern "C" {
EXPORT void CALL PluginLoaded(void); EXPORT void CALL PluginLoaded(void);
#if defined(__cplusplus) #if defined(__cplusplus)
} }
#endif #endif

View File

@ -222,7 +222,6 @@ int GetTexAddrNonUMA(int tmu, int texsize)
voodoo.tmem_ptr[tmu] += texsize; voodoo.tmem_ptr[tmu] += texsize;
return addr; return addr;
} }
GETTEXADDR GetTexAddr = GetTexAddrNonUMA;
// guLoadTextures - used to load the cursor and font textures // guLoadTextures - used to load the cursor and font textures
void guLoadTextures() void guLoadTextures()
@ -265,14 +264,11 @@ void guLoadTextures()
if ((nbTextureUnits > 2 ? 2 : 1) > 1) if ((nbTextureUnits > 2 ? 2 : 1) > 1)
{ {
rdp.texbufs[1].tmu = GR_TMU1; rdp.texbufs[1].tmu = GR_TMU1;
rdp.texbufs[1].begin = voodoo.tex_UMA ? rdp.texbufs[0].end : voodoo.tex_min_addr[GR_TMU1]; rdp.texbufs[1].begin = rdp.texbufs[0].end;
rdp.texbufs[1].end = rdp.texbufs[1].begin + tbuf_size; rdp.texbufs[1].end = rdp.texbufs[1].begin + tbuf_size;
rdp.texbufs[1].count = 0; rdp.texbufs[1].count = 0;
rdp.texbufs[1].clear_allowed = TRUE; rdp.texbufs[1].clear_allowed = TRUE;
if (voodoo.tex_UMA)
offset_font += tbuf_size; offset_font += tbuf_size;
else
offset_texbuf1 = tbuf_size;
} }
#include "font.h" #include "font.h"
@ -479,11 +475,8 @@ int InitGfx()
unsigned int SST_type = GR_SSTTYPE_Voodoo5; unsigned int SST_type = GR_SSTTYPE_Voodoo5;
// 2Mb Texture boundary // 2Mb Texture boundary
voodoo.has_2mb_tex_boundary = (SST_type < GR_SSTTYPE_Banshee) && !evoodoo; voodoo.has_2mb_tex_boundary = (SST_type < GR_SSTTYPE_Banshee) && !evoodoo;
// use UMA if available
voodoo.tex_UMA = FALSE;
// we get better texture cache hits with UMA on // we get better texture cache hits with UMA on
grEnable(GR_TEXTURE_UMA_EXT); grEnable(GR_TEXTURE_UMA_EXT);
voodoo.tex_UMA = TRUE;
WriteTrace(TraceGlide64, TraceDebug, "Using TEXUMA extension"); WriteTrace(TraceGlide64, TraceDebug, "Using TEXUMA extension");
ChangeSize(); ChangeSize();
@ -507,20 +500,8 @@ int InitGfx()
grGet(GR_MAX_TEXTURE_SIZE, 4, (FxI32*)&voodoo.max_tex_size); grGet(GR_MAX_TEXTURE_SIZE, 4, (FxI32*)&voodoo.max_tex_size);
voodoo.sup_large_tex = (voodoo.max_tex_size > 256 && !g_settings->hacks(CSettings::hack_PPL)); voodoo.sup_large_tex = (voodoo.max_tex_size > 256 && !g_settings->hacks(CSettings::hack_PPL));
if (voodoo.tex_UMA)
{
GetTexAddr = GetTexAddrUMA;
voodoo.tex_min_addr[0] = voodoo.tex_min_addr[1] = grTexMinAddress(GR_TMU0); voodoo.tex_min_addr[0] = voodoo.tex_min_addr[1] = grTexMinAddress(GR_TMU0);
voodoo.tex_max_addr[0] = voodoo.tex_max_addr[1] = grTexMaxAddress(GR_TMU0); voodoo.tex_max_addr[0] = voodoo.tex_max_addr[1] = grTexMaxAddress(GR_TMU0);
}
else
{
GetTexAddr = GetTexAddrNonUMA;
voodoo.tex_min_addr[0] = grTexMinAddress(GR_TMU0);
voodoo.tex_min_addr[1] = grTexMinAddress(GR_TMU1);
voodoo.tex_max_addr[0] = grTexMaxAddress(GR_TMU0);
voodoo.tex_max_addr[1] = grTexMaxAddress(GR_TMU1);
}
// Is mirroring allowed? // Is mirroring allowed?
if (!g_settings->hacks(CSettings::hack_Zelda)) //zelda's trees suffer from hardware mirroring if (!g_settings->hacks(CSettings::hack_Zelda)) //zelda's trees suffer from hardware mirroring

View File

@ -84,7 +84,6 @@ void AddToList(NODE **list, uint32_t crc, uintptr_t data, int tmu, int number)
node->pNext = *list; node->pNext = *list;
*list = node; *list = node;
rdp.n_cached[tmu] ++; rdp.n_cached[tmu] ++;
if (voodoo.tex_UMA)
rdp.n_cached[tmu ^ 1] = rdp.n_cached[tmu]; rdp.n_cached[tmu ^ 1] = rdp.n_cached[tmu];
} }
@ -113,7 +112,7 @@ void ClearCache()
{ {
voodoo.tmem_ptr[0] = offset_textures; voodoo.tmem_ptr[0] = offset_textures;
rdp.n_cached[0] = 0; rdp.n_cached[0] = 0;
voodoo.tmem_ptr[1] = voodoo.tex_UMA ? offset_textures : offset_texbuf1; voodoo.tmem_ptr[1] = offset_textures;
rdp.n_cached[1] = 0; rdp.n_cached[1] = 0;
for (int i = 0; i < 65536; i++) for (int i = 0; i < 65536; i++)
@ -453,14 +452,11 @@ void GetTexInfo(int id, int tile)
{ {
WriteTrace(TraceRDP, TraceDebug, " | | | |- Texture found in cache (tmu=%d).", node->tmu); WriteTrace(TraceRDP, TraceDebug, " | | | |- Texture found in cache (tmu=%d).", node->tmu);
tex_found[id][node->tmu] = node->number; tex_found[id][node->tmu] = node->number;
if (voodoo.tex_UMA)
{
tex_found[id][node->tmu ^ 1] = node->number; tex_found[id][node->tmu ^ 1] = node->number;
return; return;
} }
} }
} }
}
node = node->pNext; node = node->pNext;
} }
@ -473,16 +469,7 @@ void GetTexInfo(int id, int tile)
int ChooseBestTmu(int tmu1, int tmu2) int ChooseBestTmu(int tmu1, int tmu2)
{ {
if (!GfxInitDone) return tmu1; if (!GfxInitDone) return tmu1;
if (voodoo.tex_UMA) return 0; return 0;
if (tmu1 >= (nbTextureUnits > 2 ? 2 : 1)) return tmu2;
if (tmu2 >= (nbTextureUnits > 2 ? 2 : 1)) return tmu1;
if (voodoo.tex_max_addr[tmu1] - voodoo.tmem_ptr[tmu1] >
voodoo.tex_max_addr[tmu2] - voodoo.tmem_ptr[tmu2])
return tmu1;
else
return tmu2;
} }
//**************************************************************** //****************************************************************
@ -690,14 +677,8 @@ void TexCache()
ColorCombinerToExtension(); ColorCombinerToExtension();
if (!(cmb.cmb_ext_use & COMBINE_EXT_ALPHA)) if (!(cmb.cmb_ext_use & COMBINE_EXT_ALPHA))
AlphaCombinerToExtension(); AlphaCombinerToExtension();
cmb.grColorCombineExt(cmb.c_ext_a, cmb.c_ext_a_mode, grColorCombineExt(cmb.c_ext_a, cmb.c_ext_a_mode, cmb.c_ext_b, cmb.c_ext_b_mode, cmb.c_ext_c, cmb.c_ext_c_invert, cmb.c_ext_d, cmb.c_ext_d_invert, 0, 0);
cmb.c_ext_b, cmb.c_ext_b_mode, grAlphaCombineExt(cmb.a_ext_a, cmb.a_ext_a_mode, cmb.a_ext_b, cmb.a_ext_b_mode, cmb.a_ext_c, cmb.a_ext_c_invert, cmb.a_ext_d, cmb.a_ext_d_invert, 0, 0);
cmb.c_ext_c, cmb.c_ext_c_invert,
cmb.c_ext_d, cmb.c_ext_d_invert, 0, 0);
cmb.grAlphaCombineExt(cmb.a_ext_a, cmb.a_ext_a_mode,
cmb.a_ext_b, cmb.a_ext_b_mode,
cmb.a_ext_c, cmb.a_ext_c_invert,
cmb.a_ext_d, cmb.a_ext_d_invert, 0, 0);
} }
else else
{ {
@ -719,21 +700,17 @@ void TexCache()
TexColorCombinerToExtension(GR_TMU1); TexColorCombinerToExtension(GR_TMU1);
if (!(cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_ALPHA)) if (!(cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_ALPHA))
TexAlphaCombinerToExtension(GR_TMU1); TexAlphaCombinerToExtension(GR_TMU1);
cmb.grTexColorCombineExt(tmu_1, cmb.t1c_ext_a, cmb.t1c_ext_a_mode, grTexColorCombineExt(tmu_1, cmb.t1c_ext_a, cmb.t1c_ext_a_mode, cmb.t1c_ext_b, cmb.t1c_ext_b_mode, cmb.t1c_ext_c, cmb.t1c_ext_c_invert, cmb.t1c_ext_d, cmb.t1c_ext_d_invert, 0, 0);
cmb.t1c_ext_b, cmb.t1c_ext_b_mode, grTexAlphaCombineExt(tmu_1, cmb.t1a_ext_a, cmb.t1a_ext_a_mode, cmb.t1a_ext_b, cmb.t1a_ext_b_mode, cmb.t1a_ext_c, cmb.t1a_ext_c_invert, cmb.t1a_ext_d, cmb.t1a_ext_d_invert, 0, 0);
cmb.t1c_ext_c, cmb.t1c_ext_c_invert, grConstantColorValueExt(tmu_1, cmb.tex_ccolor);
cmb.t1c_ext_d, cmb.t1c_ext_d_invert, 0, 0);
cmb.grTexAlphaCombineExt(tmu_1, cmb.t1a_ext_a, cmb.t1a_ext_a_mode,
cmb.t1a_ext_b, cmb.t1a_ext_b_mode,
cmb.t1a_ext_c, cmb.t1a_ext_c_invert,
cmb.t1a_ext_d, cmb.t1a_ext_d_invert, 0, 0);
cmb.grConstantColorValueExt(tmu_1, cmb.tex_ccolor);
} }
else else
{ {
grTexCombine(tmu_1, cmb.tmu1_func, cmb.tmu1_fac, cmb.tmu1_a_func, cmb.tmu1_a_fac, cmb.tmu1_invert, cmb.tmu1_a_invert); grTexCombine(tmu_1, cmb.tmu1_func, cmb.tmu1_fac, cmb.tmu1_a_func, cmb.tmu1_a_fac, cmb.tmu1_invert, cmb.tmu1_a_invert);
if (cmb.combine_ext) if (cmb.combine_ext)
cmb.grConstantColorValueExt(tmu_1, 0); {
grConstantColorValueExt(tmu_1, 0);
}
} }
grTexDetailControl(tmu_1, cmb.dc1_lodbias, cmb.dc1_detailscale, cmb.dc1_detailmax); grTexDetailControl(tmu_1, cmb.dc1_lodbias, cmb.dc1_detailscale, cmb.dc1_detailmax);
grTexLodBiasValue(tmu_1, cmb.lodbias1); grTexLodBiasValue(tmu_1, cmb.lodbias1);
@ -744,24 +721,24 @@ void TexCache()
{ {
WriteTrace(TraceRDP, TraceDebug, " | | | |- combiner extension tmu0"); WriteTrace(TraceRDP, TraceDebug, " | | | |- combiner extension tmu0");
if (!(cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)) if (!(cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR))
{
TexColorCombinerToExtension(GR_TMU0); TexColorCombinerToExtension(GR_TMU0);
}
if (!(cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_ALPHA)) if (!(cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_ALPHA))
{
TexAlphaCombinerToExtension(GR_TMU0); TexAlphaCombinerToExtension(GR_TMU0);
cmb.grTexColorCombineExt(tmu_0, cmb.t0c_ext_a, cmb.t0c_ext_a_mode, }
cmb.t0c_ext_b, cmb.t0c_ext_b_mode, grTexColorCombineExt(tmu_0, cmb.t0c_ext_a, cmb.t0c_ext_a_mode, cmb.t0c_ext_b, cmb.t0c_ext_b_mode, cmb.t0c_ext_c, cmb.t0c_ext_c_invert, cmb.t0c_ext_d, cmb.t0c_ext_d_invert, 0, 0);
cmb.t0c_ext_c, cmb.t0c_ext_c_invert, grTexAlphaCombineExt(tmu_0, cmb.t0a_ext_a, cmb.t0a_ext_a_mode, cmb.t0a_ext_b, cmb.t0a_ext_b_mode, cmb.t0a_ext_c, cmb.t0a_ext_c_invert, cmb.t0a_ext_d, cmb.t0a_ext_d_invert, 0, 0);
cmb.t0c_ext_d, cmb.t0c_ext_d_invert, 0, 0); grConstantColorValueExt(tmu_0, cmb.tex_ccolor);
cmb.grTexAlphaCombineExt(tmu_0, cmb.t0a_ext_a, cmb.t0a_ext_a_mode,
cmb.t0a_ext_b, cmb.t0a_ext_b_mode,
cmb.t0a_ext_c, cmb.t0a_ext_c_invert,
cmb.t0a_ext_d, cmb.t0a_ext_d_invert, 0, 0);
cmb.grConstantColorValueExt(tmu_0, cmb.tex_ccolor);
} }
else else
{ {
grTexCombine(tmu_0, cmb.tmu0_func, cmb.tmu0_fac, cmb.tmu0_a_func, cmb.tmu0_a_fac, cmb.tmu0_invert, cmb.tmu0_a_invert); grTexCombine(tmu_0, cmb.tmu0_func, cmb.tmu0_fac, cmb.tmu0_a_func, cmb.tmu0_a_fac, cmb.tmu0_invert, cmb.tmu0_a_invert);
if (cmb.combine_ext) if (cmb.combine_ext)
cmb.grConstantColorValueExt(tmu_0, 0); {
grConstantColorValueExt(tmu_0, 0);
}
} }
grTexDetailControl(tmu_0, cmb.dc0_lodbias, cmb.dc0_detailscale, cmb.dc0_detailmax); grTexDetailControl(tmu_0, cmb.dc0_lodbias, cmb.dc0_detailscale, cmb.dc0_detailmax);
grTexLodBiasValue(tmu_0, cmb.lodbias0); grTexLodBiasValue(tmu_0, cmb.lodbias0);
@ -785,7 +762,7 @@ void TexCache()
WriteTrace(TraceRDP, TraceDebug, " | |- T0 found in cache."); WriteTrace(TraceRDP, TraceDebug, " | |- T0 found in cache.");
if (GfxInitDone) if (GfxInitDone)
{ {
CACHE_LUT *cache = voodoo.tex_UMA ? &rdp.cache[0][tex_found[0][0]] : &rdp.cache[tmu_0][tex_found[0][tmu_0]]; CACHE_LUT *cache = &rdp.cache[0][tex_found[0][0]];
rdp.cur_cache_n[0] = tex_found[0][tmu_0]; rdp.cur_cache_n[0] = tex_found[0][tmu_0];
rdp.cur_cache[0] = cache; rdp.cur_cache[0] = cache;
rdp.cur_cache[0]->last_used = frame_count; rdp.cur_cache[0]->last_used = frame_count;
@ -816,7 +793,7 @@ void TexCache()
WriteTrace(TraceRDP, TraceDebug, " | |- T1 found in cache."); WriteTrace(TraceRDP, TraceDebug, " | |- T1 found in cache.");
if (GfxInitDone) if (GfxInitDone)
{ {
CACHE_LUT *cache = voodoo.tex_UMA ? &rdp.cache[0][tex_found[1][0]] : &rdp.cache[tmu_1][tex_found[1][tmu_1]]; CACHE_LUT *cache = &rdp.cache[0][tex_found[1][0]];
rdp.cur_cache_n[1] = tex_found[1][tmu_1]; rdp.cur_cache_n[1] = tex_found[1][tmu_1];
rdp.cur_cache[1] = cache; rdp.cur_cache[1] = cache;
rdp.cur_cache[1]->last_used = frame_count; rdp.cur_cache[1]->last_used = frame_count;
@ -971,7 +948,7 @@ void LoadTex(int id, int tmu)
} }
// Get this cache object // Get this cache object
cache = voodoo.tex_UMA ? &rdp.cache[0][rdp.n_cached[0]] : &rdp.cache[tmu][rdp.n_cached[tmu]]; cache = &rdp.cache[0][rdp.n_cached[0]];
memset(cache, 0, sizeof(*cache)); memset(cache, 0, sizeof(*cache));
rdp.cur_cache[id] = cache; rdp.cur_cache[id] = cache;
rdp.cur_cache_n[id] = rdp.n_cached[tmu]; rdp.cur_cache_n[id] = rdp.n_cached[tmu];
@ -1701,17 +1678,11 @@ void LoadTex(int id, int tmu)
// DON'T CONTINUE (already done) // DON'T CONTINUE (already done)
} }
uint32_t tex_addr = GetTexAddr(tmu, texture_size); uint32_t tex_addr = voodoo.tex_min_addr[0] + voodoo.tmem_ptr[0];
grTexDownloadMipMap(tmu, voodoo.tmem_ptr[0] += texture_size;
tex_addr, voodoo.tmem_ptr[1] = voodoo.tmem_ptr[0];
GR_MIPMAPLEVELMASK_BOTH, grTexDownloadMipMap(tmu, tex_addr, GR_MIPMAPLEVELMASK_BOTH, t_info);
t_info); grTexSource(tmu, tex_addr, GR_MIPMAPLEVELMASK_BOTH, t_info);
grTexSource(tmu,
tex_addr,
GR_MIPMAPLEVELMASK_BOTH,
t_info);
} }
WriteTrace(TraceRDP, TraceDebug, " | | +- LoadTex end"); WriteTrace(TraceRDP, TraceDebug, " | | +- LoadTex end");
} }

View File

@ -158,7 +158,6 @@ typedef struct
int sup_mirroring; int sup_mirroring;
int sup_32bit_tex; int sup_32bit_tex;
int has_2mb_tex_boundary; int has_2mb_tex_boundary;
int tex_UMA;
int gamma_correction; int gamma_correction;
FxI32 gamma_table_size; FxI32 gamma_table_size;
FxU32 *gamma_table_r; FxU32 *gamma_table_r;