[Video] Make RDP in to a class instead of struct
This commit is contained in:
parent
5391965400
commit
5d9ca779ac
|
@ -5269,7 +5269,7 @@ static void cc_t0_inter_noise_using_prim()
|
||||||
|
|
||||||
MOD_0(TMOD_TEX_INTER_NOISE_USING_COL);
|
MOD_0(TMOD_TEX_INTER_NOISE_USING_COL);
|
||||||
MOD_0_COL(rdp.prim_color);
|
MOD_0_COL(rdp.prim_color);
|
||||||
rdp.noise = RDP::noise_texture;
|
rdp.noise = CRDP::noise_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cc_t0_inter_noise_using_env()
|
static void cc_t0_inter_noise_using_env()
|
||||||
|
@ -5282,7 +5282,7 @@ static void cc_t0_inter_noise_using_env()
|
||||||
|
|
||||||
MOD_0(TMOD_TEX_INTER_NOISE_USING_COL);
|
MOD_0(TMOD_TEX_INTER_NOISE_USING_COL);
|
||||||
MOD_0_COL(rdp.env_color);
|
MOD_0_COL(rdp.env_color);
|
||||||
rdp.noise = RDP::noise_texture;
|
rdp.noise = CRDP::noise_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cc_t0_sub_env_mul_enva_add_env()
|
static void cc_t0_sub_env_mul_enva_add_env()
|
||||||
|
@ -15489,7 +15489,7 @@ void Combine()
|
||||||
lod_frac = 10;
|
lod_frac = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
rdp.noise = RDP::noise_none;
|
rdp.noise = CRDP::noise_none;
|
||||||
|
|
||||||
uint32_t found = TRUE;
|
uint32_t found = TRUE;
|
||||||
|
|
||||||
|
|
|
@ -884,11 +884,9 @@ void CALL DllConfig(void * hParent)
|
||||||
|
|
||||||
if (g_romopen)
|
if (g_romopen)
|
||||||
{
|
{
|
||||||
if (evoodoo)// && fullscreen && !ev_fullscreen)
|
ReleaseGfx();
|
||||||
{
|
rdp.free();
|
||||||
ReleaseGfx();
|
rdp.init();
|
||||||
rdp_reset();
|
|
||||||
}
|
|
||||||
if (g_ghq_use)
|
if (g_ghq_use)
|
||||||
{
|
{
|
||||||
ext_ghq_shutdown();
|
ext_ghq_shutdown();
|
||||||
|
@ -915,11 +913,7 @@ void CloseConfig()
|
||||||
{
|
{
|
||||||
ZLUT_init();
|
ZLUT_init();
|
||||||
}
|
}
|
||||||
// re-init evoodoo graphics to resize window
|
InitGfx();
|
||||||
if (evoodoo)// && !ev_fullscreen)
|
|
||||||
InitGfx();
|
|
||||||
else
|
|
||||||
rdp_reset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ extern "C" {
|
||||||
int NormalMemory; /* a normal uint8_t array */
|
int NormalMemory; /* a normal uint8_t array */
|
||||||
int MemoryBswaped; /* a normal uint8_t array where the memory has been pre
|
int MemoryBswaped; /* a normal uint8_t array where the memory has been pre
|
||||||
bswap on a dword (32 bits) boundry */
|
bswap on a dword (32 bits) boundry */
|
||||||
} PLUGIN_INFO;
|
} PLUGIN_INFO;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -68,7 +68,7 @@ uint32_t region = 0;
|
||||||
|
|
||||||
unsigned int BMASK = 0x7FFFFF;
|
unsigned int BMASK = 0x7FFFFF;
|
||||||
// Reality display processor structure
|
// Reality display processor structure
|
||||||
RDP rdp;
|
CRDP rdp;
|
||||||
|
|
||||||
CSettings * g_settings = NULL;
|
CSettings * g_settings = NULL;
|
||||||
|
|
||||||
|
@ -461,8 +461,6 @@ int InitGfx()
|
||||||
|
|
||||||
WriteTrace(TraceGlide64, TraceDebug, "-");
|
WriteTrace(TraceGlide64, TraceDebug, "-");
|
||||||
|
|
||||||
rdp_reset();
|
|
||||||
|
|
||||||
// Initialize Glide
|
// Initialize Glide
|
||||||
grGlideInit();
|
grGlideInit();
|
||||||
|
|
||||||
|
@ -524,6 +522,8 @@ int InitGfx()
|
||||||
grGlideShutdown();
|
grGlideShutdown();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
rdp.init();
|
||||||
|
util_init();
|
||||||
|
|
||||||
GfxInitDone = TRUE;
|
GfxInitDone = TRUE;
|
||||||
to_fullscreen = FALSE;
|
to_fullscreen = FALSE;
|
||||||
|
@ -707,6 +707,8 @@ void ReleaseGfx()
|
||||||
{
|
{
|
||||||
WriteTrace(TraceGlide64, TraceDebug, "-");
|
WriteTrace(TraceGlide64, TraceDebug, "-");
|
||||||
|
|
||||||
|
rdp.free();
|
||||||
|
|
||||||
// Restore gamma settings
|
// Restore gamma settings
|
||||||
if (voodoo.gamma_correction)
|
if (voodoo.gamma_correction)
|
||||||
{
|
{
|
||||||
|
@ -987,7 +989,10 @@ int CALL InitiateGFX(GFX_INFO Gfx_Info)
|
||||||
|
|
||||||
gfx = Gfx_Info;
|
gfx = Gfx_Info;
|
||||||
|
|
||||||
util_init();
|
if (!rdp.init())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
math_init();
|
math_init();
|
||||||
TexCacheInit();
|
TexCacheInit();
|
||||||
CRC_BuildTable();
|
CRC_BuildTable();
|
||||||
|
@ -1062,10 +1067,7 @@ void CALL RomClosed(void)
|
||||||
#endif
|
#endif
|
||||||
rdp.window_changed = TRUE;
|
rdp.window_changed = TRUE;
|
||||||
g_romopen = FALSE;
|
g_romopen = FALSE;
|
||||||
if (evoodoo)
|
ReleaseGfx();
|
||||||
{
|
|
||||||
ReleaseGfx();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CheckDRAMSize()
|
static void CheckDRAMSize()
|
||||||
|
@ -1102,7 +1104,6 @@ void CALL RomOpen(void)
|
||||||
no_dlist = true;
|
no_dlist = true;
|
||||||
g_romopen = TRUE;
|
g_romopen = TRUE;
|
||||||
g_ucode_error_report = TRUE; // allowed to report ucode errors
|
g_ucode_error_report = TRUE; // allowed to report ucode errors
|
||||||
rdp_reset();
|
|
||||||
|
|
||||||
// Get the country code & translate to NTSC(0) or PAL(1)
|
// Get the country code & translate to NTSC(0) or PAL(1)
|
||||||
uint16_t code = ((uint16_t*)gfx.HEADER)[0x1F ^ 1];
|
uint16_t code = ((uint16_t*)gfx.HEADER)[0x1F ^ 1];
|
||||||
|
@ -1147,7 +1148,6 @@ void CALL RomOpen(void)
|
||||||
ClearCache();
|
ClearCache();
|
||||||
|
|
||||||
CheckDRAMSize();
|
CheckDRAMSize();
|
||||||
|
|
||||||
// ** EVOODOO EXTENSIONS **
|
// ** EVOODOO EXTENSIONS **
|
||||||
if (!GfxInitDone)
|
if (!GfxInitDone)
|
||||||
{
|
{
|
||||||
|
@ -1161,8 +1161,7 @@ void CALL RomOpen(void)
|
||||||
else
|
else
|
||||||
evoodoo = 0;
|
evoodoo = 0;
|
||||||
|
|
||||||
if (evoodoo)
|
InitGfx();
|
||||||
InitGfx();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
|
|
|
@ -409,7 +409,7 @@ void GetTexInfo(int id, int tile)
|
||||||
|
|
||||||
CACHE_LUT *cache;
|
CACHE_LUT *cache;
|
||||||
|
|
||||||
if (rdp.noise == RDP::noise_texture)
|
if (rdp.noise == CRDP::noise_texture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t mod, modcolor, modcolor1, modcolor2, modfactor;
|
uint32_t mod, modcolor, modcolor1, modcolor2, modfactor;
|
||||||
|
|
|
@ -281,7 +281,7 @@ static void mod_tex_sub_col_mul_fac_add_tex(uint16_t *dst, int size, uint32_t co
|
||||||
cg = (color >> 8) & 0xF;
|
cg = (color >> 8) & 0xF;
|
||||||
cb = (color >> 4) & 0xF;
|
cb = (color >> 4) & 0xF;
|
||||||
|
|
||||||
for (int i = 0; i<size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
col = *dst;
|
col = *dst;
|
||||||
a = col & 0xF000;
|
a = col & 0xF000;
|
||||||
|
@ -409,7 +409,7 @@ static void mod_tex_sub_col_mul_fac(uint16_t *dst, int size, uint32_t color, uin
|
||||||
cg = (color >> 8) & 0xF;
|
cg = (color >> 8) & 0xF;
|
||||||
cb = (color >> 4) & 0xF;
|
cb = (color >> 4) & 0xF;
|
||||||
|
|
||||||
for (int i = 0; i<size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
col = *dst;
|
col = *dst;
|
||||||
a = (uint8_t)((col >> 12) & 0xF);
|
a = (uint8_t)((col >> 12) & 0xF);
|
||||||
|
|
|
@ -1505,14 +1505,14 @@ static void render_tri(uint16_t linew, int old_interpolate)
|
||||||
}
|
}
|
||||||
|
|
||||||
ConvertCoordsConvert(rdp.vtxbuf, n);
|
ConvertCoordsConvert(rdp.vtxbuf, n);
|
||||||
if (rdp.fog_mode == RDP::fog_enabled)
|
if (rdp.fog_mode == CRDP::fog_enabled)
|
||||||
{
|
{
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
rdp.vtxbuf[i].f = 1.0f / maxval(4.0f, rdp.vtxbuf[i].f);
|
rdp.vtxbuf[i].f = 1.0f / maxval(4.0f, rdp.vtxbuf[i].f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (rdp.fog_mode == RDP::fog_blend)
|
else if (rdp.fog_mode == CRDP::fog_blend)
|
||||||
{
|
{
|
||||||
float fog = 1.0f / maxval(1, rdp.fog_color & 0xFF);
|
float fog = 1.0f / maxval(1, rdp.fog_color & 0xFF);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
|
@ -1520,7 +1520,7 @@ static void render_tri(uint16_t linew, int old_interpolate)
|
||||||
rdp.vtxbuf[i].f = fog;
|
rdp.vtxbuf[i].f = fog;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (rdp.fog_mode == RDP::fog_blend_inverse)
|
else if (rdp.fog_mode == CRDP::fog_blend_inverse)
|
||||||
{
|
{
|
||||||
float fog = 1.0f / maxval(1, (~rdp.fog_color) & 0xFF);
|
float fog = 1.0f / maxval(1, (~rdp.fog_color) & 0xFF);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
|
@ -1735,7 +1735,7 @@ void update()
|
||||||
rdp.tex_ctr = 0;
|
rdp.tex_ctr = 0;
|
||||||
|
|
||||||
TexCache();
|
TexCache();
|
||||||
if (rdp.noise == RDP::noise_none)
|
if (rdp.noise == CRDP::noise_none)
|
||||||
rdp.update ^= UPDATE_TEXTURE;
|
rdp.update ^= UPDATE_TEXTURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1888,13 +1888,13 @@ void update()
|
||||||
{
|
{
|
||||||
grFogColorValue(rdp.fog_color);
|
grFogColorValue(rdp.fog_color);
|
||||||
grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
|
grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
|
||||||
rdp.fog_mode = RDP::fog_enabled;
|
rdp.fog_mode = CRDP::fog_enabled;
|
||||||
WriteTrace(TraceRDP, TraceDebug, "fog enabled ");
|
WriteTrace(TraceRDP, TraceDebug, "fog enabled ");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WriteTrace(TraceRDP, TraceDebug, "fog disabled in blender");
|
WriteTrace(TraceRDP, TraceDebug, "fog disabled in blender");
|
||||||
rdp.fog_mode = RDP::fog_disabled;
|
rdp.fog_mode = CRDP::fog_disabled;
|
||||||
grFogMode(GR_FOG_DISABLE);
|
grFogMode(GR_FOG_DISABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1902,20 +1902,20 @@ void update()
|
||||||
{
|
{
|
||||||
grFogColorValue(rdp.fog_color);
|
grFogColorValue(rdp.fog_color);
|
||||||
grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
|
grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
|
||||||
rdp.fog_mode = RDP::fog_blend;
|
rdp.fog_mode = CRDP::fog_blend;
|
||||||
WriteTrace(TraceRDP, TraceDebug, "fog blend ");
|
WriteTrace(TraceRDP, TraceDebug, "fog blend ");
|
||||||
}
|
}
|
||||||
else if (blender == 0x04d1)
|
else if (blender == 0x04d1)
|
||||||
{
|
{
|
||||||
grFogColorValue(rdp.fog_color);
|
grFogColorValue(rdp.fog_color);
|
||||||
grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
|
grFogMode(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);
|
||||||
rdp.fog_mode = RDP::fog_blend_inverse;
|
rdp.fog_mode = CRDP::fog_blend_inverse;
|
||||||
WriteTrace(TraceRDP, TraceDebug, "fog blend ");
|
WriteTrace(TraceRDP, TraceDebug, "fog blend ");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WriteTrace(TraceRDP, TraceDebug, "fog disabled");
|
WriteTrace(TraceRDP, TraceDebug, "fog disabled");
|
||||||
rdp.fog_mode = RDP::fog_disabled;
|
rdp.fog_mode = CRDP::fog_disabled;
|
||||||
grFogMode(GR_FOG_DISABLE);
|
grFogMode(GR_FOG_DISABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,19 +148,313 @@ void microcheck();
|
||||||
static int reset = 0;
|
static int reset = 0;
|
||||||
static CSettings::ucode_t g_old_ucode = CSettings::uCode_Unsupported;
|
static CSettings::ucode_t g_old_ucode = CSettings::uCode_Unsupported;
|
||||||
|
|
||||||
void RDP::Reset()
|
CRDP::CRDP() :
|
||||||
|
vtx1(NULL),
|
||||||
|
vtx2(NULL)
|
||||||
{
|
{
|
||||||
memset(this, 0, sizeof(RDP_Base));
|
free();
|
||||||
|
}
|
||||||
|
|
||||||
|
CRDP::~CRDP()
|
||||||
|
{
|
||||||
|
free();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CRDP::init()
|
||||||
|
{
|
||||||
|
if (vtx1 != NULL)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
vtx1 = new VERTEX[256];
|
||||||
|
if (vtx1 == NULL)
|
||||||
|
{
|
||||||
|
free();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memset(vtx1, 0, sizeof(VERTEX) * 256);
|
||||||
|
vtx2 = new VERTEX[256];
|
||||||
|
if (vtx2 == NULL)
|
||||||
|
{
|
||||||
|
free();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memset(vtx2, 0, sizeof(VERTEX) * 256);
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_TMU; i++)
|
||||||
|
{
|
||||||
|
cache[i] = new CACHE_LUT[MAX_CACHE];
|
||||||
|
if (cache[i] == NULL)
|
||||||
|
{
|
||||||
|
free();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
vtx = new VERTEX[MAX_VTX];
|
||||||
|
if (vtx == NULL)
|
||||||
|
{
|
||||||
|
free();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memset(vtx, 0, sizeof(VERTEX)*MAX_VTX);
|
||||||
// set all vertex numbers
|
// set all vertex numbers
|
||||||
for (int i = 0; i < MAX_VTX; i++)
|
for (int i = 0; i < MAX_VTX; i++)
|
||||||
|
{
|
||||||
vtx[i].number = i;
|
vtx[i].number = i;
|
||||||
|
}
|
||||||
|
|
||||||
scissor_o.ul_x = 0;
|
frame_buffers = new COLOR_IMAGE[NUMTEXBUF + 2];
|
||||||
scissor_o.ul_y = 0;
|
if (frame_buffers == NULL)
|
||||||
scissor_o.lr_x = 320;
|
{
|
||||||
scissor_o.lr_y = 240;
|
free();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
vi_org_reg = *gfx.VI_ORIGIN_REG;
|
void CRDP::free()
|
||||||
|
{
|
||||||
|
if (vtx1)
|
||||||
|
{
|
||||||
|
delete vtx1;
|
||||||
|
vtx1 = NULL;
|
||||||
|
}
|
||||||
|
if (vtx2)
|
||||||
|
{
|
||||||
|
delete vtx2;
|
||||||
|
vtx2 = NULL;
|
||||||
|
}
|
||||||
|
clip = 0;
|
||||||
|
vtxbuf = NULL;
|
||||||
|
vtxbuf2 = NULL;
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_TMU; i++)
|
||||||
|
{
|
||||||
|
if (cache[i] != NULL)
|
||||||
|
{
|
||||||
|
delete cache[i];
|
||||||
|
cache[i] = NULL;
|
||||||
|
}
|
||||||
|
cur_cache[i] = 0;
|
||||||
|
cur_cache_n[i] = 0;
|
||||||
|
}
|
||||||
|
if (vtx != NULL)
|
||||||
|
{
|
||||||
|
delete[] vtx;
|
||||||
|
vtx = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame_buffers != NULL)
|
||||||
|
{
|
||||||
|
delete[] frame_buffers;
|
||||||
|
frame_buffers = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
n_global = 0;
|
||||||
|
vtx_buffer = 0;
|
||||||
|
v0 = 0;
|
||||||
|
vn = 0;
|
||||||
|
memset(RomName, 0, sizeof(RomName));
|
||||||
|
vi_width = 0;
|
||||||
|
vi_height = 0;
|
||||||
|
|
||||||
|
window_changed = 0;
|
||||||
|
|
||||||
|
offset_x = 0;
|
||||||
|
offset_y = 0;
|
||||||
|
offset_x_bak = 0;
|
||||||
|
offset_y_bak = 0;
|
||||||
|
|
||||||
|
scale_x = 0;
|
||||||
|
scale_x_bak = 0;
|
||||||
|
|
||||||
|
scale_y = 0;
|
||||||
|
scale_y_bak = 0;
|
||||||
|
|
||||||
|
memset(view_scale, 0, sizeof(view_scale));
|
||||||
|
memset(view_trans, 0, sizeof(view_trans));
|
||||||
|
clip_min_x = 0;
|
||||||
|
clip_max_x = 0;
|
||||||
|
clip_min_y = 0;
|
||||||
|
clip_max_y = 0;
|
||||||
|
clip_ratio = 0;
|
||||||
|
|
||||||
|
updatescreen = 0;
|
||||||
|
|
||||||
|
tri_n = 0;
|
||||||
|
debug_n = 0;
|
||||||
|
|
||||||
|
memset(pc, 0, sizeof(pc));
|
||||||
|
pc_i = 0;
|
||||||
|
dl_count = 0;
|
||||||
|
LLE = 0;
|
||||||
|
|
||||||
|
memset(segment, 0, sizeof(segment));
|
||||||
|
halt = 0;
|
||||||
|
|
||||||
|
cmd0 = 0;
|
||||||
|
cmd1 = 0;
|
||||||
|
cmd2 = 0;
|
||||||
|
cmd3 = 0;
|
||||||
|
|
||||||
|
memset(&scissor_o, 0, sizeof(scissor_o));
|
||||||
|
memset(&scissor, 0, sizeof(scissor));
|
||||||
|
fog_color = 0;
|
||||||
|
fill_color = 0;
|
||||||
|
prim_color = 0;
|
||||||
|
blend_color = 0;
|
||||||
|
env_color = 0;
|
||||||
|
SCALE = 0;
|
||||||
|
CENTER = 0;
|
||||||
|
prim_lodmin = 0;
|
||||||
|
prim_lodfrac = 0;
|
||||||
|
prim_depth = 0;
|
||||||
|
prim_dz = 0;
|
||||||
|
K4 = 0;
|
||||||
|
K5 = 0;
|
||||||
|
noise = noise_none;
|
||||||
|
|
||||||
|
memset(col, 0, sizeof(col));
|
||||||
|
memset(col_2, 0, sizeof(col_2));
|
||||||
|
memset(coladd, 0, sizeof(coladd));
|
||||||
|
shade_factor = 0;
|
||||||
|
cmb_flags = 0;
|
||||||
|
cmb_flags_2 = 0;
|
||||||
|
|
||||||
|
memset(model, 0, sizeof(model));
|
||||||
|
memset(proj, 0, sizeof(proj));
|
||||||
|
memset(combined, 0, sizeof(combined));
|
||||||
|
memset(dkrproj, 0, sizeof(dkrproj));
|
||||||
|
memset(model_stack, 0, sizeof(model_stack));
|
||||||
|
|
||||||
|
model_i = 0;
|
||||||
|
model_stack_size = 0;
|
||||||
|
cur_tile = 0;
|
||||||
|
mipmap_level = 0;
|
||||||
|
last_tile = 0;
|
||||||
|
last_tile_size = 0;
|
||||||
|
|
||||||
|
t0 = GR_TMU0;
|
||||||
|
t1 = GR_TMU0;
|
||||||
|
best_tex = 0;
|
||||||
|
tex = 0;
|
||||||
|
filter_mode = 0;
|
||||||
|
|
||||||
|
memset(pal_8, 0, sizeof(pal_8));
|
||||||
|
memset(pal_8_crc, 0, sizeof(pal_8_crc));
|
||||||
|
pal_256_crc = 0;
|
||||||
|
tlut_mode = 0;
|
||||||
|
LOD_en = 0;
|
||||||
|
Persp_en = 0;
|
||||||
|
persp_supported = 0;
|
||||||
|
force_wrap = 0;
|
||||||
|
memset(pal_8_rice, 0, sizeof(pal_8_rice));
|
||||||
|
num_lights = 0;
|
||||||
|
memset(light, 0, sizeof(light));
|
||||||
|
memset(light_vector, 0, sizeof(light_vector));
|
||||||
|
memset(lookat, 0, sizeof(lookat));
|
||||||
|
use_lookat = 0;
|
||||||
|
|
||||||
|
cycle1 = 0;
|
||||||
|
cycle2 = 0;
|
||||||
|
cycle_mode = 0;
|
||||||
|
c_a0 = 0;
|
||||||
|
c_b0 = 0;
|
||||||
|
c_c0 = 0;
|
||||||
|
c_d0 = 0;
|
||||||
|
c_Aa0 = 0;
|
||||||
|
c_Ab0 = 0;
|
||||||
|
c_Ac0 = 0;
|
||||||
|
c_Ad0 = 0;
|
||||||
|
c_a1 = 0;
|
||||||
|
c_b1 = 0;
|
||||||
|
c_c1 = 0;
|
||||||
|
c_d1 = 0;
|
||||||
|
c_Aa1 = 0;
|
||||||
|
c_Ab1 = 0;
|
||||||
|
c_Ac1 = 0;
|
||||||
|
c_Ad1 = 0;
|
||||||
|
|
||||||
|
fbl_a0 = 0;
|
||||||
|
fbl_b0 = 0;
|
||||||
|
fbl_c0 = 0;
|
||||||
|
fbl_d0 = 0;
|
||||||
|
fbl_a1 = 0;
|
||||||
|
fbl_b1 = 0;
|
||||||
|
fbl_c1 = 0;
|
||||||
|
fbl_d1 = 0;
|
||||||
|
|
||||||
|
uncombined = 0;
|
||||||
|
update = 0;
|
||||||
|
flags = 0;
|
||||||
|
|
||||||
|
first = 0;
|
||||||
|
|
||||||
|
tex_ctr = 0;
|
||||||
|
|
||||||
|
allow_combine = 0;
|
||||||
|
|
||||||
|
s2dex_tex_loaded = 0;
|
||||||
|
bg_image_height = 0;
|
||||||
|
|
||||||
|
rm = 0;
|
||||||
|
render_mode_changed = 0;
|
||||||
|
geom_mode = 0;
|
||||||
|
|
||||||
|
othermode_h = 0;
|
||||||
|
othermode_l = 0;
|
||||||
|
|
||||||
|
texrecting = 0;
|
||||||
|
|
||||||
|
cimg = 0;
|
||||||
|
ocimg = 0;
|
||||||
|
zimg = 0;
|
||||||
|
tmpzimg = 0;
|
||||||
|
vi_org_reg = 0;
|
||||||
|
memset(maincimg, 0, sizeof(maincimg));
|
||||||
|
last_drawn_ci_addr = 0;
|
||||||
|
main_ci = 0;
|
||||||
|
main_ci_end = 0;
|
||||||
|
main_ci_bg = 0;
|
||||||
|
main_ci_last_tex_addr = 0;
|
||||||
|
zimg_end = 0;
|
||||||
|
last_bg = 0;
|
||||||
|
ci_width = 0;
|
||||||
|
ci_height = 0;
|
||||||
|
ci_size = 0;
|
||||||
|
ci_end = 0;
|
||||||
|
zi_width = 0;
|
||||||
|
zi_lrx = 0;
|
||||||
|
zi_lry = 0;
|
||||||
|
ci_count = 0;
|
||||||
|
num_of_ci = 0;
|
||||||
|
main_ci_index = 0;
|
||||||
|
copy_ci_index = 0;
|
||||||
|
copy_zi_index = 0;
|
||||||
|
swap_ci_index = 0;
|
||||||
|
black_ci_index = 0;
|
||||||
|
motionblur = 0;
|
||||||
|
fb_drawn = 0;
|
||||||
|
fb_drawn_front = 0;
|
||||||
|
read_previous_ci = 0;
|
||||||
|
read_whole_frame = 0;
|
||||||
|
ci_status = ci_main;
|
||||||
|
cur_image = NULL;
|
||||||
|
tbuff_tex = NULL;
|
||||||
|
memset(aTBuffTex, 0, sizeof(aTBuffTex));
|
||||||
|
cur_tex_buf = 0;
|
||||||
|
acc_tex_buf = 0;
|
||||||
|
skip_drawing = 0;
|
||||||
|
fog_multiplier = 0;
|
||||||
|
fog_offset = 0;
|
||||||
|
fog_mode = fog_disabled;
|
||||||
|
|
||||||
|
reset = 1;
|
||||||
|
|
||||||
|
v0 = vn = 0;
|
||||||
|
|
||||||
|
//vi_org_reg = *gfx.VI_ORIGIN_REG;
|
||||||
view_scale[2] = 32.0f * 511.0f;
|
view_scale[2] = 32.0f * 511.0f;
|
||||||
view_trans[2] = 32.0f * 511.0f;
|
view_trans[2] = 32.0f * 511.0f;
|
||||||
clip_ratio = 1.0f;
|
clip_ratio = 1.0f;
|
||||||
|
@ -170,48 +464,14 @@ void RDP::Reset()
|
||||||
cycle_mode = 2;
|
cycle_mode = 2;
|
||||||
allow_combine = 1;
|
allow_combine = 1;
|
||||||
rdp.update = UPDATE_SCISSOR | UPDATE_COMBINE | UPDATE_ZBUF_ENABLED | UPDATE_CULL_MODE;
|
rdp.update = UPDATE_SCISSOR | UPDATE_COMBINE | UPDATE_ZBUF_ENABLED | UPDATE_CULL_MODE;
|
||||||
fog_mode = RDP::fog_enabled;
|
fog_mode = CRDP::fog_enabled;
|
||||||
maincimg[0].addr = maincimg[1].addr = last_drawn_ci_addr = 0x7FFFFFFF;
|
maincimg[0].addr = maincimg[1].addr = last_drawn_ci_addr = 0x7FFFFFFF;
|
||||||
}
|
|
||||||
|
|
||||||
RDP::RDP()
|
memset(&timg, 0, sizeof(timg));
|
||||||
{
|
memset(tiles, 0, sizeof(tiles));
|
||||||
vtx1 = new VERTEX[256];
|
memset(tmem, 0, sizeof(tmem));
|
||||||
memset(vtx1, 0, sizeof(VERTEX) * 256);
|
memset(addr, 0, sizeof(addr));
|
||||||
vtx2 = new VERTEX[256];
|
memset(load_info, 0, sizeof(load_info));
|
||||||
memset(vtx2, 0, sizeof(VERTEX) * 256);
|
|
||||||
vtxbuf = vtxbuf2 = 0;
|
|
||||||
vtx_buffer = n_global = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_TMU; i++)
|
|
||||||
{
|
|
||||||
cache[i] = new CACHE_LUT[MAX_CACHE];
|
|
||||||
cur_cache[i] = 0;
|
|
||||||
cur_cache_n[i] = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
vtx = new VERTEX[MAX_VTX];
|
|
||||||
memset(vtx, 0, sizeof(VERTEX)*MAX_VTX);
|
|
||||||
v0 = vn = 0;
|
|
||||||
|
|
||||||
frame_buffers = new COLOR_IMAGE[NUMTEXBUF + 2];
|
|
||||||
}
|
|
||||||
|
|
||||||
RDP::~RDP()
|
|
||||||
{
|
|
||||||
delete[] vtx1;
|
|
||||||
delete[] vtx2;
|
|
||||||
for (int i = 0; i < MAX_TMU; i++)
|
|
||||||
delete[] cache[i];
|
|
||||||
|
|
||||||
delete[] vtx;
|
|
||||||
delete[] frame_buffers;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rdp_reset()
|
|
||||||
{
|
|
||||||
reset = 1;
|
|
||||||
rdp.Reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void microcheck()
|
void microcheck()
|
||||||
|
@ -604,7 +864,7 @@ EXPORT void CALL ProcessDList(void)
|
||||||
if (g_settings->ucode() == CSettings::ucode_Turbo3d)
|
if (g_settings->ucode() == CSettings::ucode_Turbo3d)
|
||||||
{
|
{
|
||||||
Turbo3D();
|
Turbo3D();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// MAIN PROCESSING LOOP
|
// MAIN PROCESSING LOOP
|
||||||
|
@ -686,7 +946,7 @@ EXPORT void CALL ProcessDList(void)
|
||||||
CI_SET = FALSE;
|
CI_SET = FALSE;
|
||||||
}
|
}
|
||||||
WriteTrace(TraceRDP, TraceDebug, "ProcessDList end");
|
WriteTrace(TraceRDP, TraceDebug, "ProcessDList end");
|
||||||
}
|
}
|
||||||
|
|
||||||
// undef - undefined instruction, always ignore
|
// undef - undefined instruction, always ignore
|
||||||
void undef()
|
void undef()
|
||||||
|
@ -719,7 +979,9 @@ void ys_memrect()
|
||||||
uint32_t ul_y = (uint16_t)((rdp.cmd1 & 0x00000FFF) >> 2);
|
uint32_t ul_y = (uint16_t)((rdp.cmd1 & 0x00000FFF) >> 2);
|
||||||
|
|
||||||
if (lr_y > rdp.scissor_o.lr_y)
|
if (lr_y > rdp.scissor_o.lr_y)
|
||||||
|
{
|
||||||
lr_y = rdp.scissor_o.lr_y;
|
lr_y = rdp.scissor_o.lr_y;
|
||||||
|
}
|
||||||
uint32_t off_x = ((rdp.cmd2 & 0xFFFF0000) >> 16) >> 5;
|
uint32_t off_x = ((rdp.cmd2 & 0xFFFF0000) >> 16) >> 5;
|
||||||
uint32_t off_y = (rdp.cmd2 & 0x0000FFFF) >> 5;
|
uint32_t off_y = (rdp.cmd2 & 0x0000FFFF) >> 5;
|
||||||
|
|
||||||
|
@ -955,15 +1217,14 @@ void rdp_texrect()
|
||||||
rdp.tri_n += 2;
|
rdp.tri_n += 2;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//*
|
|
||||||
//hack for Banjo2. it removes black texrects under Banjo
|
//hack for Banjo2. it removes black texrects under Banjo
|
||||||
if (!g_settings->fb_hwfbe_enabled() && ((rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF)) == 0xFFFFFFFF && (rdp.othermode_l & 0xFFFF0000) == 0x00500000)
|
if (!g_settings->fb_hwfbe_enabled() && ((rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF)) == 0xFFFFFFFF && (rdp.othermode_l & 0xFFFF0000) == 0x00500000)
|
||||||
{
|
{
|
||||||
rdp.tri_n += 2;
|
rdp.tri_n += 2;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//*/
|
|
||||||
//*
|
|
||||||
//remove motion blur in night vision
|
//remove motion blur in night vision
|
||||||
if (g_settings->ucode() == CSettings::ucode_PerfectDark && (rdp.maincimg[1].addr != rdp.maincimg[0].addr) && (rdp.timg.addr >= rdp.maincimg[1].addr) && (rdp.timg.addr < (rdp.maincimg[1].addr + rdp.ci_width*rdp.ci_height*rdp.ci_size)))
|
if (g_settings->ucode() == CSettings::ucode_PerfectDark && (rdp.maincimg[1].addr != rdp.maincimg[0].addr) && (rdp.timg.addr >= rdp.maincimg[1].addr) && (rdp.timg.addr < (rdp.maincimg[1].addr + rdp.ci_width*rdp.ci_height*rdp.ci_size)))
|
||||||
{
|
{
|
||||||
|
@ -1298,10 +1559,10 @@ void rdp_texrect()
|
||||||
apply_shade_mods(&vptr[i]);
|
apply_shade_mods(&vptr[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rdp.fog_mode >= RDP::fog_blend)
|
if (rdp.fog_mode >= CRDP::fog_blend)
|
||||||
{
|
{
|
||||||
float fog;
|
float fog;
|
||||||
if (rdp.fog_mode == RDP::fog_blend)
|
if (rdp.fog_mode == CRDP::fog_blend)
|
||||||
fog = 1.0f / maxval(1, rdp.fog_color & 0xFF);
|
fog = 1.0f / maxval(1, rdp.fog_color & 0xFF);
|
||||||
else
|
else
|
||||||
fog = 1.0f / maxval(1, (~rdp.fog_color) & 0xFF);
|
fog = 1.0f / maxval(1, (~rdp.fog_color) & 0xFF);
|
||||||
|
|
|
@ -350,7 +350,36 @@ typedef struct
|
||||||
|
|
||||||
#define NUMTEXBUF 92
|
#define NUMTEXBUF 92
|
||||||
|
|
||||||
struct RDP_Base {
|
class CRDP
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CRDP();
|
||||||
|
~CRDP();
|
||||||
|
|
||||||
|
bool init();
|
||||||
|
void free();
|
||||||
|
|
||||||
|
// Clipping
|
||||||
|
int clip; // clipping flags
|
||||||
|
VERTEX *vtx1; //[256] copy vertex buffer #1 (used for clipping)
|
||||||
|
VERTEX *vtx2; //[256] copy vertex buffer #2
|
||||||
|
VERTEX *vtxbuf; // current vertex buffer (reset to vtx, used to determine current vertex buffer)
|
||||||
|
VERTEX *vtxbuf2;
|
||||||
|
int n_global; // Used to pass the number of vertices from clip_z to clip_tri
|
||||||
|
int vtx_buffer;
|
||||||
|
|
||||||
|
CACHE_LUT *cache[MAX_TMU]; //[MAX_CACHE]
|
||||||
|
CACHE_LUT *cur_cache[MAX_TMU];
|
||||||
|
uint32_t cur_cache_n[MAX_TMU];
|
||||||
|
int n_cached[MAX_TMU];
|
||||||
|
|
||||||
|
// Vertices
|
||||||
|
VERTEX *vtx; //[MAX_VTX]
|
||||||
|
int v0, vn;
|
||||||
|
|
||||||
|
COLOR_IMAGE *frame_buffers; //[NUMTEXBUF+2]
|
||||||
|
TEXTURE_BUFFER texbufs[2];
|
||||||
|
char RomName[21];
|
||||||
float vi_width;
|
float vi_width;
|
||||||
float vi_height;
|
float vi_height;
|
||||||
|
|
||||||
|
@ -541,41 +570,11 @@ struct RDP_Base {
|
||||||
fog_mode;
|
fog_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RDP : public RDP_Base
|
|
||||||
{
|
|
||||||
// Clipping
|
|
||||||
int clip; // clipping flags
|
|
||||||
VERTEX *vtx1; //[256] copy vertex buffer #1 (used for clipping)
|
|
||||||
VERTEX *vtx2; //[256] copy vertex buffer #2
|
|
||||||
VERTEX *vtxbuf; // current vertex buffer (reset to vtx, used to determine current vertex buffer)
|
|
||||||
VERTEX *vtxbuf2;
|
|
||||||
int n_global; // Used to pass the number of vertices from clip_z to clip_tri
|
|
||||||
int vtx_buffer;
|
|
||||||
|
|
||||||
CACHE_LUT *cache[MAX_TMU]; //[MAX_CACHE]
|
|
||||||
CACHE_LUT *cur_cache[MAX_TMU];
|
|
||||||
uint32_t cur_cache_n[MAX_TMU];
|
|
||||||
int n_cached[MAX_TMU];
|
|
||||||
|
|
||||||
// Vertices
|
|
||||||
VERTEX *vtx; //[MAX_VTX]
|
|
||||||
int v0, vn;
|
|
||||||
|
|
||||||
COLOR_IMAGE *frame_buffers; //[NUMTEXBUF+2]
|
|
||||||
TEXTURE_BUFFER texbufs[2];
|
|
||||||
|
|
||||||
char RomName[21];
|
|
||||||
|
|
||||||
RDP();
|
|
||||||
~RDP();
|
|
||||||
void Reset();
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetWireframeCol();
|
void SetWireframeCol();
|
||||||
void ChangeSize();
|
void ChangeSize();
|
||||||
void GoToFullScreen();
|
void GoToFullScreen();
|
||||||
|
|
||||||
extern RDP rdp;
|
extern CRDP rdp;
|
||||||
extern VOODOO voodoo;
|
extern VOODOO voodoo;
|
||||||
|
|
||||||
extern GrTexInfo fontTex;
|
extern GrTexInfo fontTex;
|
||||||
|
|
Loading…
Reference in New Issue