#include <string.h>
#include <stdlib.h>
#include "mtypes.h"
#include "extensions.h"
#include "utils.h"
#if defined(USE_X86_ASM)
#include "X86/common_x86_asm.h"
#endif
unsigned
driParseDebugString( const char * debug,
const struct dri_debug_control * control )
{
unsigned flag;
flag = 0;
if ( debug != NULL ) {
while( control->string != NULL ) {
if ( !strcmp( debug, "all" ) ||
strstr( debug, control->string ) != NULL ) {
flag |= control->flag;
}
control++;
}
}
return flag;
}
unsigned
driGetRendererString( char * buffer, const char * hardware_name,
const char * driver_date, GLuint agp_mode )
{
#ifdef USE_X86_ASM
char * x86_str = "";
char * mmx_str = "";
char * tdnow_str = "";
char * sse_str = "";
#endif
unsigned offset;
offset = sprintf( buffer, "Mesa DRI %s %s", hardware_name, driver_date );
switch ( agp_mode ) {
case 1:
case 2:
case 4:
case 8:
offset += sprintf( & buffer[ offset ], " AGP %ux", agp_mode );
break;
default:
break;
}
#ifdef USE_X86_ASM
if ( _mesa_x86_cpu_features ) {
x86_str = " x86";
}
# ifdef USE_MMX_ASM
if ( cpu_has_mmx ) {
mmx_str = (cpu_has_mmxext) ? "/MMX+" : "/MMX";
}
# endif
# ifdef USE_3DNOW_ASM
if ( cpu_has_3dnow ) {
tdnow_str = (cpu_has_3dnowext) ? "/3DNow!+" : "/3DNow!";
}
# endif
# ifdef USE_SSE_ASM
if ( cpu_has_xmm ) {
sse_str = (cpu_has_xmm2) ? "/SSE2" : "/SSE";
}
# endif
offset += sprintf( & buffer[ offset ], "%s%s%s%s",
x86_str, mmx_str, tdnow_str, sse_str );
#elif defined(USE_SPARC_ASM)
offset += sprintf( & buffer[ offset ], " Sparc" );
#endif
return offset;
}
void driInitExtensions( GLcontext * ctx,
const char * const extensions_to_enable[],
GLboolean enable_imaging )
{
unsigned i;
if ( enable_imaging ) {
_mesa_enable_imaging_extensions( ctx );
}
for ( i = 0 ; extensions_to_enable[i] != NULL ; i++ ) {
_mesa_enable_extension( ctx, extensions_to_enable[i] );
}
}
GLboolean
driCheckDriDdxDrmVersions(__DRIscreenPrivate *sPriv,
const char * driver_name,
int dri_major, int dri_minor,
int ddx_major, int ddx_minor,
int drm_major, int drm_minor)
{
static const char format[] = "%s DRI driver expected %s version %d.%d.x "
"but got version %d.%d.%d";
int major, minor, patch;
if (XF86DRIQueryVersion(sPriv->display, &major, &minor, &patch)) {
if (major != dri_major || minor < dri_minor) {
__driUtilMessage(format, "DRI", driver_name, dri_major, dri_minor,
major, minor, patch);
return GL_FALSE;
}
}
if (sPriv->ddxMajor != ddx_major || sPriv->ddxMinor < ddx_minor) {
__driUtilMessage(format, "DDX", driver_name, ddx_major, ddx_minor,
sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch);
return GL_FALSE;
}
if (sPriv->drmMajor != drm_major || sPriv->drmMinor < drm_minor) {
__driUtilMessage(format, "DRM", driver_name, drm_major, drm_minor,
sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch);
return GL_FALSE;
}
return GL_TRUE;
}