[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

pixman: Changes to 'upstream-experimental'



 README                           |   12 ++----
 configure.ac                     |    5 ++
 pixman/pixman-compiler.h         |   77 +++++++++++++++++++++++++++++++++++----
 pixman/pixman-conical-gradient.c |    4 ++
 pixman/pixman-image.c            |    6 ++-
 pixman/pixman-mmx.c              |    2 +
 pixman/pixman.h                  |    3 +
 test/blitters-test.c             |    2 -
 8 files changed, 92 insertions(+), 19 deletions(-)

New commits:
commit b48d8b5201ab010f75f36bccd101cf60510d4ef2
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Wed May 12 16:27:02 2010 -0400

    Pre-release version bump to 0.18.2

diff --git a/configure.ac b/configure.ac
index 65ae7a4..c89474d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -54,7 +54,7 @@ AC_PREREQ([2.57])
 
 m4_define([pixman_major], 0)
 m4_define([pixman_minor], 18)
-m4_define([pixman_micro], 1)
+m4_define([pixman_micro], 2)
 
 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
 

commit 970c183c339b32975b499e90dbc54617da6cf4cf
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Sat Apr 24 18:43:38 2010 -0400

    Add macros for thread local storage on MinGW 32
    
    These macros are identical to the ones that Tor Lillqvist posted here:
    
        http://lists.freedesktop.org/archives/pixman/2010-April/000160.html
    
    with one exception: the variable is allocated with calloc() and not
    malloc().
    
    Cc: tml@iki.fi

diff --git a/pixman/pixman-compiler.h b/pixman/pixman-compiler.h
index 531c8c9..1a1350d 100644
--- a/pixman/pixman-compiler.h
+++ b/pixman/pixman-compiler.h
@@ -77,6 +77,71 @@
 #   define PIXMAN_GET_THREAD_LOCAL(name)				\
     (&name)
 
+#elif defined(__MINGW32__) && !defined(__WIN64)
+
+/* We can't include <windows.h> as it causes carious clashes with
+ * identifiers in pixman, sigh. So just declare the functions we need
+ * here.
+ */
+extern __stdcall long InterlockedCompareExchange(long volatile *, long, long);
+#define InterlockedCompareExchangePointer(d,e,c)			\
+    (void *)InterlockedCompareExchange((long volatile *)(d),(long)(e),(long)(c))
+extern __stdcall int TlsAlloc (void);
+extern __stdcall void *TlsGetValue (unsigned);
+extern __stdcall int TlsSetValue (unsigned, void *);
+extern __stdcall void *CreateMutexA(void *, int, char *);
+extern __stdcall int CloseHandle(void *);
+extern __stdcall unsigned WaitForSingleObject (void *, unsigned);
+extern __stdcall int ReleaseMutex (void *);
+
+#   define PIXMAN_DEFINE_THREAD_LOCAL(type, name)			\
+    static volatile int tls_ ## name ## _initialized = 0;		\
+    static void *tls_ ## name ## _mutex = NULL;				\
+    static unsigned tls_ ## name ## _index;				\
+									\
+    static type *							\
+    tls_ ## name ## _alloc (void)					\
+    {									\
+        type *value = calloc (1, sizeof (type));			\
+        if (value)							\
+            TlsSetValue (tls_ ## name ## _index, value);		\
+        return value;							\
+    }									\
+									\
+    static force_inline type *						\
+    tls_ ## name ## _get (void)						\
+    {									\
+	type *value;							\
+	if (!tls_ ## name ## _initialized)				\
+	{								\
+	    if (!tls_ ## name ## _mutex)				\
+	    {								\
+		void *mutex = CreateMutexA (NULL, 0, NULL);		\
+		if (InterlockedCompareExchangePointer (			\
+			&tls_ ## name ## _mutex, mutex, NULL) != NULL)	\
+		{							\
+		    CloseHandle (mutex);				\
+		}							\
+	    }								\
+	    WaitForSingleObject (tls_ ## name ## _mutex, 0xFFFFFFFF);	\
+	    if (!tls_ ## name ## _initialized)				\
+	    {								\
+		tls_ ## name ## _index = TlsAlloc ();			\
+		tls_ ## name ## _initialized = 1;			\
+	    }								\
+	    ReleaseMutex (tls_ ## name ## _mutex);			\
+	}								\
+	if (tls_ ## name ## _index == 0xFFFFFFFF)			\
+	    return NULL;						\
+	value = TlsGetValue (tls_ ## name ## _index);			\
+	if (!value)							\
+	    value = tls_ ## name ## _alloc ();				\
+	return value;							\
+    }
+
+#   define PIXMAN_GET_THREAD_LOCAL(name)				\
+    tls_ ## name ## _get ()
+
 #elif defined(_MSC_VER)
 
 #   define PIXMAN_DEFINE_THREAD_LOCAL(type, name)			\

commit 61ff1a32146b4db1f7391f0ad6fbdcfda8001581
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Fri Apr 23 12:34:19 2010 -0400

    Don't use __thread on MinGW.
    
    It is apparently broken. See this:
    
    http://mingw-users.1079350.n2.nabble.com/gcc-4-4-multi-threaded-exception-handling-thread-specifier-not-working-td3440749.html
    
    We'll need to support thread local storage on MinGW32 some other way.
    
    Cc: tml@iki.fi

diff --git a/configure.ac b/configure.ac
index c77b5d4..65ae7a4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -524,6 +524,9 @@ support_for__thread=no
 
 AC_MSG_CHECKING(for __thread)
 AC_COMPILE_IFELSE([
+#ifdef __MINGW32__
+#error MinGW has broken __thread support
+#endif
 __thread int x ;
 int main () { return 0; }
 ], support_for__thread=yes)

commit f973be464d631f886ad812210cd26d3a989dc3bd
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Sat Apr 24 15:15:05 2010 -0400

    Don't consider indexed formats opaque.
    
    The indexed formats have 0 bits of alpha, but can't be considered
    opaque because there may be non-opaque colors in the palette.

diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c
index 9b44aa9..03a39db 100644
--- a/pixman/pixman-image.c
+++ b/pixman/pixman-image.c
@@ -394,8 +394,10 @@ compute_image_info (pixman_image_t *image)
 	    }
 	}
 
-	if (image->common.repeat != PIXMAN_REPEAT_NONE &&
-	    !PIXMAN_FORMAT_A (image->bits.format))
+	if (image->common.repeat != PIXMAN_REPEAT_NONE				&&
+	    !PIXMAN_FORMAT_A (image->bits.format)				&&
+	    PIXMAN_FORMAT_TYPE (image->bits.format) != PIXMAN_TYPE_GRAY		&&
+	    PIXMAN_FORMAT_TYPE (image->bits.format) != PIXMAN_TYPE_COLOR)
 	{
 	    flags |= FAST_PATH_IS_OPAQUE;
 	}
diff --git a/test/blitters-test.c b/test/blitters-test.c
index 5e33031..18f871e 100644
--- a/test/blitters-test.c
+++ b/test/blitters-test.c
@@ -482,7 +482,7 @@ main (int argc, char *argv[])
 	    /* Predefined value for running with all the fastpath functions
 	       disabled. It needs to be updated every time when changes are
 	       introduced to this program or behavior of pixman changes! */
-	    if (crc == 0xA058F792)
+	    if (crc == 0x8F9F7DC1)
 	    {
 		printf ("blitters test passed\n");
 	    }

commit 34fb38554f290c690be8b9f3f873538aa1945c57
Author: Jeff Muizelaar <jmuizelaar@mozilla.com>
Date:   Tue Apr 27 15:23:20 2010 -0400

    Add missing HAVE_CONFIG_H guards for config.h inclusion

diff --git a/pixman/pixman-conical-gradient.c b/pixman/pixman-conical-gradient.c
index 369a7a5..0341a8e 100644
--- a/pixman/pixman-conical-gradient.c
+++ b/pixman/pixman-conical-gradient.c
@@ -23,7 +23,11 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  * SOFTWARE.
  */
+
+#ifdef HAVE_CONFIG_H
 #include <config.h>
+#endif
+
 #include <stdlib.h>
 #include <math.h>
 #include "pixman-private.h"

commit 38928afaa119326b85eea099a71bc8c96a251164
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Sun Apr 18 16:24:39 2010 -0400

    Update README to mention the pixman mailing list

diff --git a/README b/README
index 843b069..60dff45 100644
--- a/README
+++ b/README
@@ -3,16 +3,12 @@ features such as image compositing and trapezoid rasterization.
 
 Please submit bugs & patches to the libpixman bugzilla:
 
-       https://bugs.freedesktop.org/enter_bug.cgi?product=pixman
+        https://bugs.freedesktop.org/enter_bug.cgi?product=pixman
 
-All questions regarding this software should be directed to either the 
-Xorg mailing list:
+All questions regarding this software should be directed to the pixman
+mailing list:
 
-       http://lists.freedesktop.org/mailman/listinfo/xorg
-
-or the cairo mailing list:
-
-       http://lists.freedesktop.org/mailman/listinfo/cairo
+        http://lists.freedesktop.org/mailman/listinfo/pixman
 
 The master development code repository can be found at:
 

commit 664984206daae8ac2de16b54ae6c66c926058c86
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Wed Apr 7 19:34:41 2010 -0400

    [mmx] Fix mask creation bugs
    
    This line:
    
        mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
    
    only works when mask has 0s in the lower 24 bits, so add
    
         mask &= 0xff000000;
    
    before.
    
    Reported by Todd Rinaldo on the #cairo IRC channel.

diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index e084e7f..d51b40c 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -1385,6 +1385,7 @@ mmx_composite_over_8888_n_8888 (pixman_implementation_t *imp,
     PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
 
     mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);
+    mask &= 0xff000000;
     mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
     vmask = load8888 (mask);
     srca = MC (4x00ff);
@@ -1470,6 +1471,7 @@ mmx_composite_over_x888_n_8888 (pixman_implementation_t *imp,
     PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
     mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);
 
+    mask &= 0xff000000;
     mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
     vmask = load8888 (mask);
     srca = MC (4x00ff);

commit d197dc5e8d341fb4f252cde31ed62e2fef573475
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Wed Apr 7 01:44:12 2010 -0400

    Fixes for pthread thread local storage.
    
    The tls_name_key variable is passed to tls_name_get(), and the first
    time this happens it isn't initialized. tls_name_get() then passes it
    on to tls_name_alloc() which passes it on to pthread_setspecific()
    leading to undefined behavior.
    
    None of this is actually necessary at all because there is only one
    such variable per thread local variable, so it doesn't need to passed
    as a parameter at all.
    
    All of this was pointed out by Tor Lillqvist on the cairo mailing
    list.

diff --git a/pixman/pixman-compiler.h b/pixman/pixman-compiler.h
index cdac0d8..531c8c9 100644
--- a/pixman/pixman-compiler.h
+++ b/pixman/pixman-compiler.h
@@ -99,16 +99,16 @@
     }									\
 									\
     static type *							\
-    tls_ ## name ## _alloc (key)					\
+    tls_ ## name ## _alloc (void)					\
     {									\
 	type *value = calloc (1, sizeof (type));			\
 	if (value)							\
-	    pthread_setspecific (key, value);				\
+	    pthread_setspecific (tls_ ## name ## _key, value);		\
 	return value;							\
     }									\
 									\
     static force_inline type *						\
-    tls_ ## name ## _get (key)						\
+    tls_ ## name ## _get (void)						\
     {									\
 	type *value = NULL;						\
 	if (pthread_once (&tls_ ## name ## _once_control,		\
@@ -116,13 +116,13 @@
 	{								\
 	    value = pthread_getspecific (tls_ ## name ## _key);		\
 	    if (!value)							\
-		value = tls_ ## name ## _alloc (key);			\
+		value = tls_ ## name ## _alloc ();			\
 	}								\
 	return value;							\
     }
 
 #   define PIXMAN_GET_THREAD_LOCAL(name)				\
-    tls_ ## name ## _get (tls_ ## name ## _key)
+    tls_ ## name ## _get ()
 
 #else
 

commit 9babaab40471bee35af6da581cb5bf83a2517aff
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Wed Apr 7 01:39:14 2010 -0400

    Fix uninitialized cache when pthreads are used
    
    The thread local cache is allocated with malloc(), but we rely on it
    being initialized to zero, so allocate it with calloc() instead.

diff --git a/pixman/pixman-compiler.h b/pixman/pixman-compiler.h
index a4e3f88..cdac0d8 100644
--- a/pixman/pixman-compiler.h
+++ b/pixman/pixman-compiler.h
@@ -101,7 +101,7 @@
     static type *							\
     tls_ ## name ## _alloc (key)					\
     {									\
-	type *value = malloc (sizeof (type));				\
+	type *value = calloc (1, sizeof (type));			\
 	if (value)							\
 	    pthread_setspecific (key, value);				\
 	return value;							\

commit 4fe0a40e75895d5d1a55810be2e1349810cba90e
Author: Siddharth Agarwal <sid.bugzilla@gmail.com>
Date:   Tue Apr 13 10:15:29 2010 -0400

    Visual Studio 2010 includes stdint.h
    
    Use the builtin version instead of defining the types ourselves.

diff --git a/pixman/pixman.h b/pixman/pixman.h
index 85fcc8c..964d04a 100644
--- a/pixman/pixman.h
+++ b/pixman/pixman.h
@@ -89,7 +89,8 @@ PIXMAN_BEGIN_DECLS
 
 #if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || defined (_sgi) || defined (__sun) || defined (sun) || defined (__digital__) || defined (__HP_cc)
 #  include <inttypes.h>
-#elif defined (_MSC_VER)
+/* VS 2010 (_MSC_VER 1600) has stdint.h */
+#elif defined (_MSC_VER) && _MSC_VER < 1600
 typedef __int8 int8_t;
 typedef unsigned __int8 uint8_t;
 typedef __int16 int16_t;

commit 9a46eddc92ecaa2bf178e7dd5061f4d92163285d
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Wed May 12 16:15:24 2010 -0400

    Post-release version bump to 0.18.1

diff --git a/configure.ac b/configure.ac
index d13b6e6..c77b5d4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -54,7 +54,7 @@ AC_PREREQ([2.57])
 
 m4_define([pixman_major], 0)
 m4_define([pixman_minor], 18)
-m4_define([pixman_micro], 0)
+m4_define([pixman_micro], 1)
 
 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
 


Reply to: