mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-12-14 06:01:10 +00:00
* Mostly selfish patch to work around what I believe is probably an nvidia and/or agpgart bug
This commit is contained in:
parent
f0bd20e00a
commit
2897abe618
3 changed files with 24 additions and 0 deletions
|
@ -143,6 +143,8 @@ cvar_t *r_debugSort;
|
||||||
cvar_t *r_printShaders;
|
cvar_t *r_printShaders;
|
||||||
cvar_t *r_saveFontData;
|
cvar_t *r_saveFontData;
|
||||||
|
|
||||||
|
cvar_t *r_GLlibCoolDownMsec;
|
||||||
|
|
||||||
cvar_t *r_maxpolys;
|
cvar_t *r_maxpolys;
|
||||||
int max_polys;
|
int max_polys;
|
||||||
cvar_t *r_maxpolyverts;
|
cvar_t *r_maxpolyverts;
|
||||||
|
@ -988,6 +990,8 @@ void R_Register( void )
|
||||||
r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0);
|
r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0);
|
||||||
r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0);
|
r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0);
|
||||||
|
|
||||||
|
r_GLlibCoolDownMsec = ri.Cvar_Get( "r_GLlibCoolDownMsec", "0", CVAR_ARCHIVE );
|
||||||
|
|
||||||
// make sure all the commands added here are also
|
// make sure all the commands added here are also
|
||||||
// removed in R_Shutdown
|
// removed in R_Shutdown
|
||||||
ri.Cmd_AddCommand( "imagelist", R_ImageList_f );
|
ri.Cmd_AddCommand( "imagelist", R_ImageList_f );
|
||||||
|
|
|
@ -1091,6 +1091,8 @@ extern cvar_t *r_debugSort;
|
||||||
extern cvar_t *r_printShaders;
|
extern cvar_t *r_printShaders;
|
||||||
extern cvar_t *r_saveFontData;
|
extern cvar_t *r_saveFontData;
|
||||||
|
|
||||||
|
extern cvar_t *r_GLlibCoolDownMsec;
|
||||||
|
|
||||||
//====================================================================
|
//====================================================================
|
||||||
|
|
||||||
float R_NoiseGet4f( float x, float y, float z, float t );
|
float R_NoiseGet4f( float x, float y, float z, float t );
|
||||||
|
|
|
@ -2651,6 +2651,24 @@ void QGL_Shutdown( void )
|
||||||
{
|
{
|
||||||
if ( glw_state.OpenGLLib )
|
if ( glw_state.OpenGLLib )
|
||||||
{
|
{
|
||||||
|
// 25/09/05 Tim Angus <tim@ngus.net>
|
||||||
|
// Certain combinations of hardware and software, specifically
|
||||||
|
// Linux/SMP/Nvidia/agpgart (OK, OK. MY combination of hardware and
|
||||||
|
// software), seem to cause a catastrophic (hard reboot required) crash
|
||||||
|
// when libGL is dynamically unloaded. I'm unsure of the precise cause,
|
||||||
|
// suffice to say I don't see anything in the Q3 code that could cause it.
|
||||||
|
// I suspect it's an Nvidia driver bug, but without the source or means to
|
||||||
|
// debug I obviously can't prove (or disprove) this. Interestingly (though
|
||||||
|
// perhaps not suprisingly), Enemy Territory and Doom 3 both exhibit the
|
||||||
|
// same problem.
|
||||||
|
//
|
||||||
|
// After many, many reboots and prodding here and there, it seems that a
|
||||||
|
// placing a short delay before libGL is unloaded works around the problem.
|
||||||
|
// This delay is changable via the r_GLlibCoolDownMsec cvar (nice name
|
||||||
|
// huh?), and it defaults to 0. For me, 500 seems to work.
|
||||||
|
if( r_GLlibCoolDownMsec->integer )
|
||||||
|
usleep( r_GLlibCoolDownMsec->integer * 1000 );
|
||||||
|
|
||||||
dlclose ( glw_state.OpenGLLib );
|
dlclose ( glw_state.OpenGLLib );
|
||||||
glw_state.OpenGLLib = NULL;
|
glw_state.OpenGLLib = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue