Mesa (master): gallium/rtasm: properly detect SSE and SSE2

Marek Olšák mareko at kemper.freedesktop.org
Mon Feb 27 01:04:42 UTC 2012


Module: Mesa
Branch: master
Commit: 74d303521e6ba41d1cbeb75edb2f834ebbe8c550
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=74d303521e6ba41d1cbeb75edb2f834ebbe8c550

Author: Marek Olšák <maraeo at gmail.com>
Date:   Fri Feb 24 19:29:48 2012 +0100

gallium/rtasm: properly detect SSE and SSE2

This should fix crashes on ancient processors.

---

 src/gallium/auxiliary/rtasm/rtasm_cpu.c |   48 +++++++++++++++---------------
 1 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/src/gallium/auxiliary/rtasm/rtasm_cpu.c b/src/gallium/auxiliary/rtasm/rtasm_cpu.c
index 0461c81..7afcf14 100644
--- a/src/gallium/auxiliary/rtasm/rtasm_cpu.c
+++ b/src/gallium/auxiliary/rtasm/rtasm_cpu.c
@@ -25,43 +25,43 @@
  *
  **************************************************************************/
 
+#include "pipe/p_config.h"
+#include "rtasm_cpu.h"
+
+#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
 
 #include "util/u_debug.h"
-#include "rtasm_cpu.h"
+#include "util/u_cpu_detect.h"
 
+DEBUG_GET_ONCE_BOOL_OPTION(nosse, "GALLIUM_NOSSE", FALSE);
 
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
-static boolean rtasm_sse_enabled(void)
+static struct util_cpu_caps *get_cpu_caps(void)
 {
-   static boolean firsttime = 1;
-   static boolean enabled;
-   
-   /* This gets called quite often at the moment:
-    */
-   if (firsttime) {
-      enabled =  !debug_get_bool_option("GALLIUM_NOSSE", FALSE);
-      firsttime = FALSE;
-   }
-   return enabled;
+   util_cpu_detect();
+   return &util_cpu_caps;
 }
-#endif
 
 int rtasm_cpu_has_sse(void)
 {
-   /* FIXME: actually detect this at run-time */
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
-   return rtasm_sse_enabled();
-#else
-   return 0;
-#endif
+   return !debug_get_option_nosse() && get_cpu_caps()->has_sse;
 }
 
 int rtasm_cpu_has_sse2(void) 
 {
-   /* FIXME: actually detect this at run-time */
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
-   return rtasm_sse_enabled();
+   return !debug_get_option_nosse() && get_cpu_caps()->has_sse2;
+}
+
+
 #else
+
+int rtasm_cpu_has_sse(void)
+{
    return 0;
-#endif
 }
+
+int rtasm_cpu_has_sse2(void)
+{
+   return 0;
+}
+
+#endif




More information about the mesa-commit mailing list