mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +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_saveFontData;
|
||||
|
||||
cvar_t *r_GLlibCoolDownMsec;
|
||||
|
||||
cvar_t *r_maxpolys;
|
||||
int max_polys;
|
||||
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_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
|
||||
// removed in R_Shutdown
|
||||
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_saveFontData;
|
||||
|
||||
extern cvar_t *r_GLlibCoolDownMsec;
|
||||
|
||||
//====================================================================
|
||||
|
||||
float R_NoiseGet4f( float x, float y, float z, float t );
|
||||
|
|
|
@ -2651,6 +2651,24 @@ void QGL_Shutdown( void )
|
|||
{
|
||||
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 );
|
||||
glw_state.OpenGLLib = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue