Better altivec cvar handling. Should fix crashes at startup, or curious

people that toggle it on at runtime on a G3.
This commit is contained in:
Ryan C. Gordon 2005-12-04 21:40:25 +00:00
parent dd4dce194e
commit ff9c89f8fe
4 changed files with 42 additions and 11 deletions

View file

@ -2353,6 +2353,24 @@ out:
#endif
static void Com_DetectAltivec(void)
{
// Only detect if user hasn't forcibly disabled it.
if (com_altivec->integer) {
static qboolean altivec = qfalse;
static qboolean detected = qfalse;
if (!detected) {
altivec = Sys_DetectAltivec();
detected = qtrue;
}
if (!altivec) {
Cvar_Set( "com_altivec", "0" ); // we don't have it! Disable support!
}
}
}
/*
=================
Com_Init
@ -2510,7 +2528,9 @@ void Com_Init( char *commandLine ) {
com_fullyInitialized = qtrue;
#if idppc_altivec
// always set the cvar, but only print the info if it makes sense.
Com_DetectAltivec();
#if idppc
Com_Printf ("Altivec support is %s\n", com_altivec->integer ? "enabled" : "disabled");
#endif
@ -2713,6 +2733,12 @@ void Com_Frame( void ) {
} while ( msec < minMsec );
Cbuf_Execute ();
if (com_altivec->modified)
{
Com_DetectAltivec();
com_altivec->modified = qfalse;
}
lastTime = com_frameTime;
// mess with msec if needed

View file

@ -1033,6 +1033,8 @@ unsigned int Sys_ProcessorCount( void );
int Sys_MonkeyShouldBeSpanked( void );
qboolean Sys_DetectAltivec( void );
/* This is based on the Adaptive Huffman algorithm described in Sayood's Data
* Compression book. The ranks are not actually stored, but implicitly defined
* by the location of a node within a doubly-linked list */

View file

@ -377,12 +377,11 @@ static void illegal_instruction(int sig)
}
#endif
static void Sys_DetectAltivec(void)
qboolean Sys_DetectAltivec( void )
{
// Only detect if user hasn't forcibly disabled it.
if (com_altivec->integer) {
#if idppc_altivec
qboolean altivec = qfalse;
#if idppc_altivec
#ifdef MACOS_X
long feat = 0;
OSErr err = Gestalt(gestaltPowerPCProcessorFeatures, &feat);
@ -401,12 +400,9 @@ static void Sys_DetectAltivec(void)
}
signal(SIGILL, handler);
#endif
if (!altivec) {
Cvar_Set( "com_altivec", "0" ); // we don't have it! Disable support!
}
#endif
}
return altivec;
}
void Sys_Init(void)

View file

@ -1176,6 +1176,13 @@ void Sys_Init( void ) {
}
qboolean Sys_DetectAltivec( void )
{
return qfalse; // never altivec on Windows...at least for now. :)
}
//=======================================================================
int totalMsec, countMsec;