texlive[49220] Build/source/libs: pixman-0.36.0

commits+kakuto at tug.org commits+kakuto at tug.org
Thu Nov 22 08:19:28 CET 2018


Revision: 49220
          http://tug.org/svn/texlive?view=revision&revision=49220
Author:   kakuto
Date:     2018-11-22 08:19:28 +0100 (Thu, 22 Nov 2018)
Log Message:
-----------
pixman-0.36.0

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/pixman/ChangeLog
    trunk/Build/source/libs/pixman/README
    trunk/Build/source/libs/pixman/TLpatches/ChangeLog
    trunk/Build/source/libs/pixman/TLpatches/TL-Changes
    trunk/Build/source/libs/pixman/TLpatches/patch-01-hide-symbols
    trunk/Build/source/libs/pixman/configure
    trunk/Build/source/libs/pixman/pixman-src/Makefile.am
    trunk/Build/source/libs/pixman/pixman-src/Makefile.win32.common
    trunk/Build/source/libs/pixman/pixman-src/config.h.in
    trunk/Build/source/libs/pixman/pixman-src/configure.ac
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-access.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-bits-image.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-fast-path.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-filter.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-image.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-private.h
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-solid-fill.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-vmx.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.c
    trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.h
    trunk/Build/source/libs/pixman/version.ac

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/README	2018-11-22 07:19:28 UTC (rev 49220)
@@ -46,7 +46,7 @@
 mpfr 4.0.1 - checked 10feb18
   http://ftp.gnu.org/gnu/mpfr/
 
-pixman 0.34.0 - checked 04feb16
+pixman 0.36.0 - checked 22nov18
   http://cairographics.org/releases/
 
 poppler 0.68.0 - checked 20aug18

Modified: trunk/Build/source/libs/pixman/ChangeLog
===================================================================
--- trunk/Build/source/libs/pixman/ChangeLog	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/ChangeLog	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,3 +1,8 @@
+2018-11-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import pixman-0.36.0.
+	* version.ac: Adapted.
+
 2016-02-15  Karl Berry  <karl at tug.org>
 
 	* pixman-PATCHES: rename from pixman-src-PATCHES.

Modified: trunk/Build/source/libs/pixman/README
===================================================================
--- trunk/Build/source/libs/pixman/README	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/README	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,4 +1,4 @@
-	Building pixman-0.34.0 as part of the TL tree
+	Building pixman-0.36.0 as part of the TL tree
 	=============================================
 
 This directory libs/pixman/ uses a proxy Makefile.am to build the pixman
@@ -12,4 +12,4 @@
 
 2012-11-10	Taco Hoekwater <taco at metatex.org>
 2012-11-15	Peter Breitenlohner <peb at mppmu.mpg.de>
-2016-02-04	Akira Kakuto <kakuto at fuk.kindai.ac.jp>
+2018-11-22	Akira Kakuto <kakuto at fuk.kindai.ac.jp>

Modified: trunk/Build/source/libs/pixman/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/pixman/TLpatches/ChangeLog	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/TLpatches/ChangeLog	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,3 +1,8 @@
+2018-11-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import pixman-0.36.0.
+	* patch-01-hide-symbols: Adapted.
+
 2016-02-04  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import pixman-0.34.0.

Modified: trunk/Build/source/libs/pixman/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/pixman/TLpatches/TL-Changes	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/TLpatches/TL-Changes	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,4 +1,4 @@
-Changes applied to the pixman-0.34.0/ tree as obtained from:
+Changes applied to the pixman-0.36.0/ tree as obtained from:
 	http://cairographics.org/releases/
 
 Removed:
@@ -19,4 +19,3 @@
 Removed unused dirs:
 	demos
 	test
-

Modified: trunk/Build/source/libs/pixman/TLpatches/patch-01-hide-symbols
===================================================================
--- trunk/Build/source/libs/pixman/TLpatches/patch-01-hide-symbols	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/TLpatches/patch-01-hide-symbols	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,6 +1,6 @@
-diff -ur pixman-0.34.0.orig/pixman/pixman-compiler.h pixman-0.34.0/pixman/pixman-compiler.h
---- pixman-0.34.0.orig/pixman/pixman-compiler.h	Tue Jun 30 18:48:31 2015
-+++ pixman-0.34.0/pixman/pixman-compiler.h	Thu Feb 04 16:56:27 2016
+diff -ur pixman-0.36.0/pixman/pixman-compiler.h pixman-src/pixman/pixman-compiler.h
+--- pixman-0.36.0/pixman/pixman-compiler.h	Wed Apr 11 21:07:58 2018
++++ pixman-src/pixman/pixman-compiler.h	Thu Nov 22 15:59:02 2018
 @@ -91,7 +91,7 @@
  
  /* GCC visibility */

Modified: trunk/Build/source/libs/pixman/configure
===================================================================
--- trunk/Build/source/libs/pixman/configure	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/configure	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pixman (TeX Live) 0.34.0.
+# Generated by GNU Autoconf 2.69 for pixman (TeX Live) 0.36.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='pixman (TeX Live)'
 PACKAGE_TARNAME='pixman--tex-live-'
