diff options
Diffstat (limited to 'src/mesa/x86/x86.c')
-rw-r--r-- | src/mesa/x86/x86.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/mesa/x86/x86.c b/src/mesa/x86/x86.c index ce649f66b0b..c2df5e31e6e 100644 --- a/src/mesa/x86/x86.c +++ b/src/mesa/x86/x86.c @@ -34,6 +34,7 @@ #include "x86.h" #include "common_x86_macros.h" +#include "common_x86_asm.h" #ifdef DEBUG_MATH #include "math/m_debug.h" @@ -93,3 +94,52 @@ void _mesa_init_x86_transform_asm( void ) #endif } + +void _mesa_init_all_x86_transform_asm( void ) +{ + _mesa_get_x86_features(); + +#ifdef USE_X86_ASM + if ( _mesa_x86_cpu_features ) { + _mesa_init_x86_transform_asm(); + } + +#ifdef USE_MMX_ASM + if ( cpu_has_mmx ) { + if ( _mesa_getenv( "MESA_NO_MMX" ) == 0 ) { + _mesa_debug(NULL, "MMX cpu detected.\n"); + } else { + _mesa_x86_cpu_features &= ~(X86_FEATURE_MMX); + } + } +#endif + +#ifdef USE_3DNOW_ASM + if ( cpu_has_3dnow ) { + if ( _mesa_getenv( "MESA_NO_3DNOW" ) == 0 ) { + _mesa_debug(NULL, "3DNow! cpu detected.\n"); + _mesa_init_3dnow_transform_asm(); + } else { + _mesa_x86_cpu_features &= ~(X86_FEATURE_3DNOW); + } + } +#endif + +#ifdef USE_SSE_ASM + if ( cpu_has_xmm ) { + if ( _mesa_getenv( "MESA_NO_SSE" ) == 0 ) { + _mesa_debug(NULL, "SSE cpu detected.\n"); + if ( _mesa_getenv( "MESA_FORCE_SSE" ) == 0 ) { + _mesa_check_os_sse_support(); + } + if ( cpu_has_xmm ) { + _mesa_init_sse_transform_asm(); + } + } else { + _mesa_debug(NULL, "SSE cpu detected, but switched off by user.\n"); + _mesa_x86_cpu_features &= ~(X86_FEATURE_XMM); + } + } +#endif +#endif +} |