Check for 3D Now! at build time
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 4 Aug 2012 13:50:03 +0000 (16:50 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 4 Aug 2012 14:02:00 +0000 (17:02 +0300)
include/vlc_cpu.h
modules/codec/avcodec/avcodec.c
modules/codec/avcodec/encoder.c
modules/codec/libmpeg2.c
modules/stream_out/switcher.c
modules/video_filter/deinterlace/deinterlace.c
modules/video_filter/postproc.c
modules/video_filter/swscale.c
src/misc/cpu.c
src/posix/linux_cpu.c

index a87589d..83a85be 100644 (file)
@@ -31,7 +31,7 @@ VLC_API unsigned vlc_CPU(void);
 # if defined (__i386__) || defined (__x86_64__)
 #  define HAVE_FPU 1
 #  define VLC_CPU_MMX    8
-#  define CPU_CAPABILITY_3DNOW   (1<<4)
+#  define VLC_CPU_3dNOW  16
 #  define VLC_CPU_MMXEXT 32
 #  define VLC_CPU_SSE    64
 #  define VLC_CPU_SSE2   128
@@ -103,6 +103,12 @@ VLC_API unsigned vlc_CPU(void);
 #  define vlc_CPU_SSE4A() ((vlc_CPU() & VLC_CPU_SSE4A) != 0)
 # endif
 
+# ifdef __3dNOW__
+#  define vlc_CPU_3dNOW() (1)
+# else
+#  define vlc_CPU_3dNOW() ((vlc_CPU() & VLC_CPU_3dNOW) != 0)
+# endif
+
 # elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__)
 #  define HAVE_FPU 1
 #  define VLC_CPU_ALTIVEC 2
index 4159cc0..d79d6b0 100644 (file)
@@ -335,7 +335,7 @@ static int OpenDecoder( vlc_object_t *p_this )
         p_context->dsp_mask |= AV_CPU_FLAG_MMX;
     if( !vlc_CPU_MMXEXT() )
         p_context->dsp_mask |= AV_CPU_FLAG_MMX2;
-    if( !(vlc_CPU() & CPU_CAPABILITY_3DNOW) )
+    if( !vlc_CPU_3dNOW() )
         p_context->dsp_mask |= AV_CPU_FLAG_3DNOW;
     if( !vlc_CPU_SSE() )
         p_context->dsp_mask |= AV_CPU_FLAG_SSE;
index 02888ef..018ca3c 100644 (file)
@@ -329,7 +329,7 @@ int OpenEncoder( vlc_object_t *p_this )
         p_context->dsp_mask |= AV_CPU_FLAG_MMX;
     if( !vlc_CPU_MMXEXT() )
         p_context->dsp_mask |= AV_CPU_FLAG_MMX2;
-    if( !(vlc_CPU() & CPU_CAPABILITY_3DNOW) )
+    if( !vlc_CPU_3dNOW() )
         p_context->dsp_mask |= AV_CPU_FLAG_3DNOW;
     if( !vlc_CPU_SSE() )
         p_context->dsp_mask |= AV_CPU_FLAG_SSE;
index deed283..4059b78 100644 (file)
@@ -195,7 +195,7 @@ static int OpenDecoder( vlc_object_t *p_this )
     unsigned cpu = vlc_CPU();
     if( vlc_CPU_MMX() )
         i_accel |= MPEG2_ACCEL_X86_MMX;
-    if( cpu & CPU_CAPABILITY_3DNOW )
+    if( vlc_CPU_3dNOW() )
         i_accel |= MPEG2_ACCEL_X86_3DNOW;
     if( vlc_CPU_MMXEXT() )
         i_accel |= MPEG2_ACCEL_X86_MMXEXT;
index bb0c1b3..ac7945f 100644 (file)
@@ -380,12 +380,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
         /* Set CPU capabilities */
         id->ff_enc_c->dsp_mask = 0;
 #if defined (__i386__) || defined (__x86_64__)
-        unsigned i_cpu = vlc_CPU();
         if( !vlc_CPU_MMX() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_MMX;
         if( !vlc_CPU_MMXEXT() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_MMX2;
-        if( !(i_cpu & CPU_CAPABILITY_3DNOW) )
+        if( !vlc_CPU_3dNOW() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_3DNOW;
         if( !vlc_CPU_SSE() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE;
@@ -801,12 +800,11 @@ static mtime_t VideoCommand( sout_stream_t *p_stream, sout_stream_id_t *id )
         /* Set CPU capabilities */
         id->ff_enc_c->dsp_mask = 0;
 #if defined (__i386__) || defined (__x86_64__)
-        unsigned i_cpu = vlc_CPU();
         if( !vlc_CPU_MMX() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_MMX;
         if( !vlc_CPU_MMXEXT() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_MMX2;
-        if( !(i_cpu & CPU_CAPABILITY_3DNOW) )
+        if( !vlc_CPU_3dNOW() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_3DNOW;
         if( !vlc_CPU_SSE() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE;
index ab02cbb..ac83dfc 100644 (file)
@@ -649,7 +649,7 @@ int Open( vlc_object_t *p_this )
     else
 #endif
 #if defined(CAN_COMPILE_3DNOW)
-    if( chroma->pixel_size == 1 && (vlc_CPU() & CPU_CAPABILITY_3DNOW) )
+    if( chroma->pixel_size == 1 && vlc_CPU_3dNOW() )
     {
         p_sys->pf_merge = Merge3DNow;
         p_sys->pf_end_merge = End3DNow;
index 5fb5127..db2bbe1 100644 (file)
@@ -138,7 +138,7 @@ static int OpenPostproc( vlc_object_t *p_this )
         i_flags |= PP_CPU_CAPS_MMX;
     if( vlc_CPU_MMXEXT() )
         i_flags |= PP_CPU_CAPS_MMX2;
-    if( vlc_CPU() & CPU_CAPABILITY_3DNOW )
+    if( vlc_CPU_3dNOW() )
         i_flags |= PP_CPU_CAPS_3DNOW;
 #elif defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__)
     if( vlc_CPU_ALTIVEC() )
index 9a5bfda..632a04a 100644 (file)
@@ -238,7 +238,7 @@ static int GetSwsCpuMask(void)
     if( vlc_CPU_MMXEXT() )
         i_sws_cpu |= SWS_CPU_CAPS_MMX2;
 #endif
-    if( vlc_CPU() & CPU_CAPABILITY_3DNOW )
+    if( vlc_CPU_3dNOW() )
         i_sws_cpu |= SWS_CPU_CAPS_3DNOW;
 #elif defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__)
     if( vlc_CPU_ALTIVEC() )
index f7e9bfe..6b284a8 100644 (file)
@@ -266,9 +266,7 @@ void vlc_CPU_init (void)
     /* list these additional capabilities */
     cpuid( 0x80000001 );
 
-# if defined (__3dNOW__)
-    i_capabilities |= CPU_CAPABILITY_3DNOW;
-# elif defined (CAN_COMPILE_3DNOW)
+# if defined (CAN_COMPILE_3DNOW)
     if ((i_edx & 0x80000000) && vlc_CPU_check ("3D Now!", ThreeD_Now_test))
         i_capabilities |= CPU_CAPABILITY_3DNOW;
 # endif
@@ -330,11 +328,6 @@ void vlc_CPU_dump (vlc_object_t *obj)
     char buf[200], *p = buf;
 
 #if defined (__i386__) || defined (__x86_64__)
-    const unsigned flags = vlc_CPU();
-#define PRINT_CAPABILITY( capability, string ) \
-    if (flags & (capability)) \
-        p += sprintf (p, "%s ", (string) )
-
     if (vlc_CPU_MMX()) p += sprintf (p, "MMX ");
     if (vlc_CPU_MMXEXT()) p += sprintf (p, "MMXEXT ");
     if (vlc_CPU_SSE()) p += sprintf (p, "SSE ");;
@@ -344,7 +337,7 @@ void vlc_CPU_dump (vlc_object_t *obj)
     if (vlc_CPU_SSE4_1()) p += sprintf (p, "SSE4.1 ");;
     if (vlc_CPU_SSE4_2()) p += sprintf (p, "SSE4.2 ");;
     if (vlc_CPU_SSE4A()) p += sprintf (p, "SSE4A ");;
-    PRINT_CAPABILITY(CPU_CAPABILITY_3DNOW, "3DNow!");
+    if (vlc_CPU_3dNOW()) p += sprintf (p, "3DNow! ");;
 
 #elif defined (__powerpc__) || defined (__ppc__) || defined (__ppc64__)
     if (vlc_CPU_ALTIVEC())  p += sprintf (p, "AltiVec");
index edb4f24..cc33db2 100644 (file)
@@ -85,10 +85,8 @@ static void vlc_CPU_init (void)
                 core_caps |= VLC_CPU_SSE4_1;
             if (!strcmp (cap, "sse4a"))
                 core_caps |= VLC_CPU_SSE4A;
-# ifndef __3dNOW__
             if (!strcmp (cap, "3dnow"))
-                core_caps |= CPU_CAPABILITY_3DNOW;
-# endif
+                core_caps |= VLC_CPU_3dNOW;
 
 #elif defined (__powerpc__) || defined (__powerpc64__)
             if (!strcmp (cap, "altivec supported"))
@@ -105,13 +103,6 @@ static void vlc_CPU_init (void)
     if (all_caps == 0xFFFFFFFF) /* Error parsing of cpuinfo? */
         all_caps = 0; /* Do not assume any capability! */
 
-    /* Always enable capabilities that were forced during compilation */
-#if defined (__i386__) || defined (__x86_64__)
-# ifdef __3dNOW__
-    all_caps |= CPU_CAPABILITY_3DNOW;
-# endif
-
-#endif
     cpu_flags = all_caps;
 }