-PACKAGE_VERSION='0.34.0'
-PACKAGE_STRING='pixman (TeX Live) 0.34.0'
+PACKAGE_VERSION='0.36.0'
+PACKAGE_STRING='pixman (TeX Live) 0.36.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1281,7 +1281,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures pixman (TeX Live) 0.34.0 to adapt to many kinds of systems.
+\`configure' configures pixman (TeX Live) 0.36.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1348,7 +1348,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of pixman (TeX Live) 0.34.0:";;
+     short | recursive ) echo "Configuration of pixman (TeX Live) 0.36.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1445,7 +1445,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-pixman (TeX Live) configure 0.34.0
+pixman (TeX Live) configure 0.36.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1952,7 +1952,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by pixman (TeX Live) $as_me 0.34.0, which was
+It was created by pixman (TeX Live) $as_me 0.36.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3875,7 +3875,7 @@
 
 # Define the identity of the package.
  PACKAGE='pixman--tex-live-'
- VERSION='0.34.0'
+ VERSION='0.36.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4077,7 +4077,7 @@
 
 
 PIXMAN_VERSION_MAJOR=0
-PIXMAN_VERSION_MINOR=34
+PIXMAN_VERSION_MINOR=36
 PIXMAN_VERSION_MICRO=0
 
 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
@@ -6586,7 +6586,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by pixman (TeX Live) $as_me 0.34.0, which was
+This file was extended by pixman (TeX Live) $as_me 0.36.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6652,7 +6652,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-pixman (TeX Live) config.status 0.34.0
+pixman (TeX Live) config.status 0.36.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/pixman/pixman-src/Makefile.am
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/Makefile.am	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/Makefile.am	2018-11-22 07:19:28 UTC (rev 49220)
@@ -124,7 +124,7 @@
 	@echo "	(signed by`gpg --list-keys $(GPGKEY) | grep uid | cut -b4- | tr -s " "`)"
 	@echo ""
 	@echo "Git:"
-	@echo "	git://git.freedesktop.org/git/pixman"
+	@echo "	https://gitlab.freedesktop.org/pixman/pixman.git"
 	@echo "	tag: $(PACKAGE)-$(VERSION)"
 	@echo ""
 	@echo "Log:"

Modified: trunk/Build/source/libs/pixman/pixman-src/Makefile.win32.common
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/Makefile.win32.common	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/Makefile.win32.common	2018-11-22 07:19:28 UTC (rev 49220)
@@ -5,6 +5,10 @@
 AR = lib
 PERL = perl
 
+ifneq ($(shell echo ""),)
+RM = del
+endif
+
 ifeq ($(top_builddir),)
 top_builddir = $(top_srcdir)
 endif
@@ -45,12 +49,13 @@
 endif
 endif
 
+$(CFG_VAR):
+	@mkdir $@
 
-$(CFG_VAR)/%.obj: %.c $(libpixman_headers)
-	@mkdir -p $(CFG_VAR)
+$(CFG_VAR)/%.obj: %.c $(libpixman_headers) | $(CFG_VAR)
 	@$(CC) -c $(PIXMAN_CFLAGS) -Fo"$@" $<
 
-clean: inform
-	@$(RM) $(CFG_VAR)/*.{exe,ilk,lib,obj,pdb} $(BUILT_SOURCES) || exit 0
+clean: inform $(CFG_VAR)
+	@cd $(CFG_VAR) && echo > silence_error.exe && $(RM) *.exe *.ilk *.lib *.obj *.pdb
 
 .PHONY: inform clean

Modified: trunk/Build/source/libs/pixman/pixman-src/config.h.in
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/config.h.in	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/config.h.in	2018-11-22 07:19:28 UTC (rev 49220)
@@ -111,6 +111,9 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
+/* enable output that can be piped to gnuplot */
+#undef PIXMAN_GNUPLOT
+
 /* enable TIMER_BEGIN/TIMER_END macros */
 #undef PIXMAN_TIMERS
 

Modified: trunk/Build/source/libs/pixman/pixman-src/configure.ac
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/configure.ac	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/configure.ac	2018-11-22 07:19:28 UTC (rev 49220)
@@ -53,7 +53,7 @@
 #
 
 m4_define([pixman_major], 0)
-m4_define([pixman_minor], 34)
+m4_define([pixman_minor], 36)
 m4_define([pixman_micro], 0)
 
 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
@@ -834,6 +834,19 @@
 AC_SUBST(PIXMAN_TIMERS)
 
 dnl ===================================
+dnl gnuplot
+
+AC_ARG_ENABLE(gnuplot,
+   [AC_HELP_STRING([--enable-gnuplot],
+                   [enable output of filters that can be piped to gnuplot [default=no]])],
+   [enable_gnuplot=$enableval], [enable_gnuplot=no])
+
+if test $enable_gnuplot = yes ; then
+   AC_DEFINE(PIXMAN_GNUPLOT, 1, [enable output that can be piped to gnuplot])
+fi
+AC_SUBST(PIXMAN_GNUPLOT)
+
+dnl ===================================
 dnl GTK+
 
 AC_ARG_ENABLE(gtk,

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-access.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-access.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-access.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -642,7 +642,49 @@
 }
 
 /* Expects a float buffer */
+#ifndef PIXMAN_FB_ACCESSORS
 static void
+fetch_scanline_rgbf_float (bits_image_t   *image,
+			   int             x,
+			   int             y,
+			   int             width,
+			   uint32_t *      b,
+			   const uint32_t *mask)
+{
+    const float *bits = (float *)image->bits + y * image->rowstride;
+    const float *pixel = bits + x * 3;
+    argb_t *buffer = (argb_t *)b;
+
+    for (; width--; buffer++) {
+	buffer->r = *pixel++;
+	buffer->g = *pixel++;
+	buffer->b = *pixel++;
+	buffer->a = 1.f;
+    }
+}
+
+static void
+fetch_scanline_rgbaf_float (bits_image_t   *image,
+			    int             x,
+			    int             y,
+			    int             width,
+			    uint32_t *      b,
+			    const uint32_t *mask)
+{
+    const float *bits = (float *)image->bits + y * image->rowstride;
+    const float *pixel = bits + x * 4;
+    argb_t *buffer = (argb_t *)b;
+
+    for (; width--; buffer++) {
+	buffer->r = *pixel++;
+	buffer->g = *pixel++;
+	buffer->b = *pixel++;
+	buffer->a = *pixel++;
+    }
+}
+#endif
+
+static void
 fetch_scanline_x2r10g10b10_float (bits_image_t   *image,
 				  int             x,
 				  int             y,
@@ -805,7 +847,41 @@
 
 /**************************** Pixel wise fetching *****************************/
 
+#ifndef PIXMAN_FB_ACCESSORS
 static argb_t
+fetch_pixel_rgbf_float (bits_image_t *image,
+			int	    offset,
+			int	    line)
+{
+    float *bits = (float *)image->bits + line * image->rowstride;
+    argb_t argb;
+
+    argb.r = bits[offset * 3];
+    argb.g = bits[offset * 3 + 1];
+    argb.b = bits[offset * 3 + 2];
+    argb.a = 1.f;
+
+    return argb;
+}
+
+static argb_t
+fetch_pixel_rgbaf_float (bits_image_t *image,
+			 int	    offset,
+			 int	    line)
+{
+    float *bits = (float *)image->bits + line * image->rowstride;
+    argb_t argb;
+
+    argb.r = bits[offset * 4];
+    argb.g = bits[offset * 4 + 1];
+    argb.b = bits[offset * 4 + 2];
+    argb.a = bits[offset * 4 + 3];
+
+    return argb;
+}
+#endif
+
+static argb_t
 fetch_pixel_x2r10g10b10_float (bits_image_t *image,
 			       int	   offset,
 			       int           line)
@@ -962,7 +1038,46 @@
 
 /*********************************** Store ************************************/
 
+#ifndef PIXMAN_FB_ACCESSORS
 static void
+store_scanline_rgbaf_float (bits_image_t *  image,
+			    int             x,
+			    int             y,
+			    int             width,
+			    const uint32_t *v)
+{
+    float *bits = (float *)image->bits + image->rowstride * y + 4 * x;
+    const argb_t *values = (argb_t *)v;
+
+    for (; width; width--, values++)
+    {
+	*bits++ = values->r;
+	*bits++ = values->g;
+	*bits++ = values->b;
+	*bits++ = values->a;
+    }
+}
+
+static void
+store_scanline_rgbf_float (bits_image_t *  image,
+			   int             x,
+			   int             y,
+			   int             width,
+			   const uint32_t *v)
+{
+    float *bits = (float *)image->bits + image->rowstride * y + 3 * x;
+    const argb_t *values = (argb_t *)v;
+
+    for (; width; width--, values++)
+    {
+	*bits++ = values->r;
+	*bits++ = values->g;
+	*bits++ = values->b;
+    }
+}
+#endif
+
+static void
 store_scanline_a2r10g10b10_float (bits_image_t *  image,
 				  int             x,
 				  int             y,
@@ -1351,7 +1466,18 @@
     FORMAT_INFO (g1),
     
 /* Wide formats */
-    
+#ifndef PIXMAN_FB_ACCESSORS
+    { PIXMAN_rgba_float,
+      NULL, fetch_scanline_rgbaf_float,
+      fetch_pixel_generic_lossy_32, fetch_pixel_rgbaf_float,
+      NULL, store_scanline_rgbaf_float },
+
+    { PIXMAN_rgb_float,
+      NULL, fetch_scanline_rgbf_float,
+      fetch_pixel_generic_lossy_32, fetch_pixel_rgbf_float,
+      NULL, store_scanline_rgbf_float },
+#endif
+
     { PIXMAN_a2r10g10b10,
       NULL, fetch_scanline_a2r10g10b10_float,
       fetch_pixel_generic_lossy_32, fetch_pixel_a2r10g10b10_float,

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-bits-image.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-bits-image.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-bits-image.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -948,6 +948,9 @@
 {
     uint32_t *free_me = NULL;
 
+    if (PIXMAN_FORMAT_BPP (format) == 128)
+	return_val_if_fail(!(rowstride % 4), FALSE);
+
     if (!bits && width && height)
     {
 	int rowstride_bytes;

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-fast-path.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-fast-path.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-fast-path.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -3258,9 +3258,9 @@
     },
 
 #define AFFINE_FAST_PATHS(name, format, repeat)				\
-    SEPARABLE_CONVOLUTION_AFFINE_FAST_PATH(name, format, repeat)	\
+    NEAREST_AFFINE_FAST_PATH(name, format, repeat)			\
     BILINEAR_AFFINE_FAST_PATH(name, format, repeat)			\
-    NEAREST_AFFINE_FAST_PATH(name, format, repeat)
+    SEPARABLE_CONVOLUTION_AFFINE_FAST_PATH(name, format, repeat)
     
     AFFINE_FAST_PATHS (pad_a8r8g8b8, a8r8g8b8, PAD)
     AFFINE_FAST_PATHS (none_a8r8g8b8, a8r8g8b8, NONE)

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-filter.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-filter.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-filter.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -109,14 +109,16 @@
 
     if (ax < 1)
     {
-	return ((12 - 9 * B - 6 * C) * ax * ax * ax +
-		(-18 + 12 * B + 6 * C) * ax * ax + (6 - 2 * B)) / 6;
+	return (((12 - 9 * B - 6 * C) * ax +
+		 (-18 + 12 * B + 6 * C)) * ax * ax +
+		(6 - 2 * B)) / 6;
     }
-    else if (ax >= 1 && ax < 2)
+    else if (ax < 2)
     {
-	return ((-B - 6 * C) * ax * ax * ax +
-		(6 * B + 30 * C) * ax * ax + (-12 * B - 48 * C) *
-		ax + (8 * B + 24 * C)) / 6;
+	return ((((-B - 6 * C) * ax +
+		  (6 * B + 30 * C)) * ax +
+		 (-12 * B - 48 * C)) * ax +
+		(8 * B + 24 * C)) / 6;
     }
     else
     {
@@ -141,7 +143,7 @@
     { PIXMAN_KERNEL_BOX,	        box_kernel,       1.0 },
     { PIXMAN_KERNEL_LINEAR,	        linear_kernel,    2.0 },
     { PIXMAN_KERNEL_CUBIC,		cubic_kernel,     4.0 },
-    { PIXMAN_KERNEL_GAUSSIAN,	        gaussian_kernel,  6 * SIGMA },
+    { PIXMAN_KERNEL_GAUSSIAN,	        gaussian_kernel,  5.0 },
     { PIXMAN_KERNEL_LANCZOS2,	        lanczos2_kernel,  4.0 },
     { PIXMAN_KERNEL_LANCZOS3,	        lanczos3_kernel,  6.0 },
     { PIXMAN_KERNEL_LANCZOS3_STRETCHED, nice_kernel,      8.0 },
@@ -160,18 +162,21 @@
 	  pixman_kernel_t kernel2, double scale, double x2,
 	  double width)
 {
-    /* If the integration interval crosses zero, break it into
-     * two separate integrals. This ensures that filters such
-     * as LINEAR that are not differentiable at 0 will still
-     * integrate properly.
+    if (kernel1 == PIXMAN_KERNEL_BOX && kernel2 == PIXMAN_KERNEL_BOX)
+    {
+	return width;
+    }
+    /* The LINEAR filter is not differentiable at 0, so if the
+     * integration interval crosses zero, break it into two
+     * separate integrals.
      */
-    if (x1 < 0 && x1 + width > 0)
+    else if (kernel1 == PIXMAN_KERNEL_LINEAR && x1 < 0 && x1 + width > 0)
     {
 	return
 	    integral (kernel1, x1, kernel2, scale, x2, - x1) +
 	    integral (kernel1, 0, kernel2, scale, x2 - x1, width + x1);
     }
-    else if (x2 < 0 && x2 + width > 0)
+    else if (kernel2 == PIXMAN_KERNEL_LINEAR && x2 < 0 && x2 + width > 0)
     {
 	return
 	    integral (kernel1, x1, kernel2, scale, x2, - x2) +
@@ -189,13 +194,19 @@
     }
     else
     {
-	/* Integration via Simpson's rule */
-#define N_SEGMENTS 128
+	/* Integration via Simpson's rule
+	 * See http://www.intmath.com/integration/6-simpsons-rule.php
+	 * 12 segments (6 cubic approximations) seems to produce best
+	 * result for lanczos3.linear, which was the combination that
+	 * showed the most errors.  This makes sense as the lanczos3
+	 * filter is 6 wide.
+	 */
+#define N_SEGMENTS 12
 #define SAMPLE(a1, a2)							\
 	(filters[kernel1].func ((a1)) * filters[kernel2].func ((a2) * scale))
 	
 	double s = 0.0;
-	double h = width / (double)N_SEGMENTS;
+	double h = width / N_SEGMENTS;
 	int i;
 
 	s = SAMPLE (x1, x2);
@@ -204,11 +215,14 @@
 	{
 	    double a1 = x1 + h * i;
 	    double a2 = x2 + h * i;
+	    s += 4 * SAMPLE (a1, a2);
+	}
 
+	for (i = 2; i < N_SEGMENTS; i += 2)
+	{
+	    double a1 = x1 + h * i;
+	    double a2 = x2 + h * i;
 	    s += 2 * SAMPLE (a1, a2);
-
-	    if (i >= 2 && i < N_SEGMENTS - 1)
-		s += 4 * SAMPLE (a1, a2);
 	}
 
 	s += SAMPLE (x1 + width, x2 + width);
@@ -217,25 +231,17 @@
     }
 }
 
-static pixman_fixed_t *
-create_1d_filter (int             *width,
+static void
+create_1d_filter (int              width,
 		  pixman_kernel_t  reconstruct,
 		  pixman_kernel_t  sample,
 		  double           scale,
-		  int              n_phases)
+		  int              n_phases,
+		  pixman_fixed_t *p)
 {
-    pixman_fixed_t *params, *p;
     double step;
-    double size;
     int i;
 
-    size = scale * filters[sample].width + filters[reconstruct].width;
-    *width = ceil (size);
-
-    p = params = malloc (*width * n_phases * sizeof (pixman_fixed_t));
-    if (!params)
-        return NULL;
-
     step = 1.0 / n_phases;
 
     for (i = 0; i < n_phases; ++i)
@@ -243,7 +249,7 @@
         double frac = step / 2.0 + i * step;
 	pixman_fixed_t new_total;
         int x, x1, x2;
-	double total;
+	double total, e;
 
 	/* Sample convolution of reconstruction and sampling
 	 * filter. See rounding.txt regarding the rounding
@@ -250,8 +256,8 @@
 	 * and sample positions.
 	 */
 
-	x1 = ceil (frac - *width / 2.0 - 0.5);
-        x2 = x1 + *width;
+	x1 = ceil (frac - width / 2.0 - 0.5);
+	x2 = x1 + width;
 
 	total = 0;
         for (x = x1; x < x2; ++x)
@@ -274,29 +280,154 @@
 			      ihigh - ilow);
 	    }
 
-	    total += c;
-            *p++ = (pixman_fixed_t)(c * 65536.0 + 0.5);
+            *p = (pixman_fixed_t)floor (c * 65536.0 + 0.5);
+	    total += *p;
+	    p++;
         }
 
-	/* Normalize */
-	p -= *width;
-        total = 1 / total;
+	/* Normalize, with error diffusion */
+	p -= width;
+        total = 65536.0 / total;
         new_total = 0;
+	e = 0.0;
 	for (x = x1; x < x2; ++x)
 	{
-	    pixman_fixed_t t = (*p) * total + 0.5;
+	    double v = (*p) * total + e;
+	    pixman_fixed_t t = floor (v + 0.5);
 
+	    e = v - t;
 	    new_total += t;
 	    *p++ = t;
 	}
 
-	if (new_total != pixman_fixed_1)
-	    *(p - *width / 2) += (pixman_fixed_1 - new_total);
+	/* pixman_fixed_e's worth of error may remain; put it
+	 * at the first sample, since that is the only one that
+	 * hasn't had any error diffused into it.
+	 */
+	*(p - width) += pixman_fixed_1 - new_total;
     }
+}
 
-    return params;
+
+static int
+filter_width (pixman_kernel_t reconstruct, pixman_kernel_t sample, double size)
+{
+    return ceil (filters[reconstruct].width + size * filters[sample].width);
 }
 
+#ifdef PIXMAN_GNUPLOT
+
+/* If enable-gnuplot is configured, then you can pipe the output of a
+ * pixman-using program to gnuplot and get a continuously-updated plot
+ * of the horizontal filter. This works well with demos/scale to test
+ * the filter generation.
+ *
+ * The plot is all the different subposition filters shuffled
+ * together. This is misleading in a few cases:
+ *
+ *  IMPULSE.BOX - goes up and down as the subfilters have different
+ *		  numbers of non-zero samples
+ *  IMPULSE.TRIANGLE - somewhat crooked for the same reason
+ *  1-wide filters - looks triangular, but a 1-wide box would be more
+ *		     accurate
+ */
+static void
+gnuplot_filter (int width, int n_phases, const pixman_fixed_t* p)
+{
+    double step;
+    int i, j;
+    int first;
+
+    step = 1.0 / n_phases;
+
+    printf ("set style line 1 lc rgb '#0060ad' lt 1 lw 0.5 pt 7 pi 1 ps 0.5\n");
+    printf ("plot [x=%g:%g] '-' with linespoints ls 1\n", -width*0.5, width*0.5);
+    /* Print a point at the origin so that y==0 line is included: */
+    printf ("0 0\n\n");
+
+    /* The position of the first sample of the phase corresponding to
+     * frac is given by:
+     * 
+     *     ceil (frac - width / 2.0 - 0.5) + 0.5 - frac
+     * 
+     * We have to find the frac that minimizes this expression.
+     * 
+     * For odd widths, we have
+     * 
+     *     ceil (frac - width / 2.0 - 0.5) + 0.5 - frac
+     *   = ceil (frac) + K - frac
+     *   = 1 + K - frac
+     * 
+     * for some K, so this is minimized when frac is maximized and
+     * strictly growing with frac. So for odd widths, we can simply
+     * start at the last phase and go backwards.
+     * 
+     * For even widths, we have
+     * 
+     *     ceil (frac - width / 2.0 - 0.5) + 0.5 - frac
+     *   = ceil (frac - 0.5) + K - frac
+     * 
+     * The graph for this function (ignoring K) looks like this:
+     * 
+     *        0.5
+     *           |    |\ 
+     *           |    | \ 
+     *           |    |  \ 
+     *         0 |    |   \ 
+     *           |\   |
+     *           | \  |
+     *           |  \ |
+     *      -0.5 |   \|
+     *   ---------------------------------
+     *           0    0.5   1
+     * 
+     * So in this case we need to start with the phase whose frac is
+     * less than, but as close as possible to 0.5, then go backwards
+     * until we hit the first phase, then wrap around to the last
+     * phase and continue backwards.
+     * 
+     * Which phase is as close as possible 0.5? The locations of the
+     * sampling point corresponding to the kth phase is given by
+     * 1/(2 * n_phases) + k / n_phases:
+     * 
+     *         1/(2 * n_phases) + k / n_phases = 0.5
+     *  
+     * from which it follows that
+     * 
+     *         k = (n_phases - 1) / 2
+     * 
+     * rounded down is the phase in question.
+     */
+    if (width & 1)
+	first = n_phases - 1;
+    else
+	first = (n_phases - 1) / 2;
+
+    for (j = 0; j < width; ++j)
+    {
+	for (i = 0; i < n_phases; ++i)
+	{
+	    int phase = first - i;
+	    double frac, pos;
+
+	    if (phase < 0)
+		phase = n_phases + phase;
+
+	    frac = step / 2.0 + phase * step;
+	    pos = ceil (frac - width / 2.0 - 0.5) + 0.5 - frac + j;
+
+	    printf ("%g %g\n",
+		    pos,
+		    pixman_fixed_to_double (*(p + phase * width + j)));
+	}
+    }
+
+    printf ("e\n");
+    fflush (stdout);
+}
+
+#endif
+
 /* Create the parameter list for a SEPARABLE_CONVOLUTION filter
  * with the given kernels and scale parameters
  */
@@ -313,24 +444,21 @@
 {
     double sx = fabs (pixman_fixed_to_double (scale_x));
     double sy = fabs (pixman_fixed_to_double (scale_y));
-    pixman_fixed_t *horz = NULL, *vert = NULL, *params = NULL;
+    pixman_fixed_t *params;
     int subsample_x, subsample_y;
     int width, height;
 
+    width = filter_width (reconstruct_x, sample_x, sx);
     subsample_x = (1 << subsample_bits_x);
+
+    height = filter_width (reconstruct_y, sample_y, sy);
     subsample_y = (1 << subsample_bits_y);
 
-    horz = create_1d_filter (&width, reconstruct_x, sample_x, sx, subsample_x);
-    vert = create_1d_filter (&height, reconstruct_y, sample_y, sy, subsample_y);
-
-    if (!horz || !vert)
-        goto out;
-    
     *n_values = 4 + width * subsample_x + height * subsample_y;
     
     params = malloc (*n_values * sizeof (pixman_fixed_t));
     if (!params)
-        goto out;
+	return NULL;
 
     params[0] = pixman_int_to_fixed (width);
     params[1] = pixman_int_to_fixed (height);
@@ -337,14 +465,14 @@
     params[2] = pixman_int_to_fixed (subsample_bits_x);
     params[3] = pixman_int_to_fixed (subsample_bits_y);
 
-    memcpy (params + 4, horz,
-	    width * subsample_x * sizeof (pixman_fixed_t));
-    memcpy (params + 4 + width * subsample_x, vert,
-	    height * subsample_y * sizeof (pixman_fixed_t));
+    create_1d_filter (width, reconstruct_x, sample_x, sx, subsample_x,
+		      params + 4);
+    create_1d_filter (height, reconstruct_y, sample_y, sy, subsample_y,
+		      params + 4 + width * subsample_x);
 
-out:
-    free (horz);
-    free (vert);
+#ifdef PIXMAN_GNUPLOT
+    gnuplot_filter(width, subsample_x, params + 4);
+#endif
 
     return params;
 }

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-image.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-image.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-image.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -335,37 +335,47 @@
 	{
 	    flags |= FAST_PATH_NEAREST_FILTER;
 	}
-	else if (
-	    /* affine and integer translation components in matrix ... */
-	    ((flags & FAST_PATH_AFFINE_TRANSFORM) &&
-	     !pixman_fixed_frac (image->common.transform->matrix[0][2] |
-				 image->common.transform->matrix[1][2])) &&
-	    (
-		/* ... combined with a simple rotation */
-		(flags & (FAST_PATH_ROTATE_90_TRANSFORM |
-			  FAST_PATH_ROTATE_180_TRANSFORM |
-			  FAST_PATH_ROTATE_270_TRANSFORM)) ||
-		/* ... or combined with a simple non-rotated translation */
-		(image->common.transform->matrix[0][0] == pixman_fixed_1 &&
-		 image->common.transform->matrix[1][1] == pixman_fixed_1 &&
-		 image->common.transform->matrix[0][1] == 0 &&
-		 image->common.transform->matrix[1][0] == 0)
-		)
-	    )
+	else if (flags & FAST_PATH_AFFINE_TRANSFORM)
 	{
-	    /* FIXME: there are some affine-test failures, showing that
-	     * handling of BILINEAR and NEAREST filter is not quite
-	     * equivalent when getting close to 32K for the translation
-	     * components of the matrix. That's likely some bug, but for
-	     * now just skip BILINEAR->NEAREST optimization in this case.
+	    /* Suppose the transform is
+	     *
+	     *    [ t00, t01, t02 ]
+	     *    [ t10, t11, t12 ]
+	     *    [   0,   0,   1 ]
+	     *
+	     * and the destination coordinates are (n + 0.5, m + 0.5). Then
+	     * the transformed x coordinate is:
+	     *
+	     *     tx = t00 * (n + 0.5) + t01 * (m + 0.5) + t02
+	     *        = t00 * n + t01 * m + t02 + (t00 + t01) * 0.5
+	     *
+	     * which implies that if t00, t01 and t02 are all integers
+	     * and (t00 + t01) is odd, then tx will be an integer plus 0.5,
+	     * which means a BILINEAR filter will reduce to NEAREST. The same
+	     * applies in the y direction
 	     */
-	    pixman_fixed_t magic_limit = pixman_int_to_fixed (30000);
-	    if (image->common.transform->matrix[0][2] <= magic_limit  &&
-	        image->common.transform->matrix[1][2] <= magic_limit  &&
-	        image->common.transform->matrix[0][2] >= -magic_limit &&
-	        image->common.transform->matrix[1][2] >= -magic_limit)
+	    pixman_fixed_t (*t)[3] = image->common.transform->matrix;
+
+	    if ((pixman_fixed_frac (
+		     t[0][0] | t[0][1] | t[0][2] |
+		     t[1][0] | t[1][1] | t[1][2]) == 0)			&&
+		(pixman_fixed_to_int (
+		    (t[0][0] + t[0][1]) & (t[1][0] + t[1][1])) % 2) == 1)
 	    {
-		flags |= FAST_PATH_NEAREST_FILTER;
+		/* FIXME: there are some affine-test failures, showing that
+		 * handling of BILINEAR and NEAREST filter is not quite
+		 * equivalent when getting close to 32K for the translation
+		 * components of the matrix. That's likely some bug, but for
+		 * now just skip BILINEAR->NEAREST optimization in this case.
+		 */
+		pixman_fixed_t magic_limit = pixman_int_to_fixed (30000);
+		if (image->common.transform->matrix[0][2] <= magic_limit  &&
+		    image->common.transform->matrix[1][2] <= magic_limit  &&
+		    image->common.transform->matrix[0][2] >= -magic_limit &&
+		    image->common.transform->matrix[1][2] >= -magic_limit)
+		{
+		    flags |= FAST_PATH_NEAREST_FILTER;
+		}
 	    }
 	}
 	break;
@@ -832,6 +842,10 @@
 
     if (image->type == BITS)
     {
+	/* Accessors only work for <= 32 bpp. */
+	if (PIXMAN_FORMAT_BPP(image->bits.format) > 32)
+	    return_if_fail (!read_func && !write_func);
+
 	image->bits.read_func = read_func;
 	image->bits.write_func = write_func;
 

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-private.h
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-private.h	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-private.h	2018-11-22 07:19:28 UTC (rev 49220)
@@ -1,5 +1,3 @@
-#include <float.h>
-
 #ifndef PIXMAN_PRIVATE_H
 #define PIXMAN_PRIVATE_H
 
@@ -30,6 +28,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stddef.h>
+#include <float.h>
 
 #include "pixman-compiler.h"
 

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-solid-fill.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-solid-fill.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-solid-fill.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -30,10 +30,10 @@
 color_to_uint32 (const pixman_color_t *color)
 {
     return
-        (color->alpha >> 8 << 24) |
-        (color->red >> 8 << 16) |
-        (color->green & 0xff00) |
-        (color->blue >> 8);
+        ((unsigned int) color->alpha >> 8 << 24) |
+        ((unsigned int) color->red >> 8 << 16) |
+        ((unsigned int) color->green & 0xff00) |
+        ((unsigned int) color->blue >> 8);
 }
 
 static argb_t

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-vmx.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-vmx.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman-vmx.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -227,7 +227,7 @@
 #define COMPUTE_SHIFT_MASKC(dest, source, mask)
 
 # define LOAD_VECTOR(source)				\
-    v ## source = *((typeof(v ## source)*)source);
+    v ## source = (typeof(v ## source))vec_xl(0, source);
 
 # define LOAD_VECTORS(dest, source)			\
     LOAD_VECTOR(source);				\

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.c
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.c	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.c	2018-11-22 07:19:28 UTC (rev 49220)
@@ -777,6 +777,11 @@
 {
     uint32_t c = color_to_uint32 (color);
 
+    if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_RGBA_FLOAT)
+    {
+	return FALSE;
+    }
+
     if (!(format == PIXMAN_a8r8g8b8     ||
           format == PIXMAN_x8r8g8b8     ||
           format == PIXMAN_a8b8g8r8     ||

Modified: trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.h
===================================================================
--- trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.h	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/pixman-src/pixman/pixman.h	2018-11-22 07:19:28 UTC (rev 49220)
@@ -654,12 +654,24 @@
 					 ((g) << 4) |	  \
 					 ((b)))
 
-#define PIXMAN_FORMAT_BPP(f)	(((f) >> 24)       )
-#define PIXMAN_FORMAT_TYPE(f)	(((f) >> 16) & 0xff)
-#define PIXMAN_FORMAT_A(f)	(((f) >> 12) & 0x0f)
-#define PIXMAN_FORMAT_R(f)	(((f) >>  8) & 0x0f)
-#define PIXMAN_FORMAT_G(f)	(((f) >>  4) & 0x0f)
-#define PIXMAN_FORMAT_B(f)	(((f)      ) & 0x0f)
+#define PIXMAN_FORMAT_BYTE(bpp,type,a,r,g,b) \
+	(((bpp >> 3) << 24) | \
+	(3 << 22) | ((type) << 16) | \
+	((a >> 3) << 12) | \
+	((r >> 3) << 8) | \
+	((g >> 3) << 4) | \
+	((b >> 3)))
+
+#define PIXMAN_FORMAT_RESHIFT(val, ofs, num) \
+	(((val >> (ofs)) & ((1 << (num)) - 1)) << ((val >> 22) & 3))
+
+#define PIXMAN_FORMAT_BPP(f)	PIXMAN_FORMAT_RESHIFT(f, 24, 8)
+#define PIXMAN_FORMAT_SHIFT(f)	((uint32_t)((f >> 22) & 3))
+#define PIXMAN_FORMAT_TYPE(f)	(((f) >> 16) & 0x3f)
+#define PIXMAN_FORMAT_A(f)	PIXMAN_FORMAT_RESHIFT(f, 12, 4)
+#define PIXMAN_FORMAT_R(f)	PIXMAN_FORMAT_RESHIFT(f, 8, 4)
+#define PIXMAN_FORMAT_G(f)	PIXMAN_FORMAT_RESHIFT(f, 4, 4)
+#define PIXMAN_FORMAT_B(f)	PIXMAN_FORMAT_RESHIFT(f, 0, 4)
 #define PIXMAN_FORMAT_RGB(f)	(((f)      ) & 0xfff)
 #define PIXMAN_FORMAT_VIS(f)	(((f)      ) & 0xffff)
 #define PIXMAN_FORMAT_DEPTH(f)	(PIXMAN_FORMAT_A(f) +	\
@@ -678,15 +690,22 @@
 #define PIXMAN_TYPE_BGRA	8
 #define PIXMAN_TYPE_RGBA	9
 #define PIXMAN_TYPE_ARGB_SRGB	10
+#define PIXMAN_TYPE_RGBA_FLOAT	11
 
 #define PIXMAN_FORMAT_COLOR(f)				\
 	(PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_ARGB ||	\
 	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_ABGR ||	\
 	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_BGRA ||	\
-	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_RGBA)
+	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_RGBA ||	\
+	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_RGBA_FLOAT)
 
+typedef enum {
+/* 128bpp formats */
+    PIXMAN_rgba_float =	PIXMAN_FORMAT_BYTE(128,PIXMAN_TYPE_RGBA_FLOAT,32,32,32,32),
+/* 96bpp formats */
+    PIXMAN_rgb_float =	PIXMAN_FORMAT_BYTE(96,PIXMAN_TYPE_RGBA_FLOAT,0,32,32,32),
+
 /* 32bpp formats */
-typedef enum {
     PIXMAN_a8r8g8b8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,8,8,8,8),
     PIXMAN_x8r8g8b8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,8,8,8),
     PIXMAN_a8b8g8r8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,8,8,8,8),

Modified: trunk/Build/source/libs/pixman/version.ac
===================================================================
--- trunk/Build/source/libs/pixman/version.ac	2018-11-22 05:58:42 UTC (rev 49219)
+++ trunk/Build/source/libs/pixman/version.ac	2018-11-22 07:19:28 UTC (rev 49220)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current pixman version
-m4_define([pixman_version], [0.34.0])
+m4_define([pixman_version], [0.36.0])



More information about the tex-live-commits mailing list