st/vega: Remove.
authorJose Fonseca <jfonseca@vmware.com>
Tue, 3 Mar 2015 16:58:21 +0000 (16:58 +0000)
committerJose Fonseca <jfonseca@vmware.com>
Wed, 4 Mar 2015 11:01:45 +0000 (11:01 +0000)
OpenVG API seems to have dwindled away.  The code
would still be interesting if we wanted to implement NV_path_rendering
but given the trend of the next gen graphics APIs, it seems
unlikely that this becomes ARB or core.

v2: Remove a few "openvg" references left, per Emil Velikov.

Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
v3: Update release notes.

81 files changed:
configure.ac
docs/contents.html
docs/egl.html
docs/openvg.html [deleted file]
docs/relnotes/10.6.0.html
docs/relnotes/7.6.html
docs/sourcetree.html
include/VG/openvg.h [deleted file]
include/VG/vgext.h [deleted file]
include/VG/vgplatform.h [deleted file]
include/VG/vgu.h [deleted file]
src/SConscript
src/gallium/Makefile.am
src/gallium/SConscript
src/gallium/docs/source/distro.rst
src/gallium/state_trackers/vega/.gitignore [deleted file]
src/gallium/state_trackers/vega/Makefile.am [deleted file]
src/gallium/state_trackers/vega/Makefile.sources [deleted file]
src/gallium/state_trackers/vega/SConscript [deleted file]
src/gallium/state_trackers/vega/api.c [deleted file]
src/gallium/state_trackers/vega/api.h [deleted file]
src/gallium/state_trackers/vega/api_consts.h [deleted file]
src/gallium/state_trackers/vega/api_context.c [deleted file]
src/gallium/state_trackers/vega/api_filters.c [deleted file]
src/gallium/state_trackers/vega/api_images.c [deleted file]
src/gallium/state_trackers/vega/api_masks.c [deleted file]
src/gallium/state_trackers/vega/api_misc.c [deleted file]
src/gallium/state_trackers/vega/api_paint.c [deleted file]
src/gallium/state_trackers/vega/api_params.c [deleted file]
src/gallium/state_trackers/vega/api_path.c [deleted file]
src/gallium/state_trackers/vega/api_text.c [deleted file]
src/gallium/state_trackers/vega/api_transform.c [deleted file]
src/gallium/state_trackers/vega/arc.c [deleted file]
src/gallium/state_trackers/vega/arc.h [deleted file]
src/gallium/state_trackers/vega/asm_fill.h [deleted file]
src/gallium/state_trackers/vega/asm_filters.h [deleted file]
src/gallium/state_trackers/vega/asm_util.h [deleted file]
src/gallium/state_trackers/vega/bezier.c [deleted file]
src/gallium/state_trackers/vega/bezier.h [deleted file]
src/gallium/state_trackers/vega/handle.c [deleted file]
src/gallium/state_trackers/vega/handle.h [deleted file]
src/gallium/state_trackers/vega/image.c [deleted file]
src/gallium/state_trackers/vega/image.h [deleted file]
src/gallium/state_trackers/vega/mask.c [deleted file]
src/gallium/state_trackers/vega/mask.h [deleted file]
src/gallium/state_trackers/vega/matrix.h [deleted file]
src/gallium/state_trackers/vega/paint.c [deleted file]
src/gallium/state_trackers/vega/paint.h [deleted file]
src/gallium/state_trackers/vega/path.c [deleted file]
src/gallium/state_trackers/vega/path.h [deleted file]
src/gallium/state_trackers/vega/path_utils.h [deleted file]
src/gallium/state_trackers/vega/polygon.c [deleted file]
src/gallium/state_trackers/vega/polygon.h [deleted file]
src/gallium/state_trackers/vega/renderer.c [deleted file]
src/gallium/state_trackers/vega/renderer.h [deleted file]
src/gallium/state_trackers/vega/shader.c [deleted file]
src/gallium/state_trackers/vega/shader.h [deleted file]
src/gallium/state_trackers/vega/shaders_cache.c [deleted file]
src/gallium/state_trackers/vega/shaders_cache.h [deleted file]
src/gallium/state_trackers/vega/stroker.c [deleted file]
src/gallium/state_trackers/vega/stroker.h [deleted file]
src/gallium/state_trackers/vega/text.c [deleted file]
src/gallium/state_trackers/vega/text.h [deleted file]
src/gallium/state_trackers/vega/util_array.h [deleted file]
src/gallium/state_trackers/vega/vg_api.h [deleted file]
src/gallium/state_trackers/vega/vg_context.c [deleted file]
src/gallium/state_trackers/vega/vg_context.h [deleted file]
src/gallium/state_trackers/vega/vg_manager.c [deleted file]
src/gallium/state_trackers/vega/vg_manager.h [deleted file]
src/gallium/state_trackers/vega/vg_state.c [deleted file]
src/gallium/state_trackers/vega/vg_state.h [deleted file]
src/gallium/state_trackers/vega/vg_translate.c [deleted file]
src/gallium/state_trackers/vega/vg_translate.h [deleted file]
src/gallium/state_trackers/vega/vgu.c [deleted file]
src/mapi/Makefile.am
src/mapi/mapi_abi.py
src/mapi/vgapi/.gitignore [deleted file]
src/mapi/vgapi/Makefile.am [deleted file]
src/mapi/vgapi/SConscript [deleted file]
src/mapi/vgapi/vg.pc.in [deleted file]
src/mapi/vgapi/vgapi.csv [deleted file]

index c5abbfd0784e82156bc61f9b80cc40098df72c64..ad64df012318ca1bb931c423cce73710ee23dd07 100644 (file)
@@ -692,11 +692,6 @@ AC_ARG_ENABLE([gles2],
         [enable support for OpenGL ES 2.x API @<:@default=disabled@:>@])],
     [enable_gles2="$enableval"],
     [enable_gles2=no])
-AC_ARG_ENABLE([openvg],
-    [AS_HELP_STRING([--enable-openvg],
-        [enable support for OpenVG API @<:@default=disabled@:>@])],
-    [enable_openvg="$enableval"],
-    [enable_openvg=no])
 
 AC_ARG_ENABLE([dri],
     [AS_HELP_STRING([--enable-dri],
@@ -827,7 +822,6 @@ if test "x$enable_opengl" = xno -a \
         "x$enable_gles1" = xno -a \
         "x$enable_gles2" = xno -a \
         "x$enable_nine" = xno -a \
-        "x$enable_openvg" = xno -a \
         "x$enable_xa" = xno -a \
         "x$enable_xvmc" = xno -a \
         "x$enable_vdpau" = xno -a \
@@ -1547,29 +1541,6 @@ if test "x$enable_xa" = xyes; then
 fi
 AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
 
-dnl
-dnl OpenVG configuration
-dnl
-VG_LIB_DEPS=""
-
-if test "x$enable_openvg" = xyes; then
-    if test "x$enable_egl" = xno; then
-        AC_MSG_ERROR([cannot enable OpenVG without EGL])
-    fi
-    if test -z "$with_gallium_drivers"; then
-        AC_MSG_ERROR([cannot enable OpenVG without Gallium])
-    fi
-
-    AC_MSG_ERROR([Cannot enable OpenVG, because egl_gallium has been removed and
-                  OpenVG has not been integrated into standard libEGL yet])
-
-    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
-    VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS $PTHREAD_LIBS"
-    VG_PC_LIB_PRIV="-lm $CLOCK_LIB $PTHREAD_LIBS $DLOPEN_LIBS"
-    AC_SUBST([VG_PC_LIB_PRIV])
-fi
-AM_CONDITIONAL(HAVE_OPENVG, test "x$enable_openvg" = xyes)
-
 dnl
 dnl Gallium G3DVL configuration
 dnl
@@ -2400,7 +2371,6 @@ AC_CONFIG_FILES([Makefile
                src/gallium/state_trackers/osmesa/Makefile
                src/gallium/state_trackers/va/Makefile
                src/gallium/state_trackers/vdpau/Makefile
-               src/gallium/state_trackers/vega/Makefile
                src/gallium/state_trackers/xa/Makefile
                src/gallium/state_trackers/xvmc/Makefile
                src/gallium/targets/d3dadapter9/Makefile
@@ -2478,7 +2448,6 @@ echo "        includedir:      $includedir"
 dnl API info
 echo ""
 echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
-echo "        OpenVG:          $enable_openvg"
 
 dnl Driver info
 echo ""
index 50c0d5913609644dc97d47f7b34d96584881615b..6612cbefa8472248f57ecd9bb181cece51e7884c 100644 (file)
@@ -61,7 +61,6 @@
 <li><a href="shading.html" target="_parent">Shading Language</a>
 <li><a href="egl.html" target="_parent">EGL</a>
 <li><a href="opengles.html" target="_parent">OpenGL ES</a>
-<li><a href="openvg.html" target="_parent">OpenVG / Vega</a>
 <li><a href="envvars.html" target="_parent">Environment Variables</a>
 <li><a href="osmesa.html" target="_parent">Off-Screen Rendering</a>
 <li><a href="debugging.html" target="_parent">Debugging Tips</a>
index 704cd9a85bc40bddf01e925e1d0a05c21661cf54..a715a3ad31dcd70deb5042d5398592fc6f1a2b6d 100644 (file)
@@ -112,13 +112,6 @@ is required if applications mix OpenGL and OpenGL ES.</p>
 
 </dd>
 
-<dt><code>--enable-openvg</code></dt>
-<dd>
-
-<p>OpenVG must be explicitly enabled by this option.</p>
-
-</dd>
-
 </dl>
 
 <h2>Use EGL</h2>
diff --git a/docs/openvg.html b/docs/openvg.html
deleted file mode 100644 (file)
index 28ebb82..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8">
-  <title>OpenVG State Tracker</title>
-  <link rel="stylesheet" type="text/css" href="mesa.css">
-</head>
-<body>
-
-<div class="header">
-  <h1>The Mesa 3D Graphics Library</h1>
-</div>
-
-<iframe src="contents.html"></iframe>
-<div class="content">
-
-<h1>OpenVG State Tracker</h1>
-
-<p>
-The current version of the OpenVG state tracker implements OpenVG 1.1.
-</p>
-<p>
-More information about OpenVG can be found at
-<a href="http://www.khronos.org/openvg/">
-http://www.khronos.org/openvg/</a> .
-</p>
-<p>
-The OpenVG state tracker depends on the Gallium architecture and a working EGL implementation.
-Please refer to <a href="egl.html">Mesa EGL</a> for more information about EGL.
-</p>
-
-
-<h2>Building the library</h2>
-<ol>
-<li>Run <code>configure</code> with <code>--enable-openvg</code> and
-<code>--enable-gallium-egl</code>.  If you do not need OpenGL, you can add
-<code>--disable-opengl</code> to save the compilation time.</li>
-
-<li>Build and install Mesa as usual.</li>
-</ol>
-
-<h3>Sample build</h3>
-A sample build looks as follows:
-<pre>
-  $ ./configure --disable-opengl --enable-openvg --enable-gallium-egl
-  $ make
-  $ make install
-</pre>
-
-<p>It will install <code>libOpenVG.so</code>, <code>libEGL.so</code>, and one
-or more EGL drivers.</p>
-
-<h2>OpenVG Demos</h2>
-
-<p>OpenVG demos can be found in mesa/demos repository.</p>
-
-</div>
-</body>
-</html>
index abb50cd476324aa56c0f3db9fb8258ab65635854..a396109bbd62a0ef857f206e2b7cc59ff479716d 100644 (file)
@@ -61,6 +61,7 @@ TBD.
 <ul>
 <li>Removed classic Windows software rasterizer.</li>
 <li>Removed egl_gallium EGL driver.</li>
+<li>Removed OpenVG support.</li>
 </ul>
 
 </div>
index 86ad4a848b5be4bc6e00220427580b53d2a0c452..c6eba1d2ef9e0df5c0cb86ca767c3c52f5ddb850 100644 (file)
@@ -48,7 +48,7 @@ c49c19c2bbef4f3b7f1389974dff25f4  MesaGLUT-7.6.zip
 
 <h2>New features</h2>
 <ul>
-<li><a href="../openvg.html">OpenVG</a> front-end (state tracker for Gallium).
+<li>OpenVG front-end (state tracker for Gallium).
 This was written by Zack Rusin at Tungsten Graphics.
 <li>GL_ARB_vertex_array_object and GL_APPLE_vertex_array_object extensions
     (supported in Gallium drivers, Intel DRI drivers, and software drivers)</li>
index a5c50cf43ff7fa36032718b40329546026e7ad9d..0765778f15b063e0d405ed6d2c38743ca71f0f1c 100644 (file)
@@ -135,7 +135,6 @@ each directory.
        <li><b>dri</b> - Meta state tracker for DRI drivers
        <li><b>glx</b> - Meta state tracker for GLX
        <li><b>vdpau</b> - VDPAU state tracker
-       <li><b>vega</b> - OpenVG 1.x state tracker
        <li><b>wgl</b> -
        <li><b>xorg</b> - Meta state tracker for Xorg video drivers
        <li><b>xvmc</b> - XvMC state tracker
diff --git a/include/VG/openvg.h b/include/VG/openvg.h
deleted file mode 100644 (file)
index 86d54d6..0000000
+++ /dev/null
@@ -1,746 +0,0 @@
-/* $Revision: 9203 $ on $Date:: 2009-10-07 02:21:52 -0700 #$ */
-
-/*------------------------------------------------------------------------
- *
- * OpenVG 1.1 Reference Implementation
- * -------------------------------------
- *
- * Copyright (c) 2008 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and /or associated documentation files
- * (the "Materials "), to deal in the Materials without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Materials,
- * and to permit persons to whom the Materials are furnished to do so,
- * subject to the following conditions: 
- *
- * The above copyright notice and this permission notice shall be included 
- * in all copies or substantial portions of the Materials. 
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
- * THE USE OR OTHER DEALINGS IN THE MATERIALS.
- *
- *//**
- * \file
- * \brief      OpenVG 1.1 API.
- *//*-------------------------------------------------------------------*/
-
-#ifndef _OPENVG_H
-#define _OPENVG_H
-
-#include <VG/vgplatform.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define OPENVG_VERSION_1_0             1
-#define OPENVG_VERSION_1_0_1   1
-#define OPENVG_VERSION_1_1             2
-
-#ifndef VG_MAXSHORT
-#define VG_MAXSHORT 0x7FFF
-#endif
-
-#ifndef VG_MAXINT
-#define VG_MAXINT 0x7FFFFFFF
-#endif
-
-#ifndef VG_MAX_ENUM
-#define VG_MAX_ENUM 0x7FFFFFFF
-#endif
-
-typedef VGuint VGHandle;
-
-typedef VGHandle VGPath;
-typedef VGHandle VGImage;
-typedef VGHandle VGMaskLayer;
-typedef VGHandle VGFont;
-typedef VGHandle VGPaint;
-
-#define VG_INVALID_HANDLE ((VGHandle)0)
-
-typedef enum {
-  VG_FALSE               = 0,
-  VG_TRUE                = 1,
-
-  VG_BOOLEAN_FORCE_SIZE  = VG_MAX_ENUM
-} VGboolean;
-
-typedef enum {
-  VG_NO_ERROR                                 = 0,
-  VG_BAD_HANDLE_ERROR                         = 0x1000,
-  VG_ILLEGAL_ARGUMENT_ERROR                   = 0x1001,
-  VG_OUT_OF_MEMORY_ERROR                      = 0x1002,
-  VG_PATH_CAPABILITY_ERROR                    = 0x1003,
-  VG_UNSUPPORTED_IMAGE_FORMAT_ERROR           = 0x1004,
-  VG_UNSUPPORTED_PATH_FORMAT_ERROR            = 0x1005,
-  VG_IMAGE_IN_USE_ERROR                       = 0x1006,
-  VG_NO_CONTEXT_ERROR                         = 0x1007,
-
-  VG_ERROR_CODE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGErrorCode;
-
-typedef enum {
-  /* Mode settings */
-  VG_MATRIX_MODE                              = 0x1100,
-  VG_FILL_RULE                                = 0x1101,
-  VG_IMAGE_QUALITY                            = 0x1102,
-  VG_RENDERING_QUALITY                        = 0x1103,
-  VG_BLEND_MODE                               = 0x1104,
-  VG_IMAGE_MODE                               = 0x1105,
-
-  /* Scissoring rectangles */
-  VG_SCISSOR_RECTS                            = 0x1106,
-
-  /* Color Transformation */
-  VG_COLOR_TRANSFORM                          = 0x1170,
-  VG_COLOR_TRANSFORM_VALUES                   = 0x1171,
-
-  /* Stroke parameters */
-  VG_STROKE_LINE_WIDTH                        = 0x1110,
-  VG_STROKE_CAP_STYLE                         = 0x1111,
-  VG_STROKE_JOIN_STYLE                        = 0x1112,
-  VG_STROKE_MITER_LIMIT                       = 0x1113,
-  VG_STROKE_DASH_PATTERN                      = 0x1114,
-  VG_STROKE_DASH_PHASE                        = 0x1115,
-  VG_STROKE_DASH_PHASE_RESET                  = 0x1116,
-
-  /* Edge fill color for VG_TILE_FILL tiling mode */
-  VG_TILE_FILL_COLOR                          = 0x1120,
-
-  /* Color for vgClear */
-  VG_CLEAR_COLOR                              = 0x1121,
-
-  /* Glyph origin */
-  VG_GLYPH_ORIGIN                             = 0x1122,
-
-  /* Enable/disable alpha masking and scissoring */
-  VG_MASKING                                  = 0x1130,
-  VG_SCISSORING                               = 0x1131,
-
-  /* Pixel layout information */
-  VG_PIXEL_LAYOUT                             = 0x1140,
-  VG_SCREEN_LAYOUT                            = 0x1141,
-
-  /* Source format selection for image filters */
-  VG_FILTER_FORMAT_LINEAR                     = 0x1150,
-  VG_FILTER_FORMAT_PREMULTIPLIED              = 0x1151,
-
-  /* Destination write enable mask for image filters */
-  VG_FILTER_CHANNEL_MASK                      = 0x1152,
-
-  /* Implementation limits (read-only) */
-  VG_MAX_SCISSOR_RECTS                        = 0x1160,
-  VG_MAX_DASH_COUNT                           = 0x1161,
-  VG_MAX_KERNEL_SIZE                          = 0x1162,
-  VG_MAX_SEPARABLE_KERNEL_SIZE                = 0x1163,
-  VG_MAX_COLOR_RAMP_STOPS                     = 0x1164,
-  VG_MAX_IMAGE_WIDTH                          = 0x1165,
-  VG_MAX_IMAGE_HEIGHT                         = 0x1166,
-  VG_MAX_IMAGE_PIXELS                         = 0x1167,
-  VG_MAX_IMAGE_BYTES                          = 0x1168,
-  VG_MAX_FLOAT                                = 0x1169,
-  VG_MAX_GAUSSIAN_STD_DEVIATION               = 0x116A,
-
-  VG_PARAM_TYPE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGParamType;
-
-typedef enum {
-  VG_RENDERING_QUALITY_NONANTIALIASED         = 0x1200,
-  VG_RENDERING_QUALITY_FASTER                 = 0x1201,
-  VG_RENDERING_QUALITY_BETTER                 = 0x1202, /* Default */
-
-  VG_RENDERING_QUALITY_FORCE_SIZE             = VG_MAX_ENUM
-} VGRenderingQuality;
-
-typedef enum {
-  VG_PIXEL_LAYOUT_UNKNOWN                     = 0x1300,
-  VG_PIXEL_LAYOUT_RGB_VERTICAL                = 0x1301,
-  VG_PIXEL_LAYOUT_BGR_VERTICAL                = 0x1302,
-  VG_PIXEL_LAYOUT_RGB_HORIZONTAL              = 0x1303,
-  VG_PIXEL_LAYOUT_BGR_HORIZONTAL              = 0x1304,
-
-  VG_PIXEL_LAYOUT_FORCE_SIZE                  = VG_MAX_ENUM
-} VGPixelLayout;
-
-typedef enum {
-  VG_MATRIX_PATH_USER_TO_SURFACE              = 0x1400,
-  VG_MATRIX_IMAGE_USER_TO_SURFACE             = 0x1401,
-  VG_MATRIX_FILL_PAINT_TO_USER                = 0x1402,
-  VG_MATRIX_STROKE_PAINT_TO_USER              = 0x1403,
-  VG_MATRIX_GLYPH_USER_TO_SURFACE             = 0x1404,
-
-  VG_MATRIX_MODE_FORCE_SIZE                   = VG_MAX_ENUM
-} VGMatrixMode;
-
-typedef enum {
-  VG_CLEAR_MASK                               = 0x1500,
-  VG_FILL_MASK                                = 0x1501,
-  VG_SET_MASK                                 = 0x1502,
-  VG_UNION_MASK                               = 0x1503,
-  VG_INTERSECT_MASK                           = 0x1504,
-  VG_SUBTRACT_MASK                            = 0x1505,
-
-  VG_MASK_OPERATION_FORCE_SIZE                = VG_MAX_ENUM
-} VGMaskOperation;
-
-#define VG_PATH_FORMAT_STANDARD 0
-
-typedef enum {
-  VG_PATH_DATATYPE_S_8                        =  0,
-  VG_PATH_DATATYPE_S_16                       =  1,
-  VG_PATH_DATATYPE_S_32                       =  2,
-  VG_PATH_DATATYPE_F                          =  3,
-
-  VG_PATH_DATATYPE_FORCE_SIZE                 = VG_MAX_ENUM
-} VGPathDatatype;
-
-typedef enum {
-  VG_ABSOLUTE                                 = 0,
-  VG_RELATIVE                                 = 1,
-
-  VG_PATH_ABS_REL_FORCE_SIZE                  = VG_MAX_ENUM
-} VGPathAbsRel;
-
-typedef enum {
-  VG_CLOSE_PATH                               = ( 0 << 1),
-  VG_MOVE_TO                                  = ( 1 << 1),
-  VG_LINE_TO                                  = ( 2 << 1),
-  VG_HLINE_TO                                 = ( 3 << 1),
-  VG_VLINE_TO                                 = ( 4 << 1),
-  VG_QUAD_TO                                  = ( 5 << 1),
-  VG_CUBIC_TO                                 = ( 6 << 1),
-  VG_SQUAD_TO                                 = ( 7 << 1),
-  VG_SCUBIC_TO                                = ( 8 << 1),
-  VG_SCCWARC_TO                               = ( 9 << 1),
-  VG_SCWARC_TO                                = (10 << 1),
-  VG_LCCWARC_TO                               = (11 << 1),
-  VG_LCWARC_TO                                = (12 << 1),
-
-  VG_PATH_SEGMENT_FORCE_SIZE                  = VG_MAX_ENUM
-} VGPathSegment;
-
-typedef enum {
-  VG_MOVE_TO_ABS                              = VG_MOVE_TO    | VG_ABSOLUTE,
-  VG_MOVE_TO_REL                              = VG_MOVE_TO    | VG_RELATIVE,
-  VG_LINE_TO_ABS                              = VG_LINE_TO    | VG_ABSOLUTE,
-  VG_LINE_TO_REL                              = VG_LINE_TO    | VG_RELATIVE,
-  VG_HLINE_TO_ABS                             = VG_HLINE_TO   | VG_ABSOLUTE,
-  VG_HLINE_TO_REL                             = VG_HLINE_TO   | VG_RELATIVE,
-  VG_VLINE_TO_ABS                             = VG_VLINE_TO   | VG_ABSOLUTE,
-  VG_VLINE_TO_REL                             = VG_VLINE_TO   | VG_RELATIVE,
-  VG_QUAD_TO_ABS                              = VG_QUAD_TO    | VG_ABSOLUTE,
-  VG_QUAD_TO_REL                              = VG_QUAD_TO    | VG_RELATIVE,
-  VG_CUBIC_TO_ABS                             = VG_CUBIC_TO   | VG_ABSOLUTE,
-  VG_CUBIC_TO_REL                             = VG_CUBIC_TO   | VG_RELATIVE,
-  VG_SQUAD_TO_ABS                             = VG_SQUAD_TO   | VG_ABSOLUTE,
-  VG_SQUAD_TO_REL                             = VG_SQUAD_TO   | VG_RELATIVE,
-  VG_SCUBIC_TO_ABS                            = VG_SCUBIC_TO  | VG_ABSOLUTE,
-  VG_SCUBIC_TO_REL                            = VG_SCUBIC_TO  | VG_RELATIVE,
-  VG_SCCWARC_TO_ABS                           = VG_SCCWARC_TO | VG_ABSOLUTE,
-  VG_SCCWARC_TO_REL                           = VG_SCCWARC_TO | VG_RELATIVE,
-  VG_SCWARC_TO_ABS                            = VG_SCWARC_TO  | VG_ABSOLUTE,
-  VG_SCWARC_TO_REL                            = VG_SCWARC_TO  | VG_RELATIVE,
-  VG_LCCWARC_TO_ABS                           = VG_LCCWARC_TO | VG_ABSOLUTE,
-  VG_LCCWARC_TO_REL                           = VG_LCCWARC_TO | VG_RELATIVE,
-  VG_LCWARC_TO_ABS                            = VG_LCWARC_TO  | VG_ABSOLUTE,
-  VG_LCWARC_TO_REL                            = VG_LCWARC_TO  | VG_RELATIVE,
-
-  VG_PATH_COMMAND_FORCE_SIZE                  = VG_MAX_ENUM
-} VGPathCommand;
-
-typedef enum {
-  VG_PATH_CAPABILITY_APPEND_FROM              = (1 <<  0),
-  VG_PATH_CAPABILITY_APPEND_TO                = (1 <<  1),
-  VG_PATH_CAPABILITY_MODIFY                   = (1 <<  2),
-  VG_PATH_CAPABILITY_TRANSFORM_FROM           = (1 <<  3),
-  VG_PATH_CAPABILITY_TRANSFORM_TO             = (1 <<  4),
-  VG_PATH_CAPABILITY_INTERPOLATE_FROM         = (1 <<  5),
-  VG_PATH_CAPABILITY_INTERPOLATE_TO           = (1 <<  6),
-  VG_PATH_CAPABILITY_PATH_LENGTH              = (1 <<  7),
-  VG_PATH_CAPABILITY_POINT_ALONG_PATH         = (1 <<  8),
-  VG_PATH_CAPABILITY_TANGENT_ALONG_PATH       = (1 <<  9),
-  VG_PATH_CAPABILITY_PATH_BOUNDS              = (1 << 10),
-  VG_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS  = (1 << 11),
-  VG_PATH_CAPABILITY_ALL                      = (1 << 12) - 1,
-
-  VG_PATH_CAPABILITIES_FORCE_SIZE             = VG_MAX_ENUM
-} VGPathCapabilities;
-
-typedef enum {
-  VG_PATH_FORMAT                              = 0x1600,
-  VG_PATH_DATATYPE                            = 0x1601,
-  VG_PATH_SCALE                               = 0x1602,
-  VG_PATH_BIAS                                = 0x1603,
-  VG_PATH_NUM_SEGMENTS                        = 0x1604,
-  VG_PATH_NUM_COORDS                          = 0x1605,
-
-  VG_PATH_PARAM_TYPE_FORCE_SIZE               = VG_MAX_ENUM
-} VGPathParamType;
-
-typedef enum {
-  VG_CAP_BUTT                                 = 0x1700,
-  VG_CAP_ROUND                                = 0x1701,
-  VG_CAP_SQUARE                               = 0x1702,
-
-  VG_CAP_STYLE_FORCE_SIZE                     = VG_MAX_ENUM
-} VGCapStyle;
-
-typedef enum {
-  VG_JOIN_MITER                               = 0x1800,
-  VG_JOIN_ROUND                               = 0x1801,
-  VG_JOIN_BEVEL                               = 0x1802,
-
-  VG_JOIN_STYLE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGJoinStyle;
-
-typedef enum {
-  VG_EVEN_ODD                                 = 0x1900,
-  VG_NON_ZERO                                 = 0x1901,
-
-  VG_FILL_RULE_FORCE_SIZE                     = VG_MAX_ENUM
-} VGFillRule;
-
-typedef enum {
-  VG_STROKE_PATH                              = (1 << 0),
-  VG_FILL_PATH                                = (1 << 1),
-
-  VG_PAINT_MODE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGPaintMode;
-
-typedef enum {
-  /* Color paint parameters */
-  VG_PAINT_TYPE                               = 0x1A00,
-  VG_PAINT_COLOR                              = 0x1A01,
-  VG_PAINT_COLOR_RAMP_SPREAD_MODE             = 0x1A02,
-  VG_PAINT_COLOR_RAMP_PREMULTIPLIED           = 0x1A07,
-  VG_PAINT_COLOR_RAMP_STOPS                   = 0x1A03,
-
-  /* Linear gradient paint parameters */
-  VG_PAINT_LINEAR_GRADIENT                    = 0x1A04,
-
-  /* Radial gradient paint parameters */
-  VG_PAINT_RADIAL_GRADIENT                    = 0x1A05,
-
-  /* Pattern paint parameters */
-  VG_PAINT_PATTERN_TILING_MODE                = 0x1A06,
-
-  VG_PAINT_PARAM_TYPE_FORCE_SIZE              = VG_MAX_ENUM
-} VGPaintParamType;
-
-typedef enum {
-  VG_PAINT_TYPE_COLOR                         = 0x1B00,
-  VG_PAINT_TYPE_LINEAR_GRADIENT               = 0x1B01,
-  VG_PAINT_TYPE_RADIAL_GRADIENT               = 0x1B02,
-  VG_PAINT_TYPE_PATTERN                       = 0x1B03,
-
-  VG_PAINT_TYPE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGPaintType;
-
-typedef enum {
-  VG_COLOR_RAMP_SPREAD_PAD                    = 0x1C00,
-  VG_COLOR_RAMP_SPREAD_REPEAT                 = 0x1C01,
-  VG_COLOR_RAMP_SPREAD_REFLECT                = 0x1C02,
-
-  VG_COLOR_RAMP_SPREAD_MODE_FORCE_SIZE        = VG_MAX_ENUM
-} VGColorRampSpreadMode;
-
-typedef enum {
-  VG_TILE_FILL                                = 0x1D00,
-  VG_TILE_PAD                                 = 0x1D01,
-  VG_TILE_REPEAT                              = 0x1D02,
-  VG_TILE_REFLECT                             = 0x1D03,
-
-  VG_TILING_MODE_FORCE_SIZE                   = VG_MAX_ENUM
-} VGTilingMode;
-
-typedef enum {
-  /* RGB{A,X} channel ordering */
-  VG_sRGBX_8888                               =  0,
-  VG_sRGBA_8888                               =  1,
-  VG_sRGBA_8888_PRE                           =  2,
-  VG_sRGB_565                                 =  3,
-  VG_sRGBA_5551                               =  4,
-  VG_sRGBA_4444                               =  5,
-  VG_sL_8                                     =  6,
-  VG_lRGBX_8888                               =  7,
-  VG_lRGBA_8888                               =  8,
-  VG_lRGBA_8888_PRE                           =  9,
-  VG_lL_8                                     = 10,
-  VG_A_8                                      = 11,
-  VG_BW_1                                     = 12,
-  VG_A_1                                      = 13,
-  VG_A_4                                      = 14,
-
-  /* {A,X}RGB channel ordering */
-  VG_sXRGB_8888                               =  0 | (1 << 6),
-  VG_sARGB_8888                               =  1 | (1 << 6),
-  VG_sARGB_8888_PRE                           =  2 | (1 << 6),
-  VG_sARGB_1555                               =  4 | (1 << 6),
-  VG_sARGB_4444                               =  5 | (1 << 6),
-  VG_lXRGB_8888                               =  7 | (1 << 6),
-  VG_lARGB_8888                               =  8 | (1 << 6),
-  VG_lARGB_8888_PRE                           =  9 | (1 << 6),
-
-  /* BGR{A,X} channel ordering */
-  VG_sBGRX_8888                               =  0 | (1 << 7),
-  VG_sBGRA_8888                               =  1 | (1 << 7),
-  VG_sBGRA_8888_PRE                           =  2 | (1 << 7),
-  VG_sBGR_565                                 =  3 | (1 << 7),
-  VG_sBGRA_5551                               =  4 | (1 << 7),
-  VG_sBGRA_4444                               =  5 | (1 << 7),
-  VG_lBGRX_8888                               =  7 | (1 << 7),
-  VG_lBGRA_8888                               =  8 | (1 << 7),
-  VG_lBGRA_8888_PRE                           =  9 | (1 << 7),
-
-  /* {A,X}BGR channel ordering */
-  VG_sXBGR_8888                               =  0 | (1 << 6) | (1 << 7),
-  VG_sABGR_8888                               =  1 | (1 << 6) | (1 << 7),
-  VG_sABGR_8888_PRE                           =  2 | (1 << 6) | (1 << 7),
-  VG_sABGR_1555                               =  4 | (1 << 6) | (1 << 7),
-  VG_sABGR_4444                               =  5 | (1 << 6) | (1 << 7),
-  VG_lXBGR_8888                               =  7 | (1 << 6) | (1 << 7),
-  VG_lABGR_8888                               =  8 | (1 << 6) | (1 << 7),
-  VG_lABGR_8888_PRE                           =  9 | (1 << 6) | (1 << 7),
-
-  VG_IMAGE_FORMAT_FORCE_SIZE                  = VG_MAX_ENUM
-} VGImageFormat;
-
-typedef enum {
-  VG_IMAGE_QUALITY_NONANTIALIASED             = (1 << 0),
-  VG_IMAGE_QUALITY_FASTER                     = (1 << 1),
-  VG_IMAGE_QUALITY_BETTER                     = (1 << 2),
-
-  VG_IMAGE_QUALITY_FORCE_SIZE                 = VG_MAX_ENUM
-} VGImageQuality;
-
-typedef enum {
-  VG_IMAGE_FORMAT                             = 0x1E00,
-  VG_IMAGE_WIDTH                              = 0x1E01,
-  VG_IMAGE_HEIGHT                             = 0x1E02,
-
-  VG_IMAGE_PARAM_TYPE_FORCE_SIZE              = VG_MAX_ENUM
-} VGImageParamType;
-
-typedef enum {
-  VG_DRAW_IMAGE_NORMAL                        = 0x1F00,
-  VG_DRAW_IMAGE_MULTIPLY                      = 0x1F01,
-  VG_DRAW_IMAGE_STENCIL                       = 0x1F02,
-
-  VG_IMAGE_MODE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGImageMode;
-
-typedef enum {
-  VG_RED                                      = (1 << 3),
-  VG_GREEN                                    = (1 << 2),
-  VG_BLUE                                     = (1 << 1),
-  VG_ALPHA                                    = (1 << 0),
-
-  VG_IMAGE_CHANNEL_FORCE_SIZE                 = VG_MAX_ENUM
-} VGImageChannel;
-
-typedef enum {
-  VG_BLEND_SRC                                = 0x2000,
-  VG_BLEND_SRC_OVER                           = 0x2001,
-  VG_BLEND_DST_OVER                           = 0x2002,
-  VG_BLEND_SRC_IN                             = 0x2003,
-  VG_BLEND_DST_IN                             = 0x2004,
-  VG_BLEND_MULTIPLY                           = 0x2005,
-  VG_BLEND_SCREEN                             = 0x2006,
-  VG_BLEND_DARKEN                             = 0x2007,
-  VG_BLEND_LIGHTEN                            = 0x2008,
-  VG_BLEND_ADDITIVE                           = 0x2009,
-
-  VG_BLEND_MODE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGBlendMode;
-
-typedef enum {
-  VG_FONT_NUM_GLYPHS                          = 0x2F00,
-
-  VG_FONT_PARAM_TYPE_FORCE_SIZE               = VG_MAX_ENUM
-} VGFontParamType;
-
-typedef enum {
-  VG_IMAGE_FORMAT_QUERY                       = 0x2100,
-  VG_PATH_DATATYPE_QUERY                      = 0x2101,
-
-  VG_HARDWARE_QUERY_TYPE_FORCE_SIZE           = VG_MAX_ENUM
-} VGHardwareQueryType;
-
-typedef enum {
-  VG_HARDWARE_ACCELERATED                     = 0x2200,
-  VG_HARDWARE_UNACCELERATED                   = 0x2201,
-
-  VG_HARDWARE_QUERY_RESULT_FORCE_SIZE         = VG_MAX_ENUM
-} VGHardwareQueryResult;
-
-typedef enum {
-  VG_VENDOR                                   = 0x2300,
-  VG_RENDERER                                 = 0x2301,
-  VG_VERSION                                  = 0x2302,
-  VG_EXTENSIONS                               = 0x2303,
-
-  VG_STRING_ID_FORCE_SIZE                     = VG_MAX_ENUM
-} VGStringID;
-
-/* Function Prototypes */
-
-#ifndef VG_API_CALL
-#      error VG_API_CALL must be defined
-#endif
-
-#ifndef VG_API_ENTRY
-#   error VG_API_ENTRY must be defined 
-#endif
-
-#ifndef VG_API_EXIT
-#   error VG_API_EXIT must be defined 
-#endif
-
-VG_API_CALL VGErrorCode VG_API_ENTRY vgGetError(void) VG_API_EXIT;
-
-VG_API_CALL void VG_API_ENTRY vgFlush(void) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgFinish(void) VG_API_EXIT;
-
-/* Getters and Setters */
-VG_API_CALL void VG_API_ENTRY vgSetf (VGParamType type, VGfloat value) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSeti (VGParamType type, VGint value) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetfv(VGParamType type, VGint count,
-                         const VGfloat * values) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetiv(VGParamType type, VGint count,
-                         const VGint * values) VG_API_EXIT;
-
-VG_API_CALL VGfloat VG_API_ENTRY vgGetf(VGParamType type) VG_API_EXIT;
-VG_API_CALL VGint VG_API_ENTRY vgGeti(VGParamType type) VG_API_EXIT;
-VG_API_CALL VGint VG_API_ENTRY vgGetVectorSize(VGParamType type) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetfv(VGParamType type, VGint count, VGfloat * values) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetiv(VGParamType type, VGint count, VGint * values) VG_API_EXIT;
-
-VG_API_CALL void VG_API_ENTRY vgSetParameterf(VGHandle object,
-                                 VGint paramType,
-                                 VGfloat value) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetParameteri(VGHandle object,
-                                 VGint paramType,
-                                 VGint value) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetParameterfv(VGHandle object,
-                                  VGint paramType,
-                                  VGint count, const VGfloat * values) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetParameteriv(VGHandle object,
-                                  VGint paramType,
-                                  VGint count, const VGint * values) VG_API_EXIT;
-
-VG_API_CALL VGfloat VG_API_ENTRY vgGetParameterf(VGHandle object,
-                                    VGint paramType) VG_API_EXIT;
-VG_API_CALL VGint VG_API_ENTRY vgGetParameteri(VGHandle object,
-                                  VGint paramType);
-VG_API_CALL VGint VG_API_ENTRY vgGetParameterVectorSize(VGHandle object,
-                                           VGint paramType) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetParameterfv(VGHandle object,
-                                  VGint paramType,
-                                  VGint count, VGfloat * values) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetParameteriv(VGHandle object,
-                                  VGint paramType,
-                                  VGint count, VGint * values) VG_API_EXIT;
-
-/* Matrix Manipulation */
-VG_API_CALL void VG_API_ENTRY vgLoadIdentity(void) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgLoadMatrix(const VGfloat * m) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetMatrix(VGfloat * m) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgMultMatrix(const VGfloat * m) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgTranslate(VGfloat tx, VGfloat ty) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgScale(VGfloat sx, VGfloat sy) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgShear(VGfloat shx, VGfloat shy) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgRotate(VGfloat angle) VG_API_EXIT;
-
-/* Masking and Clearing */
-VG_API_CALL void VG_API_ENTRY vgMask(VGHandle mask, VGMaskOperation operation,
-                                     VGint x, VGint y,
-                                     VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgRenderToMask(VGPath path,
-                                            VGbitfield paintModes,
-                                            VGMaskOperation operation) VG_API_EXIT;
-VG_API_CALL VGMaskLayer VG_API_ENTRY vgCreateMaskLayer(VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDestroyMaskLayer(VGMaskLayer maskLayer) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgFillMaskLayer(VGMaskLayer maskLayer,
-                                             VGint x, VGint y,
-                                             VGint width, VGint height,
-                                             VGfloat value) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgCopyMask(VGMaskLayer maskLayer,
-                                        VGint dx, VGint dy,
-                                        VGint sx, VGint sy,
-                                        VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgClear(VGint x, VGint y, VGint width, VGint height) VG_API_EXIT;
-
-/* Paths */
-VG_API_CALL VGPath VG_API_ENTRY vgCreatePath(VGint pathFormat,
-                                VGPathDatatype datatype,
-                                VGfloat scale, VGfloat bias,
-                                VGint segmentCapacityHint,
-                                VGint coordCapacityHint,
-                                VGbitfield capabilities) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgClearPath(VGPath path, VGbitfield capabilities) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDestroyPath(VGPath path) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgRemovePathCapabilities(VGPath path,
-                                          VGbitfield capabilities) VG_API_EXIT;
-VG_API_CALL VGbitfield VG_API_ENTRY vgGetPathCapabilities(VGPath path) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgAppendPath(VGPath dstPath, VGPath srcPath) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgAppendPathData(VGPath dstPath,
-                                  VGint numSegments,
-                                  const VGubyte * pathSegments,
-                                  const void * pathData) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgModifyPathCoords(VGPath dstPath, VGint startIndex,
-                                    VGint numSegments,
-                                    const void * pathData) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgTransformPath(VGPath dstPath, VGPath srcPath) VG_API_EXIT;
-VG_API_CALL VGboolean VG_API_ENTRY vgInterpolatePath(VGPath dstPath,
-                                        VGPath startPath,
-                                        VGPath endPath,
-                                        VGfloat amount) VG_API_EXIT;
-VG_API_CALL VGfloat VG_API_ENTRY vgPathLength(VGPath path,
-                                 VGint startSegment, VGint numSegments) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgPointAlongPath(VGPath path,
-                                  VGint startSegment, VGint numSegments,
-                                  VGfloat distance,
-                                  VGfloat * x, VGfloat * y,
-                                  VGfloat * tangentX, VGfloat * tangentY) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgPathBounds(VGPath path,
-                              VGfloat * minX, VGfloat * minY,
-                              VGfloat * width, VGfloat * height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgPathTransformedBounds(VGPath path,
-                                         VGfloat * minX, VGfloat * minY,
-                                         VGfloat * width, VGfloat * height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDrawPath(VGPath path, VGbitfield paintModes) VG_API_EXIT;
-
-/* Paint */
-VG_API_CALL VGPaint VG_API_ENTRY vgCreatePaint(void) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDestroyPaint(VGPaint paint) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetPaint(VGPaint paint, VGbitfield paintModes) VG_API_EXIT;
-VG_API_CALL VGPaint VG_API_ENTRY vgGetPaint(VGPaintMode paintMode) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetColor(VGPaint paint, VGuint rgba) VG_API_EXIT;
-VG_API_CALL VGuint VG_API_ENTRY vgGetColor(VGPaint paint) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgPaintPattern(VGPaint paint, VGImage pattern) VG_API_EXIT;
-
-/* Images */
-VG_API_CALL VGImage VG_API_ENTRY vgCreateImage(VGImageFormat format,
-                                  VGint width, VGint height,
-                                  VGbitfield allowedQuality) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDestroyImage(VGImage image) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgClearImage(VGImage image,
-                              VGint x, VGint y, VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgImageSubData(VGImage image,
-                                const void * data, VGint dataStride,
-                                VGImageFormat dataFormat,
-                                VGint x, VGint y, VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetImageSubData(VGImage image,
-                                   void * data, VGint dataStride,
-                                   VGImageFormat dataFormat,
-                                   VGint x, VGint y,
-                                   VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL VGImage VG_API_ENTRY vgChildImage(VGImage parent,
-                                 VGint x, VGint y, VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL VGImage VG_API_ENTRY vgGetParent(VGImage image) VG_API_EXIT; 
-VG_API_CALL void VG_API_ENTRY vgCopyImage(VGImage dst, VGint dx, VGint dy,
-                             VGImage src, VGint sx, VGint sy,
-                             VGint width, VGint height,
-                             VGboolean dither) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDrawImage(VGImage image) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetPixels(VGint dx, VGint dy,
-                             VGImage src, VGint sx, VGint sy,
-                             VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgWritePixels(const void * data, VGint dataStride,
-                               VGImageFormat dataFormat,
-                               VGint dx, VGint dy,
-                               VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGetPixels(VGImage dst, VGint dx, VGint dy,
-                             VGint sx, VGint sy,
-                             VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgReadPixels(void * data, VGint dataStride,
-                              VGImageFormat dataFormat,
-                              VGint sx, VGint sy,
-                              VGint width, VGint height) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgCopyPixels(VGint dx, VGint dy,
-                              VGint sx, VGint sy,
-                              VGint width, VGint height) VG_API_EXIT;
-
-/* Text */
-VG_API_CALL VGFont VG_API_ENTRY vgCreateFont(VGint glyphCapacityHint) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDestroyFont(VGFont font) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetGlyphToPath(VGFont font,
-                                              VGuint glyphIndex,
-                                              VGPath path,
-                                              VGboolean isHinted,
-                                              const VGfloat glyphOrigin [2],
-                                              const VGfloat escapement[2]) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSetGlyphToImage(VGFont font,
-                                               VGuint glyphIndex,
-                                               VGImage image,
-                                               const VGfloat glyphOrigin [2],
-                                               const VGfloat escapement[2]) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgClearGlyph(VGFont font,VGuint glyphIndex) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDrawGlyph(VGFont font, 
-                                         VGuint glyphIndex,
-                                         VGbitfield paintModes,
-                                         VGboolean allowAutoHinting) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgDrawGlyphs(VGFont font,
-                                          VGint glyphCount,
-                                          const VGuint *glyphIndices,
-                                          const VGfloat *adjustments_x,
-                                          const VGfloat *adjustments_y,
-                                          VGbitfield paintModes,
-                                          VGboolean allowAutoHinting) VG_API_EXIT;
-
-/* Image Filters */
-VG_API_CALL void VG_API_ENTRY vgColorMatrix(VGImage dst, VGImage src,
-                               const VGfloat * matrix) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgConvolve(VGImage dst, VGImage src,
-                            VGint kernelWidth, VGint kernelHeight,
-                            VGint shiftX, VGint shiftY,
-                            const VGshort * kernel,
-                            VGfloat scale,
-                            VGfloat bias,
-                            VGTilingMode tilingMode) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgSeparableConvolve(VGImage dst, VGImage src,
-                                     VGint kernelWidth,
-                                     VGint kernelHeight,
-                                     VGint shiftX, VGint shiftY,
-                                     const VGshort * kernelX,
-                                     const VGshort * kernelY,
-                                     VGfloat scale,
-                                     VGfloat bias,
-                                     VGTilingMode tilingMode) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgGaussianBlur(VGImage dst, VGImage src,
-                                VGfloat stdDeviationX,
-                                VGfloat stdDeviationY,
-                                VGTilingMode tilingMode) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgLookup(VGImage dst, VGImage src,
-                          const VGubyte * redLUT,
-                          const VGubyte * greenLUT,
-                          const VGubyte * blueLUT,
-                          const VGubyte * alphaLUT,
-                          VGboolean outputLinear,
-                          VGboolean outputPremultiplied) VG_API_EXIT;
-VG_API_CALL void VG_API_ENTRY vgLookupSingle(VGImage dst, VGImage src,
-                                const VGuint * lookupTable,
-                                VGImageChannel sourceChannel,
-                                VGboolean outputLinear,
-                                VGboolean outputPremultiplied) VG_API_EXIT;
-
-/* Hardware Queries */
-VG_API_CALL VGHardwareQueryResult VG_API_ENTRY vgHardwareQuery(VGHardwareQueryType key,
-                                                  VGint setting) VG_API_EXIT;
-
-/* Renderer and Extension Information */
-VG_API_CALL const VGubyte * VG_API_ENTRY vgGetString(VGStringID name) VG_API_EXIT;
-
-#ifdef __cplusplus 
-} /* extern "C" */
-#endif
-
-#endif /* _OPENVG_H */
diff --git a/include/VG/vgext.h b/include/VG/vgext.h
deleted file mode 100644 (file)
index 9ff3234..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/* $Revision: 6810 $ on $Date:: 2008-10-29 07:31:37 -0700 #$ */
-
-/*------------------------------------------------------------------------
- * 
- * VG extensions Reference Implementation
- * -------------------------------------
- *
- * Copyright (c) 2008 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and /or associated documentation files
- * (the "Materials "), to deal in the Materials without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Materials,
- * and to permit persons to whom the Materials are furnished to do so,
- * subject to the following conditions: 
- *
- * The above copyright notice and this permission notice shall be included 
- * in all copies or substantial portions of the Materials. 
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
- * THE USE OR OTHER DEALINGS IN THE MATERIALS.
- *
- *//**
- * \file
- * \brief      VG extensions
- *//*-------------------------------------------------------------------*/
-
-
-
-#ifndef _VGEXT_H
-#define _VGEXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <VG/openvg.h>
-#include <VG/vgu.h>
-
-#ifndef VG_API_ENTRYP
-#   define VG_API_ENTRYP VG_API_ENTRY*
-#endif
-
-#ifndef VGU_API_ENTRYP
-#   define VGU_API_ENTRYP VGU_API_ENTRY*
-#endif
-
-/*-------------------------------------------------------------------------------
- * KHR extensions
- *------------------------------------------------------------------------------*/
-
-typedef enum  {
-
-#ifndef VG_KHR_iterative_average_blur
-  VG_MAX_AVERAGE_BLUR_DIMENSION_KHR        = 0x116B,
-  VG_AVERAGE_BLUR_DIMENSION_RESOLUTION_KHR = 0x116C,
-  VG_MAX_AVERAGE_BLUR_ITERATIONS_KHR       = 0x116D,
-#endif
-
-  VG_PARAM_TYPE_KHR_FORCE_SIZE             = VG_MAX_ENUM
-} VGParamTypeKHR;
-
-#ifndef VG_KHR_EGL_image
-#define VG_KHR_EGL_image 1
-/* VGEGLImageKHR is an opaque handle to an EGLImage */
-typedef void* VGeglImageKHR; 
-
-#ifdef VG_VGEXT_PROTOTYPES
-VG_API_CALL VGImage VG_API_ENTRY vgCreateEGLImageTargetKHR(VGeglImageKHR image);
-#endif
-typedef VGImage (VG_API_ENTRYP PFNVGCREATEEGLIMAGETARGETKHRPROC) (VGeglImageKHR image);
-
-#endif
-
-
-#ifndef VG_KHR_iterative_average_blur
-#define VG_KHR_iterative_average_blur 1
-
-#ifdef VG_VGEXT_PROTOTYPES
-VG_API_CALL void vgIterativeAverageBlurKHR(VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGTilingMode tilingMode);
-#endif 
-typedef void (VG_API_ENTRYP PFNVGITERATIVEAVERAGEBLURKHRPROC) (VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGTilingMode tilingMode);
-
-#endif
-
-
-#ifndef VG_KHR_advanced_blending
-#define VG_KHR_advanced_blending 1
-
-typedef enum {
-  VG_BLEND_OVERLAY_KHR        = 0x2010,
-  VG_BLEND_HARDLIGHT_KHR      = 0x2011,
-  VG_BLEND_SOFTLIGHT_SVG_KHR  = 0x2012,
-  VG_BLEND_SOFTLIGHT_KHR      = 0x2013,
-  VG_BLEND_COLORDODGE_KHR     = 0x2014,
-  VG_BLEND_COLORBURN_KHR      = 0x2015,
-  VG_BLEND_DIFFERENCE_KHR     = 0x2016,
-  VG_BLEND_SUBTRACT_KHR       = 0x2017,
-  VG_BLEND_INVERT_KHR         = 0x2018,
-  VG_BLEND_EXCLUSION_KHR      = 0x2019,
-  VG_BLEND_LINEARDODGE_KHR    = 0x201a,
-  VG_BLEND_LINEARBURN_KHR     = 0x201b,
-  VG_BLEND_VIVIDLIGHT_KHR     = 0x201c,
-  VG_BLEND_LINEARLIGHT_KHR    = 0x201d,
-  VG_BLEND_PINLIGHT_KHR       = 0x201e,
-  VG_BLEND_HARDMIX_KHR        = 0x201f,
-  VG_BLEND_CLEAR_KHR          = 0x2020,
-  VG_BLEND_DST_KHR            = 0x2021,
-  VG_BLEND_SRC_OUT_KHR        = 0x2022,
-  VG_BLEND_DST_OUT_KHR        = 0x2023,
-  VG_BLEND_SRC_ATOP_KHR       = 0x2024,
-  VG_BLEND_DST_ATOP_KHR       = 0x2025,
-  VG_BLEND_XOR_KHR            = 0x2026,
-
-  VG_BLEND_MODE_KHR_FORCE_SIZE= VG_MAX_ENUM
-} VGBlendModeKHR;
-#endif
-
-#ifndef VG_KHR_parametric_filter
-#define VG_KHR_parametric_filter 1 
-
-typedef enum {
-  VG_PF_OBJECT_VISIBLE_FLAG_KHR = (1 << 0),
-  VG_PF_KNOCKOUT_FLAG_KHR       = (1 << 1),
-  VG_PF_OUTER_FLAG_KHR          = (1 << 2),
-  VG_PF_INNER_FLAG_KHR          = (1 << 3),
-
-  VG_PF_TYPE_KHR_FORCE_SIZE     = VG_MAX_ENUM
-} VGPfTypeKHR;
-
-typedef enum {
-  VGU_IMAGE_IN_USE_ERROR           = 0xF010,
-
-  VGU_ERROR_CODE_KHR_FORCE_SIZE    = VG_MAX_ENUM
-} VGUErrorCodeKHR;
-
-#ifdef VG_VGEXT_PROTOTYPES
-VG_API_CALL void VG_API_ENTRY vgParametricFilterKHR(VGImage dst,VGImage src,VGImage blur,VGfloat strength,VGfloat offsetX,VGfloat offsetY,VGbitfield filterFlags,VGPaint highlightPaint,VGPaint shadowPaint);
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguDropShadowKHR(VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint shadowColorRGBA);
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguGlowKHR(VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint glowColorRGBA) ;
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguBevelKHR(VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint highlightColorRGBA,VGuint shadowColorRGBA);
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguGradientGlowKHR(VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint stopsCount,const VGfloat* glowColorRampStops);
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguGradientBevelKHR(VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint stopsCount,const VGfloat* bevelColorRampStops);
-#endif
-typedef void (VG_API_ENTRYP PFNVGPARAMETRICFILTERKHRPROC) (VGImage dst,VGImage src,VGImage blur,VGfloat strength,VGfloat offsetX,VGfloat offsetY,VGbitfield filterFlags,VGPaint highlightPaint,VGPaint shadowPaint);
-typedef VGUErrorCode (VGU_API_ENTRYP PFNVGUDROPSHADOWKHRPROC) (VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint shadowColorRGBA);
-typedef VGUErrorCode (VGU_API_ENTRYP PFNVGUGLOWKHRPROC) (VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint glowColorRGBA);
-typedef VGUErrorCode (VGU_API_ENTRYP PFNVGUBEVELKHRPROC) (VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint highlightColorRGBA,VGuint shadowColorRGBA);
-typedef VGUErrorCode (VGU_API_ENTRYP PFNVGUGRADIENTGLOWKHRPROC) (VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint stopsCount,const VGfloat* glowColorRampStops);
-typedef VGUErrorCode (VGU_API_ENTRYP PFNVGUGRADIENTBEVELKHRPROC) (VGImage dst,VGImage src,VGfloat dimX,VGfloat dimY,VGuint iterative,VGfloat strength,VGfloat distance,VGfloat angle,VGbitfield filterFlags,VGbitfield allowedQuality,VGuint stopsCount,const VGfloat* bevelColorRampStops);
-
-#endif
-
-
-/*-------------------------------------------------------------------------------
- * NDS extensions
- *------------------------------------------------------------------------------*/
-
-#ifndef VG_NDS_paint_generation
-#define VG_NDS_paint_generation 1
-
-typedef enum { 
-  VG_PAINT_COLOR_RAMP_LINEAR_NDS            = 0x1A10,
-  VG_COLOR_MATRIX_NDS                       = 0x1A11,
-  VG_PAINT_COLOR_TRANSFORM_LINEAR_NDS       = 0x1A12,
-
-  VG_PAINT_PARAM_TYPE_NDS_FORCE_SIZE        = VG_MAX_ENUM
-} VGPaintParamTypeNds;
-
-typedef enum {
-  VG_DRAW_IMAGE_COLOR_MATRIX_NDS            = 0x1F10,
-
-  VG_IMAGE_MODE_NDS_FORCE_SIZE              = VG_MAX_ENUM
-} VGImageModeNds;
-#endif 
-
-
-#ifndef VG_NDS_projective_geometry
-#define VG_NDS_projective_geometry 1
-
-typedef enum {
-  VG_CLIP_MODE_NDS                          = 0x1180,
-  VG_CLIP_LINES_NDS                         = 0x1181,
-  VG_MAX_CLIP_LINES_NDS                     = 0x1182,
-
-  VG_PARAM_TYPE_NDS_FORCE_SIZE        = VG_MAX_ENUM
-} VGParamTypeNds;
-
-typedef enum {
-  VG_CLIPMODE_NONE_NDS                      = 0x3000,
-  VG_CLIPMODE_CLIP_CLOSED_NDS               = 0x3001,
-  VG_CLIPMODE_CLIP_OPEN_NDS                 = 0x3002,
-  VG_CLIPMODE_CULL_NDS                      = 0x3003,
-
-  VG_CLIPMODE_NDS_FORCE_SIZE = VG_MAX_ENUM
-} VGClipModeNds;
-
-typedef enum {
-  VG_RQUAD_TO_NDS              = ( 13 << 1 ),
-  VG_RCUBIC_TO_NDS             = ( 14 << 1 ),
-  
-  VG_PATH_SEGMENT_NDS_FORCE_SIZE = VG_MAX_ENUM
-} VGPathSegmentNds;
-
-typedef enum {
-  VG_RQUAD_TO_ABS_NDS            = (VG_RQUAD_TO_NDS  | VG_ABSOLUTE),
-  VG_RQUAD_TO_REL_NDS            = (VG_RQUAD_TO_NDS  | VG_RELATIVE),
-  VG_RCUBIC_TO_ABS_NDS           = (VG_RCUBIC_TO_NDS | VG_ABSOLUTE),
-  VG_RCUBIC_TO_REL_NDS           = (VG_RCUBIC_TO_NDS | VG_RELATIVE),
-
-  VG_PATH_COMMAND_NDS_FORCE_SIZE = VG_MAX_ENUM
-} VGPathCommandNds;
-
-#ifdef VG_VGEXT_PROTOTYPES
-VG_API_CALL void VG_API_ENTRY vgProjectiveMatrixNDS(VGboolean enable) ;
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguTransformClipLineNDS(const VGfloat Ain,const VGfloat Bin,const VGfloat Cin,const VGfloat* matrix,const VGboolean inverse,VGfloat* Aout,VGfloat* Bout,VGfloat* Cout);
-#endif 
-typedef void (VG_API_ENTRYP PFNVGPROJECTIVEMATRIXNDSPROC) (VGboolean enable) ;
-typedef VGUErrorCode (VGU_API_ENTRYP PFNVGUTRANSFORMCLIPLINENDSPROC) (const VGfloat Ain,const VGfloat Bin,const VGfloat Cin,const VGfloat* matrix,const VGboolean inverse,VGfloat* Aout,VGfloat* Bout,VGfloat* Cout);
-
-#endif
-
-#ifdef __cplusplus 
-} /* extern "C" */
-#endif
-
-#endif /* _VGEXT_H */
diff --git a/include/VG/vgplatform.h b/include/VG/vgplatform.h
deleted file mode 100644 (file)
index aa1829f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $Revision: 6810 $ on $Date:: 2008-10-29 07:31:37 -0700 #$ */
-
-/*------------------------------------------------------------------------
- *
- * VG platform specific header Reference Implementation
- * ----------------------------------------------------
- *
- * Copyright (c) 2008 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and /or associated documentation files
- * (the "Materials "), to deal in the Materials without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Materials,
- * and to permit persons to whom the Materials are furnished to do so,
- * subject to the following conditions: 
- *
- * The above copyright notice and this permission notice shall be included 
- * in all copies or substantial portions of the Materials. 
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
- * THE USE OR OTHER DEALINGS IN THE MATERIALS.
- *
- *//**
- * \file
- * \brief VG platform specific header
- *//*-------------------------------------------------------------------*/
-
-#ifndef _VGPLATFORM_H
-#define _VGPLATFORM_H
-
-#include <KHR/khrplatform.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef VG_API_CALL 
-#if defined(OPENVG_STATIC_LIBRARY)
-#      define VG_API_CALL
-#else
-#      define VG_API_CALL KHRONOS_APICALL
-#endif /* defined OPENVG_STATIC_LIBRARY */
-#endif /* ifndef VG_API_CALL */
-
-#ifndef VGU_API_CALL 
-#if defined(OPENVG_STATIC_LIBRARY)
-#      define VGU_API_CALL
-#else
-#      define VGU_API_CALL KHRONOS_APICALL
-#endif /* defined OPENVG_STATIC_LIBRARY */
-#endif /* ifndef VGU_API_CALL */
-
-
-#ifndef VG_API_ENTRY
-#define VG_API_ENTRY
-#endif
-
-#ifndef VG_API_EXIT
-#define VG_API_EXIT
-#endif
-
-#ifndef VGU_API_ENTRY
-#define VGU_API_ENTRY
-#endif
-
-#ifndef VGU_API_EXIT
-#define VGU_API_EXIT
-#endif
-
-typedef float          VGfloat;
-typedef signed char    VGbyte;
-typedef unsigned char  VGubyte;
-typedef signed short   VGshort;
-typedef signed int     VGint;
-typedef unsigned int   VGuint;
-typedef unsigned int   VGbitfield;
-
-#ifndef VG_VGEXT_PROTOTYPES
-#define VG_VGEXT_PROTOTYPES
-#endif 
-
-#ifdef __cplusplus 
-} /* extern "C" */
-#endif
-
-#endif /* _VGPLATFORM_H */
diff --git a/include/VG/vgu.h b/include/VG/vgu.h
deleted file mode 100644 (file)
index da81da9..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/* $Revision: 6810 $ on $Date:: 2008-10-29 07:31:37 -0700 #$ */
-
-/*------------------------------------------------------------------------
- * 
- * VGU 1.1 Reference Implementation
- * -------------------------------------
- *
- * Copyright (c) 2008 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and /or associated documentation files
- * (the "Materials "), to deal in the Materials without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Materials,
- * and to permit persons to whom the Materials are furnished to do so,
- * subject to the following conditions: 
- *
- * The above copyright notice and this permission notice shall be included 
- * in all copies or substantial portions of the Materials. 
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
- * THE USE OR OTHER DEALINGS IN THE MATERIALS.
- *
- *//**
- * \file
- * \brief      VGU 1.1 API.
- *//*-------------------------------------------------------------------*/
-
-#ifndef _VGU_H
-#define _VGU_H
-
-#ifdef __cplusplus 
-extern "C" { 
-#endif
-
-#include <VG/openvg.h>
-
-#define VGU_VERSION_1_0 1
-#define VGU_VERSION_1_1 2
-
-#ifndef VGU_API_CALL
-#      error VGU_API_CALL must be defined
-#endif
-
-#ifndef VGU_API_ENTRY
-#   error VGU_API_ENTRY must be defined 
-#endif
-
-#ifndef VGU_API_EXIT
-#   error VGU_API_EXIT must be defined 
-#endif
-
-
-typedef enum {
-  VGU_NO_ERROR                                 = 0,
-  VGU_BAD_HANDLE_ERROR                         = 0xF000,
-  VGU_ILLEGAL_ARGUMENT_ERROR                   = 0xF001,
-  VGU_OUT_OF_MEMORY_ERROR                      = 0xF002,
-  VGU_PATH_CAPABILITY_ERROR                    = 0xF003,
-  VGU_BAD_WARP_ERROR                           = 0xF004,
-
-  VGU_ERROR_CODE_FORCE_SIZE                    = VG_MAX_ENUM
-} VGUErrorCode;
-
-typedef enum {
-  VGU_ARC_OPEN                                 = 0xF100,
-  VGU_ARC_CHORD                                = 0xF101,
-  VGU_ARC_PIE                                  = 0xF102,
-
-  VGU_ARC_TYPE_FORCE_SIZE                      = VG_MAX_ENUM
-} VGUArcType;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguLine(VGPath path,
-                                  VGfloat x0, VGfloat y0,
-                                  VGfloat x1, VGfloat y1) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguPolygon(VGPath path,
-                                     const VGfloat * points, VGint count,
-                                     VGboolean closed) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguRect(VGPath path,
-                                  VGfloat x, VGfloat y,
-                                  VGfloat width, VGfloat height) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguRoundRect(VGPath path,
-                                       VGfloat x, VGfloat y,
-                                       VGfloat width, VGfloat height,
-                                       VGfloat arcWidth, VGfloat arcHeight) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguEllipse(VGPath path,
-                                     VGfloat cx, VGfloat cy,
-                                     VGfloat width, VGfloat height) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguArc(VGPath path,
-                                 VGfloat x, VGfloat y,
-                                 VGfloat width, VGfloat height,
-                                 VGfloat startAngle, VGfloat angleExtent,
-                                 VGUArcType arcType) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguComputeWarpQuadToSquare(VGfloat sx0, VGfloat sy0,
-                                                     VGfloat sx1, VGfloat sy1,
-                                                     VGfloat sx2, VGfloat sy2,
-                                                     VGfloat sx3, VGfloat sy3,
-                                                     VGfloat * matrix) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguComputeWarpSquareToQuad(VGfloat dx0, VGfloat dy0,
-                                                     VGfloat dx1, VGfloat dy1,
-                                                     VGfloat dx2, VGfloat dy2,
-                                                     VGfloat dx3, VGfloat dy3,
-                                                     VGfloat * matrix) VGU_API_EXIT;
-
-VGU_API_CALL VGUErrorCode VGU_API_ENTRY vguComputeWarpQuadToQuad(VGfloat dx0, VGfloat dy0,
-                                                   VGfloat dx1, VGfloat dy1,
-                                                   VGfloat dx2, VGfloat dy2,
-                                                   VGfloat dx3, VGfloat dy3,
-                                                   VGfloat sx0, VGfloat sy0,
-                                                   VGfloat sx1, VGfloat sy1,
-                                                   VGfloat sx2, VGfloat sy2,
-                                                   VGfloat sx3, VGfloat sy3,
-                                                   VGfloat * matrix) VGU_API_EXIT;
-
-#ifdef __cplusplus 
-} /* extern "C" */
-#endif
-
-#endif /* #ifndef _VGU_H */
index c25adc7280f97cfdd1c1c8d9a879c17610f2ee4d..188ab08b6aae587227f270fb5b1d8c826daf9625 100644 (file)
@@ -27,8 +27,6 @@ if env['platform'] in ['haiku']:
 
 SConscript('mesa/SConscript')
 
-SConscript('mapi/vgapi/SConscript')
-
 if not env['embedded']:
     if env['platform'] not in ('cygwin', 'darwin', 'freebsd', 'haiku', 'windows'):
         SConscript('glx/SConscript')
index 2ac902beaf81f48d679f907c12e240dbc11e6350..652cb1310b9cecdf4c8eb3264cce5a2b7a1a4517 100644 (file)
@@ -136,11 +136,6 @@ if HAVE_DRICOMMON
 SUBDIRS += state_trackers/dri targets/dri
 endif
 
-## the egl target depends on vega
-if HAVE_OPENVG
-SUBDIRS += state_trackers/vega
-endif
-
 if HAVE_X11_DRIVER
 SUBDIRS += state_trackers/glx/xlib targets/libgl-xlib
 endif
index 3f6a54df357eea41d03647ac21072a45225693ab..9b9011f7f01c69ad0b3f41af613116ebf951707e 100644 (file)
@@ -61,8 +61,6 @@ SConscript([
 ])
 
 if not env['embedded']:
-    SConscript('state_trackers/vega/SConscript')
-
     if env['x11']:
         SConscript([
             'state_trackers/glx/xlib/SConscript',
index d69c1860345c4bb8c190441182c8d30edb523c6b..d8e9d4fc8b1b67910adeffd719d42810e6f92898 100644 (file)
@@ -106,14 +106,6 @@ Tracker that implements the client-side DRI protocol, for providing direct
 acceleration services to X11 servers with the DRI extension. Supports DRI1
 and DRI2. Only GL is supported.
 
-.. _egl:
-
-EGL
-^^^
-
-Tracker for the Khronos EGL standard, used to set up GL and GLES contexts
-without extra knowledge of the underlying windowing system.
-
 GLX
 ^^^
 
@@ -124,11 +116,6 @@ Tracker implementing a GL state machine. Not usable as a standalone tracker;
 Mesa should be built with another state tracker, such as :ref:`DRI` or
 :ref:`EGL`.
 
-OpenVG
-^^^^^^
-
-Tracker that implements the Khronos OpenVG standard.
-
 VDPAU
 ^^^^^
 
diff --git a/src/gallium/state_trackers/vega/.gitignore b/src/gallium/state_trackers/vega/.gitignore
deleted file mode 100644 (file)
index c452229..0000000
+++ /dev/null
@@ -1 +0,0 @@
-api_tmp.h
diff --git a/src/gallium/state_trackers/vega/Makefile.am b/src/gallium/state_trackers/vega/Makefile.am
deleted file mode 100644 (file)
index 8985a4e..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright © 2012 Intel Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-
-include Makefile.sources
-include $(top_srcdir)/src/gallium/Automake.inc
-
-AM_CFLAGS = $(GALLIUM_CFLAGS)
-AM_CPPFLAGS = \
-       -I$(top_srcdir)/include \
-       -I$(top_srcdir)/src/mapi
-
-noinst_LTLIBRARIES = libvega.la
-
-libvega_la_SOURCES = $(C_SOURCES)
-
-BUILT_SOURCES = api_tmp.h
-CLEANFILES = api_tmp.h
-
-api_tmp.h: $(top_srcdir)/src/mapi/vgapi/vgapi.csv $(top_srcdir)/src/mapi/mapi_abi.py
-       $(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(top_srcdir)/src/mapi/mapi_abi.py \
-                       --printer vgapi --mode app $< > $@
-
-EXTRA_DIST = SConscript
diff --git a/src/gallium/state_trackers/vega/Makefile.sources b/src/gallium/state_trackers/vega/Makefile.sources
deleted file mode 100644 (file)
index 116a771..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-C_SOURCES := \
-       api.c \
-       api.h \
-       api_consts.h \
-       api_context.c \
-       api_filters.c \
-       api_images.c \
-       api_masks.c \
-       api_misc.c \
-       api_paint.c \
-       api_params.c \
-       api_path.c \
-       api_text.c \
-       api_transform.c \
-       arc.c \
-       arc.h \
-       asm_fill.h \
-       asm_filters.h \
-       asm_util.h \
-       bezier.c \
-       bezier.h \
-       handle.c \
-       handle.h \
-       image.c \
-       image.h \
-       mask.c \
-       mask.h \
-       matrix.h \
-       paint.c \
-       paint.h \
-       path.c \
-       path.h \
-       path_utils.h \
-       polygon.c \
-       polygon.h \
-       renderer.c \
-       renderer.h \
-       shader.c \
-       shader.h \
-       shaders_cache.c \
-       shaders_cache.h \
-       stroker.c \
-       stroker.h \
-       text.c \
-       text.h \
-       util_array.h \
-       vg_api.h \
-       vg_context.c \
-       vg_context.h \
-       vg_manager.c \
-       vg_manager.h \
-       vg_state.c \
-       vg_state.h \
-       vg_translate.c \
-       vg_translate.h \
-       vgu.c
diff --git a/src/gallium/state_trackers/vega/SConscript b/src/gallium/state_trackers/vega/SConscript
deleted file mode 100644 (file)
index 29d5498..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#######################################################################
-# SConscript for vega state_tracker
-
-Import('*')
-
-from sys import executable as python_cmd
-
-env = env.Clone()
-
-env.Append(CPPPATH = [
-    '#/src/mapi',
-    Dir('.'),
-])
-env.Append(CPPDEFINES = [
-    'KHRONOS_DLL_EXPORTS',
-])
-
-api_tmp, = env.CodeGenerate(
-        target = 'api_tmp.h',
-        script = '#src/mapi/mapi_abi.py',
-        source = '#src/mapi/vgapi/vgapi.csv',
-        command = python_cmd + ' $SCRIPT --printer vgapi --mode app $SOURCE > $TARGET'
-)
-
-st_vega = env.ConvenienceLibrary(
-    target = 'st_vega',
-    source = env.ParseSourceList('Makefile.sources', 'C_SOURCES')
-)
-
-Export('st_vega')
diff --git a/src/gallium/state_trackers/vega/api.c b/src/gallium/state_trackers/vega/api.c
deleted file mode 100644 (file)
index 06b1e7b..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2010 LunarG Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "mapi.h"
-
-/* define vega_spec and vega_procs for use with mapi */
-#define API_TMP_DEFINE_SPEC
-#include "api.h"
-
-static void api_init(void)
-{
-   static boolean initialized = FALSE;
-   if (!initialized) {
-      mapi_init(vega_spec);
-      initialized = TRUE;
-   }
-}
-
-struct mapi_table *api_create_dispatch(void)
-{
-   struct mapi_table *tbl;
-
-   api_init();
-
-   tbl = mapi_table_create();
-   if (tbl)
-      mapi_table_fill(tbl, vega_procs);
-
-   return tbl;
-}
-
-void api_destroy_dispatch(struct mapi_table *tbl)
-{
-   mapi_table_destroy(tbl);
-}
-
-void api_make_dispatch_current(const struct mapi_table *tbl)
-{
-   mapi_table_make_current(tbl);
-}
-
-mapi_proc api_get_proc_address(const char *proc_name)
-{
-   if (!proc_name || proc_name[0] != 'v' || proc_name[1] != 'g')
-      return NULL;
-   proc_name += 2;
-
-   api_init();
-   return mapi_get_proc_address(proc_name);
-}
diff --git a/src/gallium/state_trackers/vega/api.h b/src/gallium/state_trackers/vega/api.h
deleted file mode 100644 (file)
index 3226450..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2010 LunarG Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef API_H
-#define API_H
-
-#include "VG/openvg.h"
-#include "VG/vgext.h"
-#include "vg_manager.h"
-
-#include "api_tmp.h"
-
-struct mapi_table;
-
-struct mapi_table *api_create_dispatch(void);
-
-void api_destroy_dispatch(struct mapi_table *tbl);
-
-void api_make_dispatch_current(const struct mapi_table *tbl);
-
-st_proc_t api_get_proc_address(const char *proc_name);
-
-#endif /* API_H */
diff --git a/src/gallium/state_trackers/vega/api_consts.h b/src/gallium/state_trackers/vega/api_consts.h
deleted file mode 100644 (file)
index e1b48d4..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef API_CONSTS_H
-#define API_CONSTS_H
-
-/*must be at least 32*/
-#define VEGA_MAX_SCISSOR_RECTS 32
-
-/*must be at least 16*/
-#define VEGA_MAX_DASH_COUNT 32
-
-/*must be at least 7*/
-#define VEGA_MAX_KERNEL_SIZE 7
-
-/*must be at least 15*/
-#define VEGA_MAX_SEPARABLE_KERNEL_SIZE 15
-
-/*must be at least 32*/
-#define VEGA_MAX_COLOR_RAMP_STOPS 256
-
-#define VEGA_MAX_IMAGE_WIDTH 2048
-
-#define VEGA_MAX_IMAGE_HEIGHT 2048
-
-#define VEGA_MAX_IMAGE_PIXELS (2048*2048)
-
-#define VEGA_MAX_IMAGE_BYTES (2048*2048 * 4)
-
-/*must be at least 128*/
-#define VEGA_MAX_GAUSSIAN_STD_DEVIATION 128
-
-#endif
diff --git a/src/gallium/state_trackers/vega/api_context.c b/src/gallium/state_trackers/vega/api_context.c
deleted file mode 100644 (file)
index 055277c..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_manager.h"
-#include "vg_context.h"
-#include "api.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
-
-VGErrorCode vegaGetError(void)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGErrorCode error = VG_NO_CONTEXT_ERROR;
-
-   if (!ctx)
-      return error;
-
-   error = ctx->_error;
-   ctx->_error = VG_NO_ERROR;
-
-   return error;
-}
-
-void vegaFlush(void)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe;
-
-   if (!ctx)
-      return;
-
-   pipe = ctx->pipe;
-   pipe->flush(pipe, NULL, 0);
-
-   vg_manager_flush_frontbuffer(ctx);
-}
-
-void vegaFinish(void)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_fence_handle *fence = NULL;
-   struct pipe_context *pipe;
-
-   if (!ctx)
-      return;
-
-   pipe = ctx->pipe;
-
-   pipe->flush(pipe, &fence, 0);
-   if (fence) {
-      pipe->screen->fence_finish(pipe->screen, fence,
-                                 PIPE_TIMEOUT_INFINITE);
-      pipe->screen->fence_reference(pipe->screen, &fence, NULL);
-   }
-}
diff --git a/src/gallium/state_trackers/vega/api_filters.c b/src/gallium/state_trackers/vega/api_filters.c
deleted file mode 100644 (file)
index 480ced1..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "image.h"
-#include "api.h"
-#include "handle.h"
-#include "renderer.h"
-#include "shaders_cache.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "util/u_inlines.h"
-#include "pipe/p_screen.h"
-
-#include "util/u_format.h"
-#include "util/u_sampler.h"
-#include "util/u_string.h"
-
-#include "asm_filters.h"
-
-
-struct filter_info {
-   struct vg_image *dst;
-   struct vg_image *src;
-   struct vg_shader * (*setup_shader)(struct vg_context *, void *);
-   void *user_data;
-   const void *const_buffer;
-   VGint const_buffer_len;
-   VGTilingMode tiling_mode;
-   struct pipe_sampler_view *extra_texture_view;
-};
-
-static INLINE struct pipe_resource *create_texture_1d(struct vg_context *ctx,
-                                                     const VGuint *color_data,
-                                                     const VGint color_data_len)
-{
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
-   struct pipe_resource *tex = 0;
-   struct pipe_resource templ;
-
-   memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_1D;
-   templ.format = PIPE_FORMAT_B8G8R8A8_UNORM;
-   templ.last_level = 0;
-   templ.width0 = color_data_len;
-   templ.height0 = 1;
-   templ.depth0 = 1;
-   templ.array_size = 1;
-   templ.bind = PIPE_BIND_SAMPLER_VIEW;
-
-   tex = screen->resource_create(screen, &templ);
-
-   { /* upload color_data */
-      struct pipe_transfer *transfer;
-      void *map =
-         pipe_transfer_map(pipe, tex,
-                           0, 0,
-                           PIPE_TRANSFER_READ_WRITE ,
-                           0, 0, tex->width0, tex->height0,
-                           &transfer);
-      memcpy(map, color_data, sizeof(VGint)*color_data_len);
-      pipe->transfer_unmap(pipe, transfer);
-   }
-
-   return tex;
-}
-
-static INLINE struct pipe_sampler_view *create_texture_1d_view(struct vg_context *ctx,
-                                                               const VGuint *color_data,
-                                                               const VGint color_data_len)
-{
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_resource *texture;
-   struct pipe_sampler_view view_templ;
-   struct pipe_sampler_view *view;
-
-   texture = create_texture_1d(ctx, color_data, color_data_len);
-
-   if (!texture)
-      return NULL;
-
-   u_sampler_view_default_template(&view_templ, texture, texture->format);
-   view = pipe->create_sampler_view(pipe, texture, &view_templ);
-   /* want the texture to go away if the view is freed */
-   pipe_resource_reference(&texture, NULL);
-
-   return view;
-}
-
-static struct vg_shader * setup_color_matrix(struct vg_context *ctx, void *user_data)
-{
-   struct vg_shader *shader =
-      shader_create_from_text(ctx->pipe, color_matrix_asm, 200,
-         PIPE_SHADER_FRAGMENT);
-   return shader;
-}
-
-static struct vg_shader * setup_convolution(struct vg_context *ctx, void *user_data)
-{
-   char buffer[1024];
-   VGint num_consts = (VGint)(long)(user_data);
-   struct vg_shader *shader;
-
-   util_snprintf(buffer, 1023, convolution_asm, num_consts, num_consts / 2 + 1);
-
-   shader = shader_create_from_text(ctx->pipe, buffer, 200,
-                                    PIPE_SHADER_FRAGMENT);
-
-   return shader;
-}
-
-static struct vg_shader * setup_lookup(struct vg_context *ctx, void *user_data)
-{
-   struct vg_shader *shader =
-      shader_create_from_text(ctx->pipe, lookup_asm,
-                              200, PIPE_SHADER_FRAGMENT);
-
-   return shader;
-}
-
-
-static struct vg_shader * setup_lookup_single(struct vg_context *ctx, void *user_data)
-{
-   char buffer[1024];
-   VGImageChannel channel = (VGImageChannel)(user_data);
-   struct vg_shader *shader;
-
-   switch(channel) {
-   case VG_RED:
-      util_snprintf(buffer, 1023, lookup_single_asm, "xxxx");
-      break;
-   case VG_GREEN:
-      util_snprintf(buffer, 1023, lookup_single_asm, "yyyy");
-      break;
-   case VG_BLUE:
-      util_snprintf(buffer, 1023, lookup_single_asm, "zzzz");
-      break;
-   case VG_ALPHA:
-      util_snprintf(buffer, 1023, lookup_single_asm, "wwww");
-      break;
-   default:
-      debug_assert(!"Unknown color channel");
-   }
-
-   shader = shader_create_from_text(ctx->pipe, buffer, 200,
-                                    PIPE_SHADER_FRAGMENT);
-
-   return shader;
-}
-
-static void execute_filter(struct vg_context *ctx,
-                           struct filter_info *info)
-{
-   struct vg_shader *shader;
-   const struct pipe_sampler_state *samplers[2];
-   struct pipe_sampler_view *views[2];
-   struct pipe_sampler_state sampler;
-   uint tex_wrap;
-
-   memset(&sampler, 0, sizeof(sampler));
-   sampler.min_img_filter = PIPE_TEX_FILTER_LINEAR;
-   sampler.mag_img_filter = PIPE_TEX_FILTER_LINEAR;
-   sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
-   sampler.normalized_coords = 1;
-
-   switch (info->tiling_mode) {
-   case VG_TILE_FILL:
-      tex_wrap = PIPE_TEX_WRAP_CLAMP_TO_BORDER;
-      /* copy border color */
-      memcpy(sampler.border_color.f, ctx->state.vg.tile_fill_color,
-            sizeof(sampler.border_color));
-      break;
-   case VG_TILE_PAD:
-      tex_wrap = PIPE_TEX_WRAP_CLAMP_TO_EDGE;;
-      break;
-   case VG_TILE_REPEAT:
-      tex_wrap = PIPE_TEX_WRAP_REPEAT;;
-      break;
-   case VG_TILE_REFLECT:
-      tex_wrap = PIPE_TEX_WRAP_MIRROR_REPEAT;
-      break;
-   default:
-      debug_assert(!"Unknown tiling mode");
-      tex_wrap = 0;
-      break;
-   }
-
-   sampler.wrap_s = tex_wrap;
-   sampler.wrap_t = tex_wrap;
-   sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-
-   samplers[0] = samplers[1] = &sampler;
-   views[0] = info->src->sampler_view;
-   views[1] = info->extra_texture_view;
-
-   shader = info->setup_shader(ctx, info->user_data);
-
-   if (renderer_filter_begin(ctx->renderer,
-            info->dst->sampler_view->texture, VG_TRUE,
-            ctx->state.vg.filter_channel_mask,
-            samplers, views, (info->extra_texture_view) ? 2 : 1,
-            shader->driver, info->const_buffer, info->const_buffer_len)) {
-      renderer_filter(ctx->renderer,
-            info->dst->x, info->dst->y, info->dst->width, info->dst->height,
-            info->src->x, info->src->y, info->src->width, info->src->height);
-      renderer_filter_end(ctx->renderer);
-   }
-
-   vg_shader_destroy(ctx, shader);
-}
-
-void vegaColorMatrix(VGImage dst, VGImage src,
-                     const VGfloat * matrix)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *d, *s;
-   struct filter_info info;
-
-   if (dst == VG_INVALID_HANDLE || src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!matrix || !is_aligned(matrix)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   d = handle_to_image(dst);
-   s = handle_to_image(src);
-
-   if (vg_image_overlaps(d, s)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   info.dst = d;
-   info.src = s;
-   info.setup_shader = &setup_color_matrix;
-   info.user_data = NULL;
-   info.const_buffer = matrix;
-   info.const_buffer_len = 20 * sizeof(VGfloat);
-   info.tiling_mode = VG_TILE_PAD;
-   info.extra_texture_view = NULL;
-   execute_filter(ctx, &info);
-}
-
-static VGfloat texture_offset(VGfloat width, VGint kernelSize, VGint current, VGint shift)
-{
-   VGfloat diff = (VGfloat) (current - shift);
-
-   return diff / width;
-}
-
-void vegaConvolve(VGImage dst, VGImage src,
-                  VGint kernelWidth, VGint kernelHeight,
-                  VGint shiftX, VGint shiftY,
-                  const VGshort * kernel,
-                  VGfloat scale,
-                  VGfloat bias,
-                  VGTilingMode tilingMode)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGfloat *buffer;
-   VGint buffer_len;
-   VGint i, j;
-   VGint idx = 0;
-   struct vg_image *d, *s;
-   VGint kernel_size = kernelWidth * kernelHeight;
-   struct filter_info info;
-   const VGint max_kernel_size = vegaGeti(VG_MAX_KERNEL_SIZE);
-
-   if (dst == VG_INVALID_HANDLE || src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (kernelWidth <= 0 || kernelHeight <= 0 ||
-      kernelWidth > max_kernel_size || kernelHeight > max_kernel_size) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!kernel || !is_aligned_to(kernel, 2)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (tilingMode < VG_TILE_FILL ||
-       tilingMode > VG_TILE_REFLECT) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   d = handle_to_image(dst);
-   s = handle_to_image(src);
-
-   if (vg_image_overlaps(d, s)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-
-   buffer_len = 8 + 2 * 4 * kernel_size;
-   buffer = malloc(buffer_len * sizeof(VGfloat));
-
-   buffer[0] = 0.f;
-   buffer[1] = 1.f;
-   buffer[2] = 2.f; /*unused*/
-   buffer[3] = 4.f; /*unused*/
-
-   buffer[4] = (VGfloat) (kernelWidth * kernelHeight);
-   buffer[5] = scale;
-   buffer[6] = bias;
-   buffer[7] = 0.f;
-
-   idx = 8;
-   for (j = 0; j < kernelHeight; ++j) {
-      for (i = 0; i < kernelWidth; ++i) {
-         VGint index = j * kernelWidth + i;
-         VGfloat x, y;
-
-         x = (VGfloat) texture_offset(s->width, kernelWidth, i, shiftX);
-         y = (VGfloat) texture_offset(s->height, kernelHeight, j, shiftY);
-
-         buffer[idx + index*4 + 0] = x;
-         buffer[idx + index*4 + 1] = y;
-         buffer[idx + index*4 + 2] = 0.f;
-         buffer[idx + index*4 + 3] = 0.f;
-      }
-   }
-   idx += kernel_size * 4;
-
-   for (j = 0; j < kernelHeight; ++j) {
-      for (i = 0; i < kernelWidth; ++i) {
-         /* transpose the kernel */
-         VGint index = j * kernelWidth + i;
-         VGint kindex = (kernelWidth - i - 1) * kernelHeight + (kernelHeight - j - 1);
-         buffer[idx + index*4 + 0] = kernel[kindex];
-         buffer[idx + index*4 + 1] = kernel[kindex];
-         buffer[idx + index*4 + 2] = kernel[kindex];
-         buffer[idx + index*4 + 3] = kernel[kindex];
-      }
-   }
-
-   info.dst = d;
-   info.src = s;
-   info.setup_shader = &setup_convolution;
-   info.user_data = (void*)(long)(buffer_len/4);
-   info.const_buffer = buffer;
-   info.const_buffer_len = buffer_len * sizeof(VGfloat);
-   info.tiling_mode = tilingMode;
-   info.extra_texture_view = NULL;
-   execute_filter(ctx, &info);
-
-   free(buffer);
-}
-
-void vegaSeparableConvolve(VGImage dst, VGImage src,
-                           VGint kernelWidth,
-                           VGint kernelHeight,
-                           VGint shiftX, VGint shiftY,
-                           const VGshort * kernelX,
-                           const VGshort * kernelY,
-                           VGfloat scale,
-                           VGfloat bias,
-                           VGTilingMode tilingMode)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGshort *kernel;
-   VGint i, j, idx = 0;
-   const VGint max_kernel_size = vegaGeti(VG_MAX_SEPARABLE_KERNEL_SIZE);
-
-   if (dst == VG_INVALID_HANDLE || src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (kernelWidth <= 0 || kernelHeight <= 0 ||
-       kernelWidth > max_kernel_size || kernelHeight > max_kernel_size) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!kernelX || !kernelY ||
-       !is_aligned_to(kernelX, 2) || !is_aligned_to(kernelY, 2)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (tilingMode < VG_TILE_FILL ||
-       tilingMode > VG_TILE_REFLECT) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   kernel = malloc(sizeof(VGshort)*kernelWidth*kernelHeight);
-   for (i = 0; i < kernelWidth; ++i) {
-      for (j = 0; j < kernelHeight; ++j) {
-         kernel[idx] = kernelX[i] * kernelY[j];
-         ++idx;
-      }
-   }
-   vegaConvolve(dst, src, kernelWidth, kernelHeight, shiftX, shiftY,
-                kernel, scale, bias, tilingMode);
-   free(kernel);
-}
-
-static INLINE VGfloat compute_gaussian_componenet(VGfloat x, VGfloat y,
-                                                  VGfloat stdDeviationX,
-                                                  VGfloat stdDeviationY)
-{
-   VGfloat mult = 1 / ( 2 * M_PI * stdDeviationX * stdDeviationY);
-   VGfloat e = exp( - ( pow(x, 2)/(2*pow(stdDeviationX, 2)) +
-                        pow(y, 2)/(2*pow(stdDeviationY, 2)) ) );
-   return mult * e;
-}
-
-static INLINE VGint compute_kernel_size(VGfloat deviation)
-{
-   VGint size = ceil(2.146 * deviation);
-   if (size > 11)
-      return 11;
-   return size;
-}
-
-static void compute_gaussian_kernel(VGfloat *kernel,
-                                    VGint width, VGint height,
-                                    VGfloat stdDeviationX,
-                                    VGfloat stdDeviationY)
-{
-   VGint i, j;
-   VGfloat scale = 0.0f;
-
-   for (j = 0; j < height; ++j) {
-      for (i = 0; i < width; ++i) {
-         VGint idx =  (height - j -1) * width + (width - i -1);
-         kernel[idx] = compute_gaussian_componenet(i-(ceil(width/2))-1,
-                                                   j-ceil(height/2)-1,
-                                                   stdDeviationX, stdDeviationY);
-         scale += kernel[idx];
-      }
-   }
-
-   for (j = 0; j < height; ++j) {
-      for (i = 0; i < width; ++i) {
-         VGint idx = j * width + i;
-         kernel[idx] /= scale;
-      }
-   }
-}
-
-void vegaGaussianBlur(VGImage dst, VGImage src,
-                      VGfloat stdDeviationX,
-                      VGfloat stdDeviationY,
-                      VGTilingMode tilingMode)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *d, *s;
-   VGfloat *buffer, *kernel;
-   VGint kernel_width, kernel_height, kernel_size;
-   VGint buffer_len;
-   VGint idx, i, j;
-   struct filter_info info;
-
-   if (dst == VG_INVALID_HANDLE || src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (stdDeviationX <= 0 || stdDeviationY <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (tilingMode < VG_TILE_FILL ||
-       tilingMode > VG_TILE_REFLECT) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   d = handle_to_image(dst);
-   s = handle_to_image(src);
-
-   if (vg_image_overlaps(d, s)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   kernel_width = compute_kernel_size(stdDeviationX);
-   kernel_height = compute_kernel_size(stdDeviationY);
-   kernel_size = kernel_width * kernel_height;
-   kernel = malloc(sizeof(VGfloat)*kernel_size);
-   compute_gaussian_kernel(kernel, kernel_width, kernel_height,
-                           stdDeviationX, stdDeviationY);
-
-   buffer_len = 8 + 2 * 4 * kernel_size;
-   buffer = malloc(buffer_len * sizeof(VGfloat));
-
-   buffer[0] = 0.f;
-   buffer[1] = 1.f;
-   buffer[2] = 2.f; /*unused*/
-   buffer[3] = 4.f; /*unused*/
-
-   buffer[4] = kernel_width * kernel_height;
-   buffer[5] = 1.f;/*scale*/
-   buffer[6] = 0.f;/*bias*/
-   buffer[7] = 0.f;
-
-   idx = 8;
-   for (j = 0; j < kernel_height; ++j) {
-      for (i = 0; i < kernel_width; ++i) {
-         VGint index = j * kernel_width + i;
-         VGfloat x, y;
-
-         x = texture_offset(s->width, kernel_width, i, kernel_width/2);
-         y = texture_offset(s->height, kernel_height, j, kernel_height/2);
-
-         buffer[idx + index*4 + 0] = x;
-         buffer[idx + index*4 + 1] = y;
-         buffer[idx + index*4 + 2] = 0.f;
-         buffer[idx + index*4 + 3] = 0.f;
-      }
-   }
-   idx += kernel_size * 4;
-
-   for (j = 0; j < kernel_height; ++j) {
-      for (i = 0; i < kernel_width; ++i) {
-         /* transpose the kernel */
-         VGint index = j * kernel_width + i;
-         VGint kindex = (kernel_width - i - 1) * kernel_height + (kernel_height - j - 1);
-         buffer[idx + index*4 + 0] = kernel[kindex];
-         buffer[idx + index*4 + 1] = kernel[kindex];
-         buffer[idx + index*4 + 2] = kernel[kindex];
-         buffer[idx + index*4 + 3] = kernel[kindex];
-      }
-   }
-
-   info.dst = d;
-   info.src = s;
-   info.setup_shader = &setup_convolution;
-   info.user_data = (void*)(long)(buffer_len/4);
-   info.const_buffer = buffer;
-   info.const_buffer_len = buffer_len * sizeof(VGfloat);
-   info.tiling_mode = tilingMode;
-   info.extra_texture_view = NULL;
-   execute_filter(ctx, &info);
-
-   free(buffer);
-   free(kernel);
-}
-
-void vegaLookup(VGImage dst, VGImage src,
-                const VGubyte * redLUT,
-                const VGubyte * greenLUT,
-                const VGubyte * blueLUT,
-                const VGubyte * alphaLUT,
-                VGboolean outputLinear,
-                VGboolean outputPremultiplied)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *d, *s;
-   VGuint color_data[256];
-   VGint i;
-   struct pipe_sampler_view *lut_texture_view;
-   VGfloat buffer[4];
-   struct filter_info info;
-
-   if (dst == VG_INVALID_HANDLE || src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!redLUT || !greenLUT || !blueLUT || !alphaLUT) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   d = handle_to_image(dst);
-   s = handle_to_image(src);
-
-   if (vg_image_overlaps(d, s)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   for (i = 0; i < 256; ++i) {
-      color_data[i] = blueLUT[i] << 24 | greenLUT[i] << 16 |
-                      redLUT[i]  <<  8 | alphaLUT[i];
-   }
-   lut_texture_view = create_texture_1d_view(ctx, color_data, 255);
-
-   buffer[0] = 0.f;
-   buffer[1] = 0.f;
-   buffer[2] = 1.f;
-   buffer[3] = 1.f;
-
-   info.dst = d;
-   info.src = s;
-   info.setup_shader = &setup_lookup;
-   info.user_data = NULL;
-   info.const_buffer = buffer;
-   info.const_buffer_len = 4 * sizeof(VGfloat);
-   info.tiling_mode = VG_TILE_PAD;
-   info.extra_texture_view = lut_texture_view;
-
-   execute_filter(ctx, &info);
-
-   pipe_sampler_view_reference(&lut_texture_view, NULL);
-}
-
-void vegaLookupSingle(VGImage dst, VGImage src,
-                      const VGuint * lookupTable,
-                      VGImageChannel sourceChannel,
-                      VGboolean outputLinear,
-                      VGboolean outputPremultiplied)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *d, *s;
-   struct pipe_sampler_view *lut_texture_view;
-   VGfloat buffer[4];
-   struct filter_info info;
-   VGuint color_data[256];
-   VGint i;
-
-   if (dst == VG_INVALID_HANDLE || src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!lookupTable || !is_aligned(lookupTable)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (sourceChannel != VG_RED && sourceChannel != VG_GREEN &&
-       sourceChannel != VG_BLUE && sourceChannel != VG_ALPHA) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   d = handle_to_image(dst);
-   s = handle_to_image(src);
-
-   if (vg_image_overlaps(d, s)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-
-   for (i = 0; i < 256; ++i) {
-      VGuint rgba = lookupTable[i];
-      VGubyte blue, green, red, alpha;
-      red   = (rgba & 0xff000000)>>24;
-      green = (rgba & 0x00ff0000)>>16;
-      blue  = (rgba & 0x0000ff00)>> 8;
-      alpha = (rgba & 0x000000ff)>> 0;
-      color_data[i] = blue << 24 | green << 16 |
-                      red  <<  8 | alpha;
-   }
-   lut_texture_view = create_texture_1d_view(ctx, color_data, 256);
-
-   buffer[0] = 0.f;
-   buffer[1] = 0.f;
-   buffer[2] = 1.f;
-   buffer[3] = 1.f;
-
-   info.dst = d;
-   info.src = s;
-   info.setup_shader = &setup_lookup_single;
-   info.user_data = (void*)sourceChannel;
-   info.const_buffer = buffer;
-   info.const_buffer_len = 4 * sizeof(VGfloat);
-   info.tiling_mode = VG_TILE_PAD;
-   info.extra_texture_view = lut_texture_view;
-
-   execute_filter(ctx, &info);
-
-   pipe_sampler_view_reference(&lut_texture_view, NULL);
-}
diff --git a/src/gallium/state_trackers/vega/api_images.c b/src/gallium/state_trackers/vega/api_images.c
deleted file mode 100644 (file)
index 300868c..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "image.h"
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "vg_translate.h"
-#include "api_consts.h"
-#include "api.h"
-#include "handle.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
-#include "util/u_inlines.h"
-#include "util/u_tile.h"
-#include "util/u_math.h"
-
-static INLINE VGboolean supported_image_format(VGImageFormat format)
-{
-   switch(format) {
-   case VG_sRGBX_8888:
-   case VG_sRGBA_8888:
-   case VG_sRGBA_8888_PRE:
-   case VG_sRGB_565:
-   case VG_sRGBA_5551:
-   case VG_sRGBA_4444:
-   case VG_sL_8:
-   case VG_lRGBX_8888:
-   case VG_lRGBA_8888:
-   case VG_lRGBA_8888_PRE:
-   case VG_lL_8:
-   case VG_A_8:
-   case VG_BW_1:
-#ifdef OPENVG_VERSION_1_1
-   case VG_A_1:
-   case VG_A_4:
-#endif
-   case VG_sXRGB_8888:
-   case VG_sARGB_8888:
-   case VG_sARGB_8888_PRE:
-   case VG_sARGB_1555:
-   case VG_sARGB_4444:
-   case VG_lXRGB_8888:
-   case VG_lARGB_8888:
-   case VG_lARGB_8888_PRE:
-   case VG_sBGRX_8888:
-   case VG_sBGRA_8888:
-   case VG_sBGRA_8888_PRE:
-   case VG_sBGR_565:
-   case VG_sBGRA_5551:
-   case VG_sBGRA_4444:
-   case VG_lBGRX_8888:
-   case VG_lBGRA_8888:
-   case VG_lBGRA_8888_PRE:
-   case VG_sXBGR_8888:
-   case VG_sABGR_8888:
-   case VG_sABGR_8888_PRE:
-   case VG_sABGR_1555:
-   case VG_sABGR_4444:
-   case VG_lXBGR_8888:
-   case VG_lABGR_8888:
-   case VG_lABGR_8888_PRE:
-      return VG_TRUE;
-   default:
-      return VG_FALSE;
-   }
-   return VG_FALSE;
-}
-
-VGImage vegaCreateImage(VGImageFormat format,
-                        VGint width, VGint height,
-                        VGbitfield allowedQuality)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (!supported_image_format(format)) {
-      vg_set_error(ctx, VG_UNSUPPORTED_IMAGE_FORMAT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (width > vegaGeti(VG_MAX_IMAGE_WIDTH) ||
-       height > vegaGeti(VG_MAX_IMAGE_HEIGHT)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (width * height > vegaGeti(VG_MAX_IMAGE_PIXELS)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   if (!(allowedQuality & ((VG_IMAGE_QUALITY_NONANTIALIASED |
-                           VG_IMAGE_QUALITY_FASTER |
-                           VG_IMAGE_QUALITY_BETTER)))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   return image_to_handle(image_create(format, width, height));
-}
-
-void vegaDestroyImage(VGImage image)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img = handle_to_image(image);
-
-   if (image == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!vg_object_is_valid(image, VG_OBJECT_IMAGE)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   image_destroy(img);
-}
-
-void vegaClearImage(VGImage image,
-                    VGint x, VGint y,
-                    VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img;
-
-   if (image == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   img = handle_to_image(image);
-
-   if (x + width < 0 || y + height < 0)
-      return;
-
-   image_clear(img, x, y, width, height);
-
-}
-
-void vegaImageSubData(VGImage image,
-                      const void * data,
-                      VGint dataStride,
-                      VGImageFormat dataFormat,
-                      VGint x, VGint y,
-                      VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img;
-
-   if (image == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!supported_image_format(dataFormat)) {
-      vg_set_error(ctx, VG_UNSUPPORTED_IMAGE_FORMAT_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0 || !data || !is_aligned(data)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   img = handle_to_image(image);
-   image_sub_data(img, data, dataStride, dataFormat,
-                  x, y, width, height);
-}
-
-void vegaGetImageSubData(VGImage image,
-                         void * data,
-                         VGint dataStride,
-                         VGImageFormat dataFormat,
-                         VGint x, VGint y,
-                         VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img;
-
-   if (image == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!supported_image_format(dataFormat)) {
-      vg_set_error(ctx, VG_UNSUPPORTED_IMAGE_FORMAT_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0 || !data || !is_aligned(data)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   img = handle_to_image(image);
-   image_get_sub_data(img, data, dataStride, dataFormat,
-                      x, y, width, height);
-}
-
-VGImage vegaChildImage(VGImage parent,
-                       VGint x, VGint y,
-                       VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *p;
-
-   if (parent == VG_INVALID_HANDLE ||
-       !vg_context_is_object_valid(ctx, VG_OBJECT_IMAGE, parent) ||
-       !vg_object_is_valid(parent, VG_OBJECT_IMAGE)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (width <= 0 || height <= 0 || x < 0 || y < 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   p = handle_to_image(parent);
-   if (x > p->width  || y > p->height) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (x + width > p->width  || y + height > p->height) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   return image_to_handle(image_child_image(p, x, y, width, height));
-}
-
-VGImage vegaGetParent(VGImage image)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img;
-
-   if (image == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   img = handle_to_image(image);
-   if (img->parent)
-      return image_to_handle(img->parent);
-   else
-      return image;
-}
-
-void vegaCopyImage(VGImage dst, VGint dx, VGint dy,
-                   VGImage src, VGint sx, VGint sy,
-                   VGint width, VGint height,
-                   VGboolean dither)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (src == VG_INVALID_HANDLE || dst == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   vg_validate_state(ctx);
-   image_copy(handle_to_image(dst), dx, dy,
-              handle_to_image(src), sx, sy,
-              width, height, dither);
-}
-
-void vegaDrawImage(VGImage image)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (!ctx)
-      return;
-
-   if (image == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-   image_draw(handle_to_image(image),
-         &ctx->state.vg.image_user_to_surface_matrix);
-}
-
-void vegaSetPixels(VGint dx, VGint dy,
-                   VGImage src, VGint sx, VGint sy,
-                   VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   vg_validate_state(ctx);
-
-   if (src == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   image_set_pixels(dx, dy, handle_to_image(src), sx, sy, width,
-                    height);
-}
-
-void vegaGetPixels(VGImage dst, VGint dx, VGint dy,
-                   VGint sx, VGint sy,
-                   VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img;
-
-   if (dst == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   img = handle_to_image(dst);
-
-   image_get_pixels(img, dx, dy,
-                    sx, sy, width, height);
-}
-
-void vegaWritePixels(const void * data, VGint dataStride,
-                     VGImageFormat dataFormat,
-                     VGint dx, VGint dy,
-                     VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (!supported_image_format(dataFormat)) {
-      vg_set_error(ctx, VG_UNSUPPORTED_IMAGE_FORMAT_ERROR);
-      return;
-   }
-   if (!data || !is_aligned(data)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-   {
-      struct vg_image *img = image_create(dataFormat, width, height);
-      image_sub_data(img, data, dataStride, dataFormat, 0, 0,
-                     width, height);
-#if 0
-      struct matrix *matrix = &ctx->state.vg.image_user_to_surface_matrix;
-      matrix_translate(matrix, dx, dy);
-      image_draw(img);
-      matrix_translate(matrix, -dx, -dy);
-#else
-      /* this looks like a better approach */
-      image_set_pixels(dx, dy, img, 0, 0, width, height);
-#endif
-      image_destroy(img);
-   }
-}
-
-void vegaReadPixels(void * data, VGint dataStride,
-                    VGImageFormat dataFormat,
-                    VGint sx, VGint sy,
-                    VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct st_renderbuffer *strb = stfb->strb;
-
-   VGfloat temp[VEGA_MAX_IMAGE_WIDTH][4];
-   VGfloat *df = (VGfloat*)temp;
-   VGint i;
-   VGubyte *dst = (VGubyte *)data;
-   VGint xoffset = 0, yoffset = 0;
-
-   if (!supported_image_format(dataFormat)) {
-      vg_set_error(ctx, VG_UNSUPPORTED_IMAGE_FORMAT_ERROR);
-      return;
-   }
-   if (!data || !is_aligned(data)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (sx < 0) {
-      xoffset = -sx;
-      xoffset *= _vega_size_for_format(dataFormat);
-      width += sx;
-      sx = 0;
-   }
-   if (sy < 0) {
-      yoffset = -sy;
-      yoffset *= dataStride;
-      height += sy;
-      sy = 0;
-   }
-
-   if (sx + width > stfb->width || sy + height > stfb->height) {
-      width = stfb->width - sx;
-      height = stfb->height - sy;
-      /* nothing to read */
-      if (width <= 0 || height <= 0)
-         return;
-   }
-
-   {
-      VGint y = (stfb->height - sy) - 1, yStep = -1;
-      struct pipe_transfer *transfer;
-      void *map;
-
-      map = pipe_transfer_map(pipe, strb->texture,  0, 0,
-                              PIPE_TRANSFER_READ,
-                              0, 0, sx + width, stfb->height - sy,
-                              &transfer);
-
-      /* Do a row at a time to flip image data vertically */
-      for (i = 0; i < height; i++) {
-#if 0
-         debug_printf("%d-%d  == %d\n", sy, height, y);
-#endif
-         pipe_get_tile_rgba(transfer, map, sx, y, width, 1, df);
-         y += yStep;
-         _vega_pack_rgba_span_float(ctx, width, temp, dataFormat,
-                                    dst + yoffset + xoffset);
-         dst += dataStride;
-      }
-
-      pipe->transfer_unmap(pipe, transfer);
-   }
-}
-
-void vegaCopyPixels(VGint dx, VGint dy,
-                    VGint sx, VGint sy,
-                    VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct st_renderbuffer *strb = stfb->strb;
-
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   /* do nothing if we copy from outside the fb */
-   if (dx >= (VGint)stfb->width || dy >= (VGint)stfb->height ||
-       sx >= (VGint)stfb->width || sy >= (VGint)stfb->height)
-      return;
-
-   vg_validate_state(ctx);
-   /* make sure rendering has completed */
-   vegaFinish();
-
-   vg_copy_surface(ctx, strb->surface, dx, dy,
-                   strb->surface, sx, sy, width, height);
-}
diff --git a/src/gallium/state_trackers/vega/api_masks.c b/src/gallium/state_trackers/vega/api_masks.c
deleted file mode 100644 (file)
index 48dc844..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "mask.h"
-#include "api.h"
-#include "handle.h"
-#include "renderer.h"
-
-#include "vg_context.h"
-#include "pipe/p_context.h"
-
-void vegaMask(VGHandle mask, VGMaskOperation operation,
-              VGint x, VGint y,
-              VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (width <=0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (operation < VG_CLEAR_MASK || operation > VG_SUBTRACT_MASK) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-
-   vg_validate_state(ctx);
-
-   if (operation == VG_CLEAR_MASK) {
-      mask_fill(x, y, width, height, 0.f);
-   } else if (operation == VG_FILL_MASK) {
-      mask_fill(x, y, width, height, 1.f);
-   } else if (vg_object_is_valid(mask, VG_OBJECT_IMAGE)) {
-      struct vg_image *image = handle_to_image(mask);
-      mask_using_image(image, operation, x, y, width, height);
-   } else if (vg_object_is_valid(mask, VG_OBJECT_MASK)) {
-      struct vg_mask_layer *layer = handle_to_masklayer(mask);
-      mask_using_layer(layer, operation, x, y, width, height);
-   } else {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-   }
-}
-
-void vegaClear(VGint x, VGint y,
-               VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-#if 0
-   debug_printf("Clear [%d, %d, %d, %d] with [%f, %f, %f, %f]\n",
-                x, y, width, height,
-                ctx->state.vg.clear_color[0],
-                ctx->state.vg.clear_color[1],
-                ctx->state.vg.clear_color[2],
-                ctx->state.vg.clear_color[3]);
-#endif
-
-   /* check for a whole surface clear */
-   if (!ctx->state.vg.scissoring &&
-       (x == 0 && y == 0 && width == stfb->width && height == stfb->height)) {
-      union pipe_color_union clear_color;
-      clear_color.f[0] = ctx->state.vg.clear_color[0];
-      clear_color.f[1] = ctx->state.vg.clear_color[1];
-      clear_color.f[2] = ctx->state.vg.clear_color[2];
-      clear_color.f[3] = ctx->state.vg.clear_color[3];
-      ctx->pipe->clear(ctx->pipe, PIPE_CLEAR_COLOR0 | PIPE_CLEAR_DEPTHSTENCIL,
-                       &clear_color, 1., 0);
-   } else if (renderer_clear_begin(ctx->renderer)) {
-      /* XXX verify coord round-off */
-      renderer_clear(ctx->renderer, x, y, width, height, ctx->state.vg.clear_color);
-      renderer_clear_end(ctx->renderer);
-   }
-}
-
-
-#ifdef OPENVG_VERSION_1_1
-
-
-void vegaRenderToMask(VGPath path,
-                      VGbitfield paintModes,
-                      VGMaskOperation operation)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!paintModes || (paintModes&(~(VG_STROKE_PATH|VG_FILL_PATH)))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (operation < VG_CLEAR_MASK ||
-       operation > VG_SUBTRACT_MASK) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (!vg_object_is_valid(path, VG_OBJECT_PATH)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-
-   mask_render_to(handle_to_path(path), paintModes, operation);
-}
-
-VGMaskLayer vegaCreateMaskLayer(VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (width <= 0 || height <= 0 ||
-       width > vegaGeti(VG_MAX_IMAGE_WIDTH) ||
-       height > vegaGeti(VG_MAX_IMAGE_HEIGHT)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   return masklayer_to_handle(mask_layer_create(width, height));
-}
-
-void vegaDestroyMaskLayer(VGMaskLayer maskLayer)
-{
-   struct vg_mask_layer *mask = 0;
-   struct vg_context *ctx = vg_current_context();
-
-   if (maskLayer == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   mask = handle_to_masklayer(maskLayer);
-   mask_layer_destroy(mask);
-}
-
-void vegaFillMaskLayer(VGMaskLayer maskLayer,
-                       VGint x, VGint y,
-                       VGint width, VGint height,
-                       VGfloat value)
-{
-   struct vg_mask_layer *mask = 0;
-   struct vg_context *ctx = vg_current_context();
-
-   if (maskLayer == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (value < 0 || value > 1) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (x < 0 || y < 0 || (x + width) < 0 || (y + height) < 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   mask = handle_to_masklayer(maskLayer);
-
-   if (x + width > mask_layer_width(mask) ||
-       y + height > mask_layer_height(mask)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-
-   mask_layer_fill(mask, x, y, width, height, value);
-}
-
-void vegaCopyMask(VGMaskLayer maskLayer,
-                  VGint sx, VGint sy,
-                  VGint dx, VGint dy,
-                  VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_mask_layer *mask = 0;
-
-   if (maskLayer == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   vg_validate_state(ctx);
-
-   mask = handle_to_masklayer(maskLayer);
-   mask_copy(mask, sx, sy, dx, dy, width, height);
-}
-
-#endif
diff --git a/src/gallium/state_trackers/vega/api_misc.c b/src/gallium/state_trackers/vega/api_misc.c
deleted file mode 100644 (file)
index e274e6a..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "api.h"
-
-/* Hardware Queries */
-VGHardwareQueryResult vegaHardwareQuery(VGHardwareQueryType key,
-                                        VGint setting)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (key < VG_IMAGE_FORMAT_QUERY ||
-       key > VG_PATH_DATATYPE_QUERY) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_HARDWARE_UNACCELERATED;
-   }
-
-   if (key == VG_IMAGE_FORMAT_QUERY) {
-      if (setting < VG_sRGBX_8888 ||
-          setting > VG_lABGR_8888_PRE) {
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-         return VG_HARDWARE_UNACCELERATED;
-      }
-   } else if (key == VG_PATH_DATATYPE_QUERY) {
-      if (setting < VG_PATH_DATATYPE_S_8 ||
-          setting > VG_PATH_DATATYPE_F) {
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-         return VG_HARDWARE_UNACCELERATED;
-      }
-   }
-   /* we're supposed to accelerate everything */
-   return VG_HARDWARE_ACCELERATED;
-}
-
-/* Renderer and Extension Information */
-const VGubyte *vegaGetString(VGStringID name)
-{
-   struct vg_context *ctx = vg_current_context();
-   static const VGubyte *vendor = (VGubyte *)"Mesa Project";
-   static const VGubyte *renderer = (VGubyte *)"Vega OpenVG 1.1";
-   static const VGubyte *version = (VGubyte *)"1.1";
-
-   if (!ctx)
-      return NULL;
-
-   switch(name) {
-   case VG_VENDOR:
-      return vendor;
-   case VG_RENDERER:
-      return renderer;
-   case VG_VERSION:
-      return version;
-   case VG_EXTENSIONS:
-      return NULL;
-   default:
-      return NULL;
-   }
-}
diff --git a/src/gallium/state_trackers/vega/api_paint.c b/src/gallium/state_trackers/vega/api_paint.c
deleted file mode 100644 (file)
index 2610ebe..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "paint.h"
-#include "api.h"
-#include "handle.h"
-
-
-VGPaint vegaCreatePaint(void)
-{
-   return paint_to_handle(paint_create(vg_current_context()));
-}
-
-void vegaDestroyPaint(VGPaint p)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (p == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   paint_destroy(handle_to_paint(p));
-}
-
-void vegaSetPaint(VGPaint paint, VGbitfield paintModes)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (paint == VG_INVALID_HANDLE) {
-      /* restore the default */
-      paint = paint_to_handle(ctx->default_paint);
-   } else if (!vg_object_is_valid(paint, VG_OBJECT_PAINT)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!(paintModes & ((VG_FILL_PATH|VG_STROKE_PATH)))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (paintModes & VG_FILL_PATH) {
-      ctx->state.vg.fill_paint = handle_to_paint(paint);
-   }
-   if (paintModes & VG_STROKE_PATH) {
-      ctx->state.vg.stroke_paint = handle_to_paint(paint);
-   }
-
-   ctx->state.dirty |= PAINT_DIRTY;
-}
-
-VGPaint vegaGetPaint(VGPaintMode paintMode)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGPaint paint = VG_INVALID_HANDLE;
-
-   if (paintMode < VG_STROKE_PATH || paintMode > VG_FILL_PATH) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   if (paintMode == VG_FILL_PATH)
-      paint = paint_to_handle(ctx->state.vg.fill_paint);
-   else if (paintMode == VG_STROKE_PATH)
-      paint = paint_to_handle(ctx->state.vg.stroke_paint);
-
-   if (paint == paint_to_handle(ctx->default_paint))
-      paint = VG_INVALID_HANDLE;
-
-   return paint;
-}
-
-void vegaSetColor(VGPaint paint, VGuint rgba)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_paint *p;
-
-   if (paint == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!vg_object_is_valid(paint, VG_OBJECT_PAINT)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   p = handle_to_paint(paint);
-   paint_set_colori(p, rgba);
-
-   if (ctx->state.vg.fill_paint == p ||
-       ctx->state.vg.stroke_paint == p)
-      ctx->state.dirty |= PAINT_DIRTY;
-}
-
-VGuint vegaGetColor(VGPaint paint)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_paint *p;
-   VGuint rgba = 0;
-
-   if (paint == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return rgba;
-   }
-
-   if (!vg_object_is_valid(paint, VG_OBJECT_PAINT)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return rgba;
-   }
-   p = handle_to_paint(paint);
-
-   return paint_colori(p);
-}
-
-void vegaPaintPattern(VGPaint paint, VGImage pattern)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (paint == VG_INVALID_HANDLE ||
-       !vg_context_is_object_valid(ctx, VG_OBJECT_PAINT, paint)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (pattern == VG_INVALID_HANDLE) {
-      paint_set_type(handle_to_paint(paint), VG_PAINT_TYPE_COLOR);
-      return;
-   }
-
-   if (!vg_context_is_object_valid(ctx, VG_OBJECT_IMAGE, pattern)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-
-   if (!vg_object_is_valid(paint, VG_OBJECT_PAINT) ||
-       !vg_object_is_valid(pattern, VG_OBJECT_IMAGE)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   paint_set_pattern(handle_to_paint(paint),
-                     handle_to_image(pattern));
-}
-
diff --git a/src/gallium/state_trackers/vega/api_params.c b/src/gallium/state_trackers/vega/api_params.c
deleted file mode 100644 (file)
index aa1e5dd..0000000
+++ /dev/null
@@ -1,1679 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "paint.h"
-#include "path.h"
-#include "handle.h"
-#include "image.h"
-#include "text.h"
-#include "matrix.h"
-#include "api_consts.h"
-#include "api.h"
-
-#include "pipe/p_compiler.h"
-#include "util/u_pointer.h"
-#include "util/u_math.h"
-
-#include <math.h>
-
-static INLINE struct vg_state *current_state()
-{
-   struct vg_context *ctx = vg_current_context();
-   if (!ctx)
-      return 0;
-   else
-      return &ctx->state.vg;
-}
-
-static INLINE VGboolean count_in_bounds(VGParamType type, VGint count)
-{
-   if (count < 0)
-      return VG_FALSE;
-
-   if (type == VG_SCISSOR_RECTS)
-      return (!(count % 4) && (count >= 0 || count <= VEGA_MAX_SCISSOR_RECTS * 4));
-   else if (type == VG_STROKE_DASH_PATTERN) {
-      return count <= VEGA_MAX_DASH_COUNT;
-   } else {
-      VGint real_count = vegaGetVectorSize(type);
-      return count == real_count;
-   }
-}
-
-void vegaSetf (VGParamType type, VGfloat value)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_state *state = current_state();
-   VGErrorCode error = VG_NO_ERROR;
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-#endif
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_DASH_PHASE_RESET:
-   case VG_MASKING:
-   case VG_SCISSORING:
-   case VG_PIXEL_LAYOUT:
-   case VG_SCREEN_LAYOUT:
-   case VG_FILTER_FORMAT_LINEAR:
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-   case VG_FILTER_CHANNEL_MASK:
-
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-   case VG_MAX_FLOAT:
-      vegaSeti(type, floor(value));
-      return;
-      break;
-   case VG_STROKE_LINE_WIDTH:
-      state->stroke.line_width.f = value;
-      state->stroke.line_width.i = float_to_int_floor(*((VGuint*)(&value)));
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      state->stroke.miter_limit.f = value;
-      state->stroke.miter_limit.i = float_to_int_floor(*((VGuint*)(&value)));
-      break;
-   case VG_STROKE_DASH_PHASE:
-      state->stroke.dash_phase.f = value;
-      state->stroke.dash_phase.i = float_to_int_floor(*((VGuint*)(&value)));
-      break;
-   default:
-      error = VG_ILLEGAL_ARGUMENT_ERROR;
-      break;
-   }
-   vg_set_error(ctx, error);
-}
-
-void vegaSeti (VGParamType type, VGint value)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_state *state = current_state();
-   VGErrorCode error = VG_NO_ERROR;
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-      if (value < VG_MATRIX_PATH_USER_TO_SURFACE ||
-#ifdef OPENVG_VERSION_1_1
-          value > VG_MATRIX_GLYPH_USER_TO_SURFACE)
-#else
-          value > VG_MATRIX_STROKE_PAINT_TO_USER)
-#endif
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->matrix_mode = value;
-      break;
-   case VG_FILL_RULE:
-      if (value < VG_EVEN_ODD ||
-          value > VG_NON_ZERO)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->fill_rule = value;
-      break;
-   case VG_IMAGE_QUALITY:
-      state->image_quality = value;
-      break;
-   case VG_RENDERING_QUALITY:
-      if (value < VG_RENDERING_QUALITY_NONANTIALIASED ||
-          value > VG_RENDERING_QUALITY_BETTER)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->rendering_quality = value;
-      break;
-   case VG_BLEND_MODE:
-      if (value < VG_BLEND_SRC ||
-          value > VG_BLEND_ADDITIVE)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else {
-         ctx->state.dirty |= BLEND_DIRTY;
-         state->blend_mode = value;
-      }
-      break;
-   case VG_IMAGE_MODE:
-      if (value < VG_DRAW_IMAGE_NORMAL ||
-          value > VG_DRAW_IMAGE_STENCIL)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->image_mode = value;
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-      state->color_transform = value;
-#endif
-      break;
-   case VG_STROKE_LINE_WIDTH:
-      state->stroke.line_width.f = value;
-      state->stroke.line_width.i = value;
-      break;
-   case VG_STROKE_CAP_STYLE:
-      if (value < VG_CAP_BUTT ||
-          value > VG_CAP_SQUARE)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->stroke.cap_style = value;
-      break;
-   case VG_STROKE_JOIN_STYLE:
-      if (value < VG_JOIN_MITER ||
-          value > VG_JOIN_BEVEL)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->stroke.join_style = value;
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      state->stroke.miter_limit.f = value;
-      state->stroke.miter_limit.i = value;
-      break;
-   case VG_STROKE_DASH_PHASE:
-      state->stroke.dash_phase.f = value;
-      state->stroke.dash_phase.i = value;
-      break;
-   case VG_STROKE_DASH_PHASE_RESET:
-      state->stroke.dash_phase_reset = value;
-      break;
-   case VG_MASKING:
-      state->masking = value;
-      break;
-   case VG_SCISSORING:
-      state->scissoring = value;
-      ctx->state.dirty |= DEPTH_STENCIL_DIRTY;
-      break;
-   case VG_PIXEL_LAYOUT:
-      if (value < VG_PIXEL_LAYOUT_UNKNOWN ||
-          value > VG_PIXEL_LAYOUT_BGR_HORIZONTAL)
-         error = VG_ILLEGAL_ARGUMENT_ERROR;
-      else
-         state->pixel_layout = value;
-      break;
-   case VG_SCREEN_LAYOUT:
-      /* read only ignore */
-      break;
-   case VG_FILTER_FORMAT_LINEAR:
-      state->filter_format_linear = value;
-      break;
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-      state->filter_format_premultiplied = value;
-      break;
-   case VG_FILTER_CHANNEL_MASK:
-      state->filter_channel_mask = value;
-      break;
-
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-   case VG_MAX_FLOAT:
-      /* read only ignore */
-      break;
-   default:
-      error = VG_ILLEGAL_ARGUMENT_ERROR;
-      break;
-   }
-   vg_set_error(ctx, error);
-}
-
-void vegaSetfv(VGParamType type, VGint count,
-               const VGfloat * values)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_state *state = current_state();
-   VGErrorCode error = VG_NO_ERROR;
-
-   if ((count && !values) || !count_in_bounds(type, count) || !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-#endif
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_DASH_PHASE_RESET:
-   case VG_MASKING:
-   case VG_SCISSORING:
-   case VG_PIXEL_LAYOUT:
-   case VG_SCREEN_LAYOUT:
-   case VG_FILTER_FORMAT_LINEAR:
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-   case VG_FILTER_CHANNEL_MASK:
-      vegaSeti(type, floor(values[0]));
-      return;
-      break;
-   case VG_SCISSOR_RECTS: {
-      VGint i;
-      VGuint *x = (VGuint*)values;
-      for (i = 0; i < count; ++i) {
-         state->scissor_rects[i].f =  values[i];
-         state->scissor_rects[i].i =  float_to_int_floor(x[i]);
-      }
-      state->scissor_rects_num = count / 4;
-      ctx->state.dirty |= DEPTH_STENCIL_DIRTY;
-   }
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM_VALUES: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         state->color_transform_values[i] =  values[i];
-      }
-   }
-      break;
-#endif
-   case VG_STROKE_LINE_WIDTH:
-      state->stroke.line_width.f = values[0];
-      state->stroke.line_width.i = float_to_int_floor(*((VGuint*)(values)));
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      state->stroke.miter_limit.f = values[0];
-      state->stroke.miter_limit.i = float_to_int_floor(*((VGuint*)(values)));
-      break;
-   case VG_STROKE_DASH_PATTERN: {
-      int i;
-      for (i = 0; i < count; ++i) {
-         state->stroke.dash_pattern[i].f = values[i];
-         state->stroke.dash_pattern[i].i =
-            float_to_int_floor(*((VGuint*)(values + i)));
-      }
-      state->stroke.dash_pattern_num = count;
-   }
-      break;
-   case VG_STROKE_DASH_PHASE:
-      state->stroke.dash_phase.f = values[0];
-      state->stroke.dash_phase.i = float_to_int_floor(*((VGuint*)(values)));
-      break;
-   case VG_TILE_FILL_COLOR:
-      state->tile_fill_color[0] = values[0];
-      state->tile_fill_color[1] = values[1];
-      state->tile_fill_color[2] = values[2];
-      state->tile_fill_color[3] = values[3];
-
-      state->tile_fill_colori[0] = float_to_int_floor(*((VGuint*)(values + 0)));
-      state->tile_fill_colori[1] = float_to_int_floor(*((VGuint*)(values + 1)));
-      state->tile_fill_colori[2] = float_to_int_floor(*((VGuint*)(values + 2)));
-      state->tile_fill_colori[3] = float_to_int_floor(*((VGuint*)(values + 3)));
-      break;
-   case VG_CLEAR_COLOR:
-      state->clear_color[0] = values[0];
-      state->clear_color[1] = values[1];
-      state->clear_color[2] = values[2];
-      state->clear_color[3] = values[3];
-
-      state->clear_colori[0] = float_to_int_floor(*((VGuint*)(values + 0)));
-      state->clear_colori[1] = float_to_int_floor(*((VGuint*)(values + 1)));
-      state->clear_colori[2] = float_to_int_floor(*((VGuint*)(values + 2)));
-      state->clear_colori[3] = float_to_int_floor(*((VGuint*)(values + 3)));
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_GLYPH_ORIGIN:
-      state->glyph_origin[0].f = values[0];
-      state->glyph_origin[1].f = values[1];
-
-      state->glyph_origin[0].i = float_to_int_floor(*((VGuint*)(values + 0)));
-      state->glyph_origin[1].i = float_to_int_floor(*((VGuint*)(values + 1)));
-      break;
-#endif
-
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-   case VG_MAX_FLOAT:
-      break;
-   default:
-      error = VG_ILLEGAL_ARGUMENT_ERROR;
-      break;
-   }
-   vg_set_error(ctx, error);
-}
-
-void vegaSetiv(VGParamType type, VGint count,
-               const VGint * values)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_state *state = current_state();
-
-   if ((count && !values) || !count_in_bounds(type, count) || !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-#endif
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_DASH_PHASE_RESET:
-   case VG_MASKING:
-   case VG_SCISSORING:
-   case VG_PIXEL_LAYOUT:
-   case VG_SCREEN_LAYOUT:
-   case VG_FILTER_FORMAT_LINEAR:
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-   case VG_FILTER_CHANNEL_MASK:
-      vegaSeti(type, values[0]);
-      return;
-      break;
-   case VG_SCISSOR_RECTS: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         state->scissor_rects[i].i =  values[i];
-         state->scissor_rects[i].f =  values[i];
-      }
-      state->scissor_rects_num = count / 4;
-      ctx->state.dirty |= DEPTH_STENCIL_DIRTY;
-   }
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM_VALUES: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         state->color_transform_values[i] =  values[i];
-      }
-   }
-      break;
-#endif
-   case VG_STROKE_LINE_WIDTH:
-      state->stroke.line_width.f = values[0];
-      state->stroke.line_width.i = values[0];
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      state->stroke.miter_limit.f = values[0];
-      state->stroke.miter_limit.i = values[0];
-      break;
-   case VG_STROKE_DASH_PATTERN: {
-      int i;
-      for (i = 0; i < count; ++i) {
-         state->stroke.dash_pattern[i].f = values[i];
-         state->stroke.dash_pattern[i].i = values[i];
-      }
-      state->stroke.dash_pattern_num = count;
-   }
-      break;
-   case VG_STROKE_DASH_PHASE:
-      state->stroke.dash_phase.f = values[0];
-      state->stroke.dash_phase.i = values[0];
-      break;
-   case VG_TILE_FILL_COLOR:
-      state->tile_fill_color[0] = values[0];
-      state->tile_fill_color[1] = values[1];
-      state->tile_fill_color[2] = values[2];
-      state->tile_fill_color[3] = values[3];
-
-      state->tile_fill_colori[0] = values[0];
-      state->tile_fill_colori[1] = values[1];
-      state->tile_fill_colori[2] = values[2];
-      state->tile_fill_colori[3] = values[3];
-      break;
-   case VG_CLEAR_COLOR:
-      state->clear_color[0] = values[0];
-      state->clear_color[1] = values[1];
-      state->clear_color[2] = values[2];
-      state->clear_color[3] = values[3];
-
-      state->clear_colori[0] = values[0];
-      state->clear_colori[1] = values[1];
-      state->clear_colori[2] = values[2];
-      state->clear_colori[3] = values[3];
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_GLYPH_ORIGIN:
-      state->glyph_origin[0].f = values[0];
-      state->glyph_origin[1].f = values[1];
-      state->glyph_origin[0].i = values[0];
-      state->glyph_origin[1].i = values[1];
-      break;
-#endif
-
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-   case VG_MAX_FLOAT:
-      break;
-
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-}
-
-VGfloat vegaGetf(VGParamType type)
-{
-   struct vg_context *ctx = vg_current_context();
-   const struct vg_state *state = current_state();
-   VGErrorCode error = VG_NO_ERROR;
-   VGfloat value = 0.0f;
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-#endif
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_DASH_PHASE_RESET:
-   case VG_MASKING:
-   case VG_SCISSORING:
-   case VG_PIXEL_LAYOUT:
-   case VG_SCREEN_LAYOUT:
-   case VG_FILTER_FORMAT_LINEAR:
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-   case VG_FILTER_CHANNEL_MASK:
-      return vegaGeti(type);
-      break;
-   case VG_STROKE_LINE_WIDTH:
-      value = state->stroke.line_width.f;
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      value = state->stroke.miter_limit.f;
-      break;
-   case VG_STROKE_DASH_PHASE:
-      value = state->stroke.dash_phase.f;
-      break;
-
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-      return vegaGeti(type);
-      break;
-   case VG_MAX_FLOAT:
-      value = 1e+10;/*must be at least 1e+10*/
-      break;
-   default:
-      error = VG_ILLEGAL_ARGUMENT_ERROR;
-      break;
-   }
-   vg_set_error(ctx, error);
-   return value;
-}
-
-VGint vegaGeti(VGParamType type)
-{
-   const struct vg_state *state = current_state();
-   struct vg_context *ctx = vg_current_context();
-   VGErrorCode error = VG_NO_ERROR;
-   VGint value = 0;
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-      value = state->matrix_mode;
-      break;
-   case VG_FILL_RULE:
-      value = state->fill_rule;
-      break;
-   case VG_IMAGE_QUALITY:
-      value = state->image_quality;
-      break;
-   case VG_RENDERING_QUALITY:
-      value = state->rendering_quality;
-      break;
-   case VG_BLEND_MODE:
-      value = state->blend_mode;
-      break;
-   case VG_IMAGE_MODE:
-      value = state->image_mode;
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-      value = state->color_transform;
-      break;
-#endif
-   case VG_STROKE_LINE_WIDTH:
-      value = state->stroke.line_width.i;
-      break;
-   case VG_STROKE_CAP_STYLE:
-      value = state->stroke.cap_style;
-      break;
-   case VG_STROKE_JOIN_STYLE:
-      value = state->stroke.join_style;
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      value = state->stroke.miter_limit.i;
-      break;
-   case VG_STROKE_DASH_PHASE:
-      value = state->stroke.dash_phase.i;
-      break;
-   case VG_STROKE_DASH_PHASE_RESET:
-      value = state->stroke.dash_phase_reset;
-      break;
-   case VG_MASKING:
-      value = state->masking;
-      break;
-   case VG_SCISSORING:
-      value = state->scissoring;
-      break;
-   case VG_PIXEL_LAYOUT:
-      value = state->pixel_layout;
-      break;
-   case VG_SCREEN_LAYOUT:
-      value = state->screen_layout;
-      break;
-   case VG_FILTER_FORMAT_LINEAR:
-      value = state->filter_format_linear;
-      break;
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-      value = state->filter_format_premultiplied;
-      break;
-   case VG_FILTER_CHANNEL_MASK:
-      value = state->filter_channel_mask;
-      break;
-
-   case VG_MAX_SCISSOR_RECTS:
-      value = 32; /*must be at least 32*/
-      break;
-   case VG_MAX_DASH_COUNT:
-      value = 16; /*must be at least 16*/
-      break;
-   case VG_MAX_KERNEL_SIZE:
-      value = 7; /*must be at least 7*/
-      break;
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-      value = 15; /*must be at least 15*/
-      break;
-   case VG_MAX_COLOR_RAMP_STOPS:
-      value = 256; /*must be at least 32*/
-      break;
-   case VG_MAX_IMAGE_WIDTH:
-      value = 2048;
-      break;
-   case VG_MAX_IMAGE_HEIGHT:
-      value = 2048;
-      break;
-   case VG_MAX_IMAGE_PIXELS:
-      value = 2048*2048;
-      break;
-   case VG_MAX_IMAGE_BYTES:
-      value = 2048*2048 * 4;
-      break;
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-      value = 128; /*must be at least 128*/
-      break;
-
-   case VG_MAX_FLOAT: {
-      VGfloat val = vegaGetf(type);
-      value = float_to_int_floor(*((VGuint*)&val));
-   }
-      break;
-   default:
-      error = VG_ILLEGAL_ARGUMENT_ERROR;
-      break;
-   }
-   vg_set_error(ctx, error);
-   return value;
-}
-
-VGint vegaGetVectorSize(VGParamType type)
-{
-   struct vg_context *ctx = vg_current_context();
-   const struct vg_state *state = current_state();
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-      return 1;
-   case VG_SCISSOR_RECTS:
-      return state->scissor_rects_num * 4;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-      return 1;
-   case VG_COLOR_TRANSFORM_VALUES:
-      return 8;
-#endif
-   case VG_STROKE_LINE_WIDTH:
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_MITER_LIMIT:
-      return 1;
-   case VG_STROKE_DASH_PATTERN:
-      return state->stroke.dash_pattern_num;
-   case VG_STROKE_DASH_PHASE:
-      return 1;
-   case VG_STROKE_DASH_PHASE_RESET:
-      return 1;
-   case VG_TILE_FILL_COLOR:
-      return 4;
-   case VG_CLEAR_COLOR:
-      return 4;
-#ifdef OPENVG_VERSION_1_1
-   case VG_GLYPH_ORIGIN:
-      return 2;
-#endif
-   case VG_MASKING:
-      return 1;
-   case VG_SCISSORING:
-      return 1;
-   case VG_PIXEL_LAYOUT:
-      return 1;
-   case VG_SCREEN_LAYOUT:
-      return 1;
-   case VG_FILTER_FORMAT_LINEAR:
-      return 1;
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-      return 1;
-   case VG_FILTER_CHANNEL_MASK:
-      return 1;
-
-   case VG_MAX_COLOR_RAMP_STOPS:
-      return 1;
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_FLOAT:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-      return 1;
-   default:
-      if (ctx)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return 0;
-   }
-}
-
-void vegaGetfv(VGParamType type, VGint count,
-               VGfloat * values)
-{
-   const struct vg_state *state = current_state();
-   struct vg_context *ctx = vg_current_context();
-   VGint real_count = vegaGetVectorSize(type);
-
-   if (!values || count <= 0 || count > real_count || !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-#endif
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_DASH_PHASE_RESET:
-   case VG_MASKING:
-   case VG_SCISSORING:
-   case VG_PIXEL_LAYOUT:
-   case VG_SCREEN_LAYOUT:
-   case VG_FILTER_FORMAT_LINEAR:
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-   case VG_FILTER_CHANNEL_MASK:
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-      values[0] = vegaGeti(type);
-      break;
-   case VG_MAX_FLOAT:
-      values[0] = vegaGetf(type);
-      break;
-   case VG_SCISSOR_RECTS: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         values[i] = state->scissor_rects[i].f;
-      }
-   }
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM_VALUES: {
-      memcpy(values, state->color_transform_values,
-             sizeof(VGfloat) * count);
-   }
-      break;
-#endif
-   case VG_STROKE_LINE_WIDTH:
-      values[0] = state->stroke.line_width.f;
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      values[0] = state->stroke.miter_limit.f;
-      break;
-   case VG_STROKE_DASH_PATTERN: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         values[i] = state->stroke.dash_pattern[i].f;
-      }
-   }
-      break;
-   case VG_STROKE_DASH_PHASE:
-      values[0] = state->stroke.dash_phase.f;
-      break;
-   case VG_TILE_FILL_COLOR:
-      values[0] = state->tile_fill_color[0];
-      values[1] = state->tile_fill_color[1];
-      values[2] = state->tile_fill_color[2];
-      values[3] = state->tile_fill_color[3];
-      break;
-   case VG_CLEAR_COLOR:
-      values[0] = state->clear_color[0];
-      values[1] = state->clear_color[1];
-      values[2] = state->clear_color[2];
-      values[3] = state->clear_color[3];
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_GLYPH_ORIGIN:
-      values[0] = state->glyph_origin[0].f;
-      values[1] = state->glyph_origin[1].f;
-      break;
-#endif
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-}
-
-void vegaGetiv(VGParamType type, VGint count,
-               VGint * values)
-{
-   const struct vg_state *state = current_state();
-   struct vg_context *ctx = vg_current_context();
-   VGint real_count = vegaGetVectorSize(type);
-
-   if (!values || count <= 0 || count > real_count || !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(type) {
-   case VG_MATRIX_MODE:
-   case VG_FILL_RULE:
-   case VG_IMAGE_QUALITY:
-   case VG_RENDERING_QUALITY:
-   case VG_BLEND_MODE:
-   case VG_IMAGE_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM:
-#endif
-   case VG_STROKE_CAP_STYLE:
-   case VG_STROKE_JOIN_STYLE:
-   case VG_STROKE_DASH_PHASE_RESET:
-   case VG_MASKING:
-   case VG_SCISSORING:
-   case VG_PIXEL_LAYOUT:
-   case VG_SCREEN_LAYOUT:
-   case VG_FILTER_FORMAT_LINEAR:
-   case VG_FILTER_FORMAT_PREMULTIPLIED:
-   case VG_FILTER_CHANNEL_MASK:
-   case VG_MAX_SCISSOR_RECTS:
-   case VG_MAX_DASH_COUNT:
-   case VG_MAX_KERNEL_SIZE:
-   case VG_MAX_SEPARABLE_KERNEL_SIZE:
-   case VG_MAX_COLOR_RAMP_STOPS:
-   case VG_MAX_IMAGE_WIDTH:
-   case VG_MAX_IMAGE_HEIGHT:
-   case VG_MAX_IMAGE_PIXELS:
-   case VG_MAX_IMAGE_BYTES:
-   case VG_MAX_GAUSSIAN_STD_DEVIATION:
-      values[0] = vegaGeti(type);
-      break;
-   case VG_MAX_FLOAT: {
-      VGfloat val = vegaGetf(type);
-      values[0] = float_to_int_floor(*((VGuint*)&val));
-   }
-      break;
-   case VG_SCISSOR_RECTS: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         values[i] = state->scissor_rects[i].i;
-      }
-   }
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_COLOR_TRANSFORM_VALUES: {
-      VGint i;
-      VGuint *x = (VGuint*)state->color_transform_values;
-      for (i = 0; i < count; ++i) {
-         values[i] = float_to_int_floor(x[i]);
-      }
-   }
-      break;
-#endif
-   case VG_STROKE_LINE_WIDTH:
-      values[0] = state->stroke.line_width.i;
-      break;
-   case VG_STROKE_MITER_LIMIT:
-      values[0] = state->stroke.miter_limit.i;
-      break;
-   case VG_STROKE_DASH_PATTERN: {
-      VGint i;
-      for (i = 0; i < count; ++i) {
-         values[i] = state->stroke.dash_pattern[i].i;
-      }
-   }
-      break;
-   case VG_STROKE_DASH_PHASE:
-      values[0] = state->stroke.dash_phase.i;
-      break;
-   case VG_TILE_FILL_COLOR:
-      values[0] = state->tile_fill_colori[0];
-      values[1] = state->tile_fill_colori[1];
-      values[2] = state->tile_fill_colori[2];
-      values[3] = state->tile_fill_colori[3];
-      break;
-   case VG_CLEAR_COLOR:
-      values[0] = state->clear_colori[0];
-      values[1] = state->clear_colori[1];
-      values[2] = state->clear_colori[2];
-      values[3] = state->clear_colori[3];
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_GLYPH_ORIGIN:
-      values[0] = state->glyph_origin[0].i;
-      values[1] = state->glyph_origin[1].i;
-      break;
-#endif
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-}
-
-void vegaSetParameterf(VGHandle object,
-                       VGint paramType,
-                       VGfloat value)
-{
-   struct vg_context *ctx = vg_current_context();
-   void *ptr = handle_to_pointer(object);
-
-   if (object == VG_INVALID_HANDLE || !is_aligned(ptr)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-   case VG_PAINT_PATTERN_TILING_MODE:
-      vegaSetParameteri(object, paramType, floor(value));
-      return;
-      break;
-   case VG_PAINT_COLOR:
-   case VG_PAINT_COLOR_RAMP_STOPS:
-   case VG_PAINT_LINEAR_GRADIENT:
-   case VG_PAINT_RADIAL_GRADIENT:
-      /* it's an error if paramType refers to a vector parameter */
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED: {
-      struct vg_paint *p = handle_to_paint(object);
-      paint_set_color_ramp_premultiplied(p, value);
-   }
-      break;
-
-   case VG_PATH_DATATYPE:
-   case VG_PATH_FORMAT:
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-
-   case VG_IMAGE_FORMAT:
-   case VG_IMAGE_WIDTH:
-   case VG_IMAGE_HEIGHT:
-
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS:
-      /* read only don't produce an error */
-      break;
-#endif
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-}
-
-void vegaSetParameteri(VGHandle object,
-                       VGint paramType,
-                       VGint value)
-{
-   struct vg_context *ctx = vg_current_context();
-   void *ptr = handle_to_pointer(object);
-
-   if (object == VG_INVALID_HANDLE || !is_aligned(ptr)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-      if (value < VG_PAINT_TYPE_COLOR ||
-          value > VG_PAINT_TYPE_PATTERN)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_type(paint, value);
-      }
-      break;
-   case VG_PAINT_COLOR:
-   case VG_PAINT_COLOR_RAMP_STOPS:
-   case VG_PAINT_LINEAR_GRADIENT:
-   case VG_PAINT_RADIAL_GRADIENT:
-      /* it's an error if paramType refers to a vector parameter */
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-      if (value < VG_COLOR_RAMP_SPREAD_PAD ||
-          value > VG_COLOR_RAMP_SPREAD_REFLECT)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_spread_mode(paint, value);
-      }
-      break;
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED: {
-      struct vg_paint *p = handle_to_paint(object);
-      paint_set_color_ramp_premultiplied(p, value);
-   }
-      break;
-   case VG_PAINT_PATTERN_TILING_MODE:
-      if (value < VG_TILE_FILL ||
-          value > VG_TILE_REFLECT)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_pattern_tiling(paint, value);
-      }
-      break;
-
-   case VG_PATH_DATATYPE:
-   case VG_PATH_FORMAT:
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-
-   case VG_IMAGE_FORMAT:
-   case VG_IMAGE_WIDTH:
-   case VG_IMAGE_HEIGHT:
-
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS:
-      /* read only don't produce an error */
-      break;
-#endif
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-}
-
-void vegaSetParameterfv(VGHandle object,
-                        VGint paramType,
-                        VGint count,
-                        const VGfloat * values)
-{
-   struct vg_context *ctx = vg_current_context();
-   void *ptr = handle_to_pointer(object);
-   VGint real_count = vegaGetParameterVectorSize(object, paramType);
-
-   if (object == VG_INVALID_HANDLE || !is_aligned(ptr)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (count < 0 || count < real_count ||
-       (values == NULL && count != 0) ||
-       !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-   case VG_PAINT_PATTERN_TILING_MODE:
-      if (count != 1)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else
-         vegaSetParameterf(object, paramType, values[0]);
-      return;
-      break;
-   case VG_PAINT_COLOR: {
-      if (count != 4)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_color(paint, values);
-         if (ctx->state.vg.fill_paint == paint ||
-             ctx->state.vg.stroke_paint == paint)
-            ctx->state.dirty |= PAINT_DIRTY;
-      }
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_STOPS: {
-      if (count && count < 4)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         count = MIN2(count, VEGA_MAX_COLOR_RAMP_STOPS);
-         paint_set_ramp_stops(paint, values, count);
-         {
-            VGint stopsi[VEGA_MAX_COLOR_RAMP_STOPS];
-            int i = 0;
-            for (i = 0; i < count; ++i) {
-               stopsi[i] = float_to_int_floor(*((VGuint*)(values + i)));
-            }
-            paint_set_ramp_stopsi(paint, stopsi, count);
-         }
-      }
-   }
-      break;
-   case VG_PAINT_LINEAR_GRADIENT: {
-      if (count != 4)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_linear_gradient(paint, values);
-         {
-            VGint vals[4];
-            vals[0] = FLT_TO_INT(values[0]);
-            vals[1] = FLT_TO_INT(values[1]);
-            vals[2] = FLT_TO_INT(values[2]);
-            vals[3] = FLT_TO_INT(values[3]);
-            paint_set_linear_gradienti(paint, vals);
-         }
-      }
-   }
-      break;
-   case VG_PAINT_RADIAL_GRADIENT: {
-      if (count != 5)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_radial_gradient(paint, values);
-         {
-            VGint vals[5];
-            vals[0] = FLT_TO_INT(values[0]);
-            vals[1] = FLT_TO_INT(values[1]);
-            vals[2] = FLT_TO_INT(values[2]);
-            vals[3] = FLT_TO_INT(values[3]);
-            vals[4] = FLT_TO_INT(values[4]);
-            paint_set_radial_gradienti(paint, vals);
-         }
-      }
-   }
-      break;
-
-   case VG_PATH_DATATYPE:
-   case VG_PATH_FORMAT:
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS:
-      /* read only don't produce an error */
-      break;
-#endif
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-}
-
-void vegaSetParameteriv(VGHandle object,
-                        VGint paramType,
-                        VGint count,
-                        const VGint * values)
-{
-   struct vg_context *ctx = vg_current_context();
-   void *ptr = handle_to_pointer(object);
-   VGint real_count = vegaGetParameterVectorSize(object, paramType);
-
-   if (object == VG_INVALID_HANDLE || !is_aligned(ptr)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (count < 0 || count < real_count ||
-       (values == NULL && count != 0) ||
-       !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-   case VG_PAINT_PATTERN_TILING_MODE:
-      if (count != 1)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else
-         vegaSetParameteri(object, paramType, values[0]);
-      return;
-      break;
-   case VG_PAINT_COLOR: {
-      if (count != 4)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         struct vg_paint *paint = handle_to_paint(object);
-         paint_set_coloriv(paint, values);
-         if (ctx->state.vg.fill_paint == paint ||
-             ctx->state.vg.stroke_paint == paint)
-            ctx->state.dirty |= PAINT_DIRTY;
-      }
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_STOPS: {
-      if ((count % 5))
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         VGfloat *vals = 0;
-         int i;
-         struct vg_paint *paint = handle_to_paint(object);
-         if (count) {
-            vals = malloc(sizeof(VGfloat)*count);
-            for (i = 0; i < count; ++i)
-               vals[i] = values[i];
-         }
-
-         paint_set_ramp_stopsi(paint, values, count);
-         paint_set_ramp_stops(paint, vals, count);
-         free(vals);
-      }
-   }
-      break;
-   case VG_PAINT_LINEAR_GRADIENT: {
-      if (count != 4)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         VGfloat vals[4];
-         struct vg_paint *paint = handle_to_paint(object);
-         vals[0] = values[0];
-         vals[1] = values[1];
-         vals[2] = values[2];
-         vals[3] = values[3];
-         paint_set_linear_gradient(paint, vals);
-         paint_set_linear_gradienti(paint, values);
-      }
-   }
-      break;
-   case VG_PAINT_RADIAL_GRADIENT: {
-      if (count != 5)
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      else {
-         VGfloat vals[5];
-         struct vg_paint *paint = handle_to_paint(object);
-         vals[0] = values[0];
-         vals[1] = values[1];
-         vals[2] = values[2];
-         vals[3] = values[3];
-         vals[4] = values[4];
-         paint_set_radial_gradient(paint, vals);
-         paint_set_radial_gradienti(paint, values);
-      }
-   }
-      break;
-   case VG_PATH_DATATYPE:
-   case VG_PATH_FORMAT:
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-      /* read only don't produce an error */
-      break;
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-}
-
-VGint vegaGetParameterVectorSize(VGHandle object,
-                                 VGint paramType)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (object == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return 0;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-   case VG_PAINT_PATTERN_TILING_MODE:
-      return 1;
-   case VG_PAINT_COLOR:
-      return 4;
-   case VG_PAINT_COLOR_RAMP_STOPS: {
-      struct vg_paint *p = handle_to_paint(object);
-      return paint_num_ramp_stops(p);
-   }
-      break;
-   case VG_PAINT_LINEAR_GRADIENT:
-      return 4;
-   case VG_PAINT_RADIAL_GRADIENT:
-      return 5;
-
-
-   case VG_PATH_FORMAT:
-   case VG_PATH_DATATYPE:
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-      return 1;
-
-   case VG_IMAGE_FORMAT:
-   case VG_IMAGE_WIDTH:
-   case VG_IMAGE_HEIGHT:
-      return 1;
-
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS:
-      return 1;
-#endif
-
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-   return 0;
-}
-
-
-VGfloat vegaGetParameterf(VGHandle object,
-                          VGint paramType)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (object == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return 0;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-   case VG_PAINT_PATTERN_TILING_MODE:
-      return vegaGetParameteri(object, paramType);
-      break;
-   case VG_PAINT_COLOR:
-   case VG_PAINT_COLOR_RAMP_STOPS:
-   case VG_PAINT_LINEAR_GRADIENT:
-   case VG_PAINT_RADIAL_GRADIENT:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-
-   case VG_PATH_FORMAT:
-      return VG_PATH_FORMAT_STANDARD;
-   case VG_PATH_SCALE: {
-      struct path *p = handle_to_path(object);
-      return path_scale(p);
-   }
-   case VG_PATH_BIAS: {
-      struct path *p = handle_to_path(object);
-      return path_bias(p);
-   }
-   case VG_PATH_DATATYPE:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-      return vegaGetParameteri(object, paramType);
-      break;
-
-   case VG_IMAGE_FORMAT:
-   case VG_IMAGE_WIDTH:
-   case VG_IMAGE_HEIGHT:
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS: 
-      return vegaGetParameteri(object, paramType);
-      break;
-#endif
-
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-   return 0;
-}
-
-VGint vegaGetParameteri(VGHandle object,
-                        VGint paramType)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (object == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return 0;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE: {
-         struct vg_paint *paint = handle_to_paint(object);
-         return paint_type(paint);
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE: {
-      struct vg_paint *p = handle_to_paint(object);
-      return paint_spread_mode(p);
-   }
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED: {
-      struct vg_paint *p = handle_to_paint(object);
-      return paint_color_ramp_premultiplied(p);
-   }
-      break;
-   case VG_PAINT_PATTERN_TILING_MODE: {
-      struct vg_paint *p = handle_to_paint(object);
-      return paint_pattern_tiling(p);
-   }
-      break;
-   case VG_PAINT_COLOR:
-   case VG_PAINT_COLOR_RAMP_STOPS:
-   case VG_PAINT_LINEAR_GRADIENT:
-   case VG_PAINT_RADIAL_GRADIENT:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-
-   case VG_PATH_FORMAT:
-      return VG_PATH_FORMAT_STANDARD;
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-      return vegaGetParameterf(object, paramType);
-   case VG_PATH_DATATYPE: {
-      struct path *p = handle_to_path(object);
-      return path_datatype(p);
-   }
-   case VG_PATH_NUM_SEGMENTS: {
-      struct path *p = handle_to_path(object);
-      return path_num_segments(p);
-   }
-   case VG_PATH_NUM_COORDS: {
-      struct path *p = handle_to_path(object);
-      return path_num_coords(p);
-   }
-      break;
-
-   case VG_IMAGE_FORMAT: {
-      struct vg_image *img = handle_to_image(object);
-      return img->format;
-   }
-      break;
-   case VG_IMAGE_WIDTH: {
-      struct vg_image *img = handle_to_image(object);
-      return img->width;
-   }
-      break;
-   case VG_IMAGE_HEIGHT: {
-      struct vg_image *img = handle_to_image(object);
-      return img->height;
-   }
-      break;
-
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS: {
-      struct vg_font *font = handle_to_font(object);
-      return font_num_glyphs(font);
-   }
-      break;
-#endif
-
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-   return 0;
-}
-
-void vegaGetParameterfv(VGHandle object,
-                        VGint paramType,
-                        VGint count,
-                        VGfloat * values)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGint real_count = vegaGetParameterVectorSize(object, paramType);
-
-   if (object == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!values || count <= 0 || count > real_count ||
-       !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE: {
-      struct vg_paint *p = handle_to_paint(object);
-      values[0] = paint_type(p);
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE: {
-      struct vg_paint *p = handle_to_paint(object);
-      values[0] = paint_spread_mode(p);
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED: {
-      struct vg_paint *p = handle_to_paint(object);
-      values[0] = paint_color_ramp_premultiplied(p);
-   }
-      break;
-   case VG_PAINT_PATTERN_TILING_MODE: {
-      values[0] = vegaGetParameterf(object, paramType);
-   }
-      break;
-   case VG_PAINT_COLOR: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_get_color(paint, values);
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_STOPS: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_ramp_stops(paint, values, count);
-   }
-      break;
-   case VG_PAINT_LINEAR_GRADIENT: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_linear_gradient(paint, values);
-   }
-      break;
-   case VG_PAINT_RADIAL_GRADIENT: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_radial_gradient(paint, values);
-   }
-      break;
-
-   case VG_PATH_FORMAT:
-   case VG_PATH_DATATYPE:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-      values[0] = vegaGetParameteri(object, paramType);
-      break;
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-      values[0] = vegaGetParameterf(object, paramType);
-      break;
-
-   case VG_IMAGE_FORMAT:
-   case VG_IMAGE_WIDTH:
-   case VG_IMAGE_HEIGHT:
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS:
-      values[0] = vegaGetParameteri(object, paramType);
-      break;
-#endif
-
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-}
-
-void vegaGetParameteriv(VGHandle object,
-                        VGint paramType,
-                        VGint count,
-                        VGint * values)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGint real_count = vegaGetParameterVectorSize(object, paramType);
-
-   if (object || object == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!values || count <= 0 || count > real_count ||
-       !is_aligned(values)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   switch(paramType) {
-   case VG_PAINT_TYPE:
-   case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-   case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-   case VG_PAINT_PATTERN_TILING_MODE:
-#ifdef OPENVG_VERSION_1_1
-   case VG_FONT_NUM_GLYPHS:
-      values[0] = vegaGetParameteri(object, paramType);
-      break;
-#endif
-   case VG_PAINT_COLOR: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_get_coloriv(paint, values);
-   }
-      break;
-   case VG_PAINT_COLOR_RAMP_STOPS: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_ramp_stopsi(paint, values, count);
-   }
-      break;
-   case VG_PAINT_LINEAR_GRADIENT: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_linear_gradienti(paint, values);
-   }
-      break;
-   case VG_PAINT_RADIAL_GRADIENT: {
-      struct vg_paint *paint = handle_to_paint(object);
-      paint_radial_gradienti(paint, values);
-   }
-      break;
-
-   case VG_PATH_SCALE:
-   case VG_PATH_BIAS:
-      values[0] = vegaGetParameterf(object, paramType);
-      break;
-   case VG_PATH_FORMAT:
-   case VG_PATH_DATATYPE:
-   case VG_PATH_NUM_SEGMENTS:
-   case VG_PATH_NUM_COORDS:
-      values[0] = vegaGetParameteri(object, paramType);
-      break;
-
-   case VG_IMAGE_FORMAT:
-   case VG_IMAGE_WIDTH:
-   case VG_IMAGE_HEIGHT:
-      values[0] = vegaGetParameteri(object, paramType);
-      break;
-
-   default:
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      break;
-   }
-}
diff --git a/src/gallium/state_trackers/vega/api_path.c b/src/gallium/state_trackers/vega/api_path.c
deleted file mode 100644 (file)
index ab6ce95..0000000
+++ /dev/null
@@ -1,487 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "handle.h"
-#include "path.h"
-#include "api.h"
-
-#include "pipe/p_context.h"
-
-VGPath vegaCreatePath(VGint pathFormat,
-                      VGPathDatatype datatype,
-                      VGfloat scale, VGfloat bias,
-                      VGint segmentCapacityHint,
-                      VGint coordCapacityHint,
-                      VGbitfield capabilities)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (pathFormat != VG_PATH_FORMAT_STANDARD) {
-      vg_set_error(ctx, VG_UNSUPPORTED_PATH_FORMAT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (datatype < VG_PATH_DATATYPE_S_8 ||
-       datatype > VG_PATH_DATATYPE_F) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-   if (!scale) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   return path_to_handle(path_create(datatype, scale, bias,
-                                     segmentCapacityHint, coordCapacityHint,
-                                     capabilities));
-}
-
-void vegaClearPath(VGPath path, VGbitfield capabilities)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   p = handle_to_path(path);
-   path_clear(p, capabilities);
-}
-
-void vegaDestroyPath(VGPath p)
-{
-   struct path *path = 0;
-   struct vg_context *ctx = vg_current_context();
-
-   if (p == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   path = handle_to_path(p);
-   path_destroy(path);
-}
-
-void vegaRemovePathCapabilities(VGPath path,
-                                VGbitfield capabilities)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGbitfield current;
-   struct path *p;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   p = handle_to_path(path);
-   current = path_capabilities(p);
-   path_set_capabilities(p, (current &
-                             (~(capabilities & VG_PATH_CAPABILITY_ALL))));
-}
-
-VGbitfield vegaGetPathCapabilities(VGPath path)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return 0;
-   }
-   p = handle_to_path(path);
-   return path_capabilities(p);
-}
-
-void vegaAppendPath(VGPath dstPath, VGPath srcPath)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *src, *dst;
-
-   if (dstPath == VG_INVALID_HANDLE || srcPath == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   src = handle_to_path(srcPath);
-   dst = handle_to_path(dstPath);
-
-   if (!(path_capabilities(src) & VG_PATH_CAPABILITY_APPEND_FROM) ||
-       !(path_capabilities(dst) & VG_PATH_CAPABILITY_APPEND_TO)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-   path_append_path(dst, src);
-}
-
-void vegaAppendPathData(VGPath dstPath,
-                        VGint numSegments,
-                        const VGubyte * pathSegments,
-                        const void * pathData)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-   VGint i;
-
-   if (dstPath == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!pathSegments) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (numSegments <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   for (i = 0; i < numSegments; ++i) {
-      if (pathSegments[i] > VG_LCWARC_TO_REL) {
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-         return;
-      }
-   }
-
-   p = handle_to_path(dstPath);
-
-   if (!p || !is_aligned_to(p, path_datatype_size(p))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!(path_capabilities(p)&VG_PATH_CAPABILITY_APPEND_TO)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-
-   path_append_data(p, numSegments, pathSegments, pathData);
-}
-
-void vegaModifyPathCoords(VGPath dstPath,
-                          VGint startIndex,
-                          VGint numSegments,
-                          const void * pathData)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-
-   if (dstPath == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (startIndex < 0 || numSegments <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   p = handle_to_path(dstPath);
-
-   if (!pathData || !is_aligned_to(pathData, path_datatype_size(p))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (startIndex + numSegments > path_num_segments(p)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (!(path_capabilities(p)&VG_PATH_CAPABILITY_MODIFY)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-   path_modify_coords(p, startIndex, numSegments, pathData);
-}
-
-void vegaTransformPath(VGPath dstPath, VGPath srcPath)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *src = 0, *dst = 0;
-
-   if (dstPath == VG_INVALID_HANDLE || srcPath == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   src = handle_to_path(srcPath);
-   dst = handle_to_path(dstPath);
-
-   if (!(path_capabilities(src) & VG_PATH_CAPABILITY_TRANSFORM_FROM) ||
-       !(path_capabilities(dst) & VG_PATH_CAPABILITY_TRANSFORM_TO)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-   path_transform(dst, src);
-}
-
-VGboolean vegaInterpolatePath(VGPath dstPath,
-                              VGPath startPath,
-                              VGPath endPath,
-                              VGfloat amount)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *start = 0, *dst = 0, *end = 0;
-
-   if (dstPath == VG_INVALID_HANDLE ||
-       startPath == VG_INVALID_HANDLE ||
-       endPath == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return VG_FALSE;
-   }
-   dst = handle_to_path(dstPath);
-   start = handle_to_path(startPath);
-   end = handle_to_path(endPath);
-
-   if (!(path_capabilities(dst) & VG_PATH_CAPABILITY_INTERPOLATE_TO) ||
-       !(path_capabilities(start) & VG_PATH_CAPABILITY_INTERPOLATE_FROM) ||
-       !(path_capabilities(end) & VG_PATH_CAPABILITY_INTERPOLATE_FROM)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return VG_FALSE;
-   }
-
-   return path_interpolate(dst,
-                           start, end, amount);
-}
-
-VGfloat vegaPathLength(VGPath path,
-                       VGint startSegment,
-                       VGint numSegments)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return -1;
-   }
-   if (startSegment < 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return -1;
-   }
-   if (numSegments <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return -1;
-   }
-   p = handle_to_path(path);
-
-   if (!(path_capabilities(p) & VG_PATH_CAPABILITY_PATH_LENGTH)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return -1;
-   }
-   if (startSegment + numSegments > path_num_segments(p)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return -1;
-   }
-
-   return path_length(p, startSegment, numSegments);
-}
-
-void vegaPointAlongPath(VGPath path,
-                        VGint startSegment,
-                        VGint numSegments,
-                        VGfloat distance,
-                        VGfloat * x, VGfloat * y,
-                        VGfloat * tangentX,
-                        VGfloat * tangentY)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (startSegment < 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (numSegments <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!is_aligned(x) || !is_aligned(y) ||
-       !is_aligned(tangentX) || !is_aligned(tangentY)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   p = handle_to_path(path);
-
-   caps = path_capabilities(p);
-   if (!(caps & VG_PATH_CAPABILITY_POINT_ALONG_PATH) ||
-       !(caps & VG_PATH_CAPABILITY_TANGENT_ALONG_PATH)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-
-   if (startSegment + numSegments > path_num_segments(p)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   {
-      VGfloat point[2], normal[2];
-      path_point(p, startSegment, numSegments, distance,
-                 point, normal);
-      if (x)
-         *x = point[0];
-      if (y)
-         *y = point[1];
-      if (tangentX)
-         *tangentX = -normal[1];
-      if (tangentY)
-         *tangentY = normal[0];
-   }
-}
-
-void vegaPathBounds(VGPath path,
-                    VGfloat * minX,
-                    VGfloat * minY,
-                    VGfloat * width,
-                    VGfloat * height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!minX || !minY || !width || !height) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!is_aligned(minX) || !is_aligned(minY) ||
-       !is_aligned(width) || !is_aligned(height)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   p = handle_to_path(path);
-
-   caps = path_capabilities(p);
-   if (!(caps & VG_PATH_CAPABILITY_PATH_BOUNDS)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-
-   path_bounding_rect(p, minX, minY, width, height);
-}
-
-void vegaPathTransformedBounds(VGPath path,
-                               VGfloat * minX,
-                               VGfloat * minY,
-                               VGfloat * width,
-                               VGfloat * height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = 0;
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!minX || !minY || !width || !height) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (!is_aligned(minX) || !is_aligned(minY) ||
-       !is_aligned(width) || !is_aligned(height)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   p = handle_to_path(path);
-
-   caps = path_capabilities(p);
-   if (!(caps & VG_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS)) {
-      vg_set_error(ctx, VG_PATH_CAPABILITY_ERROR);
-      return;
-   }
-
-#if 0
-   /* faster, but seems to have precision problems... */
-   path_bounding_rect(p, minX, minY, width, height);
-   if (*width > 0 && *height > 0) {
-      VGfloat pts[] = {*minX,          *minY,
-                       *minX + *width, *minY,
-                       *minX + *width, *minY + *height,
-                       *minX,          *minY + *height};
-      struct matrix *matrix = &ctx->state.vg.path_user_to_surface_matrix;
-      VGfloat maxX, maxY;
-      matrix_map_point(matrix, pts[0], pts[1], pts + 0, pts + 1);
-      matrix_map_point(matrix, pts[2], pts[3], pts + 2, pts + 3);
-      matrix_map_point(matrix, pts[4], pts[5], pts + 4, pts + 5);
-      matrix_map_point(matrix, pts[6], pts[7], pts + 6, pts + 7);
-      *minX = MIN2(pts[0], MIN2(pts[2], MIN2(pts[4], pts[6])));
-      *minY = MIN2(pts[1], MIN2(pts[3], MIN2(pts[5], pts[7])));
-      maxX = MAX2(pts[0], MAX2(pts[2], MAX2(pts[4], pts[6])));
-      maxY = MAX2(pts[1], MAX2(pts[3], MAX2(pts[5], pts[7])));
-      *width  = maxX - *minX;
-      *height = maxY - *minY;
-   }
-#else
-   {
-      struct path *dst = path_create(VG_PATH_DATATYPE_F, 1.0, 0,
-                                     0, 0, VG_PATH_CAPABILITY_ALL);
-      path_transform(dst, p);
-      path_bounding_rect(dst, minX, minY, width, height);
-      path_destroy(dst);
-   }
-#endif
-}
-
-
-void vegaDrawPath(VGPath path, VGbitfield paintModes)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *p = handle_to_path(path);
-
-   if (path == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   if (!(paintModes & (VG_STROKE_PATH | VG_FILL_PATH))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (path_is_empty(p))
-      return;
-   path_render(p, paintModes,
-         &ctx->state.vg.path_user_to_surface_matrix);
-}
-
diff --git a/src/gallium/state_trackers/vega/api_text.c b/src/gallium/state_trackers/vega/api_text.c
deleted file mode 100644 (file)
index 824c763..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-#include "text.h"
-#include "api.h"
-#include "handle.h"
-
-#include "util/u_memory.h"
-
-#ifdef OPENVG_VERSION_1_1
-
-VGFont vegaCreateFont(VGint glyphCapacityHint)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (glyphCapacityHint < 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return VG_INVALID_HANDLE;
-   }
-
-   return font_to_handle(font_create(glyphCapacityHint));
-}
-
-void vegaDestroyFont(VGFont f)
-{
-   struct vg_font *font = handle_to_font(f);
-   struct vg_context *ctx = vg_current_context();
-
-   if (f == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!vg_object_is_valid(f, VG_OBJECT_FONT)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   font_destroy(font);
-}
-
-void vegaSetGlyphToPath(VGFont font,
-                        VGuint glyphIndex,
-                        VGPath path,
-                        VGboolean isHinted,
-                        const VGfloat glyphOrigin[2],
-                        const VGfloat escapement[2])
-{
-   struct vg_context *ctx = vg_current_context();
-   struct path *pathObj;
-   struct vg_font *f;
-
-   if (font == VG_INVALID_HANDLE ||
-       !vg_context_is_object_valid(ctx, VG_OBJECT_FONT, font)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!glyphOrigin || !escapement ||
-       !is_aligned(glyphOrigin) || !is_aligned(escapement)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (path != VG_INVALID_HANDLE &&
-       !vg_context_is_object_valid(ctx, VG_OBJECT_PATH, path)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   pathObj = handle_to_path(path);
-   f = handle_to_font(font);
-
-   font_set_glyph_to_path(f, glyphIndex, pathObj,
-         isHinted, glyphOrigin, escapement);
-}
-
-void vegaSetGlyphToImage(VGFont font,
-                         VGuint glyphIndex,
-                         VGImage image,
-                         const VGfloat glyphOrigin[2],
-                         const VGfloat escapement[2])
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *img_obj;
-   struct vg_font *f;
-
-   if (font == VG_INVALID_HANDLE ||
-       !vg_context_is_object_valid(ctx, VG_OBJECT_FONT, font)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (!glyphOrigin || !escapement ||
-       !is_aligned(glyphOrigin) || !is_aligned(escapement)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (image != VG_INVALID_HANDLE &&
-       !vg_context_is_object_valid(ctx, VG_OBJECT_IMAGE, image)) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   img_obj = handle_to_image(image);
-   f = handle_to_font(font);
-
-   font_set_glyph_to_image(f, glyphIndex, img_obj, glyphOrigin, escapement);
-}
-
-void vegaClearGlyph(VGFont font,
-                    VGuint glyphIndex)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_font *f;
-
-   if (font == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-
-   f = handle_to_font(font);
-
-   font_clear_glyph(f, glyphIndex);
-}
-
-void vegaDrawGlyph(VGFont font,
-                   VGuint glyphIndex,
-                   VGbitfield paintModes,
-                   VGboolean allowAutoHinting)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_font *f;
-
-   if (font == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (paintModes & (~(VG_STROKE_PATH|VG_FILL_PATH))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   f = handle_to_font(font);
-
-   font_draw_glyph(f, glyphIndex, paintModes, allowAutoHinting);
-}
-
-void vegaDrawGlyphs(VGFont font,
-                    VGint glyphCount,
-                    const VGuint *glyphIndices,
-                    const VGfloat *adjustments_x,
-                    const VGfloat *adjustments_y,
-                    VGbitfield paintModes,
-                    VGboolean allowAutoHinting)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_font *f;
-
-   if (font == VG_INVALID_HANDLE) {
-      vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
-      return;
-   }
-   if (glyphCount <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (!glyphIndices || !is_aligned(glyphIndices)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if ((adjustments_x && !is_aligned(adjustments_x)) ||
-       (adjustments_y && !is_aligned(adjustments_y))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   if (paintModes & (~(VG_STROKE_PATH|VG_FILL_PATH))) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   f = handle_to_font(font);
-
-   font_draw_glyphs(f, glyphCount, glyphIndices,
-         adjustments_x, adjustments_y, paintModes, allowAutoHinting);
-}
-
-#endif /* OPENVG_VERSION_1_1 */
diff --git a/src/gallium/state_trackers/vega/api_transform.c b/src/gallium/state_trackers/vega/api_transform.c
deleted file mode 100644 (file)
index 0a40fc6..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-
-#include "vg_context.h"
-
-#include "matrix.h"
-#include "api.h"
-
-void vegaLoadIdentity(void)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct  matrix *mat = vg_state_matrix(&ctx->state.vg);
-   matrix_load_identity(mat);
-}
-
-void vegaLoadMatrix(const VGfloat * m)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct  matrix *mat;
-
-   if (!ctx)
-      return;
-
-   if (!m || !is_aligned(m)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   mat = vg_state_matrix(&ctx->state.vg);
-   matrix_init(mat, m);
-   if (!matrix_is_affine(mat)) {
-      if (ctx->state.vg.matrix_mode != VG_MATRIX_IMAGE_USER_TO_SURFACE) {
-         matrix_make_affine(mat);
-      }
-   }
-}
-
-void vegaGetMatrix(VGfloat * m)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix *mat;
-
-   if (!ctx)
-      return;
-
-   if (!m || !is_aligned(m)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   mat = vg_state_matrix(&ctx->state.vg);
-   memcpy(m, mat->m, sizeof(VGfloat)*9);
-}
-
-void vegaMultMatrix(const VGfloat * m)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix *dst, src;
-
-   if (!ctx)
-      return;
-
-   if (!m || !is_aligned(m)) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   matrix_init(&src, m);
-   dst = vg_state_matrix(&ctx->state.vg);
-   if (!matrix_is_affine(&src)) {
-      if (ctx->state.vg.matrix_mode != VG_MATRIX_IMAGE_USER_TO_SURFACE) {
-         matrix_make_affine(&src);
-      }
-   }
-   matrix_mult(dst, &src);
-
-}
-
-void vegaTranslate(VGfloat tx, VGfloat ty)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix *dst = vg_state_matrix(&ctx->state.vg);
-   matrix_translate(dst, tx, ty);
-}
-
-void vegaScale(VGfloat sx, VGfloat sy)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix *dst = vg_state_matrix(&ctx->state.vg);
-   matrix_scale(dst, sx, sy);
-}
-
-void vegaShear(VGfloat shx, VGfloat shy)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix *dst = vg_state_matrix(&ctx->state.vg);
-   matrix_shear(dst, shx, shy);
-}
-
-void vegaRotate(VGfloat angle)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix *dst = vg_state_matrix(&ctx->state.vg);
-   matrix_rotate(dst, angle);
-}
diff --git a/src/gallium/state_trackers/vega/arc.c b/src/gallium/state_trackers/vega/arc.c
deleted file mode 100644 (file)
index 65a985f..0000000
+++ /dev/null
@@ -1,709 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "arc.h"
-
-#include "matrix.h"
-#include "bezier.h"
-#include "polygon.h"
-#include "stroker.h"
-#include "path.h"
-
-#include "util/u_debug.h"
-#include "util/u_math.h"
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define DEBUG_ARCS 0
-
-static const VGfloat two_pi = M_PI * 2;
-
-
-static const double coeffs3Low[2][4][4] = {
-   {
-      {  3.85268,   -21.229,      -0.330434,    0.0127842  },
-      { -1.61486,     0.706564,    0.225945,    0.263682   },
-      { -0.910164,    0.388383,    0.00551445,  0.00671814 },
-      { -0.630184,    0.192402,    0.0098871,   0.0102527  }
-   },
-   {
-      { -0.162211,    9.94329,     0.13723,     0.0124084  },
-      { -0.253135,    0.00187735,  0.0230286,   0.01264    },
-      { -0.0695069,  -0.0437594,   0.0120636,   0.0163087  },
-      { -0.0328856,  -0.00926032, -0.00173573,  0.00527385 }
-   }
-};
-
-/* coefficients for error estimation
-   while using cubic Bézier curves for approximation
-   1/4 <= b/a <= 1 */
-static const double coeffs3High[2][4][4] = {
-   {
-      {  0.0899116, -19.2349,     -4.11711,     0.183362   },
-      {  0.138148,   -1.45804,     1.32044,     1.38474    },
-      {  0.230903,   -0.450262,    0.219963,    0.414038   },
-      {  0.0590565,  -0.101062,    0.0430592,   0.0204699  }
-   },
-   {
-      {  0.0164649,   9.89394,     0.0919496,   0.00760802 },
-      {  0.0191603,  -0.0322058,   0.0134667,  -0.0825018  },
-      {  0.0156192,  -0.017535,    0.00326508, -0.228157   },
-      { -0.0236752,   0.0405821,  -0.0173086,   0.176187   }
-   }
-};
-
-/* safety factor to convert the "best" error approximation
-   into a "max bound" error */
-static const double safety3[] = {
-   0.001, 4.98, 0.207, 0.0067
-};
-
-/* The code below is from the OpenVG 1.1 Spec
- * Section 18.4 */
-
-/* Given: Points (x0, y0) and (x1, y1)
- * Return: TRUE if a solution exists, FALSE otherwise
- *         Circle centers are written to (cx0, cy0) and (cx1, cy1)
- */
-static VGboolean
-find_unit_circles(double x0, double y0, double x1, double y1,
-                  double *cx0, double *cy0,
-                  double *cx1, double *cy1)
-{
-   /* Compute differences and averages */
-   double dx = x0 - x1;
-   double dy = y0 - y1;
-   double xm = (x0 + x1)/2;
-   double ym = (y0 + y1)/2;
-   double dsq, disc, s, sdx, sdy;
-
-   /* Solve for intersecting unit circles */
-   dsq = dx*dx + dy*dy;
-   if (dsq == 0.0) return VG_FALSE; /* Points are coincident */
-   disc = 1.0/dsq - 1.0/4.0;
-
-   /* the precision we care about here is around float so if we're
-    * around the float defined zero then make it official to avoid
-    * precision problems later on */
-   if (floatIsZero(disc))
-      disc = 0.0;
-
-   if (disc < 0.0) return VG_FALSE; /* Points are too far apart */
-   s = sqrt(disc);
-   sdx = s*dx;
-   sdy = s*dy;
-   *cx0 = xm + sdy;
-   *cy0 = ym - sdx;
-   *cx1 = xm - sdy;
-   *cy1 = ym + sdx;
-   return VG_TRUE;
-}
-
-
-/* Given:  Ellipse parameters rh, rv, rot (in degrees),
- *         endpoints (x0, y0) and (x1, y1)
- * Return: TRUE if a solution exists, FALSE otherwise
- *         Ellipse centers are written to (cx0, cy0) and (cx1, cy1)
- */
-static VGboolean
-find_ellipses(double rh, double rv, double rot,
-              double x0, double y0, double x1, double y1,
-              double *cx0, double *cy0, double *cx1, double *cy1)
-{
-   double COS, SIN, x0p, y0p, x1p, y1p, pcx0, pcy0, pcx1, pcy1;
-   /* Convert rotation angle from degrees to radians */
-   rot *= M_PI/180.0;
-   /* Pre-compute rotation matrix entries */
-   COS = cos(rot); SIN = sin(rot);
-   /* Transform (x0, y0) and (x1, y1) into unit space */
-   /* using (inverse) rotate, followed by (inverse) scale   */
-   x0p = (x0*COS + y0*SIN)/rh;
-   y0p = (-x0*SIN + y0*COS)/rv;
-   x1p = (x1*COS + y1*SIN)/rh;
-   y1p = (-x1*SIN + y1*COS)/rv;
-   if (!find_unit_circles(x0p, y0p, x1p, y1p,
-                          &pcx0, &pcy0, &pcx1, &pcy1)) {
-      return VG_FALSE;
-   }
-   /* Transform back to original coordinate space */
-   /* using (forward) scale followed by (forward) rotate */
-   pcx0 *= rh; pcy0 *= rv;
-   pcx1 *= rh; pcy1 *= rv;
-   *cx0 = pcx0*COS - pcy0*SIN;
-   *cy0 = pcx0*SIN + pcy0*COS;
-   *cx1 = pcx1*COS - pcy1*SIN;
-   *cy1 = pcx1*SIN + pcy1*COS;
-   return VG_TRUE;
-}
-
-static INLINE VGboolean
-try_to_fix_radii(struct arc *arc)
-{
-   double COS, SIN, rot, x0p, y0p, x1p, y1p;
-   double dx, dy, dsq, scale;
-
-   /* Convert rotation angle from degrees to radians */
-   rot = DEGREES_TO_RADIANS(arc->theta);
-
-   /* Pre-compute rotation matrix entries */
-   COS = cos(rot); SIN = sin(rot);
-
-   /* Transform (x0, y0) and (x1, y1) into unit space */
-   /* using (inverse) rotate, followed by (inverse) scale   */
-   x0p = (arc->x1*COS + arc->y1*SIN)/arc->a;
-   y0p = (-arc->x1*SIN + arc->y1*COS)/arc->b;
-   x1p = (arc->x2*COS + arc->y2*SIN)/arc->a;
-   y1p = (-arc->x2*SIN + arc->y2*COS)/arc->b;
-   /* Compute differences and averages */
-   dx = x0p - x1p;
-   dy = y0p - y1p;
-
-   dsq = dx*dx + dy*dy;
-#if 0
-   if (dsq <= 0.001) {
-      debug_printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaa\n");
-   }
-#endif
-   scale = 1/(2/sqrt(dsq));
-   arc->a *= scale;
-   arc->b *= scale;
-   return VG_TRUE;
-}
-
-static INLINE double vector_normalize(double *v)
-{
-   double sq = v[0] * v[0] + v[1] * v[1];
-   return sqrt(sq);
-}
-static INLINE double vector_orientation(double *v)
-{
-   double norm = vector_normalize(v);
-   double cosa = v[0] / norm;
-   double sina = v[1] / norm;
-   return (sina>=0 ? acos(cosa) : 2*M_PI - acos(cosa));
-}
-static INLINE double vector_dot(double *v0,
-                                double *v1)
-{
-   return v0[0] * v1[0] + v0[1] * v1[1];
-}
-
-static INLINE double vector_angles(double *v0,
-                                   double *v1)
-{
-   double dot = vector_dot(v0, v1);
-   double norm0 = vector_normalize(v0);
-   double norm1 = vector_normalize(v1);
-
-   return acos(dot / (norm0 * norm1));
-}
-
-static VGboolean find_angles(struct arc *arc)
-{
-   double vec0[2], vec1[2];
-   double lambda1, lambda2;
-   double angle;
-   struct matrix matrix;
-
-   if (floatIsZero(arc->a) || floatIsZero(arc->b)) {
-      return VG_FALSE;
-   }
-   /* map the points to an identity circle */
-   matrix_load_identity(&matrix);
-   matrix_scale(&matrix, 1.f, arc->a/arc->b);
-   matrix_rotate(&matrix, -arc->theta);
-   matrix_map_point(&matrix,
-                    arc->x1, arc->y1,
-                    &arc->x1, &arc->y1);
-   matrix_map_point(&matrix,
-                    arc->x2, arc->y2,
-                    &arc->x2, &arc->y2);
-   matrix_map_point(&matrix,
-                    arc->cx, arc->cy,
-                    &arc->cx, &arc->cy);
-
-#if DEBUG_ARCS
-   debug_printf("Matrix 3 [%f, %f, %f| %f, %f, %f| %f, %f, %f]\n",
-                matrix.m[0], matrix.m[1], matrix.m[2],
-                matrix.m[3], matrix.m[4], matrix.m[5],
-                matrix.m[6], matrix.m[7], matrix.m[8]);
-   debug_printf("Endpoints [%f, %f], [%f, %f]\n",
-                arc->x1, arc->y1, arc->x2, arc->y2);
-#endif
-
-   vec0[0] = arc->x1 - arc->cx;
-   vec0[1] = arc->y1 - arc->cy;
-   vec1[0] = arc->x2 - arc->cx;
-   vec1[1] = arc->y2 - arc->cy;
-
-#if DEBUG_ARCS
-   debug_printf("Vec is [%f, %f], [%f, %f], [%f, %f]\n",
-                vec0[0], vec0[1], vec1[0], vec1[1], arc->cx, arc->cy);
-#endif
-
-   lambda1 = vector_orientation(vec0);
-
-   if (isnan(lambda1))
-      lambda1 = 0.f;
-
-   if (arc->type == VG_SCWARC_TO ||
-       arc->type == VG_SCCWARC_TO)
-      angle = vector_angles(vec0, vec1);
-   else if (arc->type == VG_LCWARC_TO ||
-            arc->type == VG_LCCWARC_TO) {
-      angle = 2*M_PI - vector_angles(vec0, vec1);
-   } else
-      abort();
-
-   if (isnan(angle))
-      angle = M_PI;
-
-
-   if (arc->type == VG_SCWARC_TO ||
-       arc->type == VG_LCWARC_TO)
-      lambda2 = lambda1 - angle;
-   else
-      lambda2 = lambda1 + angle;
-
-#if DEBUG_ARCS
-   debug_printf("Angle is %f and (%f, %f)\n", angle, lambda1, lambda2);
-#endif
-
-#if 0
-   arc->eta1 = atan2(sin(lambda1) / arc->b,
-                     cos(lambda1) / arc->a);
-   arc->eta2 = atan2(sin(lambda2) / arc->b,
-                     cos(lambda2) / arc->a);
-
-   /* make sure we have eta1 <= eta2 <= eta1 + 2 PI */
-   arc->eta2 -= two_pi * floor((arc->eta2 - arc->eta1) / two_pi);
-
-   /* the preceding correction fails if we have exactly et2 - eta1 = 2 PI
-      it reduces the interval to zero length */
-   if ((lambda2 - lambda1 > M_PI) && (arc->eta2 - arc->eta1 < M_PI)) {
-      arc->eta2 += 2 * M_PI;
-   }
-#else
-   arc->eta1 = lambda1;
-   arc->eta2 = lambda2;
-#endif
-
-   return VG_TRUE;
-}
-
-#if DEBUG_ARCS
-static void check_endpoints(struct arc *arc)
-{
-   double x1, y1, x2, y2;
-
-   double a_cos_eta1 = arc->a * cos(arc->eta1);
-   double b_sin_eta1 = arc->b * sin(arc->eta1);
-   x1 = arc->cx + a_cos_eta1 * arc->cos_theta -
-        b_sin_eta1 * arc->sin_theta;
-   y1 = arc->cy + a_cos_eta1 * arc->sin_theta +
-        b_sin_eta1 * arc->cos_theta;
-
-   double a_cos_eta2 = arc->a * cos(arc->eta2);
-   double b_sin_eta2 = arc->b * sin(arc->eta2);
-   x2 = arc->cx + a_cos_eta2 * arc->cos_theta -
-        b_sin_eta2 * arc->sin_theta;
-   y2 = arc->cy + a_cos_eta2 * arc->sin_theta +
-        b_sin_eta2 * arc->cos_theta;
-
-   debug_printf("Computed (%f, %f), (%f, %f)\n",
-                x1, y1, x2, y2);
-   debug_printf("Real     (%f, %f), (%f, %f)\n",
-                arc->x1, arc->y1,
-                arc->x2, arc->y2);
-}
-#endif
-
-void arc_init(struct arc *arc,
-              VGPathSegment type,
-              VGfloat x1, VGfloat y1,
-              VGfloat x2, VGfloat y2,
-              VGfloat rh, VGfloat rv,
-              VGfloat rot)
-{
-   assert(type == VG_SCCWARC_TO ||
-          type == VG_SCWARC_TO ||
-          type == VG_LCCWARC_TO ||
-          type == VG_LCWARC_TO);
-   arc->type = type;
-   arc->x1  = x1;
-   arc->y1  = y1;
-   arc->x2  = x2;
-   arc->y2  = y2;
-   arc->a   = rh;
-   arc->b   = rv;
-   arc->theta = rot;
-   arc->cos_theta = cos(arc->theta);
-   arc->sin_theta = sin(arc->theta);
-   {
-      double cx0, cy0, cx1, cy1;
-      double cx, cy;
-      arc->is_valid =  find_ellipses(rh, rv, rot, x1, y1, x2, y2,
-                                     &cx0, &cy0, &cx1, &cy1);
-
-      if (!arc->is_valid && try_to_fix_radii(arc)) {
-         rh = arc->a;
-         rv = arc->b;
-         arc->is_valid =
-            find_ellipses(rh, rv, rot, x1, y1, x2, y2,
-                          &cx0, &cy0, &cx1, &cy1);
-      }
-
-      if (type == VG_SCWARC_TO ||
-          type == VG_LCCWARC_TO) {
-         cx = cx1;
-         cy = cy1;
-      } else {
-         cx = cx0;
-         cy = cy0;
-      }
-#if DEBUG_ARCS
-      debug_printf("Centers are : (%f, %f) , (%f, %f). Real (%f, %f)\n",
-                   cx0, cy0, cx1, cy1, cx, cy);
-#endif
-      arc->cx = cx;
-      arc->cy = cy;
-      if (arc->is_valid) {
-         arc->is_valid = find_angles(arc);
-#if DEBUG_ARCS
-         check_endpoints(arc);
-#endif
-         /* remap a few points. find_angles requires
-          * rot in angles, the rest of the code
-          * will need them in radians. and find_angles
-          * modifies the center to match an identity
-          * circle so lets reset it */
-         arc->theta = DEGREES_TO_RADIANS(rot);
-         arc->cos_theta = cos(arc->theta);
-         arc->sin_theta = sin(arc->theta);
-         arc->cx = cx;
-         arc->cy = cy;
-      }
-   }
-}
-
-static INLINE double rational_function(double x, const double *c)
-{
-   return (x * (x * c[0] + c[1]) + c[2]) / (x + c[3]);
-}
-
-static double estimate_error(struct arc *arc,
-                             double etaA, double etaB)
-{
-   double eta  = 0.5 * (etaA + etaB);
-
-   double x    = arc->b / arc->a;
-   double dEta = etaB - etaA;
-   double cos2 = cos(2 * eta);
-   double cos4 = cos(4 * eta);
-   double cos6 = cos(6 * eta);
-   double c0, c1;
-
-   /* select the right coeficients set according to degree and b/a */
-   const double (*coeffs)[4][4];
-   const double *safety;
-   coeffs = (x < 0.25) ? coeffs3Low : coeffs3High;
-   safety = safety3;
-
-   c0 = rational_function(x, coeffs[0][0])
-        + cos2 * rational_function(x, coeffs[0][1])
-        + cos4 * rational_function(x, coeffs[0][2])
-        + cos6 * rational_function(x, coeffs[0][3]);
-
-   c1 = rational_function(x, coeffs[1][0])
-        + cos2 * rational_function(x, coeffs[1][1])
-        + cos4 * rational_function(x, coeffs[1][2])
-        + cos6 * rational_function(x, coeffs[1][3]);
-
-   return rational_function(x, safety) * arc->a * exp(c0 + c1 * dEta);
-}
-
-struct arc_cb {
-   void (*move)(struct arc_cb *cb, VGfloat x, VGfloat y);
-   void (*point)(struct arc_cb *cb, VGfloat x, VGfloat y);
-   void (*bezier)(struct arc_cb *cb, struct bezier *bezier);
-
-   void *user_data;
-};
-
-static void cb_null_move(struct arc_cb *cb, VGfloat x, VGfloat y)
-{
-}
-
-static void polygon_point(struct arc_cb *cb, VGfloat x, VGfloat y)
-{
-   struct polygon *poly = (struct polygon*)cb->user_data;
-   polygon_vertex_append(poly, x, y);
-}
-
-static void polygon_bezier(struct arc_cb *cb, struct bezier *bezier)
-{
-   struct polygon *poly = (struct polygon*)cb->user_data;
-   bezier_add_to_polygon(bezier, poly);
-}
-
-static void stroke_point(struct arc_cb *cb, VGfloat x, VGfloat y)
-{
-   struct stroker *stroker = (struct stroker*)cb->user_data;
-   stroker_line_to(stroker, x, y);
-}
-
-static void stroke_curve(struct arc_cb *cb, struct bezier *bezier)
-{
-   struct stroker *stroker = (struct stroker*)cb->user_data;
-   stroker_curve_to(stroker,
-                    bezier->x2, bezier->y2,
-                    bezier->x3, bezier->y3,
-                    bezier->x4, bezier->y4);
-}
-
-static void stroke_emit_point(struct arc_cb *cb, VGfloat x, VGfloat y)
-{
-   struct stroker *stroker = (struct stroker*)cb->user_data;
-   stroker_emit_line_to(stroker, x, y);
-}
-
-static void stroke_emit_curve(struct arc_cb *cb, struct bezier *bezier)
-{
-   struct stroker *stroker = (struct stroker*)cb->user_data;
-   stroker_emit_curve_to(stroker,
-                         bezier->x2, bezier->y2,
-                         bezier->x3, bezier->y3,
-                         bezier->x4, bezier->y4);
-}
-
-static void arc_path_move(struct arc_cb *cb, VGfloat x, VGfloat y)
-{
-   struct path *path = (struct path*)cb->user_data;
-   path_move_to(path, x, y);
-}
-
-static void arc_path_point(struct arc_cb *cb, VGfloat x, VGfloat y)
-{
-   struct path *path = (struct path*)cb->user_data;
-   path_line_to(path, x, y);
-}
-
-static void arc_path_bezier(struct arc_cb *cb, struct bezier *bezier)
-{
-   struct path *path = (struct path*)cb->user_data;
-   path_cubic_to(path,
-                 bezier->x2, bezier->y2,
-                 bezier->x3, bezier->y3,
-                 bezier->x4, bezier->y4);
-}
-
-static INLINE int num_beziers_needed(struct arc *arc)
-{
-   double threshold = 0.05;
-   VGboolean found = VG_FALSE;
-   int n = 1;
-   double min_eta, max_eta;
-
-   min_eta = MIN2(arc->eta1, arc->eta2);
-   max_eta = MAX2(arc->eta1, arc->eta2);
-
-   while ((! found) && (n < 1024)) {
-      double d_eta = (max_eta - min_eta) / n;
-      if (d_eta <= 0.5 * M_PI) {
-         double eta_b = min_eta;
-         int i;
-         found = VG_TRUE;
-         for (i = 0; found && (i < n); ++i) {
-            double etaA = eta_b;
-            eta_b += d_eta;
-            found = (estimate_error(arc, etaA, eta_b) <= threshold);
-         }
-      }
-      n = n << 1;
-   }
-
-   return n;
-}
-
-static void arc_to_beziers(struct arc *arc,
-                           struct arc_cb cb,
-                           struct matrix *matrix)
-{
-   int i;
-   int n = 1;
-   double d_eta, eta_b, cos_eta_b,
-      sin_eta_b, a_cos_eta_b, b_sin_eta_b, a_sin_eta_b,
-      b_cos_eta_b, x_b, y_b, x_b_dot, y_b_dot, lx, ly;
-   double t, alpha;
-
-   { /* always move to the start of the arc */
-      VGfloat x = arc->x1;
-      VGfloat y = arc->y1;
-      matrix_map_point(matrix, x, y, &x, &y);
-      cb.move(&cb, x, y);
-   }
-
-   if (!arc->is_valid) {
-      VGfloat x = arc->x2;
-      VGfloat y = arc->y2;
-      matrix_map_point(matrix, x, y, &x, &y);
-      cb.point(&cb, x, y);
-      return;
-   }
-
-   /* find the number of Bézier curves needed */
-   n = num_beziers_needed(arc);
-
-   d_eta = (arc->eta2 - arc->eta1) / n;
-   eta_b = arc->eta1;
-
-   cos_eta_b  = cos(eta_b);
-   sin_eta_b  = sin(eta_b);
-   a_cos_eta_b = arc->a * cos_eta_b;
-   b_sin_eta_b = arc->b * sin_eta_b;
-   a_sin_eta_b = arc->a * sin_eta_b;
-   b_cos_eta_b = arc->b * cos_eta_b;
-   x_b       = arc->cx + a_cos_eta_b * arc->cos_theta -
-               b_sin_eta_b * arc->sin_theta;
-   y_b       = arc->cy + a_cos_eta_b * arc->sin_theta +
-               b_sin_eta_b * arc->cos_theta;
-   x_b_dot    = -a_sin_eta_b * arc->cos_theta -
-                b_cos_eta_b * arc->sin_theta;
-   y_b_dot    = -a_sin_eta_b * arc->sin_theta +
-                b_cos_eta_b * arc->cos_theta;
-
-   {
-      VGfloat x = x_b, y = y_b;
-      matrix_map_point(matrix, x, y, &x, &y);
-      cb.point(&cb, x, y);
-   }
-   lx = x_b;
-   ly = y_b;
-
-   t     = tan(0.5 * d_eta);
-   alpha = sin(d_eta) * (sqrt(4 + 3 * t * t) - 1) / 3;
-
-   for (i = 0; i < n; ++i) {
-      struct bezier bezier;
-      double xA    = x_b;
-      double yA    = y_b;
-      double xADot = x_b_dot;
-      double yADot = y_b_dot;
-
-      eta_b    += d_eta;
-      cos_eta_b  = cos(eta_b);
-      sin_eta_b  = sin(eta_b);
-      a_cos_eta_b = arc->a * cos_eta_b;
-      b_sin_eta_b = arc->b * sin_eta_b;
-      a_sin_eta_b = arc->a * sin_eta_b;
-      b_cos_eta_b = arc->b * cos_eta_b;
-      x_b       = arc->cx + a_cos_eta_b * arc->cos_theta -
-                  b_sin_eta_b * arc->sin_theta;
-      y_b       = arc->cy + a_cos_eta_b * arc->sin_theta +
-                  b_sin_eta_b * arc->cos_theta;
-      x_b_dot    = -a_sin_eta_b * arc->cos_theta -
-                   b_cos_eta_b * arc->sin_theta;
-      y_b_dot    = -a_sin_eta_b * arc->sin_theta +
-                   b_cos_eta_b * arc->cos_theta;
-
-      bezier_init(&bezier,
-                  lx, ly,
-                  (float) (xA + alpha * xADot), (float) (yA + alpha * yADot),
-                  (float) (x_b - alpha * x_b_dot), (float) (y_b - alpha * y_b_dot),
-                  (float) x_b,                   (float) y_b);
-#if 0
-      debug_printf("%d) Bezier (%f, %f), (%f, %f), (%f, %f), (%f, %f)\n",
-                   i,
-                   bezier.x1, bezier.y1,
-                   bezier.x2, bezier.y2,
-                   bezier.x3, bezier.y3,
-                   bezier.x4, bezier.y4);
-#endif
-      bezier_transform(&bezier, matrix);
-      cb.bezier(&cb, &bezier);
-      lx = x_b;
-      ly = y_b;
-   }
-}
-
-
-void arc_add_to_polygon(struct arc *arc,
-                        struct polygon *poly,
-                        struct matrix *matrix)
-{
-   struct arc_cb cb;
-
-   cb.move = cb_null_move;
-   cb.point = polygon_point;
-   cb.bezier = polygon_bezier;
-   cb.user_data = poly;
-
-   arc_to_beziers(arc, cb, matrix);
-}
-
-void arc_stroke_cb(struct arc *arc,
-                   struct stroker *stroke,
-                   struct matrix *matrix)
-{
-   struct arc_cb cb;
-
-   cb.move = cb_null_move;
-   cb.point = stroke_point;
-   cb.bezier = stroke_curve;
-   cb.user_data = stroke;
-
-   arc_to_beziers(arc, cb, matrix);
-}
-
-void arc_stroker_emit(struct arc *arc,
-                      struct stroker *stroker,
-                      struct matrix *matrix)
-{
-   struct arc_cb cb;
-
-   cb.move = cb_null_move;
-   cb.point = stroke_emit_point;
-   cb.bezier = stroke_emit_curve;
-   cb.user_data = stroker;
-
-   arc_to_beziers(arc, cb, matrix);
-}
-
-void arc_to_path(struct arc *arc,
-                 struct path *path,
-                 struct matrix *matrix)
-{
-   struct arc_cb cb;
-
-   cb.move = arc_path_move;
-   cb.point = arc_path_point;
-   cb.bezier = arc_path_bezier;
-   cb.user_data = path;
-
-   arc_to_beziers(arc, cb, matrix);
-}
diff --git a/src/gallium/state_trackers/vega/arc.h b/src/gallium/state_trackers/vega/arc.h
deleted file mode 100644 (file)
index 3205cd5..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef ARC_H
-#define ARC_H
-
-#include "VG/openvg.h"
-
-struct polygon;
-struct matrix;
-struct stroker;
-struct path;
-
-struct arc {
-   VGPathSegment type;
-
-   VGfloat cx, cy;
-
-   VGfloat a, b;
-
-   VGfloat theta;
-   VGfloat cos_theta, sin_theta;
-
-   VGfloat eta1;
-   VGfloat eta2;
-
-   VGfloat x1, y1, x2, y2;
-
-   VGboolean is_valid;
-};
-
-void arc_init(struct arc *arc,
-              VGPathSegment type,
-              VGfloat x1, VGfloat y1,
-              VGfloat x2, VGfloat y2,
-              VGfloat rh, VGfloat rv,
-              VGfloat rot);
-
-void arc_add_to_polygon(struct arc *arc,
-                        struct polygon *poly,
-                        struct matrix *matrix);
-
-
-void arc_to_path(struct arc *arc,
-                 struct path *p,
-                 struct matrix *matrix);
-
-void arc_stroke_cb(struct arc *arc,
-                   struct stroker *stroke,
-                   struct matrix *matrix);
-
-void arc_stroker_emit(struct arc *arc,
-                      struct stroker *stroke,
-                      struct matrix *matrix);
-
-
-#endif
diff --git a/src/gallium/state_trackers/vega/asm_fill.h b/src/gallium/state_trackers/vega/asm_fill.h
deleted file mode 100644 (file)
index 77e6a14..0000000
+++ /dev/null
@@ -1,693 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef ASM_FILL_H
-#define ASM_FILL_H
-
-#include "tgsi/tgsi_ureg.h"
-
-typedef void (* ureg_func)( struct ureg_program *ureg,
-                            struct ureg_dst *out,
-                            struct ureg_src *in,
-                            struct ureg_src *sampler,
-                            struct ureg_dst *temp,
-                            struct ureg_src *constant);
-
-static INLINE void
-solid_fill( struct ureg_program *ureg,
-            struct ureg_dst *out,
-            struct ureg_src *in,
-            struct ureg_src *sampler,
-            struct ureg_dst *temp,
-            struct ureg_src *constant)
-{
-   ureg_MOV(ureg, *out, constant[2]);
-}
-
-/**
- * Perform frag-coord-to-paint-coord transform.  The transformation is in
- * CONST[4..6].
- */
-#define PAINT_TRANSFORM                                                 \
-   ureg_MOV(ureg, ureg_writemask(temp[0], TGSI_WRITEMASK_XY), in[0]);   \
-   ureg_MOV(ureg,                                                       \
-            ureg_writemask(temp[0], TGSI_WRITEMASK_Z),                  \
-            ureg_scalar(constant[3], TGSI_SWIZZLE_Y));                  \
-   ureg_DP3(ureg, temp[1], constant[4], ureg_src(temp[0]));             \
-   ureg_DP3(ureg, temp[2], constant[5], ureg_src(temp[0]));             \
-   ureg_DP3(ureg, temp[3], constant[6], ureg_src(temp[0]));             \
-   ureg_RCP(ureg, temp[3], ureg_src(temp[3]));                          \
-   ureg_MUL(ureg, temp[1], ureg_src(temp[1]), ureg_src(temp[3]));       \
-   ureg_MUL(ureg, temp[2], ureg_src(temp[2]), ureg_src(temp[3]));       \
-   ureg_MOV(ureg,                                                       \
-            ureg_writemask(temp[4], TGSI_WRITEMASK_X),                  \
-            ureg_src(temp[1]));                                         \
-   ureg_MOV(ureg,                                                       \
-            ureg_writemask(temp[4], TGSI_WRITEMASK_Y),                  \
-            ureg_src(temp[2]));
-
-static INLINE void
-linear_grad( struct ureg_program *ureg,
-             struct ureg_dst *out,
-             struct ureg_src *in,
-             struct ureg_src *sampler,
-             struct ureg_dst *temp,
-             struct ureg_src *constant)
-{
-   PAINT_TRANSFORM
-
-   /* grad = DP2((x, y), CONST[2].xy) * CONST[2].z */
-   ureg_MUL(ureg, temp[0],
-            ureg_scalar(constant[2], TGSI_SWIZZLE_Y),
-            ureg_scalar(ureg_src(temp[4]), TGSI_SWIZZLE_Y));
-   ureg_MAD(ureg, temp[1],
-            ureg_scalar(constant[2], TGSI_SWIZZLE_X),
-            ureg_scalar(ureg_src(temp[4]), TGSI_SWIZZLE_X),
-            ureg_src(temp[0]));
-   ureg_MUL(ureg, temp[2], ureg_src(temp[1]),
-            ureg_scalar(constant[2], TGSI_SWIZZLE_Z));
-
-   ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[2]), sampler[0]);
-}
-
-static INLINE void
-radial_grad( struct ureg_program *ureg,
-             struct ureg_dst *out,
-             struct ureg_src *in,
-             struct ureg_src *sampler,
-             struct ureg_dst *temp,
-             struct ureg_src *constant)
-{
-   PAINT_TRANSFORM
-
-   /*
-    * Calculate (sqrt(B^2 + AC) - B) / A, where
-    *
-    *   A is CONST[2].z,
-    *   B is DP2((x, y), CONST[2].xy), and
-    *   C is DP2((x, y), (x, y)).
-    */
-
-   /* B and C */
-   ureg_DP2(ureg, temp[0], ureg_src(temp[4]), constant[2]);
-   ureg_DP2(ureg, temp[1], ureg_src(temp[4]), ureg_src(temp[4]));
-
-   /* the square root */
-   ureg_MUL(ureg, temp[2], ureg_src(temp[0]), ureg_src(temp[0]));
-   ureg_MAD(ureg, temp[3], ureg_src(temp[1]),
-         ureg_scalar(constant[2], TGSI_SWIZZLE_Z), ureg_src(temp[2]));
-   ureg_RSQ(ureg, temp[3], ureg_src(temp[3]));
-   ureg_RCP(ureg, temp[3], ureg_src(temp[3]));
-
-   ureg_SUB(ureg, temp[3], ureg_src(temp[3]), ureg_src(temp[0]));
-   ureg_RCP(ureg, temp[0], ureg_scalar(constant[2], TGSI_SWIZZLE_Z));
-   ureg_MUL(ureg, temp[0], ureg_src(temp[0]), ureg_src(temp[3]));
-
-   ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[0]), sampler[0]);
-}
-
-
-static INLINE void
-pattern( struct ureg_program *ureg,
-         struct ureg_dst     *out,
-         struct ureg_src     *in,
-         struct ureg_src     *sampler,
-         struct ureg_dst     *temp,
-         struct ureg_src     *constant)
-{
-   PAINT_TRANSFORM
-
-   /* (s, t) = (x / tex_width, y / tex_height) */
-   ureg_RCP(ureg, temp[0],
-            ureg_swizzle(constant[3],
-                         TGSI_SWIZZLE_Z,
-                         TGSI_SWIZZLE_W,
-                         TGSI_SWIZZLE_Z,
-                         TGSI_SWIZZLE_W));
-   ureg_MOV(ureg, temp[1], ureg_src(temp[4]));
-   ureg_MUL(ureg,
-            ureg_writemask(temp[1], TGSI_WRITEMASK_X),
-            ureg_src(temp[1]),
-            ureg_src(temp[0]));
-   ureg_MUL(ureg,
-            ureg_writemask(temp[1], TGSI_WRITEMASK_Y),
-            ureg_src(temp[1]),
-            ureg_src(temp[0]));
-
-   ureg_TEX(ureg, *out, TGSI_TEXTURE_2D, ureg_src(temp[1]), sampler[0]);
-}
-
-static INLINE void
-paint_degenerate( struct ureg_program *ureg,
-                  struct ureg_dst *out,
-                  struct ureg_src *in,
-                  struct ureg_src *sampler,
-                  struct ureg_dst *temp,
-                  struct ureg_src *constant)
-{
-   /* CONST[3].y is 1.0f */
-   ureg_MOV(ureg, temp[1], ureg_scalar(constant[3], TGSI_SWIZZLE_Y));
-   ureg_TEX(ureg, *out, TGSI_TEXTURE_1D, ureg_src(temp[1]), sampler[0]);
-}
-
-static INLINE void
-image_normal( struct ureg_program *ureg,
-              struct ureg_dst *out,
-              struct ureg_src *in,
-              struct ureg_src *sampler,
-              struct ureg_dst *temp,
-              struct ureg_src *constant)
-{
-   /* store and pass image color in TEMP[1] */
-   ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]);
-   ureg_MOV(ureg, *out, ureg_src(temp[1]));
-}
-
-
-static INLINE void
-image_multiply( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   /* store and pass image color in TEMP[1] */
-   ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]);
-   ureg_MUL(ureg, *out, ureg_src(temp[0]), ureg_src(temp[1]));
-}
-
-
-static INLINE void
-image_stencil( struct ureg_program *ureg,
-               struct ureg_dst *out,
-               struct ureg_src *in,
-               struct ureg_src *sampler,
-               struct ureg_dst *temp,
-               struct ureg_src *constant)
-{
-   /* store and pass image color in TEMP[1] */
-   ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[1], sampler[3]);
-   ureg_MOV(ureg, *out, ureg_src(temp[0]));
-}
-
-static INLINE void
-color_transform( struct ureg_program *ureg,
-                 struct ureg_dst *out,
-                 struct ureg_src *in,
-                 struct ureg_src *sampler,
-                 struct ureg_dst *temp,
-                 struct ureg_src *constant)
-{
-   /* note that TEMP[1] may already be used for image color */
-
-   ureg_MAD(ureg, temp[2], ureg_src(temp[0]), constant[0], constant[1]);
-   /* clamp to [0.0f, 1.0f] */
-   ureg_CLAMP(ureg, temp[2],
-              ureg_src(temp[2]),
-              ureg_scalar(constant[3], TGSI_SWIZZLE_X),
-              ureg_scalar(constant[3], TGSI_SWIZZLE_Y));
-   ureg_MOV(ureg, *out, ureg_src(temp[2]));
-}
-
-static INLINE void
-alpha_normal( struct ureg_program *ureg,
-              struct ureg_dst *out,
-              struct ureg_src *in,
-              struct ureg_src *sampler,
-              struct ureg_dst *temp,
-              struct ureg_src *constant)
-{
-   /* save per-channel alpha in TEMP[1] */
-   ureg_MOV(ureg, temp[1], ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W));
-
-   ureg_MOV(ureg, *out, ureg_src(temp[0]));
-}
-
-static INLINE void
-alpha_per_channel( struct ureg_program *ureg,
-                   struct ureg_dst *out,
-                   struct ureg_src *in,
-                   struct ureg_src *sampler,
-                   struct ureg_dst *temp,
-                   struct ureg_src *constant)
-{
-   /* save per-channel alpha in TEMP[1] */
-   ureg_MUL(ureg,
-            ureg_writemask(temp[1], TGSI_WRITEMASK_W),
-            ureg_src(temp[0]),
-            ureg_src(temp[1]));
-   ureg_MUL(ureg,
-            ureg_writemask(temp[1], TGSI_WRITEMASK_XYZ),
-            ureg_src(temp[1]),
-            ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W));
-
-   /* update alpha */
-   ureg_MOV(ureg,
-            ureg_writemask(temp[0], TGSI_WRITEMASK_W),
-            ureg_src(temp[1]));
-   ureg_MOV(ureg, *out, ureg_src(temp[0]));
-}
-
-/**
- * Premultiply src and dst.
- */
-static INLINE void
-blend_premultiply( struct ureg_program *ureg,
-                   struct ureg_src src,
-                   struct ureg_src src_channel_alpha,
-                   struct ureg_src dst)
-{
-   /* premultiply src */
-   ureg_MUL(ureg,
-            ureg_writemask(ureg_dst(src), TGSI_WRITEMASK_XYZ),
-            src,
-            src_channel_alpha);
-   /* premultiply dst */
-   ureg_MUL(ureg,
-            ureg_writemask(ureg_dst(dst), TGSI_WRITEMASK_XYZ),
-            dst,
-            ureg_scalar(dst, TGSI_SWIZZLE_W));
-}
-
-/**
- * Unpremultiply src.
- */
-static INLINE void
-blend_unpremultiply( struct ureg_program *ureg,
-                     struct ureg_src src,
-                     struct ureg_src one,
-                     struct ureg_dst temp[1])
-{
-   /* replace 0.0f by 1.0f before calculating reciprocal */
-   ureg_CMP(ureg,
-            temp[0],
-            ureg_negate(ureg_scalar(src, TGSI_SWIZZLE_W)),
-            ureg_scalar(src, TGSI_SWIZZLE_W),
-            one);
-   ureg_RCP(ureg, temp[0], ureg_src(temp[0]));
-
-   ureg_MUL(ureg,
-            ureg_writemask(ureg_dst(src), TGSI_WRITEMASK_XYZ),
-            src,
-            ureg_src(temp[0]));
-}
-
-/**
- * Emit instructions for the specified blend mode.  Colors will be
- * unpremultiplied.  Two temporary registers are required.
- *
- * The output is written back to src.
- */
-static INLINE void
-blend_generic(struct ureg_program *ureg,
-              VGBlendMode mode,
-              struct ureg_src src,
-              struct ureg_src src_channel_alpha,
-              struct ureg_src dst,
-              struct ureg_src one,
-              struct ureg_dst temp[2])
-{
-   struct ureg_dst out;
-
-   blend_premultiply(ureg, src, src_channel_alpha, dst);
-
-   /* blend in-place */
-   out = ureg_dst(src);
-
-   switch (mode) {
-   case VG_BLEND_SRC:
-      ureg_MOV(ureg, out, src);
-      break;
-   case VG_BLEND_SRC_OVER:
-      /* RGBA_out = RGBA_src + (1 - A_src) * RGBA_dst */
-      ureg_SUB(ureg, temp[0], one, src_channel_alpha);
-      ureg_MAD(ureg, out, ureg_src(temp[0]), dst, src);
-      break;
-   case VG_BLEND_DST_OVER:
-      /* RGBA_out = RGBA_dst + (1 - A_dst) * RGBA_src */
-      ureg_SUB(ureg, temp[0], one, ureg_scalar(dst, TGSI_SWIZZLE_W));
-      ureg_MAD(ureg, out, ureg_src(temp[0]), src, dst);
-      break;
-   case VG_BLEND_SRC_IN:
-      ureg_MUL(ureg, out, src, ureg_scalar(dst, TGSI_SWIZZLE_W));
-      break;
-   case VG_BLEND_DST_IN:
-      ureg_MUL(ureg, out, dst, src_channel_alpha);
-      break;
-   case VG_BLEND_MULTIPLY:
-      /*
-       * RGB_out = (1 - A_dst) * RGB_src + (1 - A_src) * RGB_dst +
-       *           RGB_src * RGB_dst
-       */
-      ureg_MAD(ureg, temp[0],
-            ureg_scalar(dst, TGSI_SWIZZLE_W), ureg_negate(src), src);
-      ureg_MAD(ureg, temp[1],
-            src_channel_alpha, ureg_negate(dst), dst);
-      ureg_MAD(ureg, temp[0], src, dst, ureg_src(temp[0]));
-      ureg_ADD(ureg, out, ureg_src(temp[0]), ureg_src(temp[1]));
-      /* alpha is src over */
-      ureg_ADD(ureg, ureg_writemask(out, TGSI_WRITEMASK_W),
-            src, ureg_src(temp[1]));
-      break;
-   case VG_BLEND_SCREEN:
-      /* RGBA_out = RGBA_src + (1 - RGBA_src) * RGBA_dst */
-      ureg_SUB(ureg, temp[0], one, src);
-      ureg_MAD(ureg, out, ureg_src(temp[0]), dst, src);
-      break;
-   case VG_BLEND_DARKEN:
-   case VG_BLEND_LIGHTEN:
-      /* src over */
-      ureg_SUB(ureg, temp[0], one, src_channel_alpha);
-      ureg_MAD(ureg, temp[0], ureg_src(temp[0]), dst, src);
-      /* dst over */
-      ureg_SUB(ureg, temp[1], one, ureg_scalar(dst, TGSI_SWIZZLE_W));
-      ureg_MAD(ureg, temp[1], ureg_src(temp[1]), src, dst);
-      /* take min/max for colors */
-      if (mode == VG_BLEND_DARKEN) {
-         ureg_MIN(ureg, ureg_writemask(out, TGSI_WRITEMASK_XYZ),
-               ureg_src(temp[0]), ureg_src(temp[1]));
-      }
-      else {
-         ureg_MAX(ureg, ureg_writemask(out, TGSI_WRITEMASK_XYZ),
-               ureg_src(temp[0]), ureg_src(temp[1]));
-      }
-      break;
-   case VG_BLEND_ADDITIVE:
-      /* RGBA_out = RGBA_src + RGBA_dst */
-      ureg_ADD(ureg, temp[0], src, dst);
-      ureg_MIN(ureg, out, ureg_src(temp[0]), one);
-      break;
-   default:
-      assert(0);
-      break;
-   }
-
-   blend_unpremultiply(ureg, src, one, temp);
-}
-
-#define BLEND_GENERIC(mode) \
-   do { \
-      ureg_TEX(ureg, temp[2], TGSI_TEXTURE_2D, in[0], sampler[2]);         \
-      blend_generic(ureg, (mode), ureg_src(temp[0]), ureg_src(temp[1]),    \
-                    ureg_src(temp[2]),                                     \
-                    ureg_scalar(constant[3], TGSI_SWIZZLE_Y), temp + 3);   \
-      ureg_MOV(ureg, *out, ureg_src(temp[0]));                             \
-   } while (0)
-
-static INLINE void
-blend_src( struct ureg_program *ureg,
-           struct ureg_dst *out,
-           struct ureg_src *in,
-           struct ureg_src *sampler,
-           struct ureg_dst *temp,
-           struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_SRC);
-}
-
-static INLINE void
-blend_src_over( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_SRC_OVER);
-}
-
-static INLINE void
-blend_dst_over( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_DST_OVER);
-}
-
-static INLINE void
-blend_src_in( struct ureg_program *ureg,
-              struct ureg_dst *out,
-              struct ureg_src *in,
-              struct ureg_src *sampler,
-              struct ureg_dst *temp,
-              struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_SRC_IN);
-}
-
-static INLINE void
-blend_dst_in( struct ureg_program *ureg,
-              struct ureg_dst *out,
-              struct ureg_src *in,
-              struct ureg_src *sampler,
-              struct ureg_dst *temp,
-              struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_DST_IN);
-}
-
-static INLINE void
-blend_multiply( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_MULTIPLY);
-}
-
-static INLINE void
-blend_screen( struct ureg_program *ureg,
-              struct ureg_dst     *out,
-              struct ureg_src     *in,
-              struct ureg_src     *sampler,
-              struct ureg_dst     *temp,
-              struct ureg_src     *constant)
-{
-   BLEND_GENERIC(VG_BLEND_SCREEN);
-}
-
-static INLINE void
-blend_darken( struct ureg_program *ureg,
-              struct ureg_dst     *out,
-              struct ureg_src     *in,
-              struct ureg_src     *sampler,
-              struct ureg_dst     *temp,
-              struct ureg_src     *constant)
-{
-   BLEND_GENERIC(VG_BLEND_DARKEN);
-}
-
-static INLINE void
-blend_lighten( struct ureg_program *ureg,
-               struct ureg_dst     *out,
-               struct ureg_src     *in,
-               struct ureg_src     *sampler,
-               struct ureg_dst *temp,
-               struct ureg_src     *constant)
-{
-   BLEND_GENERIC(VG_BLEND_LIGHTEN);
-}
-
-static INLINE void
-blend_additive( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   BLEND_GENERIC(VG_BLEND_ADDITIVE);
-}
-
-static INLINE void
-mask( struct ureg_program *ureg,
-      struct ureg_dst *out,
-      struct ureg_src *in,
-      struct ureg_src *sampler,
-      struct ureg_dst *temp,
-      struct ureg_src *constant)
-{
-   ureg_TEX(ureg, temp[1], TGSI_TEXTURE_2D, in[0], sampler[1]);
-   ureg_MUL(ureg, ureg_writemask(temp[0], TGSI_WRITEMASK_W),
-            ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W),
-            ureg_scalar(ureg_src(temp[1]), TGSI_SWIZZLE_W));
-   ureg_MOV(ureg, *out, ureg_src(temp[0]));
-}
-
-static INLINE void
-premultiply( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   ureg_MUL(ureg,
-            ureg_writemask(temp[0], TGSI_WRITEMASK_XYZ),
-            ureg_src(temp[0]),
-            ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W));
-}
-
-static INLINE void
-unpremultiply( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   ureg_TEX(ureg, temp[0], TGSI_TEXTURE_2D, in[0], sampler[1]);
-}
-
-
-static INLINE void
-color_bw( struct ureg_program *ureg,
-                struct ureg_dst *out,
-                struct ureg_src *in,
-                struct ureg_src *sampler,
-                struct ureg_dst *temp,
-                struct ureg_src *constant)
-{
-   ureg_ADD(ureg, temp[1],
-            ureg_scalar(constant[3], TGSI_SWIZZLE_Y),
-            ureg_scalar(constant[3], TGSI_SWIZZLE_Y));
-   ureg_RCP(ureg, temp[2], ureg_src(temp[1]));
-   ureg_ADD(ureg, temp[1],
-            ureg_scalar(constant[3], TGSI_SWIZZLE_Y),
-            ureg_src(temp[2]));
-   ureg_ADD(ureg, ureg_writemask(temp[2], TGSI_WRITEMASK_X),
-            ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_X),
-            ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_Y));
-   ureg_ADD(ureg, ureg_writemask(temp[2], TGSI_WRITEMASK_X),
-            ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_Z),
-            ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_X));
-   ureg_SGE(ureg,
-            ureg_writemask(temp[0], TGSI_WRITEMASK_XYZ),
-            ureg_scalar(ureg_src(temp[2]), TGSI_SWIZZLE_X),
-            ureg_src(temp[1]));
-  ureg_SGE(ureg,
-           ureg_writemask(temp[0], TGSI_WRITEMASK_W),
-           ureg_scalar(ureg_src(temp[0]), TGSI_SWIZZLE_W),
-           ureg_scalar(ureg_src(temp[2]), TGSI_SWIZZLE_Y));
-  ureg_MOV(ureg, *out, ureg_src(temp[0]));
-}
-
-
-struct shader_asm_info {
-   VGint id;
-   ureg_func func;
-
-   VGboolean needs_position;
-
-   VGint start_const;
-   VGint num_consts;
-
-   VGint start_sampler;
-   VGint num_samplers;
-
-   VGint start_temp;
-   VGint num_temps;
-};
-
-
-/* paint types */
-static const struct shader_asm_info shaders_paint_asm[] = {
-   {VEGA_SOLID_FILL_SHADER, solid_fill,
-    VG_FALSE, 2, 1, 0, 0, 0, 0},
-   {VEGA_LINEAR_GRADIENT_SHADER, linear_grad,
-    VG_TRUE,  2, 5, 0, 1, 0, 5},
-   {VEGA_RADIAL_GRADIENT_SHADER, radial_grad,
-    VG_TRUE,  2, 5, 0, 1, 0, 5},
-   {VEGA_PATTERN_SHADER, pattern,
-    VG_TRUE,  3, 4, 0, 1, 0, 5},
-   {VEGA_PAINT_DEGENERATE_SHADER, paint_degenerate,
-    VG_FALSE,  3, 1, 0, 1, 0, 2}
-};
-
-/* image draw modes */
-static const struct shader_asm_info shaders_image_asm[] = {
-   {VEGA_IMAGE_NORMAL_SHADER, image_normal,
-    VG_TRUE,  0, 0, 3, 1, 0, 2},
-   {VEGA_IMAGE_MULTIPLY_SHADER, image_multiply,
-    VG_TRUE,  0, 0, 3, 1, 0, 2},
-   {VEGA_IMAGE_STENCIL_SHADER, image_stencil,
-    VG_TRUE,  0, 0, 3, 1, 0, 2}
-};
-
-static const struct shader_asm_info shaders_color_transform_asm[] = {
-   {VEGA_COLOR_TRANSFORM_SHADER, color_transform,
-    VG_FALSE, 0, 4, 0, 0, 0, 3}
-};
-
-static const struct shader_asm_info shaders_alpha_asm[] = {
-   {VEGA_ALPHA_NORMAL_SHADER, alpha_normal,
-    VG_FALSE, 0, 0, 0, 0, 0, 2},
-   {VEGA_ALPHA_PER_CHANNEL_SHADER, alpha_per_channel,
-    VG_FALSE, 0, 0, 0, 0, 0, 2}
-};
-
-/* extra blend modes */
-static const struct shader_asm_info shaders_blend_asm[] = {
-#define BLEND_ASM_INFO(id, func) { (id), (func), VG_TRUE, 3, 1, 2, 1, 0, 5 }
-   BLEND_ASM_INFO(VEGA_BLEND_SRC_SHADER, blend_src),
-   BLEND_ASM_INFO(VEGA_BLEND_SRC_OVER_SHADER, blend_src_over),
-   BLEND_ASM_INFO(VEGA_BLEND_DST_OVER_SHADER, blend_dst_over),
-   BLEND_ASM_INFO(VEGA_BLEND_SRC_IN_SHADER, blend_src_in),
-   BLEND_ASM_INFO(VEGA_BLEND_DST_IN_SHADER, blend_dst_in),
-   BLEND_ASM_INFO(VEGA_BLEND_MULTIPLY_SHADER, blend_multiply),
-   BLEND_ASM_INFO(VEGA_BLEND_SCREEN_SHADER, blend_screen),
-   BLEND_ASM_INFO(VEGA_BLEND_DARKEN_SHADER, blend_darken),
-   BLEND_ASM_INFO(VEGA_BLEND_LIGHTEN_SHADER, blend_lighten),
-   BLEND_ASM_INFO(VEGA_BLEND_ADDITIVE_SHADER, blend_additive)
-#undef BLEND_ASM_INFO
-};
-
-static const struct shader_asm_info shaders_mask_asm[] = {
-   {VEGA_MASK_SHADER, mask,
-    VG_TRUE,  0, 0, 1, 1, 0, 2}
-};
-
-/* premultiply */
-static const struct shader_asm_info shaders_premultiply_asm[] = {
-   {VEGA_PREMULTIPLY_SHADER, premultiply,
-    VG_FALSE,  0, 0, 0, 0, 0, 1},
-   {VEGA_UNPREMULTIPLY_SHADER, unpremultiply,
-    VG_FALSE,  0, 0, 0, 0, 0, 1},
-};
-
-/* color transform to black and white */
-static const struct shader_asm_info shaders_bw_asm[] = {
-   {VEGA_BW_SHADER, color_bw,
-    VG_FALSE,  3, 1, 0, 0, 0, 3},
-};
-
-#endif
diff --git a/src/gallium/state_trackers/vega/asm_filters.h b/src/gallium/state_trackers/vega/asm_filters.h
deleted file mode 100644 (file)
index 60bed19..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef ASM_FILTERS_H
-#define ASM_FILTERS_H
-
-static const char color_matrix_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "DCL CONST[0..4], CONSTANT\n"
-   "DCL TEMP[0..4], CONSTANT\n"
-   "DCL SAMP[0], CONSTANT\n"
-   "TEX TEMP[0], IN[0], SAMP[0], 2D\n"
-   "MOV TEMP[1], TEMP[0].xxxx\n"
-   "MOV TEMP[2], TEMP[0].yyyy\n"
-   "MOV TEMP[3], TEMP[0].zzzz\n"
-   "MOV TEMP[4], TEMP[0].wwww\n"
-   "MUL TEMP[1], TEMP[1], CONST[0]\n"
-   "MUL TEMP[2], TEMP[2], CONST[1]\n"
-   "MUL TEMP[3], TEMP[3], CONST[2]\n"
-   "MUL TEMP[4], TEMP[4], CONST[3]\n"
-   "ADD TEMP[0], TEMP[1], CONST[4]\n"
-   "ADD TEMP[0], TEMP[0], TEMP[2]\n"
-   "ADD TEMP[0], TEMP[0], TEMP[3]\n"
-   "ADD TEMP[0], TEMP[0], TEMP[4]\n"
-   "MOV OUT[0], TEMP[0]\n"
-   "END\n";
-
-static const char convolution_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "DCL TEMP[0..4], CONSTANT\n"
-   "DCL ADDR[0], CONSTANT\n"
-   "DCL CONST[0..%d], CONSTANT\n"
-   "DCL SAMP[0], CONSTANT\n"
-   "0: MOV TEMP[0], CONST[0].xxxx\n"
-   "1: MOV TEMP[1], CONST[0].xxxx\n"
-   "2: BGNLOOP :14\n"
-   "3: SGE TEMP[0].z, TEMP[0].yyyy, CONST[1].xxxx\n"
-   "4: IF TEMP[0].zzzz :7\n"
-   "5: BRK\n"
-   "6: ENDIF\n"
-   "7: ARL ADDR[0].x, TEMP[0].yyyy\n"
-   "8: MOV TEMP[3], CONST[ADDR[0]+2]\n"
-   "9: ADD TEMP[4].xy, IN[0], TEMP[3]\n"
-   "10: TEX TEMP[2], TEMP[4], SAMP[0], 2D\n"
-   "11: MOV TEMP[3], CONST[ADDR[0]+%d]\n"
-   "12: MAD TEMP[1], TEMP[2], TEMP[3], TEMP[1]\n"
-   "13: ADD TEMP[0].y, TEMP[0].yyyy, CONST[0].yyyy\n"
-   "14: ENDLOOP :2\n"
-   "15: MAD OUT[0], TEMP[1], CONST[1].yyyy, CONST[1].zzzz\n"
-   "16: END\n";
-
-
-static const char lookup_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "DCL TEMP[0..2], CONSTANT\n"
-   "DCL CONST[0], CONSTANT\n"
-   "DCL SAMP[0..1], CONSTANT\n"
-   "TEX TEMP[0], IN[0], SAMP[0], 2D\n"
-   "MOV TEMP[1], TEMP[0]\n"
-   /* do red */
-   "TEX TEMP[2], TEMP[1].xxxx, SAMP[1], 1D\n"
-   "MOV TEMP[0].x, TEMP[2].xxxx\n"
-   /* do blue */
-   "TEX TEMP[2], TEMP[1].yyyy, SAMP[1], 1D\n"
-   "MOV TEMP[0].y, TEMP[2].yyyy\n"
-   /* do green */
-   "TEX TEMP[2], TEMP[1].zzzz, SAMP[1], 1D\n"
-   "MOV TEMP[0].z, TEMP[2].zzzz\n"
-   /* do alpha */
-   "TEX TEMP[2], TEMP[1].wwww, SAMP[1], 1D\n"
-   "MOV TEMP[0].w, TEMP[2].wwww\n"
-   "MOV OUT[0], TEMP[0]\n"
-   "END\n";
-
-
-static const char lookup_single_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "DCL TEMP[0..2], CONSTANT\n"
-   "DCL CONST[0], CONSTANT\n"
-   "DCL SAMP[0..1], CONSTANT\n"
-   "TEX TEMP[0], IN[0], SAMP[0], 2D\n"
-   "TEX TEMP[1], TEMP[0].%s, SAMP[1], 1D\n"
-   "MOV OUT[0], TEMP[1]\n"
-   "END\n";
-
-#endif
diff --git a/src/gallium/state_trackers/vega/asm_util.h b/src/gallium/state_trackers/vega/asm_util.h
deleted file mode 100644 (file)
index ae1842a..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef ASM_UTIL_H
-#define ASM_UTIL_H
-
-/* μnew = μmask */
-static const char set_mask_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL SAMP[0], CONSTANT\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "0: TEX OUT[0], IN[0], SAMP[0], 2D\n"/*umask*/
-   "1: END\n";
-
-/* μnew = 1 – (1 – μmask)*(1 – μprev) */
-static const char union_mask_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL IN[1], POSITION, LINEAR\n"
-   "DCL CONST[0], CONSTANT\n"
-   "DCL SAMP[0..1], CONSTANT\n"
-   "DCL TEMP[0..3], CONSTANT\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "0: TEX TEMP[1], IN[0], SAMP[0], 2D\n"/*umask*/
-   "1: TEX TEMP[0], IN[1], SAMP[1], 2D\n"/*uprev*/
-   "2: SUB TEMP[2], CONST[0], TEMP[0]\n"
-   "3: SUB TEMP[3], CONST[0], TEMP[1]\n"
-   "4: MUL TEMP[0].w, TEMP[2].wwww, TEMP[3].wwww\n"
-   "5: SUB OUT[0], CONST[0], TEMP[0]\n"
-   "6: END\n";
-
-/* μnew = μmask *μprev */
-static const char intersect_mask_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL IN[1], POSITION, LINEAR\n"
-   "DCL CONST[0], CONSTANT\n"
-   "DCL SAMP[0..1], CONSTANT\n"
-   "DCL TEMP[0..1], CONSTANT\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "0: TEX TEMP[0], IN[1], SAMP[1], 2D\n"/*uprev*/
-   "1: TEX TEMP[1], IN[0], SAMP[0], 2D\n"/*umask*/
-   "2: MUL OUT[0], TEMP[0].wwww, TEMP[1].wwww\n"
-   "3: END\n";
-
-/* μnew = μprev*(1 – μmask) */
-static const char subtract_mask_asm[] =
-   "FRAG\n"
-   "DCL IN[0], GENERIC[0], PERSPECTIVE\n"
-   "DCL IN[1], POSITION, LINEAR\n"
-   "DCL CONST[0], CONSTANT\n"
-   "DCL SAMP[0..1], CONSTANT\n"
-   "DCL TEMP[0..2], CONSTANT\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "0: TEX TEMP[1], IN[0], SAMP[0], 2D\n"/*umask*/
-   "1: TEX TEMP[0], IN[1], SAMP[1], 2D\n"/*uprev*/
-   "2: SUB TEMP[2], CONST[0], TEMP[1]\n"
-   "3: MUL OUT[0], TEMP[2].wwww, TEMP[0].wwww\n"
-   "4: END\n";
-
-#endif
diff --git a/src/gallium/state_trackers/vega/bezier.c b/src/gallium/state_trackers/vega/bezier.c
deleted file mode 100644 (file)
index 5769e8e..0000000
+++ /dev/null
@@ -1,706 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "bezier.h"
-
-#include "matrix.h"
-#include "polygon.h"
-
-#include "pipe/p_compiler.h"
-#include "util/u_debug.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-#include <math.h>
-
-static const float flatness = 0.5;
-
-
-static INLINE void split_left(struct bezier *bez, VGfloat t, struct bezier* left)
-{
-    left->x1 = bez->x1;
-    left->y1 = bez->y1;
-
-    left->x2 = bez->x1 + t * (bez->x2 - bez->x1);
-    left->y2 = bez->y1 + t * (bez->y2 - bez->y1);
-
-    left->x3 = bez->x2 + t * (bez->x3 - bez->x2);
-    left->y3 = bez->y2 + t * (bez->y3 - bez->y2);
-
-    bez->x3 = bez->x3 + t * (bez->x4 - bez->x3);
-    bez->y3 = bez->y3 + t * (bez->y4 - bez->y3);
-
-    bez->x2 = left->x3 + t * (bez->x3 - left->x3);
-    bez->y2 = left->y3 + t * (bez->y3 - left->y3);
-
-    left->x3 = left->x2 + t * (left->x3 - left->x2);
-    left->y3 = left->y2 + t * (left->y3 - left->y2);
-
-    left->x4 = bez->x1 = left->x3 + t * (bez->x2 - left->x3);
-    left->y4 = bez->y1 = left->y3 + t * (bez->y2 - left->y3);
-}
-
-static INLINE void split(struct bezier *bez,
-                         struct bezier *first_half,
-                         struct bezier *second_half)
-{
-   double c         = (bez->x2 + bez->x3) * 0.5;
-   first_half->x2  = (bez->x1 + bez->x2) * 0.5;
-   second_half->x3 = (bez->x3 + bez->x4) * 0.5;
-   first_half->x1  = bez->x1;
-   second_half->x4 = bez->x4;
-   first_half->x3  = (first_half->x2 + c) * 0.5;
-   second_half->x2 = (second_half->x3 + c) * 0.5;
-   first_half->x4  = second_half->x1 =
-                     (first_half->x3 + second_half->x2) * 0.5;
-
-   c = (bez->y2 + bez->y3) / 2;
-   first_half->y2  = (bez->y1 + bez->y2) * 0.5;
-   second_half->y3 = (bez->y3 + bez->y4) * 0.5;
-   first_half->y1  = bez->y1;
-   second_half->y4 = bez->y4;
-   first_half->y3  = (first_half->y2 + c) * 0.5;
-   second_half->y2 = (second_half->y3 + c) * 0.5;
-   first_half->y4  = second_half->y1 =
-                     (first_half->y3 + second_half->y2) * 0.5;
-}
-
-struct polygon * bezier_to_polygon(struct bezier *bez)
-{
-   struct polygon *poly = polygon_create(64);
-   polygon_vertex_append(poly, bez->x1, bez->y1);
-   bezier_add_to_polygon(bez, poly);
-   return poly;
-}
-
-void bezier_add_to_polygon(const struct bezier *bez,
-                           struct polygon *poly)
-{
-   struct bezier beziers[32];
-   struct bezier *b;
-
-   beziers[0] = *bez;
-   b = beziers;
-
-   while (b >= beziers) {
-      double y4y1 = b->y4 - b->y1;
-      double x4x1 = b->x4 - b->x1;
-      double l = ABS(x4x1) + ABS(y4y1);
-      double d;
-      if (l > 1.f) {
-         d = ABS((x4x1)*(b->y1 - b->y2) - (y4y1)*(b->x1 - b->x2))
-             + ABS((x4x1)*(b->y1 - b->y3) - (y4y1)*(b->x1 - b->x3));
-      } else {
-         d = ABS(b->x1 - b->x2) + ABS(b->y1 - b->y2) +
-             ABS(b->x1 - b->x3) + ABS(b->y1 - b->y3);
-         l = 1.;
-      }
-      if (d < flatness*l || b == beziers + 31) {
-         /* good enough, we pop it off and add the endpoint */
-         polygon_vertex_append(poly, b->x4, b->y4);
-         --b;
-      } else {
-         /* split, second half of the bezier goes lower into the stack */
-         split(b, b+1, b);
-         ++b;
-      }
-   }
-}
-
-static void add_if_close(struct bezier *bez, VGfloat *length, VGfloat error)
-{
-   struct bezier left, right;     /* bez poly splits */
-   VGfloat len = 0.0;        /* arc length */
-   VGfloat chord;            /* chord length */
-
-   len = len + line_length(bez->x1, bez->y1, bez->x2, bez->y2);
-   len = len + line_length(bez->x2, bez->y2, bez->x3, bez->y3);
-   len = len + line_length(bez->x3, bez->y3, bez->x4, bez->y4);
-
-   chord = line_length(bez->x1, bez->y1, bez->x4, bez->y4);
-
-   if ((len-chord) > error) {
-      split(bez, &left, &right);                 /* split in two */
-      add_if_close(&left, length, error);       /* try left side */
-      add_if_close(&right, length, error);      /* try right side */
-      return;
-   }
-
-   *length = *length + len;
-
-   return;
-}
-
-float bezier_length(struct bezier *bez, float error)
-{
-   VGfloat length = 0.f;
-
-   add_if_close(bez, &length, error);
-   return length;
-}
-
-void bezier_init(struct bezier *bez,
-                 float x1, float y1,
-                 float x2, float y2,
-                 float x3, float y3,
-                 float x4, float y4)
-{
-   bez->x1 = x1;
-   bez->y1 = y1;
-   bez->x2 = x2;
-   bez->y2 = y2;
-   bez->x3 = x3;
-   bez->y3 = y3;
-   bez->x4 = x4;
-   bez->y4 = y4;
-#if 0
-   debug_printf("bezier in [%f, %f, %f, %f, %f, %f]\n",
-                x1, y1, x2, y2, x3, y3, x4, y4);
-#endif
-}
-
-
-static INLINE void bezier_init2v(struct bezier *bez,
-                                 float *pt1,
-                                 float *pt2,
-                                 float *pt3,
-                                 float *pt4)
-{
-   bez->x1 = pt1[0];
-   bez->y1 = pt1[1];
-
-   bez->x2 = pt2[0];
-   bez->y2 = pt2[1];
-
-   bez->x3 = pt3[0];
-   bez->y3 = pt3[1];
-
-   bez->x4 = pt4[0];
-   bez->y4 = pt4[1];
-}
-
-
-void bezier_transform(struct bezier *bez,
-                      struct matrix *matrix)
-{
-   assert(matrix_is_affine(matrix));
-   matrix_map_point(matrix, bez->x1, bez->y1, &bez->x1, &bez->y1);
-   matrix_map_point(matrix, bez->x2, bez->y2, &bez->x2, &bez->y2);
-   matrix_map_point(matrix, bez->x3, bez->y3, &bez->x3, &bez->y3);
-   matrix_map_point(matrix, bez->x4, bez->y4, &bez->x4, &bez->y4);
-}
-
-static INLINE void bezier_point_at(const struct bezier *bez, float t, float *pt)
-{
-   float a, b, c, d;
-   float m_t;
-   m_t = 1. - t;
-   b = m_t * m_t;
-   c = t * t;
-   d = c * t;
-   a = b * m_t;
-   b *= 3. * t;
-   c *= 3. * m_t;
-   pt[0] = a*bez->x1 + b*bez->x2 + c*bez->x3 + d*bez->x4;
-   pt[1] = a*bez->y1 + b*bez->y2 + c*bez->y3 + d*bez->y4;
-}
-
-static INLINE void bezier_normal_at(const struct bezier *bez, float t, float *norm)
-{
-   float m_t = 1. - t;
-   float a = m_t * m_t;
-   float b = t * m_t;
-   float c = t * t;
-
-   norm[0] =  (bez->y2-bez->y1) * a + (bez->y3-bez->y2) * b + (bez->y4-bez->y3) * c;
-   norm[1] = -(bez->x2-bez->x1) * a - (bez->x3-bez->x2) * b - (bez->x4-bez->x3) * c;
-}
-
-enum shift_result {
-   Ok,
-   Discard,
-   Split,
-   Circle
-};
-
-static enum shift_result good_offset(const struct bezier *b1,
-                                     const struct bezier *b2,
-                                     float offset, float threshold)
-{
-   const float o2 = offset*offset;
-   const float max_dist_line = threshold*offset*offset;
-   const float max_dist_normal = threshold*offset;
-   const float spacing = 0.25;
-   float i;
-   for (i = spacing; i < 0.99; i += spacing) {
-      float p1[2],p2[2], d, l;
-      float normal[2];
-      bezier_point_at(b1, i, p1);
-      bezier_point_at(b2, i, p2);
-      d = (p1[0] - p2[0])*(p1[0] - p2[0]) + (p1[1] - p2[1])*(p1[1] - p2[1]);
-      if (ABS(d - o2) > max_dist_line)
-         return Split;
-
-      bezier_normal_at(b1, i, normal);
-      l = ABS(normal[0]) + ABS(normal[1]);
-      if (l != 0.) {
-         d = ABS(normal[0]*(p1[1] - p2[1]) - normal[1]*(p1[0] - p2[0]) ) / l;
-         if (d > max_dist_normal)
-            return Split;
-      }
-   }
-   return Ok;
-}
-
-static INLINE void shift_line_by_normal(float *l, float offset)
-{
-   float norm[4];
-   float tx, ty;
-
-   line_normal(l, norm);
-   line_normalize(norm);
-
-   tx = (norm[2] - norm[0]) * offset;
-   ty = (norm[3] - norm[1]) * offset;
-   l[0] += tx; l[1] += ty;
-   l[2] += tx; l[3] += ty;
-}
-
-static INLINE VGboolean is_bezier_line(float (*points)[2], int count)
-{
-   float dx13 = points[2][0] - points[0][0];
-   float dy13 = points[2][1] - points[0][1];
-
-   float dx12 = points[1][0] - points[0][0];
-   float dy12 = points[1][1] - points[0][1];
-
-   debug_assert(count > 2);
-
-   if (count == 3) {
-      return floatsEqual(dx12 * dy13, dx13 * dy12);
-   } else if (count == 4) {
-      float dx14 = points[3][0] - points[0][0];
-      float dy14 = points[3][1] - points[0][1];
-
-      return (floatsEqual(dx12 * dy13, dx13 * dy12) &&
-              floatsEqual(dx12 * dy14, dx14 * dy12));
-   }
-
-   return VG_FALSE;
-}
-
-static INLINE void compute_pt_normal(float *pt1, float *pt2, float *res)
-{
-   float line[4];
-   float normal[4];
-   line[0] = 0.f; line[1] = 0.f;
-   line[2] = pt2[0] - pt1[0];
-   line[3] = pt2[1] - pt1[1];
-   line_normal(line, normal);
-   line_normalize(normal);
-
-   res[0] = normal[2];
-   res[1] = normal[3];
-}
-
-static enum shift_result shift(const struct bezier *orig,
-                               struct bezier *shifted,
-                               float offset, float threshold)
-{
-   int i;
-   int map[4];
-   VGboolean p1_p2_equal = (orig->x1 == orig->x2 && orig->y1 == orig->y2);
-   VGboolean p2_p3_equal = (orig->x2 == orig->x3 && orig->y2 == orig->y3);
-   VGboolean p3_p4_equal = (orig->x3 == orig->x4 && orig->y3 == orig->y4);
-
-   float points[4][2];
-   int np = 0;
-   float bounds[4];
-   float points_shifted[4][2];
-   float prev_normal[2];
-
-   points[np][0] = orig->x1;
-   points[np][1] = orig->y1;
-   map[0] = 0;
-   ++np;
-   if (!p1_p2_equal) {
-      points[np][0] = orig->x2;
-      points[np][1] = orig->y2;
-      ++np;
-   }
-   map[1] = np - 1;
-   if (!p2_p3_equal) {
-      points[np][0] = orig->x3;
-      points[np][1] = orig->y3;
-      ++np;
-   }
-   map[2] = np - 1;
-   if (!p3_p4_equal) {
-      points[np][0] = orig->x4;
-      points[np][1] = orig->y4;
-      ++np;
-   }
-   map[3] = np - 1;
-   if (np == 1)
-      return Discard;
-
-   /* We need to specialcase lines of 3 or 4 points due to numerical
-      instability in intersection code below */
-   if (np > 2 && is_bezier_line(points, np)) {
-      float l[4] = { points[0][0], points[0][1],
-                     points[np-1][0], points[np-1][1] };
-      float ctrl1[2], ctrl2[2];
-      if (floatsEqual(points[0][0], points[np-1][0]) &&
-          floatsEqual(points[0][1], points[np-1][1]))
-         return Discard;
-
-      shift_line_by_normal(l, offset);
-      line_point_at(l, 0.33, ctrl1);
-      line_point_at(l, 0.66, ctrl2);
-      bezier_init(shifted, l[0], l[1],
-                  ctrl1[0], ctrl1[1], ctrl2[0], ctrl2[1],
-                  l[2], l[3]);
-      return Ok;
-   }
-
-   bezier_bounds(orig, bounds);
-   if (np == 4 && bounds[2] < .1*offset && bounds[3] < .1*offset) {
-      float l = (orig->x1 - orig->x2)*(orig->x1 - orig->x2) +
-                (orig->y1 - orig->y2)*(orig->y1 - orig->y1) *
-                (orig->x3 - orig->x4)*(orig->x3 - orig->x4) +
-                (orig->y3 - orig->y4)*(orig->y3 - orig->y4);
-      float dot = (orig->x1 - orig->x2)*(orig->x3 - orig->x4) +
-                  (orig->y1 - orig->y2)*(orig->y3 - orig->y4);
-      if (dot < 0 && dot*dot < 0.8*l)
-         /* the points are close and reverse dirction. Approximate the whole
-            thing by a semi circle */
-         return Circle;
-   }
-
-   compute_pt_normal(points[0], points[1], prev_normal);
-
-   points_shifted[0][0] = points[0][0] + offset * prev_normal[0];
-   points_shifted[0][1] = points[0][1] + offset * prev_normal[1];
-
-   for (i = 1; i < np - 1; ++i) {
-      float normal_sum[2], r;
-      float next_normal[2];
-      compute_pt_normal(points[i], points[i + 1], next_normal);
-
-      normal_sum[0] = prev_normal[0] + next_normal[0];
-      normal_sum[1] = prev_normal[1] + next_normal[1];
-
-      r = 1.0 + prev_normal[0] * next_normal[0]
-          + prev_normal[1] * next_normal[1];
-
-      if (floatsEqual(r + 1, 1)) {
-         points_shifted[i][0] = points[i][0] + offset * prev_normal[0];
-         points_shifted[i][1] = points[i][1] + offset * prev_normal[1];
-      } else {
-         float k = offset / r;
-         points_shifted[i][0] = points[i][0] + k * normal_sum[0];
-         points_shifted[i][1] = points[i][1] + k * normal_sum[1];
-      }
-
-      prev_normal[0] = next_normal[0];
-      prev_normal[1] = next_normal[1];
-   }
-
-   points_shifted[np - 1][0] = points[np - 1][0] + offset * prev_normal[0];
-   points_shifted[np - 1][1] = points[np - 1][1] + offset * prev_normal[1];
-
-   bezier_init2v(shifted,
-                 points_shifted[map[0]], points_shifted[map[1]],
-                 points_shifted[map[2]], points_shifted[map[3]]);
-
-   return good_offset(orig, shifted, offset, threshold);
-}
-
-static VGboolean make_circle(const struct bezier *b, float offset, struct bezier *o)
-{
-   float normals[3][2];
-   float dist;
-   float angles[2];
-   float sign = 1.f;
-   int i;
-   float circle[3][2];
-
-   normals[0][0] = b->y2 - b->y1;
-   normals[0][1] = b->x1 - b->x2;
-   dist = sqrt(normals[0][0]*normals[0][0] + normals[0][1]*normals[0][1]);
-   if (floatsEqual(dist + 1, 1.f))
-      return VG_FALSE;
-   normals[0][0] /= dist;
-   normals[0][1] /= dist;
-
-   normals[2][0] = b->y4 - b->y3;
-   normals[2][1] = b->x3 - b->x4;
-   dist = sqrt(normals[2][0]*normals[2][0] + normals[2][1]*normals[2][1]);
-   if (floatsEqual(dist + 1, 1.f))
-      return VG_FALSE;
-   normals[2][0] /= dist;
-   normals[2][1] /= dist;
-
-   normals[1][0] = b->x1 - b->x2 - b->x3 + b->x4;
-   normals[1][1] = b->y1 - b->y2 - b->y3 + b->y4;
-   dist = -1*sqrt(normals[1][0]*normals[1][0] + normals[1][1]*normals[1][1]);
-   normals[1][0] /= dist;
-   normals[1][1] /= dist;
-
-   for (i = 0; i < 2; ++i) {
-      float cos_a = normals[i][0]*normals[i+1][0] + normals[i][1]*normals[i+1][1];
-      if (cos_a > 1.)
-         cos_a = 1.;
-      if (cos_a < -1.)
-         cos_a = -1;
-      angles[i] = acos(cos_a)/M_PI;
-   }
-
-   if (angles[0] + angles[1] > 1.) {
-      /* more than 180 degrees */
-      normals[1][0] = -normals[1][0];
-      normals[1][1] = -normals[1][1];
-      angles[0] = 1. - angles[0];
-      angles[1] = 1. - angles[1];
-      sign = -1.;
-   }
-
-   circle[0][0] = b->x1 + normals[0][0]*offset;
-   circle[0][1] = b->y1 + normals[0][1]*offset;
-
-   circle[1][0] = 0.5*(b->x1 + b->x4) + normals[1][0]*offset;
-   circle[1][1] = 0.5*(b->y1 + b->y4) + normals[1][1]*offset;
-
-   circle[2][0] = b->x4 + normals[2][0]*offset;
-   circle[2][1] = b->y4 + normals[2][1]*offset;
-
-   for (i = 0; i < 2; ++i) {
-      float kappa = 2.*KAPPA * sign * offset * angles[i];
-
-      o->x1 = circle[i][0];
-      o->y1 = circle[i][1];
-      o->x2 = circle[i][0] - normals[i][1]*kappa;
-      o->y2 = circle[i][1] + normals[i][0]*kappa;
-      o->x3 = circle[i+1][0] + normals[i+1][1]*kappa;
-      o->y3 = circle[i+1][1] - normals[i+1][0]*kappa;
-      o->x4 = circle[i+1][0];
-      o->y4 = circle[i+1][1];
-
-      ++o;
-   }
-   return VG_TRUE;
-}
-
-int bezier_translate_by_normal(struct bezier *bez,
-                               struct bezier *curves,
-                               int max_curves,
-                               float normal_len,
-                               float threshold)
-{
-   struct bezier beziers[10];
-   struct bezier *b, *o;
-
-   /* fixme: this should really be floatsEqual */
-   if (bez->x1 == bez->x2 && bez->x1 == bez->x3 && bez->x1 == bez->x4 &&
-       bez->y1 == bez->y2 && bez->y1 == bez->y3 && bez->y1 == bez->y4)
-      return 0;
-
-   --max_curves;
-redo:
-   beziers[0] = *bez;
-   b = beziers;
-   o = curves;
-
-   while (b >= beziers) {
-      int stack_segments = b - beziers + 1;
-      enum shift_result res;
-      if ((stack_segments == 10) || (o - curves == max_curves - stack_segments)) {
-         threshold *= 1.5;
-         if (threshold > 2.)
-            goto give_up;
-         goto redo;
-      }
-      res = shift(b, o, normal_len, threshold);
-      if (res == Discard) {
-         --b;
-      } else if (res == Ok) {
-         ++o;
-         --b;
-         continue;
-      } else if (res == Circle && max_curves - (o - curves) >= 2) {
-         /* add semi circle */
-         if (make_circle(b, normal_len, o))
-            o += 2;
-         --b;
-      } else {
-         split(b, b+1, b);
-         ++b;
-      }
-   }
-
-give_up:
-   while (b >= beziers) {
-      enum shift_result res = shift(b, o, normal_len, threshold);
-
-      /* if res isn't Ok or Split then *o is undefined */
-      if (res == Ok || res == Split)
-         ++o;
-
-      --b;
-   }
-
-   debug_assert(o - curves <= max_curves);
-   return o - curves;
-}
-
-void bezier_bounds(const struct bezier *bez,
-                   float *bounds/*x/y/width/height*/)
-{
-   float xmin = bez->x1;
-   float xmax = bez->x1;
-   float ymin = bez->y1;
-   float ymax = bez->y1;
-
-   if (bez->x2 < xmin)
-      xmin = bez->x2;
-   else if (bez->x2 > xmax)
-      xmax = bez->x2;
-   if (bez->x3 < xmin)
-      xmin = bez->x3;
-   else if (bez->x3 > xmax)
-      xmax = bez->x3;
-   if (bez->x4 < xmin)
-      xmin = bez->x4;
-   else if (bez->x4 > xmax)
-      xmax = bez->x4;
-
-   if (bez->y2 < ymin)
-      ymin = bez->y2;
-   else if (bez->y2 > ymax)
-      ymax = bez->y2;
-   if (bez->y3 < ymin)
-      ymin = bez->y3;
-   else if (bez->y3 > ymax)
-      ymax = bez->y3;
-   if (bez->y4 < ymin)
-      ymin = bez->y4;
-   else if (bez->y4 > ymax)
-      ymax = bez->y4;
-
-   bounds[0] = xmin; /* x */
-   bounds[1] = ymin; /* y */
-   bounds[2] = xmax - xmin; /* width */
-   bounds[3] = ymax - ymin; /* height */
-}
-
-void bezier_start_tangent(const struct bezier *bez,
-                          float *tangent)
-{
-   tangent[0] = bez->x1;
-   tangent[1] = bez->y1;
-   tangent[2] = bez->x2;
-   tangent[3] = bez->y2;
-
-   if (null_line(tangent)) {
-      tangent[0] = bez->x1;
-      tangent[1] = bez->y1;
-      tangent[2] = bez->x3;
-      tangent[3] = bez->y3;
-   }
-   if (null_line(tangent)) {
-      tangent[0] = bez->x1;
-      tangent[1] = bez->y1;
-      tangent[2] = bez->x4;
-      tangent[3] = bez->y4;
-   }
-}
-
-
-static INLINE VGfloat bezier_t_at_length(struct bezier *bez,
-                                         VGfloat at_length,
-                                         VGfloat error)
-{
-   VGfloat len = bezier_length(bez, error);
-   VGfloat t   = 1.0;
-   VGfloat last_bigger = 1.;
-
-   if (at_length > len || floatsEqual(at_length, len))
-      return t;
-
-   if (floatIsZero(at_length))
-      return 0.f;
-
-   t *= 0.5;
-   while (1) {
-      struct bezier right = *bez;
-      struct bezier left;
-      VGfloat tmp_len;
-      split_left(&right, t, &left);
-      tmp_len = bezier_length(&left, error);
-      if (ABS(tmp_len - at_length) < error)
-         break;
-
-      if (tmp_len < at_length) {
-         t += (last_bigger - t)*.5;
-      } else {
-         last_bigger = t;
-         t -= t*.5;
-      }
-   }
-   return t;
-}
-
-void bezier_point_at_length(struct bezier *bez,
-                            float length,
-                            float *point,
-                            float *normal)
-{
-   /* ~0.000001 seems to be required to pass G2080x tests */
-   VGfloat t = bezier_t_at_length(bez, length, 0.000001);
-   bezier_point_at(bez, t, point);
-   bezier_normal_at(bez, t, normal);
-   vector_unit(normal);
-}
-
-void bezier_point_at_t(struct bezier *bez, float t,
-                       float *point, float *normal)
-{
-   bezier_point_at(bez, t, point);
-   bezier_normal_at(bez, t, normal);
-   vector_unit(normal);
-}
-
-void bezier_exact_bounds(const struct bezier *bez,
-                         float *bounds/*x/y/width/height*/)
-{
-   struct polygon *poly = polygon_create(64);
-   polygon_vertex_append(poly, bez->x1, bez->y1);
-   bezier_add_to_polygon(bez, poly);
-   polygon_bounding_rect(poly, bounds);
-   polygon_destroy(poly);
-}
-
diff --git a/src/gallium/state_trackers/vega/bezier.h b/src/gallium/state_trackers/vega/bezier.h
deleted file mode 100644 (file)
index e066660..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef BEZIER_H
-#define BEZIER_H
-
-struct polygon;
-struct matrix;
-
-struct bezier {
-    float x1, y1;
-    float x2, y2;
-    float x3, y3;
-    float x4, y4;
-};
-
-
-#define BEZIER_DEFAULT_ERROR 0.01
-
-/* kappa as being l of a circle with r = 1, we can emulate any
- * circle of radius r by using the formula
- * l = r . kappa
- * More at:
- * http://www.whizkidtech.redprince.net/bezier/circle/ */
-#define KAPPA 0.5522847498
-
-void bezier_init(struct bezier *bez,
-                 float x1, float y1,
-                 float x2, float y2,
-                 float x3, float y3,
-                 float x4, float y4);
-
-struct polygon *bezier_to_polygon(struct bezier *bez);
-void bezier_add_to_polygon(const struct bezier *bez,
-                           struct polygon *poly);
-float bezier_length(struct bezier *bez, float error);
-void bezier_transform(struct bezier *bez,
-                      struct matrix *mat);
-
-int bezier_translate_by_normal(struct bezier *b,
-                               struct bezier *curves,
-                               int max_curves,
-                               float normal_len,
-                               float threshold);
-void bezier_bounds(const struct bezier *bez,
-                   float *bounds/*x/y/width/height*/);
-void bezier_exact_bounds(const struct bezier *bez,
-                         float *bounds/*x/y/width/height*/);
-
-void bezier_start_tangent(const struct bezier *bez,
-                          float *tangent);
-
-void bezier_point_at_length(struct bezier *bez, float length,
-                            float *point, float *normal);
-void bezier_point_at_t(struct bezier *bez, float t,
-                       float *point, float *normal);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/handle.c b/src/gallium/state_trackers/vega/handle.c
deleted file mode 100644 (file)
index 11eedd9..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2010 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-
-#include "handle.h"
-#include "util/u_hash.h"
-#include "util/u_hash_table.h"
-
-
-/**
- * Hash keys are 32-bit VGHandles
- */
-
-struct util_hash_table *handle_hash = NULL;
-
-
-static unsigned next_handle = 1;
-
-
-static unsigned
-hash_func(void *key)
-{
-   /* XXX this kind of ugly */
-   intptr_t ip = pointer_to_intptr(key);
-   return (unsigned) (ip & 0xffffffff);
-}
-
-
-static int
-compare(void *key1, void *key2)
-{
-   if (key1 < key2)
-      return -1;
-   else if (key1 > key2)
-      return +1;
-   else
-      return 0;
-}
-
-
-void
-init_handles(void)
-{
-   if (!handle_hash)
-      handle_hash = util_hash_table_create(hash_func, compare);
-}
-
-
-void
-free_handles(void)
-{
-   /* XXX destroy */
-}
-
-
-VGHandle
-create_handle(void *object)
-{
-   VGHandle h = next_handle++;
-   util_hash_table_set(handle_hash, intptr_to_pointer(h), object);
-   return h;
-}
-
-
-void
-destroy_handle(VGHandle h)
-{
-   util_hash_table_remove(handle_hash, intptr_to_pointer(h));
-}
-
diff --git a/src/gallium/state_trackers/vega/handle.h b/src/gallium/state_trackers/vega/handle.h
deleted file mode 100644 (file)
index 75f2ee8..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2010 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-
-/**
- * Convert opaque VG object handles into pointers and vice versa.
- * XXX This is not yet 64-bit safe!  All VG handles are 32 bits in size.
- */
-
-
-#ifndef HANDLE_H
-#define HANDLE_H
-
-#include "pipe/p_compiler.h"
-#include "util/u_debug.h"
-#include "util/u_hash_table.h"
-#include "util/u_pointer.h"
-
-#include "VG/openvg.h"
-#include "vg_context.h"
-
-
-extern struct util_hash_table *handle_hash;
-
-
-struct vg_mask_layer;
-struct vg_font;
-struct vg_image;
-struct vg_paint;
-struct path;
-
-
-extern void
-init_handles(void);
-
-
-extern void
-free_handles(void);
-
-
-extern VGHandle
-create_handle(void *object);
-
-
-extern void
-destroy_handle(VGHandle h);
-
-
-static INLINE VGHandle
-object_to_handle(struct vg_object *obj)
-{
-   return obj ? obj->handle : VG_INVALID_HANDLE;
-}
-
-
-static INLINE VGHandle
-image_to_handle(struct vg_image *img)
-{
-   /* vg_image is derived from vg_object */
-   return object_to_handle((struct vg_object *) img);
-}
-
-
-static INLINE VGHandle
-masklayer_to_handle(struct vg_mask_layer *mask)
-{
-   /* vg_object is derived from vg_object */
-   return object_to_handle((struct vg_object *) mask);
-}
-
-
-static INLINE VGHandle
-font_to_handle(struct vg_font *font)
-{
-   return object_to_handle((struct vg_object *) font);
-}
-
-
-static INLINE VGHandle
-paint_to_handle(struct vg_paint *paint)
-{
-   return object_to_handle((struct vg_object *) paint);
-}
-
-
-static INLINE VGHandle
-path_to_handle(struct path *path)
-{
-   return object_to_handle((struct vg_object *) path);
-}
-
-
-static INLINE void *
-handle_to_pointer(VGHandle h)
-{
-   void *v = util_hash_table_get(handle_hash, intptr_to_pointer(h));
-#ifdef DEBUG
-   if (v) {
-      struct vg_object *obj = (struct vg_object *) v;
-      assert(obj->handle == h);
-   }
-#endif
-   return v;
-}
-
-
-static INLINE struct vg_font *
-handle_to_font(VGHandle h)
-{
-   return (struct vg_font *) handle_to_pointer(h);
-}
-
-
-static INLINE struct vg_image *
-handle_to_image(VGHandle h)
-{
-   return (struct vg_image *) handle_to_pointer(h);
-}
-
-
-static INLINE struct vg_mask_layer *
-handle_to_masklayer(VGHandle h)
-{
-   return (struct vg_mask_layer *) handle_to_pointer(h);
-}
-
-
-static INLINE struct vg_object *
-handle_to_object(VGHandle h)
-{
-   return (struct vg_object *) handle_to_pointer(h);
-}
-
-
-static INLINE struct vg_paint *
-handle_to_paint(VGHandle h)
-{
-   return (struct vg_paint *) handle_to_pointer(h);
-}
-
-
-static INLINE struct path *
-handle_to_path(VGHandle h)
-{
-   return (struct path *) handle_to_pointer(h);
-}
-
-
-#endif /* HANDLE_H */
diff --git a/src/gallium/state_trackers/vega/image.c b/src/gallium/state_trackers/vega/image.c
deleted file mode 100644 (file)
index 4434550..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "image.h"
-
-#include "vg_translate.h"
-#include "vg_context.h"
-#include "matrix.h"
-#include "renderer.h"
-#include "util_array.h"
-#include "api_consts.h"
-#include "shader.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
-#include "util/u_inlines.h"
-#include "util/u_format.h"
-#include "util/u_tile.h"
-#include "util/u_memory.h"
-#include "util/u_math.h"
-#include "util/u_sampler.h"
-#include "util/u_surface.h"
-
-static enum pipe_format vg_format_to_pipe(VGImageFormat format)
-{
-   switch(format) {
-   case VG_sRGB_565:
-      return PIPE_FORMAT_B5G6R5_UNORM;
-   case VG_sRGBA_5551:
-      return PIPE_FORMAT_B5G5R5A1_UNORM;
-   case VG_sRGBA_4444:
-      return PIPE_FORMAT_B4G4R4A4_UNORM;
-   case VG_sL_8:
-   case VG_lL_8:
-      return PIPE_FORMAT_L8_UNORM;
-   case VG_BW_1:
-      return PIPE_FORMAT_B8G8R8A8_UNORM;
-   case VG_A_8:
-      return PIPE_FORMAT_A8_UNORM;
-#ifdef OPENVG_VERSION_1_1
-   case VG_A_1:
-   case VG_A_4:
-      return PIPE_FORMAT_A8_UNORM;
-#endif
-   default:
-      return PIPE_FORMAT_B8G8R8A8_UNORM;
-   }
-}
-
-static INLINE void vg_sync_size(VGfloat *src_loc, VGfloat *dst_loc)
-{
-   src_loc[2] = MIN2(src_loc[2], dst_loc[2]);
-   src_loc[3] = MIN2(src_loc[3], dst_loc[3]);
-   dst_loc[2] = src_loc[2];
-   dst_loc[3] = src_loc[3];
-}
-
-static void vg_get_copy_coords(VGfloat *src_loc,
-                               VGfloat src_width, VGfloat src_height,
-                               VGfloat *dst_loc,
-                               VGfloat dst_width, VGfloat dst_height)
-{
-   VGfloat dst_bounds[4], src_bounds[4];
-   VGfloat src_shift[4], dst_shift[4], shift[4];
-
-   dst_bounds[0] = 0.f;
-   dst_bounds[1] = 0.f;
-   dst_bounds[2] = dst_width;
-   dst_bounds[3] = dst_height;
-
-   src_bounds[0] = 0.f;
-   src_bounds[1] = 0.f;
-   src_bounds[2] = src_width;
-   src_bounds[3] = src_height;
-
-   vg_bound_rect(src_loc, src_bounds, src_shift);
-   vg_bound_rect(dst_loc, dst_bounds, dst_shift);
-   shift[0] = src_shift[0] - dst_shift[0];
-   shift[1] = src_shift[1] - dst_shift[1];
-
-   if (shift[0] < 0)
-      vg_shift_rectx(src_loc, src_bounds, -shift[0]);
-   else
-      vg_shift_rectx(dst_loc, dst_bounds, shift[0]);
-
-   if (shift[1] < 0)
-      vg_shift_recty(src_loc, src_bounds, -shift[1]);
-   else
-      vg_shift_recty(dst_loc, dst_bounds, shift[1]);
-
-   vg_sync_size(src_loc, dst_loc);
-}
-
-static void vg_copy_texture(struct vg_context *ctx,
-                            struct pipe_resource *dst, VGint dx, VGint dy,
-                            struct pipe_sampler_view *src, VGint sx, VGint sy,
-                            VGint width, VGint height)
-{
-   VGfloat dst_loc[4], src_loc[4];
-
-   dst_loc[0] = dx;
-   dst_loc[1] = dy;
-   dst_loc[2] = width;
-   dst_loc[3] = height;
-
-   src_loc[0] = sx;
-   src_loc[1] = sy;
-   src_loc[2] = width;
-   src_loc[3] = height;
-
-   vg_get_copy_coords(src_loc, src->texture->width0, src->texture->height0,
-                      dst_loc, dst->width0, dst->height0);
-
-   if (src_loc[2] >= 0 && src_loc[3] >= 0 &&
-       dst_loc[2] >= 0 && dst_loc[3] >= 0) {
-      struct pipe_surface *surf, surf_tmpl;
-
-      /* get the destination surface */
-      u_surface_default_template(&surf_tmpl, dst);
-      surf = ctx->pipe->create_surface(ctx->pipe, dst, &surf_tmpl);
-      if (surf && renderer_copy_begin(ctx->renderer, surf, VG_TRUE, src)) {
-         renderer_copy(ctx->renderer,
-               dst_loc[0], dst_loc[1], dst_loc[2], dst_loc[3],
-               src_loc[0], src_loc[1], src_loc[2], src_loc[3]);
-         renderer_copy_end(ctx->renderer);
-      }
-
-      pipe_surface_reference(&surf, NULL);
-   }
-}
-
-void vg_copy_surface(struct vg_context *ctx,
-                     struct pipe_surface *dst, VGint dx, VGint dy,
-                     struct pipe_surface *src, VGint sx, VGint sy,
-                     VGint width, VGint height)
-{
-   VGfloat dst_loc[4], src_loc[4];
-
-   dst_loc[0] = dx;
-   dst_loc[1] = dy;
-   dst_loc[2] = width;
-   dst_loc[3] = height;
-
-   src_loc[0] = sx;
-   src_loc[1] = sy;
-   src_loc[2] = width;
-   src_loc[3] = height;
-
-   vg_get_copy_coords(src_loc, src->width, src->height,
-                      dst_loc, dst->width, dst->height);
-
-   if (src_loc[2] > 0 && src_loc[3] > 0 &&
-       dst_loc[2] > 0 && dst_loc[3] > 0) {
-      if (src == dst)
-         renderer_copy_surface(ctx->renderer,
-                               src,
-                               src_loc[0],
-                               src->height - (src_loc[1] + src_loc[3]),
-                               src_loc[0] + src_loc[2],
-                               src->height - src_loc[1],
-                               dst,
-                               dst_loc[0],
-                               dst->height - (dst_loc[1] + dst_loc[3]),
-                               dst_loc[0] + dst_loc[2],
-                               dst->height - dst_loc[1],
-                               0, 0);
-      else
-         renderer_copy_surface(ctx->renderer,
-                               src,
-                               src_loc[0],
-                               src->height - src_loc[1],
-                               src_loc[0] + src_loc[2],
-                               src->height - (src_loc[1] + src_loc[3]),
-                               dst,
-                               dst_loc[0],
-                               dst->height - (dst_loc[1] + dst_loc[3]),
-                               dst_loc[0] + dst_loc[2],
-                               dst->height - dst_loc[1],
-                               0, 0);
-   }
-
-}
-
-static struct pipe_resource *image_texture(struct vg_image *img)
-{
-   struct pipe_resource *tex = img->sampler_view->texture;
-   return tex;
-}
-
-
-static void image_cleari(struct vg_image *img, VGint clear_colori,
-                         VGint x, VGint y, VGint width, VGint height)
-{
-   VGint *clearbuf;
-   VGint i;
-   VGfloat dwidth, dheight;
-
-   clearbuf = malloc(sizeof(VGint)*width*height);
-   for (i = 0; i < width*height; ++i)
-      clearbuf[i] = clear_colori;
-
-   dwidth = MIN2(width, img->width);
-   dheight = MIN2(height, img->height);
-
-   image_sub_data(img, clearbuf, width * sizeof(VGint),
-                  VG_sRGBA_8888,
-                  x, y, dwidth, dheight);
-   free(clearbuf);
-}
-
-struct vg_image * image_create(VGImageFormat format,
-                               VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-   struct vg_image *image = CALLOC_STRUCT(vg_image);
-   enum pipe_format pformat = vg_format_to_pipe(format);
-   struct pipe_resource pt, *newtex;
-   struct pipe_sampler_view view_templ;
-   struct pipe_sampler_view *view;
-   struct pipe_screen *screen = ctx->pipe->screen;
-
-   vg_init_object(&image->base, ctx, VG_OBJECT_IMAGE);
-
-   image->format = format;
-   image->width = width;
-   image->height = height;
-
-   image->sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   image->sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   image->sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   image->sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-   image->sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-   image->sampler.normalized_coords = 1;
-
-   assert(screen->is_format_supported(screen, pformat, PIPE_TEXTURE_2D,
-                                      0, PIPE_BIND_SAMPLER_VIEW));
-
-   memset(&pt, 0, sizeof(pt));
-   pt.target = PIPE_TEXTURE_2D;
-   pt.format = pformat;
-   pt.last_level = 0;
-   pt.width0 = width;
-   pt.height0 = height;
-   pt.depth0 = 1;
-   pt.array_size = 1;
-   pt.bind = PIPE_BIND_SAMPLER_VIEW;
-
-   newtex = screen->resource_create(screen, &pt);
-
-   debug_assert(newtex);
-
-   u_sampler_view_default_template(&view_templ, newtex, newtex->format);
-   /* R, G, and B are treated as 1.0 for alpha-only formats in OpenVG */
-   if (newtex->format == PIPE_FORMAT_A8_UNORM) {
-      view_templ.swizzle_r = PIPE_SWIZZLE_ONE;
-      view_templ.swizzle_g = PIPE_SWIZZLE_ONE;
-      view_templ.swizzle_b = PIPE_SWIZZLE_ONE;
-   }
-
-   view = pipe->create_sampler_view(pipe, newtex, &view_templ);
-   /* want the texture to go away if the view is freed */
-   pipe_resource_reference(&newtex, NULL);
-
-   image->sampler_view = view;
-
-   vg_context_add_object(ctx, &image->base);
-
-   image_cleari(image, 0, 0, 0, image->width, image->height);
-   return image;
-}
-
-void image_destroy(struct vg_image *img)
-{
-   struct vg_context *ctx = vg_current_context();
-   vg_context_remove_object(ctx, &img->base);
-
-
-   if (img->parent) {
-      /* remove img from the parent child array */
-      int idx;
-      struct vg_image **array =
-         (struct vg_image **)img->parent->children_array->data;
-
-      for (idx = 0; idx < img->parent->children_array->num_elements; ++idx) {
-         struct vg_image *child = array[idx];
-         if (child == img) {
-            break;
-         }
-      }
-      debug_assert(idx < img->parent->children_array->num_elements);
-      array_remove_element(img->parent->children_array, idx);
-   }
-
-   if (img->children_array && img->children_array->num_elements) {
-      /* reparent the children */
-      VGint i;
-      struct vg_image *parent = img->parent;
-      struct vg_image **children =
-         (struct vg_image **)img->children_array->data;
-      if (!parent) {
-         VGint min_x = children[0]->x;
-         parent = children[0];
-
-         for (i = 1; i < img->children_array->num_elements; ++i) {
-            struct vg_image *child = children[i];
-            if (child->x < min_x) {
-               parent = child;
-            }
-         }
-      }
-
-      for (i = 0; i < img->children_array->num_elements; ++i) {
-         struct vg_image *child = children[i];
-         if (child != parent) {
-            child->parent = parent;
-            if (!parent->children_array) {
-               parent->children_array = array_create(
-                  sizeof(struct vg_image*));
-            }
-            array_append_data(parent->children_array,
-                              &child, 1);
-         } else
-            child->parent = NULL;
-      }
-      array_destroy(img->children_array);
-   }
-
-   vg_free_object(&img->base);
-
-   pipe_sampler_view_reference(&img->sampler_view, NULL);
-   FREE(img);
-}
-
-void image_clear(struct vg_image *img,
-                 VGint x, VGint y, VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGfloat *clear_colorf = ctx->state.vg.clear_color;
-   VGubyte r, g, b ,a;
-   VGint clear_colori;
-   /* FIXME: this is very nasty */
-   r = float_to_ubyte(clear_colorf[0]);
-   g = float_to_ubyte(clear_colorf[1]);
-   b = float_to_ubyte(clear_colorf[2]);
-   a = float_to_ubyte(clear_colorf[3]);
-   clear_colori = r << 24 | g << 16 | b << 8 | a;
-   image_cleari(img, clear_colori, x, y, width, height);
-}
-
-void image_sub_data(struct vg_image *image,
-                    const void * data,
-                    VGint dataStride,
-                    VGImageFormat dataFormat,
-                    VGint x, VGint y,
-                    VGint width, VGint height)
-{
-   const VGint yStep = 1;
-   VGubyte *src = (VGubyte *)data;
-   VGfloat temp[VEGA_MAX_IMAGE_WIDTH][4];
-   VGfloat *df = (VGfloat*)temp;
-   VGint i;
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_resource *texture = image_texture(image);
-   VGint xoffset = 0, yoffset = 0;
-
-   if (x < 0) {
-      xoffset -= x;
-      width += x;
-      x = 0;
-   }
-   if (y < 0) {
-      yoffset -= y;
-      height += y;
-      y = 0;
-   }
-
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (x > image->width || y > image->width) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   if (x + width > image->width) {
-      width = image->width - x;
-   }
-
-   if (y + height > image->height) {
-      height = image->height - y;
-   }
-
-   { /* upload color_data */
-      struct pipe_transfer *transfer;
-      void *map = pipe_transfer_map(pipe, texture, 0, 0,
-                                    PIPE_TRANSFER_WRITE, 0, 0,
-                                    texture->width0, texture->height0,
-                                    &transfer);
-      src += (dataStride * yoffset);
-      for (i = 0; i < height; i++) {
-         _vega_unpack_float_span_rgba(ctx, width, xoffset, src, dataFormat, temp);
-         pipe_put_tile_rgba(transfer, map, x+image->x, y+image->y, width, 1, df);
-         y += yStep;
-         src += dataStride;
-      }
-      pipe->transfer_unmap(pipe, transfer);
-   }
-}
-
-void image_get_sub_data(struct vg_image * image,
-                        void * data,
-                        VGint dataStride,
-                        VGImageFormat dataFormat,
-                        VGint sx, VGint sy,
-                        VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-   VGfloat temp[VEGA_MAX_IMAGE_WIDTH][4];
-   VGfloat *df = (VGfloat*)temp;
-   VGint y = 0, yStep = 1;
-   VGint i;
-   VGubyte *dst = (VGubyte *)data;
-
-   {
-      struct pipe_transfer *transfer;
-      void *map =
-         pipe_transfer_map(pipe,
-                           image->sampler_view->texture,  0, 0,
-                           PIPE_TRANSFER_READ,
-                           0, 0,
-                           image->x + image->width,
-                           image->y + image->height, &transfer);
-      /* Do a row at a time to flip image data vertically */
-      for (i = 0; i < height; i++) {
-#if 0
-         debug_printf("%d-%d  == %d\n", sy, height, y);
-#endif
-         pipe_get_tile_rgba(transfer, map, sx+image->x, y, width, 1, df);
-         y += yStep;
-         _vega_pack_rgba_span_float(ctx, width, temp, dataFormat, dst);
-         dst += dataStride;
-      }
-
-      pipe->transfer_unmap(pipe, transfer);
-   }
-}
-
-struct vg_image * image_child_image(struct vg_image *parent,
-                                    VGint x, VGint y,
-                                    VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_image *image = CALLOC_STRUCT(vg_image);
-
-   vg_init_object(&image->base, ctx, VG_OBJECT_IMAGE);
-
-   image->x = parent->x + x;
-   image->y = parent->y + y;
-   image->width = width;
-   image->height = height;
-   image->parent = parent;
-   image->sampler_view = NULL;
-   pipe_sampler_view_reference(&image->sampler_view,
-                               parent->sampler_view);
-
-   image->sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   image->sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   image->sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   image->sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-   image->sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-   image->sampler.normalized_coords = 1;
-
-   if (!parent->children_array)
-      parent->children_array = array_create(
-         sizeof(struct vg_image*));
-
-   array_append_data(parent->children_array,
-                     &image, 1);
-
-   vg_context_add_object(ctx, &image->base);
-
-   return image;
-}
-
-void image_copy(struct vg_image *dst, VGint dx, VGint dy,
-                struct vg_image *src, VGint sx, VGint sy,
-                VGint width, VGint height,
-                VGboolean dither)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (width <= 0 || height <= 0) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-   vg_copy_texture(ctx, dst->sampler_view->texture, dst->x + dx, dst->y + dy,
-                   src->sampler_view, src->x + sx, src->y + sy, width, height);
-}
-
-void image_draw(struct vg_image *img, struct matrix *matrix)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix paint_matrix;
-   VGfloat x1, y1;
-   VGfloat x2, y2;
-   VGfloat x3, y3;
-   VGfloat x4, y4;
-
-   if (!vg_get_paint_matrix(ctx,
-                            &ctx->state.vg.fill_paint_to_user_matrix,
-                            matrix,
-                            &paint_matrix))
-      return;
-
-   x1 = 0;
-   y1 = 0;
-   x2 = img->width;
-   y2 = 0;
-   x3 = img->width;
-   y3 = img->height;
-   x4 = 0;
-   y4 = img->height;
-
-   shader_set_surface_matrix(ctx->shader, matrix);
-   shader_set_drawing_image(ctx->shader, VG_TRUE);
-   shader_set_paint(ctx->shader, ctx->state.vg.fill_paint);
-   shader_set_paint_matrix(ctx->shader, &paint_matrix);
-   shader_set_image(ctx->shader, img);
-   shader_bind(ctx->shader);
-
-   renderer_texture_quad(ctx->renderer, image_texture(img),
-                         img->x, img->y, img->x + img->width, img->y + img->height,
-                         x1, y1, x2, y2, x3, y3, x4, y4);
-}
-
-void image_set_pixels(VGint dx, VGint dy,
-                      struct vg_image *src, VGint sx, VGint sy,
-                      VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_surface *surf, surf_tmpl;
-   struct st_renderbuffer *strb = ctx->draw_buffer->strb;
-
-   u_surface_default_template(&surf_tmpl, image_texture(src));
-   surf = pipe->create_surface(pipe, image_texture(src), &surf_tmpl);
-
-   vg_copy_surface(ctx, strb->surface, dx, dy,
-                   surf, sx+src->x, sy+src->y, width, height);
-
-   pipe->surface_destroy(pipe, surf);
-}
-
-void image_get_pixels(struct vg_image *dst, VGint dx, VGint dy,
-                      VGint sx, VGint sy,
-                      VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_surface *surf, surf_tmpl;
-   struct st_renderbuffer *strb = ctx->draw_buffer->strb;
-
-   /* flip the y coordinates */
-   /*dy = dst->height - dy - height;*/
-
-   u_surface_default_template(&surf_tmpl, image_texture(dst));
-   surf = pipe->create_surface(pipe, image_texture(dst), &surf_tmpl);
-
-   vg_copy_surface(ctx, surf, dst->x + dx, dst->y + dy,
-                   strb->surface, sx, sy, width, height);
-
-   pipe_surface_reference(&surf, NULL);
-}
-
-
-VGboolean vg_image_overlaps(struct vg_image *dst,
-                            struct vg_image *src)
-{
-   if (dst == src || dst->parent == src ||
-       dst == src->parent)
-      return VG_TRUE;
-   if (dst->parent && dst->parent == src->parent) {
-      VGfloat left1 = dst->x;
-      VGfloat left2 = src->x;
-      VGfloat right1 = dst->x + dst->width;
-      VGfloat right2 = src->x + src->width;
-      VGfloat bottom1 = dst->y;
-      VGfloat bottom2 = src->y;
-      VGfloat top1 = dst->y + dst->height;
-      VGfloat top2 = src->y + src->height;
-
-      return !(left2 > right1 || right2 < left1 ||
-               top2 > bottom1 || bottom2 < top1);
-   }
-   return VG_FALSE;
-}
-
-VGint image_bind_samplers(struct vg_image *img, struct pipe_sampler_state **samplers,
-                          struct pipe_sampler_view **sampler_views)
-{
-   img->sampler.min_img_filter = image_sampler_filter(img->base.ctx);
-   img->sampler.mag_img_filter = image_sampler_filter(img->base.ctx);
-   samplers[3] = &img->sampler;
-   sampler_views[3] = img->sampler_view;
-   return 1;
-}
-
-VGint image_sampler_filter(struct vg_context *ctx)
-{
-    switch(ctx->state.vg.image_quality) {
-    case VG_IMAGE_QUALITY_NONANTIALIASED:
-       return PIPE_TEX_FILTER_NEAREST;
-       break;
-    case VG_IMAGE_QUALITY_FASTER:
-       return PIPE_TEX_FILTER_NEAREST;
-       break;
-    case VG_IMAGE_QUALITY_BETTER:
-       /* possibly use anisotropic filtering */
-       return PIPE_TEX_FILTER_LINEAR;
-       break;
-    default:
-       debug_printf("Unknown image quality");
-    }
-    return PIPE_TEX_FILTER_NEAREST;
-}
diff --git a/src/gallium/state_trackers/vega/image.h b/src/gallium/state_trackers/vega/image.h
deleted file mode 100644 (file)
index 391c048..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef IMAGES_H
-#define IMAGES_H
-
-#include "vg_context.h"
-#include "pipe/p_state.h"
-
-struct pipe_resource;
-struct array;
-struct vg_context;
-struct pipe_surface;
-
-struct vg_image {
-   struct vg_object base;
-   VGImageFormat format;
-   VGint x, y;
-   VGint width, height;
-
-   struct vg_image *parent;
-
-   struct pipe_sampler_view *sampler_view;
-   struct pipe_sampler_state sampler;
-
-   struct array *children_array;
-};
-
-struct vg_image *image_create(VGImageFormat format,
-                              VGint width, VGint height);
-void image_destroy(struct vg_image *img);
-
-void image_clear(struct vg_image *img,
-                 VGint x, VGint y, VGint width, VGint height);
-
-void image_sub_data(struct vg_image *image,
-                    const void * data,
-                    VGint dataStride,
-                    VGImageFormat dataFormat,
-                    VGint x, VGint y,
-                    VGint width, VGint height);
-
-void image_get_sub_data(struct vg_image * image,
-                        void * data,
-                        VGint dataStride,
-                        VGImageFormat dataFormat,
-                        VGint x, VGint y,
-                        VGint width, VGint height);
-
-struct vg_image *image_child_image(struct vg_image *parent,
-                                   VGint x, VGint y,
-                                   VGint width, VGint height);
-
-void image_copy(struct vg_image *dst, VGint dx, VGint dy,
-                struct vg_image *src, VGint sx, VGint sy,
-                VGint width, VGint height,
-                VGboolean dither);
-
-void image_draw(struct vg_image *img, struct matrix *matrix);
-
-void image_set_pixels(VGint dx, VGint dy,
-                      struct vg_image *src, VGint sx, VGint sy,
-                      VGint width, VGint height);
-void image_get_pixels(struct vg_image *dst, VGint dx, VGint dy,
-                      VGint sx, VGint sy,
-                      VGint width, VGint height);
-
-VGint image_bind_samplers(struct vg_image *dst, struct pipe_sampler_state **samplers,
-                          struct pipe_sampler_view **sampler_views);
-
-VGboolean vg_image_overlaps(struct vg_image *dst,
-                            struct vg_image *src);
-
-VGint image_sampler_filter(struct vg_context *ctx);
-
-void vg_copy_surface(struct vg_context *ctx,
-                     struct pipe_surface *dst, VGint dx, VGint dy,
-                     struct pipe_surface *src, VGint sx, VGint sy,
-                     VGint width, VGint height);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/mask.c b/src/gallium/state_trackers/vega/mask.c
deleted file mode 100644 (file)
index ca8edd0..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "mask.h"
-
-#include "path.h"
-#include "image.h"
-#include "shaders_cache.h"
-#include "renderer.h"
-#include "asm_util.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
-#include "util/u_inlines.h"
-#include "util/u_format.h"
-#include "util/u_memory.h"
-#include "util/u_surface.h"
-#include "util/u_sampler.h"
-
-struct vg_mask_layer {
-   struct vg_object base;
-
-   VGint width;
-   VGint height;
-
-   struct pipe_sampler_view *sampler_view;
-};
-
-static INLINE VGboolean
-intersect_rectangles(VGint dwidth, VGint dheight,
-                     VGint swidth, VGint sheight,
-                     VGint tx, VGint ty,
-                     VGint twidth, VGint theight,
-                     VGint *offsets,
-                     VGint *location)
-{
-   if (tx + twidth <= 0 || tx >= dwidth)
-      return VG_FALSE;
-   if (ty + theight <= 0 || ty >= dheight)
-      return VG_FALSE;
-
-   offsets[0] = 0;
-   offsets[1] = 0;
-   location[0] = tx;
-   location[1] = ty;
-
-   if (tx < 0) {
-      offsets[0] -= tx;
-      location[0] = 0;
-
-      location[2] = MIN2(tx + swidth, MIN2(dwidth, tx + twidth));
-      offsets[2] = location[2];
-   } else {
-      offsets[2] = MIN2(twidth, MIN2(dwidth - tx, swidth ));
-      location[2] = offsets[2];
-   }
-
-   if (ty < 0) {
-      offsets[1] -= ty;
-      location[1] = 0;
-
-      location[3] = MIN2(ty + sheight, MIN2(dheight, ty + theight));
-      offsets[3] = location[3];
-   } else {
-      offsets[3] = MIN2(theight, MIN2(dheight - ty, sheight));
-      location[3] = offsets[3];
-   }
-
-   return VG_TRUE;
-}
-
-#if DEBUG_MASKS
-static void read_alpha_mask(void * data, VGint dataStride,
-                            VGImageFormat dataFormat,
-                            VGint sx, VGint sy,
-                            VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct st_renderbuffer *strb = stfb->alpha_mask;
-
-   VGfloat temp[VEGA_MAX_IMAGE_WIDTH][4];
-   VGfloat *df = (VGfloat*)temp;
-   VGint y = (stfb->height - sy) - 1, yStep = -1;
-   VGint i;
-   VGubyte *dst = (VGubyte *)data;
-   VGint xoffset = 0, yoffset = 0;
-
-   if (sx < 0) {
-      xoffset = -sx;
-      xoffset *= _vega_size_for_format(dataFormat);
-      width += sx;
-      sx = 0;
-   }
-   if (sy < 0) {
-      yoffset = -sy;
-      height += sy;
-      sy = 0;
-      y = (stfb->height - sy) - 1;
-      yoffset *= dataStride;
-   }
-
-   {
-      struct pipe_surface *surf;
-
-      surf = pipe->create_surface(pipe, strb->texture,  0, 0, 0,
-                                  PIPE_BIND_TRANSFER_READ);
-
-      /* Do a row at a time to flip image data vertically */
-      for (i = 0; i < height; i++) {
-#if 0
-         debug_printf("%d-%d  == %d\n", sy, height, y);
-#endif
-         pipe_get_tile_rgba(surf, sx, y, width, 1, df);
-         y += yStep;
-         _vega_pack_rgba_span_float(ctx, width, temp, dataFormat,
-                                    dst + yoffset + xoffset);
-         dst += dataStride;
-      }
-
-      pipe_surface_reference(&surf, NULL);
-   }
-}
-
-void save_alpha_to_file(const char *filename)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   VGint *data;
-   int i, j;
-
-   data = malloc(sizeof(int) * stfb->width * stfb->height);
-   read_alpha_mask(data, stfb->width * sizeof(int),
-                   VG_sRGBA_8888,
-                   0, 0, stfb->width, stfb->height);
-   fprintf(stderr, "/*---------- start */\n");
-   fprintf(stderr, "const int image_width = %d;\n",
-           stfb->width);
-   fprintf(stderr, "const int image_height = %d;\n",
-           stfb->height);
-   fprintf(stderr, "const int image_data = {\n");
-   for (i = 0; i < stfb->height; ++i) {
-      for (j = 0; j < stfb->width; ++j) {
-         int rgba = data[i * stfb->height + j];
-         int argb = 0;
-         argb = (rgba >> 8);
-         argb |= ((rgba & 0xff) << 24);
-         fprintf(stderr, "0x%x, ", argb);
-      }
-      fprintf(stderr, "\n");
-   }
-   fprintf(stderr, "};\n");
-   fprintf(stderr, "/*---------- end */\n");
-}
-#endif
-
-/* setup mask shader */
-static void *setup_mask_operation(VGMaskOperation operation)
-{
-   struct vg_context *ctx = vg_current_context();
-   void *shader = 0;
-
-   switch (operation) {
-   case VG_UNION_MASK: {
-      if (!ctx->mask.union_fs) {
-         ctx->mask.union_fs = shader_create_from_text(ctx->pipe,
-                                                      union_mask_asm,
-                                                      200,
-                                                      PIPE_SHADER_FRAGMENT);
-      }
-      shader = ctx->mask.union_fs->driver;
-   }
-      break;
-   case VG_INTERSECT_MASK: {
-      if (!ctx->mask.intersect_fs) {
-         ctx->mask.intersect_fs = shader_create_from_text(ctx->pipe,
-                                                          intersect_mask_asm,
-                                                          200,
-                                                          PIPE_SHADER_FRAGMENT);
-      }
-      shader = ctx->mask.intersect_fs->driver;
-   }
-      break;
-   case VG_SUBTRACT_MASK: {
-      if (!ctx->mask.subtract_fs) {
-         ctx->mask.subtract_fs = shader_create_from_text(ctx->pipe,
-                                                         subtract_mask_asm,
-                                                         200,
-                                                         PIPE_SHADER_FRAGMENT);
-      }
-      shader = ctx->mask.subtract_fs->driver;
-   }
-      break;
-   case VG_SET_MASK: {
-      if (!ctx->mask.set_fs) {
-         ctx->mask.set_fs = shader_create_from_text(ctx->pipe,
-                                                    set_mask_asm,
-                                                    200,
-                                                    PIPE_SHADER_FRAGMENT);
-      }
-      shader = ctx->mask.set_fs->driver;
-   }
-      break;
-   default:
-         assert(0);
-      break;
-   }
-
-   return shader;
-}
-
-static void mask_resource_fill(struct pipe_resource *dst,
-                               int x, int y, int width, int height,
-                               VGfloat coverage)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGfloat fs_consts[12] = {
-      0.0f, 0.0f, 0.0f, 0.0f, /* not used */
-      0.0f, 0.0f, 0.0f, 0.0f, /* not used */
-      0.0f, 0.0f, 0.0f, coverage /* color */
-   };
-   void *fs;
-
-   if (x < 0) {
-      width += x;
-      x = 0;
-   }
-   if (y < 0) {
-      height += y;
-      y = 0;
-   }
-
-   fs = shaders_cache_fill(ctx->sc, VEGA_SOLID_FILL_SHADER);
-
-   if (renderer_filter_begin(ctx->renderer, dst, VG_FALSE, ~0,
-            NULL, NULL, 0, fs, (const void *) fs_consts, sizeof(fs_consts))) {
-      renderer_filter(ctx->renderer, x, y, width, height, 0, 0, 0, 0);
-      renderer_filter_end(ctx->renderer);
-   }
-
-#if DEBUG_MASKS
-   save_alpha_to_file(0);
-#endif
-}
-
-
-static void mask_using_texture(struct pipe_sampler_view *sampler_view,
-                               VGboolean is_layer,
-                               VGMaskOperation operation,
-                               VGint x, VGint y,
-                               VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_sampler_view *dst_view = vg_get_surface_mask(ctx);
-   struct pipe_resource *dst = dst_view->texture;
-   struct pipe_resource *texture = sampler_view->texture;
-   const struct pipe_sampler_state *samplers[2];
-   struct pipe_sampler_view *views[2];
-   struct pipe_sampler_state sampler;
-   VGint offsets[4], loc[4];
-   const VGfloat ones[4] = {1.f, 1.f, 1.f, 1.f};
-   void *fs;
-
-   if (!intersect_rectangles(dst->width0, dst->height0,
-                             texture->width0, texture->height0,
-                             x, y, width, height,
-                             offsets, loc))
-      return;
-#if 0
-   debug_printf("Offset = [%d, %d, %d, %d]\n", offsets[0],
-                offsets[1], offsets[2], offsets[3]);
-   debug_printf("Locati = [%d, %d, %d, %d]\n", loc[0],
-                loc[1], loc[2], loc[3]);
-#endif
-
-
-   sampler = ctx->mask.sampler;
-   sampler.normalized_coords = 1;
-   samplers[0] = &sampler;
-   views[0] = sampler_view;
-
-   /* prepare our blend surface */
-   samplers[1] = &ctx->mask.sampler;
-   views[1] = vg_prepare_blend_surface_from_mask(ctx);
-
-   fs = setup_mask_operation(operation);
-
-   if (renderer_filter_begin(ctx->renderer, dst, VG_FALSE,
-            ~0, samplers, views, 2, fs, (const void *) ones, sizeof(ones))) {
-      /* layer should be flipped when used as a texture */
-      if (is_layer) {
-         offsets[1] += offsets[3];
-         offsets[3] = -offsets[3];
-      }
-      renderer_filter(ctx->renderer,
-            loc[0], loc[1], loc[2], loc[3],
-            offsets[0], offsets[1], offsets[2], offsets[3]);
-      renderer_filter_end(ctx->renderer);
-   }
-}
-
-
-#ifdef OPENVG_VERSION_1_1
-
-struct vg_mask_layer * mask_layer_create(VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_mask_layer *mask = 0;
-
-   mask = CALLOC_STRUCT(vg_mask_layer);
-   vg_init_object(&mask->base, ctx, VG_OBJECT_MASK);
-   mask->width = width;
-   mask->height = height;
-
-   {
-      struct pipe_resource pt;
-      struct pipe_context *pipe = ctx->pipe;
-      struct pipe_screen *screen = ctx->pipe->screen;
-      struct pipe_sampler_view view_templ;
-      struct pipe_sampler_view *view = NULL;
-      struct pipe_resource *texture;
-
-      memset(&pt, 0, sizeof(pt));
-      pt.target = PIPE_TEXTURE_2D;
-      pt.format = PIPE_FORMAT_B8G8R8A8_UNORM;
-      pt.last_level = 0;
-      pt.width0 = width;
-      pt.height0 = height;
-      pt.depth0 = 1;
-      pt.array_size = 1;
-      pt.bind = PIPE_BIND_SAMPLER_VIEW;
-
-      texture = screen->resource_create(screen, &pt);
-
-      if (texture) {
-         u_sampler_view_default_template(&view_templ, texture, texture->format);
-         view = pipe->create_sampler_view(pipe, texture, &view_templ);
-      }
-      pipe_resource_reference(&texture, NULL);
-      mask->sampler_view = view;
-   }
-
-   vg_context_add_object(ctx, &mask->base);
-
-   return mask;
-}
-
-void mask_layer_destroy(struct vg_mask_layer *layer)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   vg_context_remove_object(ctx, &layer->base);
-   pipe_sampler_view_reference(&layer->sampler_view, NULL);
-   vg_free_object(&layer->base);
-   FREE(layer);
-}
-
-void mask_layer_fill(struct vg_mask_layer *layer,
-                     VGint x, VGint y,
-                     VGint width, VGint height,
-                     VGfloat value)
-{
-   mask_resource_fill(layer->sampler_view->texture,
-                      x, y, width, height, value);
-}
-
-void mask_copy(struct vg_mask_layer *layer,
-               VGint sx, VGint sy,
-               VGint dx, VGint dy,
-               VGint width, VGint height)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_sampler_view *src = vg_get_surface_mask(ctx);
-   struct pipe_surface *surf, surf_tmpl;
-
-   /* get the destination surface */
-   u_surface_default_template(&surf_tmpl, layer->sampler_view->texture);
-   surf = ctx->pipe->create_surface(ctx->pipe, layer->sampler_view->texture,
-                                    &surf_tmpl);
-   if (surf && renderer_copy_begin(ctx->renderer, surf, VG_FALSE, src)) {
-      /* layer should be flipped when used as a texture */
-      sy += height;
-      height = -height;
-
-      renderer_copy(ctx->renderer,
-            dx, dy, width, height,
-            sx, sy, width, height);
-      renderer_copy_end(ctx->renderer);
-   }
-
-   pipe_surface_reference(&surf, NULL);
-}
-
-static void mask_layer_render_to(struct vg_mask_layer *layer,
-                                 struct path *path,
-                                 VGbitfield paint_modes)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_sampler_view *view = vg_get_surface_mask(ctx);
-   struct matrix *mat = &ctx->state.vg.path_user_to_surface_matrix;
-   struct pipe_surface *surf, surf_tmpl;
-   u_surface_default_template(&surf_tmpl, view->texture);
-   surf = pipe->create_surface(pipe, view->texture, &surf_tmpl);
-
-   renderer_validate_for_mask_rendering(ctx->renderer, surf, mat);
-
-   if (paint_modes & VG_FILL_PATH) {
-      path_fill(path);
-   }
-
-   if (paint_modes & VG_STROKE_PATH){
-      path_stroke(path);
-   }
-
-   pipe_surface_reference(&surf, NULL);
-}
-
-void mask_render_to(struct path *path,
-                    VGbitfield paint_modes,
-                    VGMaskOperation operation)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct vg_mask_layer *temp_layer;
-   VGint width, height;
-
-   width = stfb->width;
-   height = stfb->height;
-
-   temp_layer = mask_layer_create(width, height);
-   mask_layer_fill(temp_layer, 0, 0, width, height, 0.0f);
-
-   mask_layer_render_to(temp_layer, path, paint_modes);
-
-   mask_using_layer(temp_layer, operation, 0, 0, width, height);
-
-   mask_layer_destroy(temp_layer);
-}
-
-void mask_using_layer(struct vg_mask_layer *layer,
-                      VGMaskOperation operation,
-                      VGint x, VGint y,
-                      VGint width, VGint height)
-{
-   mask_using_texture(layer->sampler_view, VG_TRUE, operation,
-                      x, y, width, height);
-}
-
-VGint mask_layer_width(struct vg_mask_layer *layer)
-{
-   return layer->width;
-}
-
-VGint mask_layer_height(struct vg_mask_layer *layer)
-{
-   return layer->height;
-}
-
-
-#endif
-
-void mask_using_image(struct vg_image *image,
-                      VGMaskOperation operation,
-                      VGint x, VGint y,
-                      VGint width, VGint height)
-{
-   mask_using_texture(image->sampler_view, VG_FALSE, operation,
-                      x, y, width, height);
-}
-
-void mask_fill(VGint x, VGint y, VGint width, VGint height,
-               VGfloat value)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct pipe_sampler_view *view = vg_get_surface_mask(ctx);
-
-#if DEBUG_MASKS
-   debug_printf("mask_fill(%d, %d, %d, %d) with  rgba(%f, %f, %f, %f)\n",
-                x, y, width, height,
-                0.0f, 0.0f, 0.0f, value);
-#endif
-
-   mask_resource_fill(view->texture, x, y, width, height, value);
-}
-
-VGint mask_bind_samplers(struct pipe_sampler_state **samplers,
-                         struct pipe_sampler_view **sampler_views)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   if (ctx->state.vg.masking) {
-      samplers[1] = &ctx->mask.sampler;
-      sampler_views[1] = vg_get_surface_mask(ctx);
-      return 1;
-   } else
-      return 0;
-}
diff --git a/src/gallium/state_trackers/vega/mask.h b/src/gallium/state_trackers/vega/mask.h
deleted file mode 100644 (file)
index c626402..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef MASK_H
-#define MASK_H
-
-#include "vg_context.h"
-
-struct path;
-struct vg_image;
-struct pipe_resource;
-
-struct vg_mask_layer *mask_layer_create(VGint width, VGint height);
-void mask_layer_destroy(struct vg_mask_layer *layer);
-void mask_layer_fill(struct vg_mask_layer *layer,
-                     VGint x, VGint y,
-                     VGint width, VGint height,
-                     VGfloat value);
-VGint mask_layer_width(struct vg_mask_layer *layer);
-VGint mask_layer_height(struct vg_mask_layer *layer);
-void mask_copy(struct vg_mask_layer *layer,
-               VGint sx, VGint sy,
-               VGint dx, VGint dy,
-               VGint width, VGint height);
-
-void mask_render_to(struct path *path,
-                    VGbitfield paint_modes,
-                    VGMaskOperation operation);
-
-void mask_using_layer(struct vg_mask_layer *layer,
-                      VGMaskOperation operation,
-                      VGint x, VGint y,
-                      VGint width, VGint height);
-void mask_using_image(struct vg_image *image,
-                      VGMaskOperation operation,
-                      VGint x, VGint y,
-                      VGint width, VGint height);
-void mask_fill(VGint x, VGint y,
-               VGint width, VGint height,
-               VGfloat value);
-
-VGint mask_bind_samplers(struct pipe_sampler_state **samplers,
-                         struct pipe_sampler_view **sampler_views);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/matrix.h b/src/gallium/state_trackers/vega/matrix.h
deleted file mode 100644 (file)
index 794c7e7..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef MATRIX_H
-#define MATRIX_H
-
-#include "VG/openvg.h"
-
-#include "pipe/p_compiler.h"
-#include "util/u_math.h"
-
-#include <stdio.h>
-#include <math.h>
-
-#define floatsEqual(x, y) (fabs(x - y) <= 0.00001f * MIN2(fabs(x), fabs(y)))
-#define floatIsZero(x) (floatsEqual((x) + 1, 1))
-#define ABS(x) (fabsf(x))
-
-#define DEGREES_TO_RADIANS(d) (0.0174532925199 * (d))
-#define FLT_TO_INT(flt) float_to_int_floor(((VGuint*)&(flt))[0])
-
-static INLINE VGint float_to_int_floor(VGuint bits)
-{
-   int sign = (bits >> 31) ? -1 : 1;
-   int exp  = ((bits >> 23) & 255) - 127;
-   int mant = bits & 0x007fffff;
-   int sh   = 23 - exp;
-
-   /* abs(value) >= 2^31 -> clamp. */
-
-   if (exp >= 31)
-      return (VGint)((sign < 0) ? 0x80000000u : 0x7fffffffu);
-
-   /* abs(value) < 1 -> return -1 or 0. */
-
-   if (exp < 0)
-      return (sign < 0 && (exp > -127 || mant != 0)) ? -1 : 0;
-
-   /* abs(value) >= 2^23 -> shift left. */
-
-   mant |= 0x00800000;
-   if (sh <= 0)
-      return sign * (mant << -sh);
-
-   /* Negative -> add a rounding term. */
-
-   if (sign < 0)
-      mant += (1 << sh) - 1;
-
-   /* Shift right to obtain the result. */
-
-   return sign * (mant >> sh);
-}
-
-
-struct matrix {
-   VGfloat m[9];
-};
-
-static INLINE void matrix_init(struct matrix *mat,
-                               const VGfloat *val)
-{
-   memcpy(mat->m, val, sizeof(VGfloat) * 9);
-}
-
-static INLINE void matrix_inits(struct matrix *mat,
-                                VGfloat m11, VGfloat m12, VGfloat m13,
-                                VGfloat m21, VGfloat m22, VGfloat m23,
-                                VGfloat m31, VGfloat m32, VGfloat m33)
-{
-   mat->m[0] = m11; mat->m[1] = m12; mat->m[2] = m13;
-   mat->m[3] = m21; mat->m[4] = m22; mat->m[5] = m23;
-   mat->m[6] = m31; mat->m[7] = m32; mat->m[8] = m33;
-}
-
-static INLINE void matrix_load_identity(struct matrix *matrix)
-{
-   static const VGfloat identity[9] = {1.f, 0.f, 0.f,
-                                       0.f, 1.f, 0.f,
-                                       0.f, 0.f, 1.f};
-   memcpy(matrix->m, identity, sizeof(identity));
-}
-
-static INLINE VGboolean matrix_is_identity(struct matrix *matrix)
-{
-   return floatsEqual(matrix->m[0], 1) && floatIsZero(matrix->m[1]) &&
-      floatIsZero(matrix->m[2]) &&
-      floatIsZero(matrix->m[3]) && floatsEqual(matrix->m[4], 1) &&
-      floatIsZero(matrix->m[5]) &&
-      floatIsZero(matrix->m[6]) && floatIsZero(matrix->m[7]) &&
-      floatIsZero(matrix->m[8]);
-}
-
-static INLINE VGboolean matrix_is_affine(struct matrix *matrix)
-{
-   return floatIsZero(matrix->m[2]) && floatIsZero(matrix->m[5])
-      && floatsEqual(matrix->m[8], 1);
-}
-
-
-static INLINE void matrix_make_affine(struct matrix *matrix)
-{
-   matrix->m[2] = 0.f;
-   matrix->m[5] = 0.f;
-   matrix->m[8] = 1.f;
-}
-
-static INLINE void matrix_mult(struct matrix *dst,
-                               const struct matrix *src)
-{
-   VGfloat m11 = dst->m[0]*src->m[0] + dst->m[3]*src->m[1] + dst->m[6]*src->m[2];
-   VGfloat m12 = dst->m[0]*src->m[3] + dst->m[3]*src->m[4] + dst->m[6]*src->m[5];
-   VGfloat m13 = dst->m[0]*src->m[6] + dst->m[3]*src->m[7] + dst->m[6]*src->m[8];
-
-   VGfloat m21 = dst->m[1]*src->m[0] + dst->m[4]*src->m[1] + dst->m[7]*src->m[2];
-   VGfloat m22 = dst->m[1]*src->m[3] + dst->m[4]*src->m[4] + dst->m[7]*src->m[5];
-   VGfloat m23 = dst->m[1]*src->m[6] + dst->m[4]*src->m[7] + dst->m[7]*src->m[8];
-
-   VGfloat m31 = dst->m[2]*src->m[0] + dst->m[5]*src->m[1] + dst->m[8]*src->m[2];
-   VGfloat m32 = dst->m[2]*src->m[3] + dst->m[5]*src->m[4] + dst->m[8]*src->m[5];
-   VGfloat m33 = dst->m[2]*src->m[6] + dst->m[5]*src->m[7] + dst->m[8]*src->m[8];
-
-   dst->m[0] = m11; dst->m[1] = m21; dst->m[2] = m31;
-   dst->m[3] = m12; dst->m[4] = m22; dst->m[5] = m32;
-   dst->m[6] = m13; dst->m[7] = m23; dst->m[8] = m33;
-}
-
-
-static INLINE void matrix_map_point(struct matrix *mat,
-                                    VGfloat x, VGfloat y,
-                                    VGfloat *out_x, VGfloat *out_y)
-{
-   /* to be able to do matrix_map_point(m, x, y, &x, &y) use
-    * temporaries */
-   VGfloat tmp_x = x, tmp_y = y;
-
-   *out_x = mat->m[0]*tmp_x + mat->m[3]*tmp_y + mat->m[6];
-   *out_y = mat->m[1]*tmp_x + mat->m[4]*tmp_y + mat->m[7];
-   if (!matrix_is_affine(mat)) {
-      VGfloat w = 1/(mat->m[2]*tmp_x + mat->m[5]*tmp_y + mat->m[8]);
-      *out_x *= w;
-      *out_y *= w;
-   }
-}
-
-static INLINE void matrix_translate(struct matrix *dst,
-                                    VGfloat tx, VGfloat ty)
-{
-   if (!matrix_is_affine(dst)) {
-      struct matrix trans_matrix;
-      matrix_load_identity(&trans_matrix);
-      trans_matrix.m[6] = tx;
-      trans_matrix.m[7] = ty;
-      matrix_mult(dst, &trans_matrix);
-   } else {
-      dst->m[6] += tx*dst->m[0] + ty*dst->m[3];
-      dst->m[7] += ty*dst->m[4] + tx*dst->m[1];
-   }
-}
-
-static INLINE void matrix_scale(struct matrix *dst,
-                                VGfloat sx, VGfloat sy)
-{
-   if (!matrix_is_affine(dst)) {
-      struct matrix scale_matrix;
-      matrix_load_identity(&scale_matrix);
-      scale_matrix.m[0] = sx;
-      scale_matrix.m[4] = sy;
-      matrix_mult(dst, &scale_matrix);
-   } else {
-      dst->m[0] *= sx; dst->m[1] *= sx;
-      dst->m[3] *= sy; dst->m[4] *= sy;
-   }
-}
-
-static INLINE void matrix_shear(struct matrix *dst,
-                                VGfloat shx, VGfloat shy)
-{
-   struct matrix shear_matrix;
-   matrix_load_identity(&shear_matrix);
-   shear_matrix.m[1] = shy;
-   shear_matrix.m[3] = shx;
-   matrix_mult(dst, &shear_matrix);
-}
-
-static INLINE void matrix_rotate(struct matrix *dst,
-                                 VGfloat angle)
-{
-   struct matrix mat;
-   float sin_val = 0;
-   float cos_val = 0;
-
-
-   if (floatsEqual(angle, 90) || floatsEqual(angle, -270))
-      sin_val = 1.f;
-   else if (floatsEqual(angle, 270) || floatsEqual(angle, -90))
-      sin_val = -1.f;
-   else if (floatsEqual(angle, 180))
-      cos_val = -1.f;
-   else {
-      double radians = DEGREES_TO_RADIANS(angle);
-      sin_val = (float) sin(radians);
-      cos_val = (float) cos(radians);
-   }
-
-   if (!matrix_is_affine(dst)) {
-      matrix_load_identity(&mat);
-      mat.m[0] =  cos_val;   mat.m[1] =  sin_val;
-      mat.m[3] = -sin_val;   mat.m[4] =  cos_val;
-
-      matrix_mult(dst, &mat);
-   } else  {
-      VGfloat m11 =  cos_val*dst->m[0] + sin_val*dst->m[3];
-      VGfloat m12 =  cos_val*dst->m[1] + sin_val*dst->m[4];
-      VGfloat m21 = -sin_val*dst->m[0] + cos_val*dst->m[3];
-      VGfloat m22 = -sin_val*dst->m[1] + cos_val*dst->m[4];
-      dst->m[0] = m11; dst->m[1] = m12;
-      dst->m[3] = m21; dst->m[4] = m22;
-   }
-}
-
-
-static INLINE VGfloat matrix_determinant(struct matrix *mat)
-{
-   return mat->m[0]*(mat->m[8]*mat->m[4]-mat->m[7]*mat->m[5]) -
-      mat->m[3]*(mat->m[8]*mat->m[1]-mat->m[7]*mat->m[2])+
-      mat->m[6]*(mat->m[5]*mat->m[1]-mat->m[4]*mat->m[2]);
-}
-
-
-static INLINE void matrix_adjoint(struct matrix *mat)
-{
-    VGfloat h[9];
-    h[0] = mat->m[4]*mat->m[8] - mat->m[5]*mat->m[7];
-    h[3] = mat->m[5]*mat->m[6] - mat->m[3]*mat->m[8];
-    h[6] = mat->m[3]*mat->m[7] - mat->m[4]*mat->m[6];
-    h[1] = mat->m[2]*mat->m[7] - mat->m[1]*mat->m[8];
-    h[4] = mat->m[0]*mat->m[8] - mat->m[2]*mat->m[6];
-    h[7] = mat->m[1]*mat->m[6] - mat->m[0]*mat->m[7];
-    h[2] = mat->m[1]*mat->m[5] - mat->m[2]*mat->m[4];
-    h[5] = mat->m[2]*mat->m[3] - mat->m[0]*mat->m[5];
-    h[8] = mat->m[0]*mat->m[4] - mat->m[1]*mat->m[3];
-
-
-    memcpy(mat->m, h, sizeof(VGfloat) * 9);
-}
-
-static INLINE void matrix_divs(struct matrix *mat,
-                               VGfloat s)
-{
-   mat->m[0] /= s;
-   mat->m[1] /= s;
-   mat->m[2] /= s;
-   mat->m[3] /= s;
-   mat->m[4] /= s;
-   mat->m[5] /= s;
-   mat->m[6] /= s;
-   mat->m[7] /= s;
-   mat->m[8] /= s;
-}
-
-static INLINE VGboolean matrix_invert(struct matrix *mat)
-{
-   VGfloat det = matrix_determinant(mat);
-
-   if (floatIsZero(det))
-      return VG_FALSE;
-
-   matrix_adjoint(mat);
-   matrix_divs(mat, det);
-   return VG_TRUE;
-}
-
-static INLINE VGboolean matrix_is_invertible(struct matrix *mat)
-{
-   return !floatIsZero(matrix_determinant(mat));
-}
-
-
-static INLINE VGboolean matrix_square_to_quad(VGfloat dx0, VGfloat dy0,
-                                              VGfloat dx1, VGfloat dy1,
-                                              VGfloat dx3, VGfloat dy3,
-                                              VGfloat dx2, VGfloat dy2,
-                                              struct matrix *mat)
-{
-   VGfloat ax  = dx0 - dx1 + dx2 - dx3;
-   VGfloat ay  = dy0 - dy1 + dy2 - dy3;
-
-   if (floatIsZero(ax) && floatIsZero(ay)) {
-      /* affine case */
-      matrix_inits(mat,
-                   dx1 - dx0, dy1 - dy0,  0,
-                   dx2 - dx1, dy2 - dy1,  0,
-                         dx0,       dy0,  1);
-   } else {
-      VGfloat a, b, c, d, e, f, g, h;
-      VGfloat ax1 = dx1 - dx2;
-      VGfloat ax2 = dx3 - dx2;
-      VGfloat ay1 = dy1 - dy2;
-      VGfloat ay2 = dy3 - dy2;
-
-      /* determinants */
-      VGfloat gtop    =  ax  * ay2 - ax2 * ay;
-      VGfloat htop    =  ax1 * ay  - ax  * ay1;
-      VGfloat bottom  =  ax1 * ay2 - ax2 * ay1;
-
-      if (!bottom)
-         return VG_FALSE;
-
-      g = gtop / bottom;
-      h = htop / bottom;
-
-      a = dx1 - dx0 + g * dx1;
-      b = dx3 - dx0 + h * dx3;
-      c = dx0;
-      d = dy1 - dy0 + g * dy1;
-      e = dy3 - dy0 + h * dy3;
-      f = dy0;
-
-      matrix_inits(mat,
-                   a,  d,   g,
-                   b,  e,   h,
-                   c,  f, 1.f);
-   }
-
-   return VG_TRUE;
-}
-
-static INLINE VGboolean matrix_quad_to_square(VGfloat sx0, VGfloat sy0,
-                                              VGfloat sx1, VGfloat sy1,
-                                              VGfloat sx2, VGfloat sy2,
-                                              VGfloat sx3, VGfloat sy3,
-                                              struct matrix *mat)
-{
-   if (!matrix_square_to_quad(sx0, sy0, sx1, sy1,
-                              sx2, sy2, sx3, sy3,
-                              mat))
-      return VG_FALSE;
-
-    return matrix_invert(mat);
-}
-
-
-static INLINE VGboolean matrix_quad_to_quad(VGfloat dx0, VGfloat dy0,
-                                            VGfloat dx1, VGfloat dy1,
-                                            VGfloat dx2, VGfloat dy2,
-                                            VGfloat dx3, VGfloat dy3,
-                                            VGfloat sx0, VGfloat sy0,
-                                            VGfloat sx1, VGfloat sy1,
-                                            VGfloat sx2, VGfloat sy2,
-                                            VGfloat sx3, VGfloat sy3,
-                                            struct matrix *mat)
-{
-   struct matrix sqr_to_qd;
-
-   if (!matrix_square_to_quad(dx0, dy0, dx1, dy1,
-                              dx2, dy2, dx3, dy3,
-                              mat))
-      return VG_FALSE;
-
-   if (!matrix_quad_to_square(sx0, sy0, sx1, sy1,
-                              sx2, sy2, sx3, sy3,
-                              &sqr_to_qd))
-      return VG_FALSE;
-
-   matrix_mult(mat, &sqr_to_qd);
-
-   return VG_TRUE;
-}
-
-
-static INLINE VGboolean null_line(const VGfloat *l)
-{
-   return floatsEqual(l[0], l[2]) && floatsEqual(l[1], l[3]);
-}
-
-static INLINE void line_normal(float *l, float *norm)
-{
-   norm[0] = l[0];
-   norm[1] = l[1];
-
-   norm[2] = l[0] + (l[3] - l[1]);
-   norm[3] = l[1] - (l[2] - l[0]);
-}
-
-static INLINE void line_normalize(float *l)
-{
-   float x = l[2] - l[0];
-   float y = l[3] - l[1];
-   float len = (float) sqrt(x*x + y*y);
-   l[2] = l[0] + x/len;
-   l[3] = l[1] + y/len;
-}
-
-static INLINE VGfloat line_length(VGfloat x1, VGfloat y1,
-                                  VGfloat x2, VGfloat y2)
-{
-   VGfloat x = x2 - x1;
-   VGfloat y = y2 - y1;
-   return (VGfloat) sqrt(x*x + y*y);
-}
-
-static INLINE VGfloat line_lengthv(const VGfloat *l)
-{
-   VGfloat x = l[2] - l[0];
-   VGfloat y = l[3] - l[1];
-   return (VGfloat) sqrt(x*x + y*y);
-}
-
-
-static INLINE void line_point_at(float *l, float t, float *pt)
-{
-   float dx = l[2] - l[0];
-   float dy = l[3] - l[1];
-
-   pt[0] = l[0] + dx * t;
-   pt[1] = l[1] + dy * t;
-}
-
-static INLINE void vector_unit(float *vec)
-{
-   float len = (float) sqrt(vec[0] * vec[0] + vec[1] * vec[1]);
-   vec[0] /= len;
-   vec[1] /= len;
-}
-
-static INLINE void line_normal_vector(float *line, float *vec)
-{
-   VGfloat normal[4];
-
-   line_normal(line, normal);
-
-   vec[0] = normal[2] - normal[0];
-   vec[1] = normal[3] - normal[1];
-
-   vector_unit(vec);
-}
-
-#endif
diff --git a/src/gallium/state_trackers/vega/paint.c b/src/gallium/state_trackers/vega/paint.c
deleted file mode 100644 (file)
index fea9fc1..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "paint.h"
-
-#include "matrix.h"
-#include "image.h"
-
-#include "pipe/p_compiler.h"
-#include "util/u_inlines.h"
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-#include "util/u_sampler.h"
-
-#include "cso_cache/cso_context.h"
-
-struct vg_paint {
-   struct vg_object base;
-
-   VGPaintType type;
-
-   struct {
-      VGfloat color[4];
-      VGint colori[4];
-   } solid;
-
-   struct {
-      VGColorRampSpreadMode spread;
-      VGuint color_data[1024];
-      struct {
-         VGfloat  coords[4];
-         VGint  coordsi[4];
-      } linear;
-      struct {
-         VGfloat vals[5];
-         VGint valsi[5];
-      } radial;
-      struct pipe_sampler_view *sampler_view;
-      struct pipe_sampler_state sampler;
-
-      VGfloat *ramp_stops;
-      VGint *ramp_stopsi;
-      VGint    num_stops;
-
-      VGboolean color_ramps_premultiplied;
-   } gradient;
-
-   struct {
-      struct pipe_sampler_view *sampler_view;
-      VGTilingMode tiling_mode;
-      struct pipe_sampler_state sampler;
-   } pattern;
-
-   /* XXX next 3 all unneded? */
-   struct pipe_resource *cbuf;
-   struct pipe_shader_state fs_state;
-   void *fs;
-};
-
-static INLINE VGuint mix_pixels(VGuint p1, VGuint a, VGuint p2, VGuint b)
-{
-   VGuint t = (p1 & 0xff00ff) * a + (p2 & 0xff00ff) * b;
-   t >>= 8; t &= 0xff00ff;
-
-   p1 = ((p1 >> 8) & 0xff00ff) * a + ((p2 >> 8) & 0xff00ff) * b;
-   p1 &= 0xff00ff00; p1 |= t;
-
-   return p1;
-}
-
-static INLINE VGuint float4_to_argb(const VGfloat *clr)
-{
-   return float_to_ubyte(clr[3]) << 24 |
-      float_to_ubyte(clr[0]) << 16 |
-      float_to_ubyte(clr[1]) << 8 |
-      float_to_ubyte(clr[2]) << 0;
-}
-
-static INLINE void create_gradient_data(const VGfloat *ramp_stops,
-                                        VGint num,
-                                        VGuint *data,
-                                        VGint size)
-{
-   VGint i;
-   VGint pos = 0;
-   VGfloat fpos = 0, incr = 1.f / size;
-   VGuint last_color;
-
-   while (fpos < ramp_stops[0]) {
-      data[pos] = float4_to_argb(ramp_stops + 1);
-      fpos += incr;
-      ++pos;
-   }
-
-   for (i = 0; i < num - 1; ++i) {
-      VGint rcur  = 5 * i;
-      VGint rnext = 5 * (i + 1);
-      VGfloat delta = 1.f/(ramp_stops[rnext] - ramp_stops[rcur]);
-      while (fpos < ramp_stops[rnext] && pos < size) {
-         VGint dist = 256 * ((fpos - ramp_stops[rcur]) * delta);
-         VGint idist = 256 - dist;
-         VGuint current_color = float4_to_argb(ramp_stops + rcur + 1);
-         VGuint next_color = float4_to_argb(ramp_stops + rnext + 1);
-         data[pos] = mix_pixels(current_color, idist,
-                                next_color, dist);
-         fpos += incr;
-         ++pos;
-      }
-   }
-
-   last_color = float4_to_argb(ramp_stops + ((num - 1) * 5 + 1));
-   while (pos < size) {
-      data[pos] = last_color;
-      ++pos;
-   }
-   data[size-1] = last_color;
-}
-
-static INLINE struct pipe_resource *create_gradient_texture(struct vg_paint *p)
-{
-   struct pipe_context *pipe = p->base.ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
-   struct pipe_resource *tex = 0;
-   struct pipe_resource templ;
-
-   memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_1D;
-   templ.format = PIPE_FORMAT_B8G8R8A8_UNORM;
-   templ.last_level = 0;
-   templ.width0 = 1024;
-   templ.height0 = 1;
-   templ.depth0 = 1;
-   templ.array_size = 1;
-   templ.bind = PIPE_BIND_SAMPLER_VIEW;
-
-   tex = screen->resource_create(screen, &templ);
-
-   { /* upload color_data */
-      struct pipe_transfer *transfer;
-      void *map =
-         pipe_transfer_map(p->base.ctx->pipe, tex, 0, 0,
-                           PIPE_TRANSFER_WRITE, 0, 0, 1024, 1,
-                           &transfer);
-      memcpy(map, p->gradient.color_data, sizeof(VGint)*1024);
-      pipe->transfer_unmap(pipe, transfer);
-   }
-
-   return tex;
-}
-
-static INLINE struct pipe_sampler_view *create_gradient_sampler_view(struct vg_paint *p)
-{
-   struct pipe_context *pipe = p->base.ctx->pipe;
-   struct pipe_resource *texture;
-   struct pipe_sampler_view view_templ;
-   struct pipe_sampler_view *view;
-
-   texture = create_gradient_texture(p);
-
-   if (!texture)
-      return NULL;
-
-   u_sampler_view_default_template(&view_templ, texture, texture->format);
-   view = pipe->create_sampler_view(pipe, texture, &view_templ);
-   /* want the texture to go away if the view is freed */
-   pipe_resource_reference(&texture, NULL);
-
-   return view;
-}
-
-struct vg_paint * paint_create(struct vg_context *ctx)
-{
-   struct vg_paint *paint = CALLOC_STRUCT(vg_paint);
-   const VGfloat default_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
-   const VGfloat def_ling[] = {0.0f, 0.0f, 1.0f, 0.0f};
-   const VGfloat def_radg[] = {0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-   vg_init_object(&paint->base, ctx, VG_OBJECT_PAINT);
-   vg_context_add_object(ctx, &paint->base);
-
-   paint->type = VG_PAINT_TYPE_COLOR;
-   memcpy(paint->solid.color, default_color,
-          4 * sizeof(VGfloat));
-   paint->gradient.spread = VG_COLOR_RAMP_SPREAD_PAD;
-   memcpy(paint->gradient.linear.coords, def_ling,
-          4 * sizeof(VGfloat));
-   memcpy(paint->gradient.radial.vals, def_radg,
-          5 * sizeof(VGfloat));
-
-   paint->gradient.sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   paint->gradient.sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   paint->gradient.sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-   paint->gradient.sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-   paint->gradient.sampler.normalized_coords = 1;
-
-   memcpy(&paint->pattern.sampler,
-          &paint->gradient.sampler,
-          sizeof(struct pipe_sampler_state));
-
-   return paint;
-}
-
-void paint_destroy(struct vg_paint *paint)
-{
-   struct vg_context *ctx = paint->base.ctx;
-   pipe_sampler_view_reference(&paint->gradient.sampler_view, NULL);
-   if (paint->pattern.sampler_view)
-      pipe_sampler_view_reference(&paint->pattern.sampler_view, NULL);
-   if (ctx) {
-      vg_context_remove_object(ctx, &paint->base);
-      vg_free_object(&paint->base);
-   }
-
-   free(paint->gradient.ramp_stopsi);
-   free(paint->gradient.ramp_stops);
-   FREE(paint);
-}
-
-void paint_set_color(struct vg_paint *paint,
-                     const VGfloat *color)
-{
-   paint->solid.color[0] = color[0];
-   paint->solid.color[1] = color[1];
-   paint->solid.color[2] = color[2];
-   paint->solid.color[3] = color[3];
-
-   paint->solid.colori[0] = FLT_TO_INT(color[0]);
-   paint->solid.colori[1] = FLT_TO_INT(color[1]);
-   paint->solid.colori[2] = FLT_TO_INT(color[2]);
-   paint->solid.colori[3] = FLT_TO_INT(color[3]);
-}
-
-static INLINE void paint_color_buffer(struct vg_paint *paint, void *buffer)
-{
-   VGfloat *map = (VGfloat*)buffer;
-   memcpy(buffer, paint->solid.color, 4 * sizeof(VGfloat));
-   map[4] = 0.f;
-   map[5] = 1.f;
-   map[6] = 2.f;
-   map[7] = 4.f;
-}
-
-static INLINE void paint_linear_gradient_buffer(struct vg_paint *paint,
-                                                const struct matrix *inv,
-                                                void *buffer)
-{
-   VGfloat *map = (VGfloat*)buffer;
-   VGfloat dd;
-
-   map[0] = paint->gradient.linear.coords[2] - paint->gradient.linear.coords[0];
-   map[1] = paint->gradient.linear.coords[3] - paint->gradient.linear.coords[1];
-   dd = (map[0] * map[0] + map[1] * map[1]);
-
-   map[2] = (dd > 0.0f) ? 1.f / dd : 0.f;
-   map[3] = 1.f;
-
-   map[4] = 0.f;
-   map[5] = 1.f;
-   map[6] = 2.f;
-   map[7] = 4.f;
-   {
-      struct matrix mat;
-      matrix_load_identity(&mat);
-      /* VEGA_LINEAR_GRADIENT_SHADER expects the first point to be at (0, 0) */
-      matrix_translate(&mat, -paint->gradient.linear.coords[0], -paint->gradient.linear.coords[1]);
-      matrix_mult(&mat, inv);
-
-      map[8]  = mat.m[0]; map[9]  = mat.m[3]; map[10] = mat.m[6]; map[11] = 0.f;
-      map[12] = mat.m[1]; map[13] = mat.m[4]; map[14] = mat.m[7]; map[15] = 0.f;
-      map[16] = mat.m[2]; map[17] = mat.m[5]; map[18] = mat.m[8]; map[19] = 0.f;
-   }
-#if 0
-   debug_printf("Coords  (%f, %f, %f, %f)\n",
-                map[0], map[1], map[2], map[3]);
-#endif
-}
-
-
-static INLINE void paint_radial_gradient_buffer(struct vg_paint *paint,
-                                                const struct matrix *inv,
-                                                void *buffer)
-{
-   const VGfloat *center = &paint->gradient.radial.vals[0];
-   const VGfloat *focal = &paint->gradient.radial.vals[2];
-   VGfloat rr = paint->gradient.radial.vals[4];
-   VGfloat *map = (VGfloat*)buffer;
-   VGfloat dd, new_focal[2];
-
-   rr *= rr;
-
-   map[0] = center[0] - focal[0];
-   map[1] = center[1] - focal[1];
-   dd = map[0] * map[0] + map[1] * map[1];
-
-   /* focal point must lie inside the circle */
-   if (0.998f * rr < dd) {
-      VGfloat scale;
-
-      scale = (dd > 0.0f) ? sqrt(0.998f * rr / dd) : 0.0f;
-      map[0] *= scale;
-      map[1] *= scale;
-
-      new_focal[0] = center[0] - map[0];
-      new_focal[1] = center[1] - map[1];
-      dd = map[0] * map[0] + map[1] * map[1];
-      focal = new_focal;
-   }
-
-   map[2] = (rr > dd) ? rr - dd : 1.0f;
-   map[3] = 1.f;
-
-   map[4] = 0.f;
-   map[5] = 1.f;
-   map[6] = 2.f;
-   map[7] = 4.f;
-
-   {
-      struct matrix mat;
-      matrix_load_identity(&mat);
-      matrix_translate(&mat, -focal[0], -focal[1]);
-      matrix_mult(&mat, inv);
-
-      map[8]  = mat.m[0]; map[9]  = mat.m[3]; map[10] = mat.m[6]; map[11] = 0.f;
-      map[12] = mat.m[1]; map[13] = mat.m[4]; map[14] = mat.m[7]; map[15] = 0.f;
-      map[16] = mat.m[2]; map[17] = mat.m[5]; map[18] = mat.m[8]; map[19] = 0.f;
-   }
-
-#if 0
-   debug_printf("Coords  (%f, %f, %f, %f)\n",
-                map[0], map[1], map[2], map[3]);
-#endif
-}
-
-
-static INLINE void  paint_pattern_buffer(struct vg_paint *paint,
-                                         const struct matrix *inv,
-                                         void *buffer)
-{
-   VGfloat *map = (VGfloat *)buffer;
-   memcpy(map, paint->solid.color, 4 * sizeof(VGfloat));
-
-   map[4] = 0.f;
-   map[5] = 1.f;
-   map[6] = paint->pattern.sampler_view->texture->width0;
-   map[7] = paint->pattern.sampler_view->texture->height0;
-   {
-      struct matrix mat;
-
-      memcpy(&mat, inv, sizeof(*inv));
-
-      map[8]  = mat.m[0]; map[9]  = mat.m[3]; map[10] = mat.m[6]; map[11] = 0.f;
-      map[12] = mat.m[1]; map[13] = mat.m[4]; map[14] = mat.m[7]; map[15] = 0.f;
-      map[16] = mat.m[2]; map[17] = mat.m[5]; map[18] = mat.m[8]; map[19] = 0.f;
-   }
-}
-
-void paint_set_type(struct vg_paint *paint, VGPaintType type)
-{
-   paint->type = type;
-}
-
-void paint_set_ramp_stops(struct vg_paint *paint, const VGfloat *stops,
-                          int num)
-{
-   const VGfloat default_stops[] = {0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
-                                    1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
-   VGint i;
-   const VGint num_stops = num / 5;
-   VGfloat last_coord;
-
-   paint->gradient.num_stops = num;
-   if (num) {
-      free(paint->gradient.ramp_stops);
-      paint->gradient.ramp_stops = malloc(sizeof(VGfloat)*num);
-      memcpy(paint->gradient.ramp_stops, stops, sizeof(VGfloat)*num);
-   } else
-      return;
-
-   /* stops must be in increasing order. the last stop is 1.0. if the
-    * first one is bigger than 1 then the whole sequence is invalid*/
-   if (stops[0] > 1) {
-      stops = default_stops;
-      num = 10;
-   }
-   last_coord = stops[0];
-   for (i = 1; i < num_stops; ++i) {
-      VGint idx = 5 * i;
-      VGfloat coord = stops[idx];
-      if (!floatsEqual(last_coord, coord) && coord < last_coord) {
-         stops = default_stops;
-         num = 10;
-         break;
-      }
-      last_coord = coord;
-   }
-
-   create_gradient_data(stops, num / 5, paint->gradient.color_data,
-                        1024);
-
-   if (paint->gradient.sampler_view) {
-      pipe_sampler_view_reference(&paint->gradient.sampler_view, NULL);
-      paint->gradient.sampler_view = NULL;
-   }
-
-   paint->gradient.sampler_view = create_gradient_sampler_view(paint);
-}
-
-void paint_set_colori(struct vg_paint *p,
-                      VGuint rgba)
-{
-   p->solid.color[0] = ((rgba >> 24) & 0xff) / 255.f;
-   p->solid.color[1] = ((rgba >> 16) & 0xff) / 255.f;
-   p->solid.color[2] = ((rgba >>  8) & 0xff) / 255.f;
-   p->solid.color[3] = ((rgba >>  0) & 0xff) / 255.f;
-}
-
-VGuint paint_colori(struct vg_paint *p)
-{
-#define F2B(f) (float_to_ubyte(f))
-
-   return ((F2B(p->solid.color[0]) << 24) |
-           (F2B(p->solid.color[1]) << 16) |
-           (F2B(p->solid.color[2]) << 8)  |
-           (F2B(p->solid.color[3]) << 0));
-#undef F2B
-}
-
-void paint_set_linear_gradient(struct vg_paint *paint,
-                               const VGfloat *coords)
-{
-   memcpy(paint->gradient.linear.coords, coords, sizeof(VGfloat) * 4);
-}
-
-void paint_set_spread_mode(struct vg_paint *paint,
-                           VGint mode)
-{
-   paint->gradient.spread = mode;
-   switch(mode) {
-   case VG_COLOR_RAMP_SPREAD_PAD:
-      paint->gradient.sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-      break;
-   case VG_COLOR_RAMP_SPREAD_REPEAT:
-      paint->gradient.sampler.wrap_s = PIPE_TEX_WRAP_REPEAT;
-      break;
-   case VG_COLOR_RAMP_SPREAD_REFLECT:
-      paint->gradient.sampler.wrap_s = PIPE_TEX_WRAP_MIRROR_REPEAT;
-      break;
-   }
-}
-
-VGColorRampSpreadMode paint_spread_mode(struct vg_paint *paint)
-{
-   return paint->gradient.spread;
-}
-
-void paint_set_radial_gradient(struct vg_paint *paint,
-                               const VGfloat *values)
-{
-   memcpy(paint->gradient.radial.vals, values, sizeof(VGfloat) * 5);
-}
-
-void paint_set_pattern(struct vg_paint *paint,
-                       struct vg_image *img)
-{
-   if (paint->pattern.sampler_view)
-      pipe_sampler_view_reference(&paint->pattern.sampler_view, NULL);
-
-   paint->pattern.sampler_view = NULL;
-   pipe_sampler_view_reference(&paint->pattern.sampler_view,
-                               img->sampler_view);
-}
-
-void paint_set_pattern_tiling(struct vg_paint *paint,
-                              VGTilingMode mode)
-{
-   paint->pattern.tiling_mode = mode;
-
-   switch(mode) {
-   case VG_TILE_FILL:
-      paint->pattern.sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_BORDER;
-      paint->pattern.sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_BORDER;
-      break;
-   case VG_TILE_PAD:
-      paint->pattern.sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-      paint->pattern.sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-      break;
-   case VG_TILE_REPEAT:
-      paint->pattern.sampler.wrap_s = PIPE_TEX_WRAP_REPEAT;
-      paint->pattern.sampler.wrap_t = PIPE_TEX_WRAP_REPEAT;
-      break;
-   case VG_TILE_REFLECT:
-      paint->pattern.sampler.wrap_s = PIPE_TEX_WRAP_MIRROR_REPEAT;
-      paint->pattern.sampler.wrap_t = PIPE_TEX_WRAP_MIRROR_REPEAT;
-      break;
-   default:
-      debug_assert(!"Unknown tiling mode");
-   }
-}
-
-void paint_get_color(struct vg_paint *paint,
-                     VGfloat *color)
-{
-   color[0] = paint->solid.color[0];
-   color[1] = paint->solid.color[1];
-   color[2] = paint->solid.color[2];
-   color[3] = paint->solid.color[3];
-}
-
-void paint_ramp_stops(struct vg_paint *paint, VGfloat *stops,
-                      int num)
-{
-   memcpy(stops, paint->gradient.ramp_stops, sizeof(VGfloat)*num);
-}
-
-void paint_linear_gradient(struct vg_paint *paint,
-                           VGfloat *coords)
-{
-   memcpy(coords, paint->gradient.linear.coords, sizeof(VGfloat)*4);
-}
-
-void paint_radial_gradient(struct vg_paint *paint,
-                           VGfloat *coords)
-{
-   memcpy(coords, paint->gradient.radial.vals, sizeof(VGfloat)*5);
-}
-
-int paint_num_ramp_stops(struct vg_paint *paint)
-{
-   return paint->gradient.num_stops;
-}
-
-VGPaintType paint_type(struct vg_paint *paint)
-{
-   return paint->type;
-}
-
-void paint_set_coloriv(struct vg_paint *paint,
-                      const VGint *color)
-{
-   paint->solid.color[0] = color[0];
-   paint->solid.color[1] = color[1];
-   paint->solid.color[2] = color[2];
-   paint->solid.color[3] = color[3];
-
-   paint->solid.colori[0] = color[0];
-   paint->solid.colori[1] = color[1];
-   paint->solid.colori[2] = color[2];
-   paint->solid.colori[3] = color[3];
-}
-
-void paint_get_coloriv(struct vg_paint *paint,
-                      VGint *color)
-{
-   color[0] = paint->solid.colori[0];
-   color[1] = paint->solid.colori[1];
-   color[2] = paint->solid.colori[2];
-   color[3] = paint->solid.colori[3];
-}
-
-void paint_set_color_ramp_premultiplied(struct vg_paint *paint,
-                                        VGboolean set)
-{
-   paint->gradient.color_ramps_premultiplied = set;
-}
-
-VGboolean paint_color_ramp_premultiplied(struct vg_paint *paint)
-{
-   return paint->gradient.color_ramps_premultiplied;
-}
-
-void paint_set_ramp_stopsi(struct vg_paint *paint, const VGint *stops,
-                           int num)
-{
-   if (num) {
-      free(paint->gradient.ramp_stopsi);
-      paint->gradient.ramp_stopsi = malloc(sizeof(VGint)*num);
-      memcpy(paint->gradient.ramp_stopsi, stops, sizeof(VGint)*num);
-   }
-}
-
-void paint_ramp_stopsi(struct vg_paint *paint, VGint *stops,
-                       int num)
-{
-   memcpy(stops, paint->gradient.ramp_stopsi, sizeof(VGint)*num);
-}
-
-void paint_set_linear_gradienti(struct vg_paint *paint,
-                                const VGint *coords)
-{
-   memcpy(paint->gradient.linear.coordsi, coords, sizeof(VGint) * 4);
-}
-
-void paint_linear_gradienti(struct vg_paint *paint,
-                            VGint *coords)
-{
-   memcpy(coords, paint->gradient.linear.coordsi, sizeof(VGint)*4);
-}
-
-void paint_set_radial_gradienti(struct vg_paint *paint,
-                                const VGint *values)
-{
-   memcpy(paint->gradient.radial.valsi, values, sizeof(VGint) * 5);
-}
-
-void paint_radial_gradienti(struct vg_paint *paint,
-                            VGint *coords)
-{
-   memcpy(coords, paint->gradient.radial.valsi, sizeof(VGint)*5);
-}
-
-VGTilingMode paint_pattern_tiling(struct vg_paint *paint)
-{
-   return paint->pattern.tiling_mode;
-}
-
-VGint paint_bind_samplers(struct vg_paint *paint, struct pipe_sampler_state **samplers,
-                          struct pipe_sampler_view **sampler_views)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   switch(paint->type) {
-   case VG_PAINT_TYPE_LINEAR_GRADIENT:
-   case VG_PAINT_TYPE_RADIAL_GRADIENT: {
-      if (paint->gradient.sampler_view) {
-         paint->gradient.sampler.min_img_filter = image_sampler_filter(ctx);
-         paint->gradient.sampler.mag_img_filter = image_sampler_filter(ctx);
-         samplers[0] = &paint->gradient.sampler;
-         sampler_views[0] = paint->gradient.sampler_view;
-         return 1;
-      }
-   }
-      break;
-   case VG_PAINT_TYPE_PATTERN: {
-      memcpy(paint->pattern.sampler.border_color.f,
-             ctx->state.vg.tile_fill_color,
-             sizeof(VGfloat) * 4);
-      paint->pattern.sampler.min_img_filter = image_sampler_filter(ctx);
-      paint->pattern.sampler.mag_img_filter = image_sampler_filter(ctx);
-      samplers[0] = &paint->pattern.sampler;
-      sampler_views[0] = paint->pattern.sampler_view;
-      return 1;
-   }
-      break;
-   default:
-      break;
-   }
-   return 0;
-}
-
-void paint_resolve_type(struct vg_paint *paint)
-{
-   if (paint->type == VG_PAINT_TYPE_PATTERN &&
-       !paint->pattern.sampler_view) {
-      paint->type = VG_PAINT_TYPE_COLOR;
-   }
-}
-
-VGboolean paint_is_degenerate(struct vg_paint *paint)
-{
-   VGboolean degen;
-   VGfloat *vals;
-
-
-   switch (paint->type) {
-   case VG_PAINT_TYPE_LINEAR_GRADIENT:
-      vals = paint->gradient.linear.coords;
-      /* two points are coincident */
-      degen = (floatsEqual(vals[0], vals[2]) &&
-               floatsEqual(vals[1], vals[3]));
-      break;
-   case VG_PAINT_TYPE_RADIAL_GRADIENT:
-      vals = paint->gradient.radial.vals;
-      /* radius <= 0 */
-      degen = (vals[4] <= 0.0f);
-      break;
-   case VG_PAINT_TYPE_COLOR:
-   case VG_PAINT_TYPE_PATTERN:
-   default:
-      degen = VG_FALSE;
-      break;
-   }
-
-   return degen;
-}
-
-VGint paint_constant_buffer_size(struct vg_paint *paint)
-{
-   switch(paint->type) {
-   case VG_PAINT_TYPE_COLOR:
-      return 8 * sizeof(VGfloat);/*4 color + 4 constants (0.f,1.f,2.f,4.f)*/
-      break;
-   case VG_PAINT_TYPE_LINEAR_GRADIENT:
-      return 20 * sizeof(VGfloat);
-      break;
-   case VG_PAINT_TYPE_RADIAL_GRADIENT:
-      return 20 * sizeof(VGfloat);
-      break;
-   case VG_PAINT_TYPE_PATTERN:
-      return 20 * sizeof(VGfloat);
-      break;
-   default:
-      debug_printf("Uknown paint type: %d\n", paint->type);
-   }
-
-   return 0;
-}
-
-void paint_fill_constant_buffer(struct vg_paint *paint,
-                                const struct matrix *mat,
-                                void *buffer)
-{
-   switch(paint->type) {
-   case VG_PAINT_TYPE_COLOR:
-      paint_color_buffer(paint, buffer);
-      break;
-   case VG_PAINT_TYPE_LINEAR_GRADIENT:
-      paint_linear_gradient_buffer(paint, mat, buffer);
-      break;
-   case VG_PAINT_TYPE_RADIAL_GRADIENT:
-      paint_radial_gradient_buffer(paint, mat, buffer);
-      break;
-   case VG_PAINT_TYPE_PATTERN:
-      paint_pattern_buffer(paint, mat, buffer);
-      break;
-
-   default:
-      abort();
-   }
-}
-
-VGboolean paint_is_opaque(struct vg_paint *paint)
-{
-   /* TODO add other paint types and make sure PAINT_DIRTY gets set */
-   return (paint->type == VG_PAINT_TYPE_COLOR &&
-           floatsEqual(paint->solid.color[3], 1.0f));
-}
diff --git a/src/gallium/state_trackers/vega/paint.h b/src/gallium/state_trackers/vega/paint.h
deleted file mode 100644 (file)
index e535776..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef PAINT_H
-#define PAINT_H
-
-#include "vg_context.h"
-
-#include "VG/openvg.h"
-#include "pipe/p_state.h"
-
-struct vg_paint;
-struct vg_image;
-struct pipe_sampler_state;
-struct pipe_resource;
-
-struct vg_paint *paint_create(struct vg_context *ctx);
-void paint_destroy(struct vg_paint *paint);
-
-void paint_set_color(struct vg_paint *paint,
-                     const VGfloat *color);
-void paint_get_color(struct vg_paint *paint,
-                     VGfloat *color);
-
-void paint_set_coloriv(struct vg_paint *paint,
-                      const VGint *color);
-void paint_get_coloriv(struct vg_paint *paint,
-                      VGint *color);
-
-void paint_set_colori(struct vg_paint *paint,
-                      VGuint rgba);
-
-VGuint paint_colori(struct vg_paint *paint);
-
-void paint_set_type(struct vg_paint *paint, VGPaintType type);
-VGPaintType paint_type(struct vg_paint *paint);
-void paint_resolve_type(struct vg_paint *paint);
-
-void paint_set_linear_gradient(struct vg_paint *paint,
-                               const VGfloat *coords);
-void paint_linear_gradient(struct vg_paint *paint,
-                           VGfloat *coords);
-void paint_set_linear_gradienti(struct vg_paint *paint,
-                               const VGint *coords);
-void paint_linear_gradienti(struct vg_paint *paint,
-                           VGint *coords);
-
-
-void paint_set_radial_gradient(struct vg_paint *paint,
-                               const VGfloat *values);
-void paint_radial_gradient(struct vg_paint *paint,
-                           VGfloat *coords);
-void paint_set_radial_gradienti(struct vg_paint *paint,
-                                const VGint *values);
-void paint_radial_gradienti(struct vg_paint *paint,
-                            VGint *coords);
-
-
-void paint_set_ramp_stops(struct vg_paint *paint, const VGfloat *stops,
-                          int num);
-void paint_ramp_stops(struct vg_paint *paint, VGfloat *stops,
-                      int num);
-
-void paint_set_ramp_stopsi(struct vg_paint *paint, const VGint *stops,
-                           int num);
-void paint_ramp_stopsi(struct vg_paint *paint, VGint *stops,
-                       int num);
-
-int paint_num_ramp_stops(struct vg_paint *paint);
-
-void paint_set_spread_mode(struct vg_paint *paint,
-                           VGint mode);
-VGColorRampSpreadMode paint_spread_mode(struct vg_paint *paint);
-
-
-void paint_set_pattern(struct vg_paint *paint,
-                       struct vg_image *img);
-void paint_set_pattern_tiling(struct vg_paint *paint,
-                              VGTilingMode mode);
-VGTilingMode paint_pattern_tiling(struct vg_paint *paint);
-
-void paint_set_color_ramp_premultiplied(struct vg_paint *paint,
-                                        VGboolean set);
-VGboolean paint_color_ramp_premultiplied(struct vg_paint *paint);
-
-
-VGint paint_bind_samplers(struct vg_paint *paint, struct pipe_sampler_state **samplers,
-                          struct pipe_sampler_view **sampler_views);
-
-VGboolean paint_is_degenerate(struct vg_paint *paint);
-
-VGint paint_constant_buffer_size(struct vg_paint *paint);
-
-void paint_fill_constant_buffer(struct vg_paint *paint,
-                                const struct matrix *mat,
-                                void *buffer);
-
-VGboolean paint_is_opaque(struct vg_paint *paint);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/path.c b/src/gallium/state_trackers/vega/path.c
deleted file mode 100644 (file)
index 6448e64..0000000
+++ /dev/null
@@ -1,2077 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "path.h"
-
-#include "stroker.h"
-#include "polygon.h"
-#include "bezier.h"
-#include "matrix.h"
-#include "vg_context.h"
-#include "util_array.h"
-#include "arc.h"
-#include "path_utils.h"
-#include "paint.h"
-#include "shader.h"
-
-#include "util/u_memory.h"
-
-#include <assert.h>
-
-#define DEBUG_PATH 0
-
-struct path {
-   struct vg_object base;
-   VGbitfield caps;
-   VGboolean dirty;
-   VGboolean dirty_stroke;
-
-   VGPathDatatype datatype;
-
-   VGfloat scale;
-   VGfloat bias;
-
-   VGint num_segments;
-
-   struct array * segments;
-   struct array * control_points;
-
-   struct {
-      struct polygon_array polygon_array;
-      struct matrix matrix;
-   } fill_polys;
-
-   struct {
-      struct path *path;
-      struct matrix matrix;
-      VGfloat stroke_width;
-      VGfloat miter_limit;
-      VGCapStyle cap_style;
-      VGJoinStyle join_style;
-   } stroked;
-};
-
-
-static INLINE void data_at(void **data,
-                           struct path *p,
-                           VGint start, VGint count,
-                           VGfloat *out)
-{
-   VGPathDatatype dt = p->datatype;
-   VGint i;
-   VGint end = start + count;
-   VGfloat *itr = out;
-
-   switch(dt) {
-   case VG_PATH_DATATYPE_S_8: {
-      VGbyte **bdata = (VGbyte **)data;
-      for (i = start; i < end; ++i) {
-         *itr = (*bdata)[i];
-         ++itr;
-      }
-      *bdata += count;
-   }
-      break;
-   case VG_PATH_DATATYPE_S_16: {
-      VGshort **bdata = (VGshort **)data;
-      for (i = start; i < end; ++i) {
-         *itr = (*bdata)[i];
-         ++itr;
-      }
-      *bdata += count;
-   }
-      break;
-   case VG_PATH_DATATYPE_S_32: {
-      VGint **bdata = (VGint **)data;
-      for (i = start; i < end; ++i) {
-         *itr = (*bdata)[i];
-         ++itr;
-      }
-      *bdata += count;
-   }
-      break;
-   case VG_PATH_DATATYPE_F: {
-      VGfloat **fdata = (VGfloat **)data;
-      for (i = start; i < end; ++i) {
-         *itr = (*fdata)[i];
-         ++itr;
-      }
-      *fdata += count;
-   }
-      break;
-   default:
-      debug_assert(!"Unknown path datatype!");
-   }
-}
-
-
-void vg_float_to_datatype(VGPathDatatype datatype,
-                          VGubyte *common_data,
-                          const VGfloat *data,
-                          VGint num_coords)
-{
-   VGint i;
-   switch(datatype) {
-   case VG_PATH_DATATYPE_S_8: {
-      for (i = 0; i < num_coords; ++i) {
-         common_data[i] = (VGubyte)data[i];
-      }
-   }
-      break;
-   case VG_PATH_DATATYPE_S_16: {
-      VGshort *buf = (VGshort*)common_data;
-      for (i = 0; i < num_coords; ++i) {
-         buf[i] = (VGshort)data[i];
-      }
-   }
-      break;
-   case VG_PATH_DATATYPE_S_32: {
-      VGint *buf = (VGint*)common_data;
-      for (i = 0; i < num_coords; ++i) {
-         buf[i] = (VGint)data[i];
-      }
-   }
-      break;
-   case VG_PATH_DATATYPE_F: {
-      memcpy(common_data, data, sizeof(VGfloat) * num_coords);
-   }
-      break;
-   default:
-      debug_assert(!"Unknown path datatype!");
-   }
-}
-
-static void coords_adjust_by_scale_bias(struct path *p,
-                                        void *pdata, VGint num_coords,
-                                        VGfloat scale, VGfloat bias,
-                                        VGPathDatatype datatype)
-{
-   VGfloat data[8];
-   void *coords = (VGfloat *)pdata;
-   VGubyte *common_data = (VGubyte *)pdata;
-   VGint size_dst = size_for_datatype(datatype);
-   VGint i;
-
-   for (i = 0; i < num_coords; ++i) {
-      data_at(&coords, p, 0, 1, data);
-      data[0] = data[0] * scale + bias;
-      vg_float_to_datatype(datatype, common_data, data, 1);
-      common_data += size_dst;
-   }
-}
-
-struct path * path_create(VGPathDatatype dt, VGfloat scale, VGfloat bias,
-                          VGint segmentCapacityHint,
-                          VGint coordCapacityHint,
-                          VGbitfield capabilities)
-{
-   struct path *path = CALLOC_STRUCT(path);
-
-   vg_init_object(&path->base, vg_current_context(), VG_OBJECT_PATH);
-   path->caps = capabilities & VG_PATH_CAPABILITY_ALL;
-   vg_context_add_object(vg_current_context(), &path->base);
-
-   path->datatype = dt;
-   path->scale = scale;
-   path->bias = bias;
-
-   path->segments = array_create(size_for_datatype(VG_PATH_DATATYPE_S_8));
-   path->control_points = array_create(size_for_datatype(dt));
-
-   path->dirty = VG_TRUE;
-   path->dirty_stroke = VG_TRUE;
-
-   return path;
-}
-
-static void polygon_array_cleanup(struct polygon_array *polyarray)
-{
-   if (polyarray->array) {
-      VGint i;
-
-      for (i = 0; i < polyarray->array->num_elements; i++) {
-         struct polygon *p = ((struct polygon **) polyarray->array->data)[i];
-         polygon_destroy(p);
-      }
-
-      array_destroy(polyarray->array);
-      polyarray->array = NULL;
-   }
-}
-
-void path_destroy(struct path *p)
-{
-   vg_context_remove_object(vg_current_context(), &p->base);
-
-   array_destroy(p->segments);
-   array_destroy(p->control_points);
-
-   polygon_array_cleanup(&p->fill_polys.polygon_array);
-
-   if (p->stroked.path)
-      path_destroy(p->stroked.path);
-
-   vg_free_object(&p->base);
-
-   FREE(p);
-}
-
-VGbitfield path_capabilities(struct path *p)
-{
-   return p->caps;
-}
-
-void path_set_capabilities(struct path *p, VGbitfield bf)
-{
-   p->caps = (bf & VG_PATH_CAPABILITY_ALL);
-}
-
-void path_append_data(struct path *p,
-                      VGint numSegments,
-                      const VGubyte * pathSegments,
-                      const void * pathData)
-{
-   VGint old_segments = p->num_segments;
-   VGint num_new_coords = num_elements_for_segments(pathSegments, numSegments);
-   array_append_data(p->segments, pathSegments, numSegments);
-   array_append_data(p->control_points, pathData, num_new_coords);
-
-   p->num_segments += numSegments;
-   if (!floatsEqual(p->scale, 1.f) || !floatsEqual(p->bias, 0.f)) {
-      VGubyte *coords = (VGubyte*)p->control_points->data;
-      coords_adjust_by_scale_bias(p,
-                                  coords + old_segments * p->control_points->datatype_size,
-                                  num_new_coords,
-                                  p->scale, p->bias, p->datatype);
-   }
-   p->dirty = VG_TRUE;
-   p->dirty_stroke = VG_TRUE;
-}
-
-VGint path_num_segments(struct path *p)
-{
-   return p->num_segments;
-}
-
-static INLINE void map_if_relative(VGfloat ox, VGfloat oy,
-                                   VGboolean relative,
-                                   VGfloat *x, VGfloat *y)
-{
-   if (relative) {
-      if (x)
-         *x += ox;
-      if (y)
-         *y += oy;
-   }
-}
-
-static INLINE void close_polygon(struct polygon *current,
-                                 VGfloat sx, VGfloat sy,
-                                 VGfloat ox, VGfloat oy,
-                                 struct  matrix *matrix)
-{
-   if (!floatsEqual(sx, ox) ||
-       !floatsEqual(sy, oy)) {
-      VGfloat x0 = sx;
-      VGfloat y0 = sy;
-      matrix_map_point(matrix, x0, y0, &x0, &y0);
-      polygon_vertex_append(current, x0, y0);
-   }
-}
-
-static void convert_path(struct path *p,
-                          VGPathDatatype to,
-                          void *dst,
-                          VGint num_coords)
-{
-   VGfloat data[8];
-   void *coords = (VGfloat *)p->control_points->data;
-   VGubyte *common_data = (VGubyte *)dst;
-   VGint size_dst = size_for_datatype(to);
-   VGint i;
-
-   for (i = 0; i < num_coords; ++i) {
-      data_at(&coords, p, 0, 1, data);
-      vg_float_to_datatype(to, common_data, data, 1);
-      common_data += size_dst;
-   }
-}
-
-static void polygon_array_calculate_bounds( struct polygon_array *polyarray )
-{
-   struct array *polys = polyarray->array;
-   VGfloat min_x, max_x;
-   VGfloat min_y, max_y;
-   VGfloat bounds[4];
-   unsigned i;
-
-   assert(polys);
-
-   if (!polys->num_elements) {
-      polyarray->min_x = 0.0f;
-      polyarray->min_y = 0.0f;
-      polyarray->max_x = 0.0f;
-      polyarray->max_y = 0.0f;
-      return;
-   }
-
-   polygon_bounding_rect((((struct polygon**)polys->data)[0]), bounds);
-   min_x = bounds[0];
-   min_y = bounds[1];
-   max_x = bounds[0] + bounds[2];
-   max_y = bounds[1] + bounds[3];
-   for (i = 1; i < polys->num_elements; ++i) {
-      struct polygon *p = (((struct polygon**)polys->data)[i]);
-      polygon_bounding_rect(p, bounds);
-      min_x = MIN2(min_x, bounds[0]);
-      min_y = MIN2(min_y, bounds[1]);
-      max_x = MAX2(max_x, bounds[0] + bounds[2]);
-      max_y = MAX2(max_y, bounds[1] + bounds[3]);
-   }
-
-   polyarray->min_x = min_x;
-   polyarray->min_y = min_y;
-   polyarray->max_x = max_x;
-   polyarray->max_y = max_y;
-}
-
-
-static struct polygon_array * path_get_fill_polygons(struct path *p, struct matrix *matrix)
-{
-   VGint i;
-   struct polygon *current = 0;
-   VGfloat sx, sy, px, py, ox, oy;
-   VGfloat x0, y0, x1, y1, x2, y2, x3, y3;
-   VGfloat data[8];
-   void *coords = (VGfloat *)p->control_points->data;
-   struct array *array;
-
-   memset(data, 0, sizeof(data));
-
-   if (p->fill_polys.polygon_array.array)
-   {
-      if (memcmp( &p->fill_polys.matrix,
-                  matrix,
-                  sizeof *matrix ) == 0 && p->dirty == VG_FALSE)
-      {
-         return &p->fill_polys.polygon_array;
-      }
-      else {
-         polygon_array_cleanup(&p->fill_polys.polygon_array);
-      }
-   }
-
-   /* an array of pointers to polygons */
-   array = array_create(sizeof(struct polygon *));
-
-   sx = sy = px = py = ox = oy = 0.f;
-
-   if (p->num_segments)
-      current = polygon_create(32);
-
-   for (i = 0; i < p->num_segments; ++i) {
-      VGubyte segment = ((VGubyte*)(p->segments->data))[i];
-      VGint command = SEGMENT_COMMAND(segment);
-      VGboolean relative = SEGMENT_ABS_REL(segment);
-
-      switch(command) {
-      case VG_CLOSE_PATH:
-         close_polygon(current, sx, sy, ox, oy, matrix);
-         ox = sx;
-         oy = sy;
-         break;
-      case VG_MOVE_TO:
-         if (current && polygon_vertex_count(current) > 0) {
-            /* add polygon */
-            close_polygon(current, sx, sy, ox, oy, matrix);
-            array_append_data(array, &current, 1);
-            current = polygon_create(32);
-         }
-         data_at(&coords, p, 0, 2, data);
-         x0 = data[0];
-         y0 = data[1];
-         map_if_relative(ox, oy, relative, &x0, &y0);
-         sx = x0;
-         sy = y0;
-         ox = x0;
-         oy = y0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         polygon_vertex_append(current, x0, y0);
-         break;
-      case VG_LINE_TO:
-         data_at(&coords, p, 0, 2, data);
-         x0 = data[0];
-         y0 = data[1];
-         map_if_relative(ox, oy, relative, &x0, &y0);
-         ox = x0;
-         oy = y0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         polygon_vertex_append(current, x0, y0);
-         break;
-      case VG_HLINE_TO:
-         data_at(&coords, p, 0, 1, data);
-         x0 = data[0];
-         y0 = oy;
-         map_if_relative(ox, oy, relative, &x0, 0);
-         ox = x0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         polygon_vertex_append(current, x0, y0);
-         break;
-      case VG_VLINE_TO:
-         data_at(&coords, p, 0, 1, data);
-         x0 = ox;
-         y0 = data[0];
-         map_if_relative(ox, oy, relative, 0, &y0);
-         oy = y0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         polygon_vertex_append(current, x0, y0);
-         break;
-      case VG_CUBIC_TO: {
-         struct bezier bezier;
-         data_at(&coords, p, 0, 6, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = data[0];
-         y1 = data[1];
-         x2 = data[2];
-         y2 = data[3];
-         x3 = data[4];
-         y3 = data[5];
-         map_if_relative(ox, oy, relative, &x1, &y1);
-         map_if_relative(ox, oy, relative, &x2, &y2);
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         ox = x3;
-         oy = y3;
-         px = x2;
-         py = y2;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         bezier_init(&bezier, x0, y0, x1, y1,
-                       x2, y2, x3, y3);
-         bezier_add_to_polygon(&bezier, current);
-      }
-         break;
-      case VG_QUAD_TO: {
-         struct bezier bezier;
-         data_at(&coords, p, 0, 4, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = data[0];
-         y1 = data[1];
-         x3 = data[2];
-         y3 = data[3];
-         map_if_relative(ox, oy, relative, &x1, &y1);
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         px = x1;
-         py = y1;
-         { /* form a cubic out of it */
-            x2 = (x3 + 2*x1) / 3.f;
-            y2 = (y3 + 2*y1) / 3.f;
-            x1 = (x0 + 2*x1) / 3.f;
-            y1 = (y0 + 2*y1) / 3.f;
-         }
-         ox = x3;
-         oy = y3;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         bezier_init(&bezier, x0, y0, x1, y1,
-                       x2, y2, x3, y3);
-         bezier_add_to_polygon(&bezier, current);
-      }
-         break;
-      case VG_SQUAD_TO: {
-         struct bezier bezier;
-         data_at(&coords, p, 0, 2, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = 2*ox-px;
-         y1 = 2*oy-py;
-         x3 = data[0];
-         y3 = data[1];
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         px = x1;
-         py = y1;
-         { /* form a cubic out of it */
-            x2 = (x3 + 2*x1) / 3.f;
-            y2 = (y3 + 2*y1) / 3.f;
-            x1 = (x0 + 2*x1) / 3.f;
-            y1 = (y0 + 2*y1) / 3.f;
-         }
-         ox = x3;
-         oy = y3;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         bezier_init(&bezier, x0, y0, x1, y1,
-                     x2, y2, x3, y3);
-         bezier_add_to_polygon(&bezier, current);
-      }
-         break;
-      case VG_SCUBIC_TO: {
-         struct bezier bezier;
-         data_at(&coords, p, 0, 4, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = 2*ox-px;
-         y1 = 2*oy-py;
-         x2 = data[0];
-         y2 = data[1];
-         x3 = data[2];
-         y3 = data[3];
-         map_if_relative(ox, oy, relative, &x2, &y2);
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         ox = x3;
-         oy = y3;
-         px = x2;
-         py = y2;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         bezier_init(&bezier, x0, y0, x1, y1,
-                              x2, y2, x3, y3);
-         bezier_add_to_polygon(&bezier, current);
-      }
-         break;
-      case VG_SCCWARC_TO:
-      case VG_SCWARC_TO:
-      case VG_LCCWARC_TO:
-      case VG_LCWARC_TO: {
-         VGfloat rh, rv, rot;
-         struct arc arc;
-
-         data_at(&coords, p, 0, 5, data);
-         x0  = ox;
-         y0  = oy;
-         rh  = data[0];
-         rv  = data[1];
-         rot = data[2];
-         x1  = data[3];
-         y1  = data[4];
-         map_if_relative(ox, oy, relative, &x1, &y1);
-#if 0
-         debug_printf("------- ARC (%f, %f), (%f, %f) %f, %f, %f\n",
-                      x0, y0, x1, y1, rh, rv, rot);
-#endif
-         arc_init(&arc, command, x0, y0, x1, y1,
-                  rh, rv, rot);
-         arc_add_to_polygon(&arc, current,
-                            matrix);
-         ox = x1;
-         oy = y1;
-         px = x1;
-         py = y1;
-      }
-         break;
-      default:
-         abort();
-         assert(!"Unknown segment!");
-      }
-   }
-   if (current) {
-      if (polygon_vertex_count(current) > 0) {
-         close_polygon(current, sx, sy, ox, oy, matrix);
-         array_append_data(array, &current, 1);
-      } else
-         polygon_destroy(current);
-   }
-
-   p->fill_polys.polygon_array.array = array;
-   p->fill_polys.matrix = *matrix;
-
-   polygon_array_calculate_bounds( &p->fill_polys.polygon_array );
-
-   p->dirty = VG_FALSE;
-
-   return &p->fill_polys.polygon_array;
-}
-
-VGbyte path_datatype_size(struct path *p)
-{
-   return size_for_datatype(p->datatype);
-}
-
-VGPathDatatype path_datatype(struct path *p)
-{
-   return p->datatype;
-}
-
-VGfloat path_scale(struct path *p)
-{
-   return p->scale;
-}
-
-VGfloat path_bias(struct path *p)
-{
-   return p->bias;
-}
-
-VGint path_num_coords(struct path *p)
-{
-   return num_elements_for_segments((VGubyte*)p->segments->data,
-                                    p->num_segments);
-}
-
-void path_modify_coords(struct path *p,
-                        VGint startIndex,
-                        VGint numSegments,
-                        const void * pathData)
-{
-   VGubyte *segments = (VGubyte*)(p->segments->data);
-   VGint count = num_elements_for_segments(&segments[startIndex], numSegments);
-   VGint start_cp = num_elements_for_segments(segments, startIndex);
-
-   array_change_data(p->control_points, pathData, start_cp, count);
-   coords_adjust_by_scale_bias(p,
-                               ((VGubyte*)p->control_points->data) +
-                               (startIndex * p->control_points->datatype_size),
-                               path_num_coords(p),
-                               p->scale, p->bias, p->datatype);
-   p->dirty = VG_TRUE;
-   p->dirty_stroke = VG_TRUE;
-}
-
-void path_for_each_segment(struct path *path,
-                           path_for_each_cb cb,
-                           void *user_data)
-{
-   VGint i;
-   struct path_for_each_data p;
-   VGfloat data[8];
-   void *coords = (VGfloat *)path->control_points->data;
-
-   p.coords = data;
-   p.sx = p.sy = p.px = p.py = p.ox = p.oy = 0.f;
-   p.user_data = user_data;
-
-   for (i = 0; i < path->num_segments; ++i) {
-      VGint command;
-      VGboolean relative;
-
-      p.segment = ((VGubyte*)(path->segments->data))[i];
-      command = SEGMENT_COMMAND(p.segment);
-      relative = SEGMENT_ABS_REL(p.segment);
-
-      switch(command) {
-      case VG_CLOSE_PATH:
-         cb(path, &p);
-         break;
-      case VG_MOVE_TO:
-         data_at(&coords, path, 0, 2, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], &data[1]);
-         cb(path, &p);
-         p.sx = data[0];
-         p.sy = data[1];
-         p.ox = data[0];
-         p.oy = data[1];
-         p.px = data[0];
-         p.py = data[1];
-         break;
-      case VG_LINE_TO:
-         data_at(&coords, path, 0, 2, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], &data[1]);
-         cb(path, &p);
-         p.ox = data[0];
-         p.oy = data[1];
-         p.px = data[0];
-         p.py = data[1];
-         break;
-      case VG_HLINE_TO:
-         data_at(&coords, path, 0, 1, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], 0);
-         p.segment = VG_LINE_TO;
-         data[1] = p.oy;
-         cb(path, &p);
-         p.ox = data[0];
-         p.oy = data[1];
-         p.px = data[0];
-         p.py = data[1];
-         break;
-      case VG_VLINE_TO:
-         data_at(&coords, path, 0, 1, data);
-         map_if_relative(p.ox, p.oy, relative, 0, &data[0]);
-         p.segment = VG_LINE_TO;
-         data[1] = data[0];
-         data[0] = p.ox;
-         cb(path, &p);
-         p.ox = data[0];
-         p.oy = data[1];
-         p.px = data[0];
-         p.py = data[1];
-         break;
-      case VG_CUBIC_TO: {
-         data_at(&coords, path, 0, 6, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], &data[1]);
-         map_if_relative(p.ox, p.oy, relative, &data[2], &data[3]);
-         map_if_relative(p.ox, p.oy, relative, &data[4], &data[5]);
-         cb(path, &p);
-         p.px = data[2];
-         p.py = data[3];
-         p.ox = data[4];
-         p.oy = data[5];
-      }
-         break;
-      case VG_QUAD_TO: {
-         data_at(&coords, path, 0, 4, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], &data[1]);
-         map_if_relative(p.ox, p.oy, relative, &data[2], &data[3]);
-         cb(path, &p);
-         p.px = data[0];
-         p.py = data[1];
-         p.ox = data[2];
-         p.oy = data[3];
-      }
-         break;
-      case VG_SQUAD_TO: {
-         data_at(&coords, path, 0, 2, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], &data[1]);
-         cb(path, &p);
-         p.px = 2*p.ox-p.px;
-         p.py = 2*p.oy-p.py;
-         p.ox = data[2];
-         p.oy = data[3];
-      }
-         break;
-      case VG_SCUBIC_TO: {
-         data_at(&coords, path, 0, 4, data);
-         map_if_relative(p.ox, p.oy, relative, &data[0], &data[1]);
-         map_if_relative(p.ox, p.oy, relative, &data[2], &data[3]);
-         cb(path, &p);
-         p.px = data[0];
-         p.py = data[1];
-         p.ox = data[2];
-         p.oy = data[3];
-      }
-         break;
-      case VG_SCCWARC_TO:
-      case VG_SCWARC_TO:
-      case VG_LCCWARC_TO:
-      case VG_LCWARC_TO: {
-         data_at(&coords, path, 0, 5, data);
-         map_if_relative(p.ox, p.oy, relative, &data[3], &data[4]);
-#if 0
-         debug_printf("------- ARC (%f, %f), (%f, %f) %f, %f, %f\n",
-                      p.ox, p.oy, data[3], data[4], data[0], data[1], data[2]);
-#endif
-         cb(path, &p);
-         p.ox = data[3];
-         p.oy = data[4];
-         p.px = data[3];
-         p.py = data[4];
-      }
-         break;
-      default:
-         abort();
-         assert(!"Unknown segment!");
-      }
-   }
-}
-
-struct transform_data {
-   struct array *segments;
-   struct array *coords;
-
-   struct matrix *matrix;
-
-   VGPathDatatype datatype;
-};
-
-static VGboolean transform_cb(struct path *p,
-                              struct path_for_each_data *pd)
-{
-   struct transform_data *td = (struct transform_data *)pd->user_data;
-   VGint num_coords = num_elements_for_segments(&pd->segment, 1);
-   VGubyte segment = SEGMENT_COMMAND(pd->segment);/* abs bit is 0 */
-   VGfloat data[8];
-   VGubyte common_data[sizeof(VGfloat)*8];
-
-   memcpy(data, pd->coords, sizeof(VGfloat) * num_coords);
-
-   switch(segment) {
-   case VG_CLOSE_PATH:
-      break;
-   case VG_MOVE_TO:
-      matrix_map_point(td->matrix,
-                       data[0], data[1], &data[0], &data[1]);
-      break;
-   case VG_LINE_TO:
-      matrix_map_point(td->matrix,
-                       data[0], data[1], &data[0], &data[1]);
-      break;
-   case VG_HLINE_TO:
-   case VG_VLINE_TO:
-      assert(0);
-      break;
-   case VG_QUAD_TO:
-      matrix_map_point(td->matrix,
-                       data[0], data[1], &data[0], &data[1]);
-      matrix_map_point(td->matrix,
-                       data[2], data[3], &data[2], &data[3]);
-      break;
-   case VG_CUBIC_TO:
-      matrix_map_point(td->matrix,
-                       data[0], data[1], &data[0], &data[1]);
-      matrix_map_point(td->matrix,
-                       data[2], data[3], &data[2], &data[3]);
-      matrix_map_point(td->matrix,
-                       data[4], data[5], &data[4], &data[5]);
-      break;
-   case VG_SQUAD_TO:
-      matrix_map_point(td->matrix,
-                       data[0], data[1], &data[0], &data[1]);
-      break;
-   case VG_SCUBIC_TO:
-      matrix_map_point(td->matrix,
-                       data[0], data[1], &data[0], &data[1]);
-      matrix_map_point(td->matrix,
-                       data[2], data[3], &data[2], &data[3]);
-      break;
-   case VG_SCCWARC_TO:
-   case VG_SCWARC_TO:
-   case VG_LCCWARC_TO:
-   case VG_LCWARC_TO: {
-      struct arc arc;
-      struct path *path = path_create(td->datatype,
-                                      1, 0, 0, 0, VG_PATH_CAPABILITY_ALL);
-      arc_init(&arc, segment,
-               pd->ox, pd->oy, data[3], data[4],
-               data[0], data[1], data[2]);
-
-      arc_to_path(&arc, path, td->matrix);
-
-      num_coords = path_num_coords(path);
-
-      array_append_data(td->segments, path->segments->data,
-                        path->num_segments);
-      array_append_data(td->coords, path->control_points->data,
-                        num_coords);
-      path_destroy(path);
-
-      return VG_TRUE;
-   }
-      break;
-   default:
-      break;
-   }
-
-   vg_float_to_datatype(td->datatype, common_data, data, num_coords);
-
-   array_append_data(td->segments, &pd->segment, 1);
-   array_append_data(td->coords, common_data, num_coords);
-   return VG_TRUE;
-}
-
-void path_transform(struct path *dst, struct path *src)
-{
-   struct transform_data data;
-   struct vg_context *ctx = dst->base.ctx;
-
-   data.segments =  dst->segments;
-   data.coords   =  dst->control_points;
-   data.matrix   = &ctx->state.vg.path_user_to_surface_matrix;
-   data.datatype = dst->datatype;
-
-   path_for_each_segment(src, transform_cb, (void*)&data);
-
-   dst->num_segments = dst->segments->num_elements;
-   dst->dirty = VG_TRUE;
-   dst->dirty_stroke = VG_TRUE;
-}
-
-void path_append_path(struct path *dst,
-                      struct path *src)
-{
-   VGint num_coords = path_num_coords(src);
-   void *dst_data = malloc(size_for_datatype(dst->datatype) * num_coords);
-   array_append_data(dst->segments,
-                     src->segments->data,
-                     src->num_segments);
-   convert_path(src, dst->datatype,
-                dst_data, num_coords);
-   array_append_data(dst->control_points,
-                     dst_data,
-                     num_coords);
-   free(dst_data);
-
-   dst->num_segments += src->num_segments;
-   dst->dirty = VG_TRUE;
-   dst->dirty_stroke = VG_TRUE;
-}
-
-static INLINE VGboolean is_segment_arc(VGubyte segment)
-{
-   VGubyte scommand = SEGMENT_COMMAND(segment);
-   return (scommand == VG_SCCWARC_TO ||
-           scommand == VG_SCWARC_TO ||
-           scommand == VG_LCCWARC_TO ||
-           scommand == VG_LCWARC_TO);
-}
-
-struct path_iter_data {
-   struct path *path;
-   VGubyte segment;
-   void *coords;
-   VGfloat px, py, ox, oy, sx, sy;
-};
-static INLINE VGubyte normalize_coords(struct path_iter_data *pd,
-                                       VGint *num_coords,
-                                       VGfloat *data)
-{
-   VGint command = SEGMENT_COMMAND(pd->segment);
-   VGboolean relative = SEGMENT_ABS_REL(pd->segment);
-
-   switch(command) {
-   case VG_CLOSE_PATH:
-      *num_coords = 0;
-      pd->ox = pd->sx;
-      pd->oy = pd->sy;
-      return VG_CLOSE_PATH;
-      break;
-   case VG_MOVE_TO:
-      data_at(&pd->coords, pd->path, 0, 2, data);
-      map_if_relative(pd->ox, pd->oy, relative, &data[0], &data[1]);
-      pd->sx = data[0];
-      pd->sy = data[1];
-      pd->ox = data[0];
-      pd->oy = data[1];
-      pd->px = data[0];
-      pd->py = data[1];
-      *num_coords = 2;
-      return VG_MOVE_TO_ABS;
-      break;
-   case VG_LINE_TO:
-      data_at(&pd->coords, pd->path, 0, 2, data);
-      map_if_relative(pd->ox, pd->oy, relative, &data[0], &data[1]);
-      pd->ox = data[0];
-      pd->oy = data[1];
-      pd->px = data[0];
-      pd->py = data[1];
-      *num_coords = 2;
-      return VG_LINE_TO_ABS;
-      break;
-   case VG_HLINE_TO:
-      data_at(&pd->coords, pd->path, 0, 1, data);
-      map_if_relative(pd->ox, pd->oy, relative, &data[0], 0);
-      data[1] = pd->oy;
-      pd->ox = data[0];
-      pd->oy = data[1];
-      pd->px = data[0];
-      pd->py = data[1];
-      *num_coords = 2;
-      return VG_LINE_TO_ABS;
-      break;
-   case VG_VLINE_TO:
-      data_at(&pd->coords, pd->path, 0, 1, data);
-      map_if_relative(pd->ox, pd->oy, relative, 0, &data[0]);
-      data[1] = data[0];
-      data[0] = pd->ox;
-      pd->ox = data[0];
-      pd->oy = data[1];
-      pd->px = data[0];
-      pd->py = data[1];
-      *num_coords = 2;
-      return VG_LINE_TO_ABS;
-      break;
-   case VG_CUBIC_TO: {
-      data_at(&pd->coords, pd->path, 0, 6, data);
-      map_if_relative(pd->ox, pd->oy, relative, &data[0], &data[1]);
-      map_if_relative(pd->ox, pd->oy, relative, &data[2], &data[3]);
-      map_if_relative(pd->ox, pd->oy, relative, &data[4], &data[5]);
-      pd->px = data[2];
-      pd->py = data[3];
-      pd->ox = data[4];
-      pd->oy = data[5];
-      *num_coords = 6;
-      return VG_CUBIC_TO_ABS;
-   }
-      break;
-   case VG_QUAD_TO: {
-      VGfloat x0, y0, x1, y1, x2, y2, x3, y3;
-      data_at(&pd->coords, pd->path, 0, 4, data);
-      x0 = pd->ox;
-      y0 = pd->oy;
-      x1 = data[0];
-      y1 = data[1];
-      x3 = data[2];
-      y3 = data[3];
-      map_if_relative(pd->ox, pd->oy, relative, &x1, &y1);
-      map_if_relative(pd->ox, pd->oy, relative, &x3, &y3);
-      pd->px = x1;
-      pd->py = y1;
-      { /* form a cubic out of it */
-         x2 = (x3 + 2*x1) / 3.f;
-         y2 = (y3 + 2*y1) / 3.f;
-         x1 = (x0 + 2*x1) / 3.f;
-         y1 = (y0 + 2*y1) / 3.f;
-      }
-      pd->ox = x3;
-      pd->oy = y3;
-      data[0] = x1;
-      data[1] = y1;
-      data[2] = x2;
-      data[3] = y2;
-      data[4] = x3;
-      data[5] = y3;
-      *num_coords = 6;
-      return VG_CUBIC_TO_ABS;
-   }
-      break;
-   case VG_SQUAD_TO: {
-      VGfloat x0, y0, x1, y1, x2, y2, x3, y3;
-      data_at(&pd->coords, pd->path, 0, 2, data);
-      x0 = pd->ox;
-      y0 = pd->oy;
-      x1 = 2 * pd->ox - pd->px;
-      y1 = 2 * pd->oy - pd->py;
-      x3 = data[0];
-      y3 = data[1];
-      map_if_relative(pd->ox, pd->oy, relative, &x3, &y3);
-      pd->px = x1;
-      pd->py = y1;
-      { /* form a cubic out of it */
-         x2 = (x3 + 2*x1) / 3.f;
-         y2 = (y3 + 2*y1) / 3.f;
-         x1 = (x0 + 2*x1) / 3.f;
-         y1 = (y0 + 2*y1) / 3.f;
-      }
-      pd->ox = x3;
-      pd->oy = y3;
-      data[0] = x1;
-      data[1] = y1;
-      data[2] = x2;
-      data[3] = y2;
-      data[4] = x3;
-      data[5] = y3;
-      *num_coords = 6;
-      return VG_CUBIC_TO_ABS;
-   }
-      break;
-   case VG_SCUBIC_TO: {
-      VGfloat x1, y1, x2, y2, x3, y3;
-      data_at(&pd->coords, pd->path, 0, 4, data);
-      x1 = 2*pd->ox-pd->px;
-      y1 = 2*pd->oy-pd->py;
-      x2 = data[0];
-      y2 = data[1];
-      x3 = data[2];
-      y3 = data[3];
-      map_if_relative(pd->ox, pd->oy, relative, &x2, &y2);
-      map_if_relative(pd->ox, pd->oy, relative, &x3, &y3);
-      pd->ox = x3;
-      pd->oy = y3;
-      pd->px = x2;
-      pd->py = y2;
-      data[0] = x1;
-      data[1] = y1;
-      data[2] = x2;
-      data[3] = y2;
-      data[4] = x3;
-      data[5] = y3;
-      *num_coords = 6;
-      return VG_CUBIC_TO_ABS;
-   }
-      break;
-   case VG_SCCWARC_TO:
-   case VG_SCWARC_TO:
-   case VG_LCCWARC_TO:
-   case VG_LCWARC_TO: {
-      data_at(&pd->coords, pd->path, 0, 5, data);
-      map_if_relative(pd->ox, pd->oy, relative, &data[3], &data[4]);
-      pd->ox = data[3];
-      pd->oy = data[4];
-      pd->px = data[3];
-      pd->py = data[4];
-      *num_coords = 5;
-      return command | VG_ABSOLUTE;
-   }
-      break;
-   default:
-      abort();
-      assert(!"Unknown segment!");
-      return 0;
-   }
-}
-
-static void linearly_interpolate(VGfloat *result,
-                                 const VGfloat *start,
-                                 const VGfloat *end,
-                                 VGfloat amount,
-                                 VGint number)
-{
-   VGint i;
-   for (i = 0; i < number; ++i) {
-      result[i] = start[i] + (end[i] - start[i]) * amount;
-   }
-}
-
-VGboolean path_interpolate(struct path *dst,
-                           struct path *start, struct path *end,
-                           VGfloat amount)
-{
-   /* temporary path that we can discard if it will turn
-    * out that start is not compatible with end */
-   struct path *res_path = path_create(dst->datatype,
-                                       1.0, 0.0,
-                                       0, 0, dst->caps);
-   VGint i;
-   VGfloat start_coords[8];
-   VGfloat end_coords[8];
-   VGfloat results[8];
-   VGubyte common_data[sizeof(VGfloat)*8];
-   struct path_iter_data start_iter, end_iter;
-
-   memset(&start_iter, 0, sizeof(struct path_iter_data));
-   memset(&end_iter, 0, sizeof(struct path_iter_data));
-
-   start_iter.path = start;
-   start_iter.coords = start->control_points->data;
-   end_iter.path = end;
-   end_iter.coords = end->control_points->data;
-
-   for (i = 0; i < start->num_segments; ++i) {
-      VGubyte segment;
-      VGubyte ssegment, esegment;
-      VGint snum_coords, enum_coords;
-      start_iter.segment = ((VGubyte*)(start->segments->data))[i];
-      end_iter.segment = ((VGubyte*)(end->segments->data))[i];
-
-      ssegment = normalize_coords(&start_iter, &snum_coords,
-                                  start_coords);
-      esegment = normalize_coords(&end_iter, &enum_coords,
-                                  end_coords);
-
-      if (is_segment_arc(ssegment)) {
-         if (!is_segment_arc(esegment)) {
-            path_destroy(res_path);
-            return VG_FALSE;
-         }
-         if (amount > 0.5)
-            segment = esegment;
-         else
-            segment = ssegment;
-      } else if (is_segment_arc(esegment)) {
-         path_destroy(res_path);
-         return VG_FALSE;
-      }
-      else if (ssegment != esegment) {
-         path_destroy(res_path);
-         return VG_FALSE;
-      }
-      else
-         segment = ssegment;
-
-      linearly_interpolate(results, start_coords, end_coords,
-                           amount, snum_coords);
-      vg_float_to_datatype(dst->datatype, common_data, results, snum_coords);
-      path_append_data(res_path, 1, &segment, common_data);
-   }
-
-   path_append_path(dst, res_path);
-   path_destroy(res_path);
-
-   dst->dirty = VG_TRUE;
-   dst->dirty_stroke = VG_TRUE;
-
-   return VG_TRUE;
-}
-
-void path_clear(struct path *p, VGbitfield capabilities)
-{
-   path_set_capabilities(p, capabilities);
-   array_destroy(p->segments);
-   array_destroy(p->control_points);
-   p->segments = array_create(size_for_datatype(VG_PATH_DATATYPE_S_8));
-   p->control_points = array_create(size_for_datatype(p->datatype));
-   p->num_segments = 0;
-   p->dirty = VG_TRUE;
-   p->dirty_stroke = VG_TRUE;
-}
-
-struct path * path_create_stroke(struct path *p,
-                                 struct matrix *matrix)
-{
-   VGint i;
-   VGfloat sx, sy, px, py, ox, oy;
-   VGfloat x0, y0, x1, y1, x2, y2, x3, y3;
-   VGfloat data[8];
-   void *coords = (VGfloat *)p->control_points->data;
-   int dashed = (p->base.ctx->state.vg.stroke.dash_pattern_num ? 1 : 0);
-   struct dash_stroker stroker;
-   struct vg_state *vg_state = &p->base.ctx->state.vg;
-
-   if (p->stroked.path)
-   {
-      /* ### compare the dash patterns to see if we can cache them.
-       *     for now we simply always bail out if the path is dashed.
-       */
-      if (memcmp( &p->stroked.matrix,
-                  matrix,
-                  sizeof *matrix ) == 0 &&
-          !dashed && !p->dirty_stroke &&
-          floatsEqual(p->stroked.stroke_width, vg_state->stroke.line_width.f) &&
-          floatsEqual(p->stroked.miter_limit, vg_state->stroke.miter_limit.f) &&
-          p->stroked.cap_style == vg_state->stroke.cap_style &&
-          p->stroked.join_style == vg_state->stroke.join_style)
-      {
-         return p->stroked.path;
-      }
-      else {
-         path_destroy( p->stroked.path );
-         p->stroked.path = NULL;
-      }
-   }
-
-
-   sx = sy = px = py = ox = oy = 0.f;
-
-   if (dashed)
-      dash_stroker_init((struct stroker *)&stroker, vg_state);
-   else
-      stroker_init((struct stroker *)&stroker, vg_state);
-
-   stroker_begin((struct stroker *)&stroker);
-
-   for (i = 0; i < p->num_segments; ++i) {
-      VGubyte segment = ((VGubyte*)(p->segments->data))[i];
-      VGint command = SEGMENT_COMMAND(segment);
-      VGboolean relative = SEGMENT_ABS_REL(segment);
-
-      switch(command) {
-      case VG_CLOSE_PATH: {
-            VGfloat x0 = sx;
-            VGfloat y0 = sy;
-            matrix_map_point(matrix, x0, y0, &x0, &y0);
-            stroker_line_to((struct stroker *)&stroker, x0, y0);
-      }
-         break;
-      case VG_MOVE_TO:
-         data_at(&coords, p, 0, 2, data);
-         x0 = data[0];
-         y0 = data[1];
-         map_if_relative(ox, oy, relative, &x0, &y0);
-         sx = x0;
-         sy = y0;
-         ox = x0;
-         oy = y0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         stroker_move_to((struct stroker *)&stroker, x0, y0);
-         break;
-      case VG_LINE_TO:
-         data_at(&coords, p, 0, 2, data);
-         x0 = data[0];
-         y0 = data[1];
-         map_if_relative(ox, oy, relative, &x0, &y0);
-         ox = x0;
-         oy = y0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         stroker_line_to((struct stroker *)&stroker, x0, y0);
-         break;
-      case VG_HLINE_TO:
-         data_at(&coords, p, 0, 1, data);
-         x0 = data[0];
-         y0 = oy;
-         map_if_relative(ox, oy, relative, &x0, 0);
-         ox = x0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         stroker_line_to((struct stroker *)&stroker, x0, y0);
-         break;
-      case VG_VLINE_TO:
-         data_at(&coords, p, 0, 1, data);
-         x0 = ox;
-         y0 = data[0];
-         map_if_relative(ox, oy, relative, 0, &y0);
-         oy = y0;
-         px = x0;
-         py = y0;
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         stroker_line_to((struct stroker *)&stroker, x0, y0);
-         break;
-      case VG_CUBIC_TO: {
-         data_at(&coords, p, 0, 6, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = data[0];
-         y1 = data[1];
-         x2 = data[2];
-         y2 = data[3];
-         x3 = data[4];
-         y3 = data[5];
-         map_if_relative(ox, oy, relative, &x1, &y1);
-         map_if_relative(ox, oy, relative, &x2, &y2);
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         if (floatsEqual(x1, ox) && floatsEqual(y1, oy) &&
-             floatsEqual(x1, x2) && floatsEqual(y1, y2) &&
-             floatsEqual(x2, x3) && floatsEqual(y2, y3)) {
-            /*ignore the empty segment */
-            continue;
-         } else if (floatsEqual(x3, ox) && floatsEqual(y3, oy)) {
-            /* if dup vertex, emit a line */
-            ox = x3;
-            oy = y3;
-            matrix_map_point(matrix, x3, y3, &x3, &y3);
-            stroker_line_to((struct stroker *)&stroker, x3, y3);
-            continue;
-         }
-         ox = x3;
-         oy = y3;
-         px = x2;
-         py = y2;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         stroker_curve_to((struct stroker *)&stroker, x1, y1, x2, y2, x3, y3);
-      }
-         break;
-      case VG_QUAD_TO: {
-         data_at(&coords, p, 0, 4, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = data[0];
-         y1 = data[1];
-         x3 = data[2];
-         y3 = data[3];
-         map_if_relative(ox, oy, relative, &x1, &y1);
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         px = x1;
-         py = y1;
-         { /* form a cubic out of it */
-            x2 = (x3 + 2*x1) / 3.f;
-            y2 = (y3 + 2*y1) / 3.f;
-            x1 = (x0 + 2*x1) / 3.f;
-            y1 = (y0 + 2*y1) / 3.f;
-         }
-         if (floatsEqual(x1, ox) && floatsEqual(y1, oy) &&
-             floatsEqual(x1, x2) && floatsEqual(y1, y2) &&
-             floatsEqual(x2, x3) && floatsEqual(y2, y3)) {
-            /*ignore the empty segment */
-            continue;
-         } else if (floatsEqual(x3, ox) && floatsEqual(y3, oy)) {
-            /* if dup vertex, emit a line */
-            ox = x3;
-            oy = y3;
-            matrix_map_point(matrix, x3, y3, &x3, &y3);
-            stroker_line_to((struct stroker *)&stroker, x3, y3);
-            continue;
-         }
-         ox = x3;
-         oy = y3;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         stroker_curve_to((struct stroker *)&stroker, x1, y1, x2, y2, x3, y3);
-      }
-         break;
-      case VG_SQUAD_TO: {
-         data_at(&coords, p, 0, 2, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = 2*ox-px;
-         y1 = 2*oy-py;
-         x3 = data[0];
-         y3 = data[1];
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         px = x1;
-         py = y1;
-         { /* form a cubic out of it */
-            x2 = (x3 + 2*x1) / 3.f;
-            y2 = (y3 + 2*y1) / 3.f;
-            x1 = (x0 + 2*x1) / 3.f;
-            y1 = (y0 + 2*y1) / 3.f;
-         }
-         if (floatsEqual(x1, ox) && floatsEqual(y1, oy) &&
-             floatsEqual(x1, x2) && floatsEqual(y1, y2) &&
-             floatsEqual(x2, x3) && floatsEqual(y2, y3)) {
-            /*ignore the empty segment */
-            continue;
-         } else if (floatsEqual(x3, ox) && floatsEqual(y3, oy)) {
-            /* if dup vertex, emit a line */
-            ox = x3;
-            oy = y3;
-            matrix_map_point(matrix, x3, y3, &x3, &y3);
-            stroker_line_to((struct stroker *)&stroker, x3, y3);
-            continue;
-         }
-         ox = x3;
-         oy = y3;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         stroker_curve_to((struct stroker *)&stroker, x1, y1, x2, y2, x3, y3);
-      }
-         break;
-      case VG_SCUBIC_TO: {
-         data_at(&coords, p, 0, 4, data);
-         x0 = ox;
-         y0 = oy;
-         x1 = 2*ox-px;
-         y1 = 2*oy-py;
-         x2 = data[0];
-         y2 = data[1];
-         x3 = data[2];
-         y3 = data[3];
-         map_if_relative(ox, oy, relative, &x2, &y2);
-         map_if_relative(ox, oy, relative, &x3, &y3);
-         if (floatsEqual(x1, ox) && floatsEqual(y1, oy) &&
-             floatsEqual(x1, x2) && floatsEqual(y1, y2) &&
-             floatsEqual(x2, x3) && floatsEqual(y2, y3)) {
-            /*ignore the empty segment */
-            continue;
-         } else if (floatsEqual(x3, ox) && floatsEqual(y3, oy)) {
-            /* if dup vertex, emit a line */
-            ox = x3;
-            oy = y3;
-            matrix_map_point(matrix, x3, y3, &x3, &y3);
-            stroker_line_to((struct stroker *)&stroker, x3, y3);
-            continue;
-         }
-         ox = x3;
-         oy = y3;
-         px = x2;
-         py = y2;
-         assert(matrix_is_affine(matrix));
-         matrix_map_point(matrix, x0, y0, &x0, &y0);
-         matrix_map_point(matrix, x1, y1, &x1, &y1);
-         matrix_map_point(matrix, x2, y2, &x2, &y2);
-         matrix_map_point(matrix, x3, y3, &x3, &y3);
-         stroker_curve_to((struct stroker *)&stroker, x1, y1, x2, y2, x3, y3);
-      }
-         break;
-      case VG_SCCWARC_TO:
-      case VG_SCWARC_TO:
-      case VG_LCCWARC_TO:
-      case VG_LCWARC_TO: {
-         VGfloat rh, rv, rot;
-         struct arc arc;
-
-         data_at(&coords, p, 0, 5, data);
-         x0  = ox;
-         y0  = oy;
-         rh  = data[0];
-         rv  = data[1];
-         rot = data[2];
-         x1  = data[3];
-         y1  = data[4];
-         map_if_relative(ox, oy, relative, &x1, &y1);
-         if (floatsEqual(x1, ox) && floatsEqual(y1, oy)) {
-            /* if dup vertex, emit a line */
-            ox = x1;
-            oy = y1;
-            matrix_map_point(matrix, x1, y1, &x1, &y1);
-            stroker_line_to((struct stroker *)&stroker, x1, y1);
-            continue;
-         }
-         arc_init(&arc, command, x0, y0, x1, y1,
-                  rh, rv, rot);
-         arc_stroke_cb(&arc, (struct stroker *)&stroker,
-                       matrix);
-         ox = x1;
-         oy = y1;
-         px = x1;
-         py = y1;
-      }
-         break;
-      default:
-         abort();
-         assert(!"Unknown segment!");
-      }
-   }
-
-   stroker_end((struct stroker *)&stroker);
-
-   if (dashed)
-      dash_stroker_cleanup((struct dash_stroker *)&stroker);
-   else
-      stroker_cleanup((struct stroker *)&stroker);
-
-   p->stroked.path = stroker.base.path;
-   p->stroked.matrix = *matrix;
-   p->dirty_stroke = VG_FALSE;
-   p->stroked.stroke_width = vg_state->stroke.line_width.f;
-   p->stroked.miter_limit = vg_state->stroke.miter_limit.f;
-   p->stroked.cap_style = vg_state->stroke.cap_style;
-   p->stroked.join_style = vg_state->stroke.join_style;
-
-   return stroker.base.path;
-}
-
-void path_render(struct path *p, VGbitfield paintModes,
-                 struct matrix *mat)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix paint_matrix;
-
-   vg_validate_state(ctx);
-
-   shader_set_drawing_image(ctx->shader, VG_FALSE);
-   shader_set_image(ctx->shader, 0);
-#if 0
-   fprintf(stderr, "Matrix(11=%f 12=%f 13=%f 21=%f 22=%f 23=%f 31=%f 32=%f 33=%f)\n",
-           mat->m[0], mat->m[1], mat->m[2],
-           mat->m[3], mat->m[4], mat->m[5],
-           mat->m[6], mat->m[7], mat->m[8]);
-#endif
-   if ((paintModes & VG_FILL_PATH) &&
-       vg_get_paint_matrix(ctx,
-                           &ctx->state.vg.fill_paint_to_user_matrix,
-                           mat,
-                           &paint_matrix)) {
-      /* First the fill */
-      shader_set_surface_matrix(ctx->shader, mat);
-      shader_set_paint(ctx->shader, ctx->state.vg.fill_paint);
-      shader_set_paint_matrix(ctx->shader, &paint_matrix);
-      shader_bind(ctx->shader);
-      path_fill(p);
-   }
-
-   if ((paintModes & VG_STROKE_PATH) &&
-       vg_get_paint_matrix(ctx,
-                           &ctx->state.vg.stroke_paint_to_user_matrix,
-                           mat,
-                           &paint_matrix)) {
-      /* 8.7.5: "line width less than or equal to 0 prevents stroking from
-       *  taking place."*/
-      if (ctx->state.vg.stroke.line_width.f <= 0)
-         return;
-      shader_set_surface_matrix(ctx->shader, mat);
-      shader_set_paint(ctx->shader, ctx->state.vg.stroke_paint);
-      shader_set_paint_matrix(ctx->shader, &paint_matrix);
-      shader_bind(ctx->shader);
-      path_stroke(p);
-   }
-}
-
-void path_fill(struct path *p)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct matrix identity;
-
-   matrix_load_identity(&identity);
-
-   {
-      struct polygon_array *polygon_array = path_get_fill_polygons(p, &identity);
-      struct array *polys = polygon_array->array;
-
-      if (!polygon_array || !polys || !polys->num_elements) {
-         return;
-      }
-      polygon_array_fill(polygon_array, ctx);
-   }
-}
-
-void path_stroke(struct path *p)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGFillRule old_fill = ctx->state.vg.fill_rule;
-   struct matrix identity;
-   struct path *stroke;
-
-   matrix_load_identity(&identity);
-   stroke = path_create_stroke(p, &identity);
-   if (stroke && !path_is_empty(stroke)) {
-      ctx->state.vg.fill_rule = VG_NON_ZERO;
-
-      path_fill(stroke);
-
-      ctx->state.vg.fill_rule = old_fill;
-   }
-}
-
-void path_move_to(struct path *p, float x, float y)
-{
-   VGubyte segment = VG_MOVE_TO_ABS;
-   VGubyte common_data[sizeof(VGfloat) * 2];
-   VGfloat data[2] = {x, y};
-
-   vg_float_to_datatype(p->datatype, common_data, data, 2);
-   path_append_data(p, 1, &segment, common_data);
-}
-
-void path_line_to(struct path *p, float x, float y)
-{
-   VGubyte segment = VG_LINE_TO_ABS;
-   VGubyte common_data[sizeof(VGfloat) * 2];
-   VGfloat data[2] = {x, y};
-
-   vg_float_to_datatype(p->datatype, common_data, data, 2);
-
-   path_append_data(p, 1, &segment, common_data);
-}
-
-void path_cubic_to(struct path *p, float px1, float py1,
-                   float px2, float py2,
-                   float x, float y)
-{
-   VGubyte segment = VG_CUBIC_TO_ABS;
-   VGubyte common_data[sizeof(VGfloat) * 6];
-   VGfloat data[6];
-
-   data[0] = px1; data[1] = py1;
-   data[2] = px2; data[3] = py2;
-   data[4] = x;   data[5] = y;
-
-   vg_float_to_datatype(p->datatype, common_data, data, 6);
-
-   path_append_data(p, 1, &segment, common_data);
-}
-
-static INLINE void line_bounds(VGfloat *line /*x1,y1,x2,y2*/,
-                               VGfloat *bounds)
-{
-   bounds[0] = MIN2(line[0], line[2]);
-   bounds[1] = MIN2(line[1], line[3]);
-   bounds[2] = MAX2(line[0], line[2]) - bounds[0];
-   bounds[3] = MAX2(line[1], line[3]) - bounds[1];
-}
-
-static INLINE void unite_bounds(VGfloat *bounds,
-                                VGfloat *el)
-{
-   VGfloat cx1, cy1, cx2, cy2;
-   VGfloat nx1, ny1, nx2, ny2;
-
-   cx1 = bounds[0];
-   cy1 = bounds[1];
-   cx2 = bounds[0] + bounds[2];
-   cy2 = bounds[1] + bounds[3];
-
-   nx1 = el[0];
-   ny1 = el[1];
-   nx2 = el[0] + el[2];
-   ny2 = el[1] + el[3];
-
-   bounds[0] = MIN2(cx1, nx1);
-   bounds[1] = MIN2(cy1, ny1);
-   bounds[2] = MAX2(cx2, nx2) - bounds[0];
-   bounds[3] = MAX2(cy2, ny2) - bounds[1];
-}
-
-static INLINE void set_bounds(VGfloat *bounds,
-                              VGfloat *element_bounds,
-                              VGboolean *initialized)
-{
-   if (!(*initialized)) {
-      memcpy(bounds, element_bounds, 4 * sizeof(VGfloat));
-      *initialized = VG_TRUE;
-   } else
-      unite_bounds(bounds, element_bounds);
-}
-
-void path_bounding_rect(struct path *p, float *x, float *y,
-                        float *w, float *h)
-{
-   VGint i;
-   VGfloat coords[8];
-   struct path_iter_data iter;
-   VGint num_coords;
-   VGfloat bounds[4];
-   VGfloat element_bounds[4];
-   VGfloat ox, oy;
-   VGboolean bounds_inited = VG_FALSE;
-
-   memset(&iter, 0, sizeof(struct path_iter_data));
-   memset(&bounds, 0, sizeof(bounds));
-
-   if (!p->num_segments) {
-      bounds[2] = -1;
-      bounds[3] = -1;
-   }
-
-
-   iter.path = p;
-   iter.coords = p->control_points->data;
-
-   for (i = 0; i < p->num_segments; ++i) {
-      VGubyte segment;
-      iter.segment = ((VGubyte*)(p->segments->data))[i];
-
-      ox = iter.ox;
-      oy = iter.oy;
-
-      segment = normalize_coords(&iter, &num_coords, coords);
-
-      switch(segment) {
-      case VG_CLOSE_PATH:
-      case VG_MOVE_TO_ABS:
-         break;
-      case VG_LINE_TO_ABS: {
-         VGfloat line[4] = {ox, oy, coords[0], coords[1]};
-         line_bounds(line, element_bounds);
-         set_bounds(bounds, element_bounds, &bounds_inited);
-      }
-         break;
-      case VG_CUBIC_TO_ABS: {
-         struct bezier bezier;
-         bezier_init(&bezier, ox, oy,
-                     coords[0], coords[1],
-                     coords[2], coords[3],
-                     coords[4], coords[5]);
-         bezier_exact_bounds(&bezier, element_bounds);
-         set_bounds(bounds, element_bounds, &bounds_inited);
-      }
-         break;
-      case VG_SCCWARC_TO:
-      case VG_SCWARC_TO:
-      case VG_LCCWARC_TO:
-      case VG_LCWARC_TO: {
-         struct arc arc;
-         struct matrix identity;
-         struct path *path = path_create(VG_PATH_DATATYPE_F,
-                                         1, 0, 0, 0, VG_PATH_CAPABILITY_ALL);
-
-         matrix_load_identity(&identity);
-         arc_init(&arc, segment,
-                  ox, oy, coords[3], coords[4],
-                  coords[0], coords[1], coords[2]);
-
-         arc_to_path(&arc, path, &identity);
-
-         path_bounding_rect(path, element_bounds + 0, element_bounds + 1,
-                            element_bounds + 2, element_bounds + 3);
-         set_bounds(bounds, element_bounds, &bounds_inited);
-      }
-         break;
-      default:
-         assert(0);
-      }
-   }
-
-   *x = bounds[0];
-   *y = bounds[1];
-   *w = bounds[2];
-   *h = bounds[3];
-}
-
-float path_length(struct path *p, int start_segment, int num_segments)
-{
-   VGint i;
-   VGfloat coords[8];
-   struct path_iter_data iter;
-   VGint num_coords;
-   VGfloat length = 0;
-   VGfloat ox, oy;
-   VGboolean in_range = VG_FALSE;
-
-   memset(&iter, 0, sizeof(struct path_iter_data));
-
-   iter.path = p;
-   iter.coords = p->control_points->data;
-
-   for (i = 0; i < (start_segment + num_segments); ++i) {
-      VGubyte segment;
-
-      iter.segment = ((VGubyte*)(p->segments->data))[i];
-
-      ox = iter.ox;
-      oy = iter.oy;
-
-      segment = normalize_coords(&iter, &num_coords, coords);
-
-      in_range = (i >= start_segment) && i <= (start_segment + num_segments);
-      if (!in_range)
-         continue;
-
-      switch(segment) {
-      case VG_MOVE_TO_ABS:
-         break;
-      case VG_CLOSE_PATH: {
-         VGfloat line[4] = {ox, oy, iter.sx, iter.sy};
-         length += line_lengthv(line);
-      }
-         break;
-      case VG_LINE_TO_ABS: {
-         VGfloat line[4] = {ox, oy, coords[0], coords[1]};
-         length += line_lengthv(line);
-      }
-         break;
-      case VG_CUBIC_TO_ABS: {
-         struct bezier bezier;
-         bezier_init(&bezier, ox, oy,
-                     coords[0], coords[1],
-                     coords[2], coords[3],
-                     coords[4], coords[5]);
-         length += bezier_length(&bezier, BEZIER_DEFAULT_ERROR);
-      }
-         break;
-      case VG_SCCWARC_TO:
-      case VG_SCWARC_TO:
-      case VG_LCCWARC_TO:
-      case VG_LCWARC_TO: {
-         struct arc arc;
-         struct matrix identity;
-         struct path *path = path_create(VG_PATH_DATATYPE_F,
-                                         1, 0, 0, 0, VG_PATH_CAPABILITY_ALL);
-
-         matrix_load_identity(&identity);
-         arc_init(&arc, segment,
-                  ox, oy, coords[3], coords[4],
-                  coords[0], coords[1], coords[2]);
-
-         arc_to_path(&arc, path, &identity);
-
-         length += path_length(path, 0, path_num_segments(path));
-      }
-         break;
-      default:
-         assert(0);
-      }
-   }
-
-   return length;
-}
-
-static INLINE VGboolean point_on_current_segment(VGfloat distance,
-                                                 VGfloat length,
-                                                 VGfloat segment_length)
-{
-   return
-      (((floatIsZero(distance) || distance < 0) && floatIsZero(length)) ||
-       ((distance > length || floatsEqual(distance, length)) &&
-        (floatsEqual(distance, length + segment_length) ||
-         distance < (length + segment_length))));
-}
-
-static VGboolean path_point_segment(struct path_iter_data iter,
-                                    struct path_iter_data prev_iter,
-                                    VGfloat coords[8],
-                                    VGfloat distance,
-                                    VGfloat length, VGfloat *current_length,
-                                    VGfloat *point, VGfloat *normal)
-{
-   switch (iter.segment) {
-   case VG_MOVE_TO_ABS:
-      break;
-   case VG_CLOSE_PATH: {
-      VGfloat line[4] = {prev_iter.ox, prev_iter.oy, iter.sx, iter.sy};
-      VGboolean on_current_segment = VG_FALSE;
-      *current_length = line_lengthv(line);
-      on_current_segment = point_on_current_segment(distance,
-                                                    length,
-                                                    *current_length);
-      if (on_current_segment) {
-         VGfloat at = (distance - length) / line_lengthv(line);
-         line_normal_vector(line, normal);
-         line_point_at(line, at, point);
-         return VG_TRUE;
-      }
-   }
-      break;
-   case VG_LINE_TO_ABS: {
-      VGfloat line[4] = {prev_iter.ox, prev_iter.oy, coords[0], coords[1]};
-      VGboolean on_current_segment = VG_FALSE;
-      *current_length = line_lengthv(line);
-      on_current_segment = point_on_current_segment(distance,
-                                                    length,
-                                                    *current_length);
-      if (on_current_segment) {
-         VGfloat at = (distance - length) / line_lengthv(line);
-         line_normal_vector(line, normal);
-         line_point_at(line, at, point);
-         return VG_TRUE;
-      }
-   }
-      break;
-   case VG_CUBIC_TO_ABS: {
-      struct bezier bezier;
-      bezier_init(&bezier, prev_iter.ox, prev_iter.oy,
-                  coords[0], coords[1],
-                  coords[2], coords[3],
-                  coords[4], coords[5]);
-      *current_length = bezier_length(&bezier, BEZIER_DEFAULT_ERROR);
-      if (point_on_current_segment(distance, length, *current_length)) {
-         bezier_point_at_length(&bezier, distance - length,
-                                point, normal);
-         return VG_TRUE;
-      }
-   }
-      break;
-   case VG_SCCWARC_TO:
-   case VG_SCWARC_TO:
-   case VG_LCCWARC_TO:
-   case VG_LCWARC_TO: {
-      struct arc arc;
-      struct matrix identity;
-      struct path *path = path_create(VG_PATH_DATATYPE_F,
-                                      1, 0, 0, 0, VG_PATH_CAPABILITY_ALL);
-
-      matrix_load_identity(&identity);
-      arc_init(&arc, iter.segment,
-               prev_iter.ox, prev_iter.oy, coords[3], coords[4],
-               coords[0], coords[1], coords[2]);
-
-      arc_to_path(&arc, path, &identity);
-
-      *current_length = path_length(path, 0, path_num_segments(path));
-      if (point_on_current_segment(distance, length, *current_length)) {
-         path_point(path, 0, path_num_segments(path),
-                    distance - length, point, normal);
-         return VG_TRUE;
-      }
-   }
-      break;
-   default:
-      assert(0);
-   }
-   return VG_FALSE;
-}
-
-void path_point(struct path *p, VGint start_segment, VGint num_segments,
-                VGfloat distance, VGfloat *point, VGfloat *normal)
-{
-   VGint i;
-   VGfloat coords[8];
-   struct path_iter_data iter, prev_iter;
-   VGint num_coords;
-   VGfloat length = 0;
-   VGfloat current_length = 0;
-
-   memset(&iter, 0, sizeof(struct path_iter_data));
-   memset(&prev_iter, 0, sizeof(struct path_iter_data));
-
-   point[0] = 0;
-   point[1] = 0;
-
-   normal[0] = 0;
-   normal[1] = -1;
-
-   iter.path = p;
-   iter.coords = p->control_points->data;
-   if (distance < 0)
-      distance = 0;
-
-   for (i = 0; i < (start_segment + num_segments); ++i) {
-      VGboolean outside_range = (i < start_segment ||
-                                 i >= (start_segment + num_segments));
-
-      prev_iter = iter;
-
-      iter.segment = ((VGubyte*)(p->segments->data))[i];
-      iter.segment = normalize_coords(&iter, &num_coords, coords);
-
-      if (outside_range)
-         continue;
-
-      if (path_point_segment(iter, prev_iter, coords,
-                             distance, length, &current_length,
-                             point, normal))
-         return;
-
-      length += current_length;
-   }
-
-   /*
-    *OpenVG 1.0 - 8.6.11 vgPointAlongPath
-    *
-    * If distance is greater than or equal to the path length
-    *(i.e., the value returned by vgPathLength when called with the same
-    *startSegment and numSegments parameters), the visual ending point of
-    *the path is used.
-    */
-   {
-      switch (iter.segment) {
-      case VG_MOVE_TO_ABS:
-         break;
-      case VG_CLOSE_PATH: {
-         VGfloat line[4] = {prev_iter.ox, prev_iter.oy, iter.sx, iter.sy};
-         line_normal_vector(line, normal);
-         line_point_at(line, 1.f, point);
-      }
-         break;
-      case VG_LINE_TO_ABS: {
-         VGfloat line[4] = {prev_iter.ox, prev_iter.oy, coords[0], coords[1]};
-         line_normal_vector(line, normal);
-         line_point_at(line, 1.f, point);
-      }
-         break;
-      case VG_CUBIC_TO_ABS: {
-         struct bezier bezier;
-         bezier_init(&bezier, prev_iter.ox, prev_iter.oy,
-                     coords[0], coords[1],
-                     coords[2], coords[3],
-                     coords[4], coords[5]);
-         bezier_point_at_t(&bezier, 1.f, point, normal);
-      }
-         break;
-      case VG_SCCWARC_TO:
-      case VG_SCWARC_TO:
-      case VG_LCCWARC_TO:
-      case VG_LCWARC_TO: {
-         struct arc arc;
-         struct matrix identity;
-         struct path *path = path_create(VG_PATH_DATATYPE_F,
-                                         1, 0, 0, 0, VG_PATH_CAPABILITY_ALL);
-
-         matrix_load_identity(&identity);
-         arc_init(&arc, iter.segment,
-                  prev_iter.ox, prev_iter.oy, coords[3], coords[4],
-                  coords[0], coords[1], coords[2]);
-
-         arc_to_path(&arc, path, &identity);
-
-         path_point(path, 0, path_num_segments(path),
-                    /* to make sure we're bigger than len * 2 it */
-                    2 * path_length(path, 0, path_num_segments(path)),
-                    point, normal);
-      }
-         break;
-      default:
-         assert(0);
-      }
-   }
-}
-
-VGboolean path_is_empty(struct path *p)
-{
-   return p->segments->num_elements == 0;
-}
diff --git a/src/gallium/state_trackers/vega/path.h b/src/gallium/state_trackers/vega/path.h
deleted file mode 100644 (file)
index d84b1f0..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef _PATH_H
-#define _PATH_H
-
-#include "VG/openvg.h"
-
-struct path;
-struct polygon;
-struct matrix;
-
-enum fill_rule {
-   ODD_EVEN_FILL,
-   WINDING_FILL
-};
-
-
-struct path_for_each_data {
-   VGubyte segment;
-   /* all coords are absolute, even if segment is relative */
-   const VGfloat *coords;
-   VGfloat sx, sy, ox, oy, px, py;
-   void *user_data;
-};
-
-typedef VGboolean (*path_for_each_cb)(struct path *p,
-                                      struct path_for_each_data *data);
-
-
-struct path *path_create(VGPathDatatype dt, VGfloat scale, VGfloat bias,
-                         VGint segmentCapacityHint,
-                         VGint coordCapacityHint,
-                         VGbitfield capabilities);
-void path_destroy(struct path *p);
-
-VGbitfield path_capabilities(struct path *p);
-void path_set_capabilities(struct path *p, VGbitfield bf);
-
-void path_append_data(struct path *p,
-                      VGint numSegments,
-                      const VGubyte * pathSegments,
-                      const void * pathData);
-
-void path_append_path(struct path *dst,
-                      struct path *src);
-
-VGint path_num_segments(struct path *p);
-
-void path_bounding_rect(struct path *p, float *x, float *y,
-                        float *w, float *h);
-float path_length(struct path *p, int start_segment, int num_segments);
-
-void path_set_fill_rule(enum fill_rule fill);
-enum fill_rule path_fill_rule(enum fill_rule fill);
-
-VGboolean path_is_empty(struct path *p);
-
-VGbyte path_datatype_size(struct path *p);
-
-VGPathDatatype path_datatype(struct path *p);
-VGfloat path_scale(struct path *p);
-VGfloat path_bias(struct path *p);
-VGint path_num_coords(struct path *p);
-
-void path_modify_coords(struct path *p,
-                        VGint startIndex,
-                        VGint numSegments,
-                        const void * pathData);
-
-struct path *path_create_stroke(struct path *p,
-                                struct matrix *m);
-
-void path_for_each_segment(struct path *path,
-                           path_for_each_cb cb,
-                           void *user_data);
-
-void path_transform(struct path *dst, struct path *src);
-VGboolean path_interpolate(struct path *dst,
-                           struct path *start, struct path *end,
-                           VGfloat amount);
-
-void path_clear(struct path *p, VGbitfield capabilities);
-void path_render(struct path *p, VGbitfield paintModes, struct matrix *mat);
-void path_fill(struct path *p);
-void path_stroke(struct path *p);
-
-void path_move_to(struct path *p, float x, float y);
-void path_line_to(struct path *p, float x, float y);
-void path_cubic_to(struct path *p, float px1, float py1,
-                   float px2, float py2,
-                   float x, float y);
-
-void path_point(struct path *p, VGint startSegment, VGint numSegments,
-                VGfloat distance, VGfloat *point, VGfloat *normal);
-
-
-
-void vg_float_to_datatype(VGPathDatatype datatype,
-                          VGubyte *common_data,
-                          const VGfloat *data,
-                          VGint num_coords);
-#endif
diff --git a/src/gallium/state_trackers/vega/path_utils.h b/src/gallium/state_trackers/vega/path_utils.h
deleted file mode 100644 (file)
index c2b3221..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef PATH_UTILS_H
-#define PATH_UTILS_H
-
-#include "VG/openvg.h"
-
-#define SEGMENT_COMMAND(command) /* Extract segment type */     \
-    ((command) & 0x1e)
-#define SEGMENT_ABS_REL(command) /* Extract absolute/relative bit */ \
-    ((command) & 0x1)
-
-static INLINE VGint size_for_datatype(VGPathDatatype datatype)
-{
-   switch(datatype) {
-   case VG_PATH_DATATYPE_S_8:
-      return 1;
-   case VG_PATH_DATATYPE_S_16:
-      return 2;
-   case VG_PATH_DATATYPE_S_32:
-      return 4;
-   case VG_PATH_DATATYPE_F:
-      return 4;
-   default:
-      assert(!"unknown datatype");
-   }
-   return 0;
-}
-
-static INLINE VGint num_elements_for_segments(const VGubyte *segments,
-                                              VGint num_segments)
-{
-   VGint i;
-   VGint count = 0;
-
-   for (i = 0; i < num_segments; ++i) {
-      VGubyte segment = segments[i];
-      VGint command = SEGMENT_COMMAND(segment);
-      switch(command) {
-      case VG_CLOSE_PATH:
-         break;
-      case VG_MOVE_TO:
-         count += 2;
-         break;
-      case VG_LINE_TO:
-         count += 2;
-         break;
-      case VG_HLINE_TO:
-         count += 1;
-         break;
-      case VG_VLINE_TO:
-         count += 1;
-         break;
-      case VG_QUAD_TO:
-         count += 4;
-         break;
-      case VG_CUBIC_TO:
-         count += 6;
-         break;
-      case VG_SQUAD_TO:
-         count += 2;
-         break;
-      case VG_SCUBIC_TO:
-         count += 4;
-         break;
-      case VG_SCCWARC_TO:
-         count += 5;
-         break;
-      case VG_SCWARC_TO:
-         count += 5;
-         break;
-      case VG_LCCWARC_TO:
-         count += 5;
-         break;
-      case VG_LCWARC_TO:
-         count += 5;
-         break;
-      default:
-         assert(!"Unknown segment!");
-      }
-   }
-   return count;
-}
-
-#endif
diff --git a/src/gallium/state_trackers/vega/polygon.c b/src/gallium/state_trackers/vega/polygon.c
deleted file mode 100644 (file)
index 37f96d4..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "polygon.h"
-
-#include "matrix.h" /*for floatsEqual*/
-#include "vg_context.h"
-#include "vg_state.h"
-#include "renderer.h"
-#include "util_array.h"
-#include "VG/openvg.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_state.h"
-#include "util/u_inlines.h"
-#include "pipe/p_screen.h"
-
-#include "util/u_draw_quad.h"
-#include "util/u_math.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-#define DEBUG_POLYGON 0
-
-#define COMPONENTS 2
-
-struct polygon
-{
-   VGfloat *data;
-   VGint    size;
-
-   VGint    num_verts;
-
-   VGboolean dirty;
-   void *user_vbuf;
-   struct pipe_screen *screen;
-};
-
-static float *ptr_to_vertex(float *data, int idx)
-{
-   return data + (idx * COMPONENTS);
-}
-
-#if 0
-static void polygon_print(struct polygon *poly)
-{
-   int i;
-   float *vert;
-   debug_printf("Polygon %p, size = %d\n", poly, poly->num_verts);
-   for (i = 0; i < poly->num_verts; ++i) {
-      vert = ptr_to_vertex(poly->data, i);
-      debug_printf("%f, %f,  ", vert[0], vert[1]);
-   }
-   debug_printf("\nend\n");
-}
-#endif
-
-
-struct polygon * polygon_create(int size)
-{
-   struct polygon *poly = malloc(sizeof(struct polygon));
-
-   poly->data = malloc(sizeof(float) * COMPONENTS * size);
-   poly->size = size;
-   poly->num_verts = 0;
-   poly->dirty = VG_TRUE;
-   poly->user_vbuf = NULL;
-
-   return poly;
-}
-
-struct polygon * polygon_create_from_data(float *data, int size)
-{
-   struct polygon *poly = polygon_create(size);
-
-   memcpy(poly->data, data, sizeof(float) * COMPONENTS * size);
-   poly->num_verts = size;
-   poly->dirty = VG_TRUE;
-   poly->user_vbuf = NULL;
-
-   return poly;
-}
-
-void polygon_destroy(struct polygon *poly)
-{
-   free(poly->data);
-   free(poly);
-}
-
-void polygon_resize(struct polygon *poly, int new_size)
-{
-   float *data = malloc(sizeof(float) * COMPONENTS * new_size);
-   int size = MIN2(sizeof(float) * COMPONENTS * new_size,
-                   sizeof(float) * COMPONENTS * poly->size);
-   memcpy(data, poly->data, size);
-   free(poly->data);
-   poly->data = data;
-   poly->size = new_size;
-   poly->dirty = VG_TRUE;
-}
-
-int polygon_size(struct polygon *poly)
-{
-   return poly->size;
-}
-
-int polygon_vertex_count(struct polygon *poly)
-{
-   return poly->num_verts;
-}
-
-float * polygon_data(struct polygon *poly)
-{
-   return poly->data;
-}
-
-void polygon_vertex_append(struct polygon *p,
-                           float x, float y)
-{
-   float *vert;
-#if DEBUG_POLYGON
-   debug_printf("Append vertex [%f, %f]\n", x, y);
-#endif
-   if (p->num_verts >= p->size) {
-      polygon_resize(p, p->size * 2);
-   }
-
-   vert = ptr_to_vertex(p->data, p->num_verts);
-   vert[0] = x;
-   vert[1] = y;
-   ++p->num_verts;
-   p->dirty = VG_TRUE;
-}
-
-void polygon_set_vertex(struct polygon *p, int idx,
-                        float x, float y)
-{
-   float *vert;
-   if (idx >= p->num_verts) {
-      /*fixme: error reporting*/
-      abort();
-      return;
-   }
-
-   vert = ptr_to_vertex(p->data, idx);
-   vert[0] = x;
-   vert[1] = y;
-   p->dirty = VG_TRUE;
-}
-
-void polygon_vertex(struct polygon *p, int idx,
-                    float *vertex)
-{
-   float *vert;
-   if (idx >= p->num_verts) {
-      /*fixme: error reporting*/
-      abort();
-      return;
-   }
-
-   vert = ptr_to_vertex(p->data, idx);
-   vertex[0] = vert[0];
-   vertex[1] = vert[1];
-}
-
-void polygon_bounding_rect(struct polygon *p,
-                           float *rect)
-{
-   int i;
-   float minx, miny, maxx, maxy;
-   float *vert = ptr_to_vertex(p->data, 0);
-   minx = vert[0];
-   maxx = vert[0];
-   miny = vert[1];
-   maxy = vert[1];
-
-   for (i = 1; i < p->num_verts; ++i) {
-      vert = ptr_to_vertex(p->data, i);
-      minx = MIN2(vert[0], minx);
-      miny = MIN2(vert[1], miny);
-
-      maxx = MAX2(vert[0], maxx);
-      maxy = MAX2(vert[1], maxy);
-   }
-
-   rect[0] = minx;
-   rect[1] = miny;
-   rect[2] = maxx - minx;
-   rect[3] = maxy - miny;
-}
-
-int polygon_contains_point(struct polygon *p,
-                           float x, float y)
-{
-   return 0;
-}
-
-void polygon_append_polygon(struct polygon *dst,
-                            struct polygon *src)
-{
-   if (dst->num_verts + src->num_verts >= dst->size) {
-      polygon_resize(dst, dst->num_verts + src->num_verts * 1.5);
-   }
-   memcpy(ptr_to_vertex(dst->data, dst->num_verts),
-          src->data, src->num_verts * COMPONENTS * sizeof(VGfloat));
-   dst->num_verts += src->num_verts;
-}
-
-VGboolean polygon_is_closed(struct polygon *p)
-{
-   VGfloat start[2], end[2];
-
-   polygon_vertex(p, 0, start);
-   polygon_vertex(p, p->num_verts - 1, end);
-
-   return floatsEqual(start[0], end[0]) && floatsEqual(start[1], end[1]);
-}
-
-static void polygon_prepare_buffer(struct vg_context *ctx,
-                                   struct polygon *poly)
-{
-   struct pipe_context *pipe;
-
-   /*polygon_print(poly);*/
-
-   pipe = ctx->pipe;
-
-   if (poly->user_vbuf == NULL || poly->dirty) {
-      poly->screen = pipe->screen;
-      poly->user_vbuf = poly->data;
-      poly->dirty = VG_FALSE;
-   }
-}
-
-void polygon_fill(struct polygon *poly, struct vg_context *ctx)
-{
-   struct pipe_vertex_element velement;
-   struct pipe_vertex_buffer vbuffer;
-   VGfloat bounds[4];
-   VGfloat min_x, min_y, max_x, max_y;
-
-   assert(poly);
-   polygon_bounding_rect(poly, bounds);
-   min_x = bounds[0];
-   min_y = bounds[1];
-   max_x = bounds[0] + bounds[2];
-   max_y = bounds[1] + bounds[3];
-
-#if DEBUG_POLYGON
-   debug_printf("Poly bounds are [%f, %f], [%f, %f]\n",
-                min_x, min_y, max_x, max_y);
-#endif
-
-   polygon_prepare_buffer(ctx, poly);
-
-   /* tell renderer about the vertex attributes */
-   memset(&velement, 0, sizeof(velement));
-   velement.src_offset = 0;
-   velement.instance_divisor = 0;
-   velement.vertex_buffer_index = 0;
-   velement.src_format = PIPE_FORMAT_R32G32_FLOAT;
-
-   /* tell renderer about the vertex buffer */
-   memset(&vbuffer, 0, sizeof(vbuffer));
-   vbuffer.user_buffer = poly->user_vbuf;
-   vbuffer.stride = COMPONENTS * sizeof(float);  /* vertex size */
-
-   renderer_polygon_stencil_begin(ctx->renderer,
-         &velement, ctx->state.vg.fill_rule, VG_FALSE);
-   renderer_polygon_stencil(ctx->renderer, &vbuffer,
-         PIPE_PRIM_TRIANGLE_FAN, 0, (VGuint) poly->num_verts);
-   renderer_polygon_stencil_end(ctx->renderer);
-
-   renderer_polygon_fill_begin(ctx->renderer, VG_FALSE);
-   renderer_polygon_fill(ctx->renderer, min_x, min_y, max_x, max_y);
-   renderer_polygon_fill_end(ctx->renderer);
-}
-
-void polygon_array_fill(struct polygon_array *polyarray, struct vg_context *ctx)
-{
-   struct array *polys = polyarray->array;
-   VGfloat min_x = polyarray->min_x;
-   VGfloat min_y = polyarray->min_y;
-   VGfloat max_x = polyarray->max_x;
-   VGfloat max_y = polyarray->max_y;
-   struct pipe_vertex_element velement;
-   struct pipe_vertex_buffer vbuffer;
-   VGint i;
-
-
-#if DEBUG_POLYGON
-   debug_printf("%s: Poly bounds are [%f, %f], [%f, %f]\n",
-                __FUNCTION__,
-                min_x, min_y, max_x, max_y);
-#endif
-
-   /* tell renderer about the vertex attributes */
-   memset(&velement, 0, sizeof(velement));
-   velement.src_offset = 0;
-   velement.instance_divisor = 0;
-   velement.vertex_buffer_index = 0;
-   velement.src_format = PIPE_FORMAT_R32G32_FLOAT;
-
-   /* tell renderer about the vertex buffer */
-   memset(&vbuffer, 0, sizeof(vbuffer));
-   vbuffer.stride = COMPONENTS * sizeof(float);  /* vertex size */
-
-   /* prepare the stencil buffer */
-   renderer_polygon_stencil_begin(ctx->renderer,
-         &velement, ctx->state.vg.fill_rule, VG_FALSE);
-   for (i = 0; i < polys->num_elements; ++i) {
-      struct polygon *poly = (((struct polygon**)polys->data)[i]);
-
-      polygon_prepare_buffer(ctx, poly);
-      vbuffer.user_buffer = poly->user_vbuf;
-
-      renderer_polygon_stencil(ctx->renderer, &vbuffer,
-            PIPE_PRIM_TRIANGLE_FAN, 0, (VGuint) poly->num_verts);
-   }
-   renderer_polygon_stencil_end(ctx->renderer);
-
-   /* fill it */
-   renderer_polygon_fill_begin(ctx->renderer, VG_FALSE);
-   renderer_polygon_fill(ctx->renderer, min_x, min_y, max_x, max_y);
-   renderer_polygon_fill_end(ctx->renderer);
-}
diff --git a/src/gallium/state_trackers/vega/polygon.h b/src/gallium/state_trackers/vega/polygon.h
deleted file mode 100644 (file)
index 22672b7..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef POLYGON_H
-#define POLYGON_H
-
-#include "VG/openvg.h"
-
-struct polygon;
-struct vg_context;
-struct vg_paint;
-struct array;
-
-struct polygon *polygon_create(int size);
-struct polygon *polygon_create_from_data(float *data, int size);
-void            polygon_destroy(struct polygon *poly);
-
-void            polygon_resize(struct polygon *poly, int new_size);
-int             polygon_size(struct polygon *poly);
-
-int             polygon_vertex_count(struct polygon *poly);
-float *         polygon_data(struct polygon *poly);
-
-void            polygon_vertex_append(struct polygon *p,
-                                      float x, float y);
-void            polygon_append_polygon(struct polygon *dst,
-                                       struct polygon *src);
-void            polygon_set_vertex(struct polygon *p, int idx,
-                                   float x, float y);
-void            polygon_vertex(struct polygon *p, int idx,
-                               float *vertex);
-
-void            polygon_bounding_rect(struct polygon *p,
-                                      float *rect);
-int             polygon_contains_point(struct polygon *p,
-                                       float x, float y);
-
-VGboolean       polygon_is_closed(struct polygon *p);
-
-void polygon_fill(struct polygon *p, struct vg_context *pipe);
-
-/* TODO: make a file/module around this struct
- */
-struct polygon_array {
-   struct array *array;
-   VGfloat min_x, max_x;
-   VGfloat min_y, max_y;
-};
-
-void polygon_array_fill(struct polygon_array *polyarray, struct vg_context *ctx);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/renderer.c b/src/gallium/state_trackers/vega/renderer.c
deleted file mode 100644 (file)
index d369c32..0000000
+++ /dev/null
@@ -1,1558 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- * Copyright 2010 LunarG, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "renderer.h"
-
-#include "vg_context.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "util/u_inlines.h"
-#include "pipe/p_screen.h"
-#include "pipe/p_shader_tokens.h"
-
-#include "util/u_draw_quad.h"
-#include "util/u_simple_shaders.h"
-#include "util/u_memory.h"
-#include "util/u_sampler.h"
-#include "util/u_surface.h"
-#include "util/u_math.h"
-#include "util/u_format.h"
-
-#include "cso_cache/cso_context.h"
-#include "tgsi/tgsi_ureg.h"
-
-typedef enum {
-   RENDERER_STATE_INIT,
-   RENDERER_STATE_COPY,
-   RENDERER_STATE_DRAWTEX,
-   RENDERER_STATE_SCISSOR,
-   RENDERER_STATE_CLEAR,
-   RENDERER_STATE_FILTER,
-   RENDERER_STATE_POLYGON_STENCIL,
-   RENDERER_STATE_POLYGON_FILL,
-   NUM_RENDERER_STATES
-} RendererState;
-
-typedef enum {
-   RENDERER_VS_PLAIN,
-   RENDERER_VS_COLOR,
-   RENDERER_VS_TEXTURE,
-   NUM_RENDERER_VS
-} RendererVs;
-
-typedef enum {
-   RENDERER_FS_COLOR,
-   RENDERER_FS_TEXTURE,
-   RENDERER_FS_SCISSOR,
-   RENDERER_FS_WHITE,
-   NUM_RENDERER_FS
-} RendererFs;
-
-struct renderer {
-   struct pipe_context *pipe;
-   struct cso_context *cso;
-
-   VGbitfield dirty;
-   struct {
-      struct pipe_rasterizer_state rasterizer;
-      struct pipe_depth_stencil_alpha_state dsa;
-      struct pipe_framebuffer_state fb;
-   } g3d;
-   struct matrix projection;
-
-   struct matrix mvp;
-   struct pipe_resource *vs_cbuf;
-
-   struct pipe_resource *fs_cbuf;
-   VGfloat fs_cbuf_data[32];
-   VGint fs_cbuf_len;
-
-   struct pipe_vertex_element velems[2];
-   VGfloat vertices[4][2][4];
-
-   void *cached_vs[NUM_RENDERER_VS];
-   void *cached_fs[NUM_RENDERER_FS];
-
-   RendererState state;
-
-   /* state data */
-   union {
-      struct {
-         VGint tex_width;
-         VGint tex_height;
-      } copy;
-
-      struct {
-         VGint tex_width;
-         VGint tex_height;
-      } drawtex;
-
-      struct {
-         VGboolean restore_dsa;
-      } scissor;
-
-      struct {
-         VGboolean use_sampler;
-         VGint tex_width, tex_height;
-      } filter;
-
-      struct {
-         struct pipe_depth_stencil_alpha_state dsa;
-         VGboolean manual_two_sides;
-         VGboolean restore_dsa;
-      } polygon_stencil;
-   } u;
-};
-
-/**
- * Return VG_TRUE if the renderer can use the resource as the asked bindings.
- */
-static VGboolean renderer_can_support(struct renderer *renderer,
-                                      struct pipe_resource *res,
-                                      unsigned bindings)
-{
-   struct pipe_screen *screen = renderer->pipe->screen;
-
-   return screen->is_format_supported(screen,
-         res->format, res->target, 0, bindings);
-}
-
-/**
- * Set the model-view-projection matrix used by vertex shaders.
- */
-static void renderer_set_mvp(struct renderer *renderer,
-                             const struct matrix *mvp)
-{
-   struct matrix *cur = &renderer->mvp;
-   struct pipe_resource *cbuf;
-   VGfloat consts[3][4];
-   VGint i;
-
-   /* projection only */
-   if (!mvp)
-      mvp = &renderer->projection;
-
-   /* re-upload only if necessary */
-   if (memcmp(cur, mvp, sizeof(*mvp)) == 0)
-      return;
-
-   /* 3x3 matrix to 3 constant vectors (no Z) */
-   for (i = 0; i < 3; i++) {
-      consts[i][0] = mvp->m[i + 0];
-      consts[i][1] = mvp->m[i + 3];
-      consts[i][2] = 0.0f;
-      consts[i][3] = mvp->m[i + 6];
-   }
-
-   cbuf = renderer->vs_cbuf;
-   pipe_resource_reference(&cbuf, NULL);
-   cbuf = pipe_buffer_create(renderer->pipe->screen,
-                             PIPE_BIND_CONSTANT_BUFFER,
-                             PIPE_USAGE_DEFAULT,
-                             sizeof(consts));
-   if (cbuf) {
-      pipe_buffer_write(renderer->pipe, cbuf,
-            0, sizeof(consts), consts);
-   }
-   pipe_set_constant_buffer(renderer->pipe,
-         PIPE_SHADER_VERTEX, 0, cbuf);
-
-   memcpy(cur, mvp, sizeof(*mvp));
-   renderer->vs_cbuf = cbuf;
-}
-
-/**
- * Create a simple vertex shader that passes through position and the given
- * attribute.
- */
-static void *create_passthrough_vs(struct pipe_context *pipe, int semantic_name)
-{
-   struct ureg_program *ureg;
-   struct ureg_src src[2], constants[3];
-   struct ureg_dst dst[2], tmp;
-   int i;
-
-   ureg = ureg_create(TGSI_PROCESSOR_VERTEX);
-   if (!ureg)
-      return NULL;
-
-   /* position is in user coordinates */
-   src[0] = ureg_DECL_vs_input(ureg, 0);
-   dst[0] = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 0);
-   tmp = ureg_DECL_temporary(ureg);
-   for (i = 0; i < Elements(constants); i++)
-      constants[i] = ureg_DECL_constant(ureg, i);
-
-   /* transform to clipped coordinates */
-   ureg_DP4(ureg, ureg_writemask(tmp, TGSI_WRITEMASK_X), src[0], constants[0]);
-   ureg_DP4(ureg, ureg_writemask(tmp, TGSI_WRITEMASK_Y), src[0], constants[1]);
-   ureg_MOV(ureg, ureg_writemask(tmp, TGSI_WRITEMASK_Z), src[0]);
-   ureg_DP4(ureg, ureg_writemask(tmp, TGSI_WRITEMASK_W), src[0], constants[2]);
-   ureg_MOV(ureg, dst[0], ureg_src(tmp));
-
-   if (semantic_name >= 0) {
-      src[1] = ureg_DECL_vs_input(ureg, 1);
-      dst[1] = ureg_DECL_output(ureg, semantic_name, 0);
-      ureg_MOV(ureg, dst[1], src[1]);
-   }
-
-   ureg_END(ureg);
-
-   return ureg_create_shader_and_destroy(ureg, pipe);
-}
-
-/**
- * Set renderer vertex shader.
- *
- * This function modifies vertex_shader state.
- */
-static void renderer_set_vs(struct renderer *r, RendererVs id)
-{
-   /* create as needed */
-   if (!r->cached_vs[id]) {
-      int semantic_name = -1;
-
-      switch (id) {
-      case RENDERER_VS_PLAIN:
-         break;
-      case RENDERER_VS_COLOR:
-         semantic_name = TGSI_SEMANTIC_COLOR;
-         break;
-      case RENDERER_VS_TEXTURE:
-         semantic_name = TGSI_SEMANTIC_GENERIC;
-         break;
-      default:
-         assert(!"Unknown renderer vs id");
-         break;
-      }
-
-      r->cached_vs[id] = create_passthrough_vs(r->pipe, semantic_name);
-   }
-
-   cso_set_vertex_shader_handle(r->cso, r->cached_vs[id]);
-}
-
-/**
- * Create a simple fragment shader that sets the depth to 0.0f.
- */
-static void *create_scissor_fs(struct pipe_context *pipe)
-{
-   struct ureg_program *ureg;
-   struct ureg_dst out;
-   struct ureg_src imm;
-
-   ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT);
-   out = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 0);
-   imm = ureg_imm4f(ureg, 0.0f, 0.0f, 0.0f, 0.0f);
-
-   ureg_MOV(ureg, ureg_writemask(out, TGSI_WRITEMASK_Z), imm);
-   ureg_END(ureg);
-
-   return ureg_create_shader_and_destroy(ureg, pipe);
-}
-
-/**
- * Create a simple fragment shader that sets the color to white.
- */
-static void *create_white_fs(struct pipe_context *pipe)
-{
-   struct ureg_program *ureg;
-   struct ureg_dst out;
-   struct ureg_src imm;
-
-   ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT);
-   out = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0);
-   imm = ureg_imm4f(ureg, 1.0f, 1.0f, 1.0f, 1.0f);
-
-   ureg_MOV(ureg, out, imm);
-   ureg_END(ureg);
-
-   return ureg_create_shader_and_destroy(ureg, pipe);
-}
-
-/**
- * Set renderer fragment shader.
- *
- * This function modifies fragment_shader state.
- */
-static void renderer_set_fs(struct renderer *r, RendererFs id)
-{
-   /* create as needed */
-   if (!r->cached_fs[id]) {
-      void *fs = NULL;
-
-      switch (id) {
-      case RENDERER_FS_COLOR:
-         fs = util_make_fragment_passthrough_shader(r->pipe,
-                          TGSI_SEMANTIC_COLOR, TGSI_INTERPOLATE_PERSPECTIVE,
-                          TRUE);
-         break;
-      case RENDERER_FS_TEXTURE:
-         fs = util_make_fragment_tex_shader(r->pipe,
-               TGSI_TEXTURE_2D, TGSI_INTERPOLATE_LINEAR);
-         break;
-      case RENDERER_FS_SCISSOR:
-         fs = create_scissor_fs(r->pipe);
-         break;
-      case RENDERER_FS_WHITE:
-         fs = create_white_fs(r->pipe);
-         break;
-      default:
-         assert(!"Unknown renderer fs id");
-         break;
-      }
-
-      r->cached_fs[id] = fs;
-   }
-
-   cso_set_fragment_shader_handle(r->cso, r->cached_fs[id]);
-}
-
-typedef enum {
-   VEGA_Y0_TOP,
-   VEGA_Y0_BOTTOM
-} VegaOrientation;
-
-static void vg_set_viewport(struct renderer *r,
-                            VegaOrientation orientation)
-{
-   const struct pipe_framebuffer_state *fb = &r->g3d.fb;
-   struct pipe_viewport_state viewport;
-   VGfloat y_scale = (orientation == VEGA_Y0_BOTTOM) ? -2.f : 2.f;
-
-   viewport.scale[0] =  fb->width / 2.f;
-   viewport.scale[1] =  fb->height / y_scale;
-   viewport.scale[2] =  1.0;
-   viewport.translate[0] = fb->width / 2.f;
-   viewport.translate[1] = fb->height / 2.f;
-   viewport.translate[2] = 0.0;
-
-   cso_set_viewport(r->cso, &viewport);
-}
-
-/**
- * Set renderer target.
- *
- * This function modifies framebuffer and viewport states.
- */
-static void renderer_set_target(struct renderer *r,
-                                struct pipe_surface *cbuf,
-                                struct pipe_surface *zsbuf,
-                                VGboolean y0_top)
-{
-   struct pipe_framebuffer_state fb;
-
-   memset(&fb, 0, sizeof(fb));
-   fb.width = cbuf->width;
-   fb.height = cbuf->height;
-   fb.cbufs[0] = cbuf;
-   fb.nr_cbufs = 1;
-   fb.zsbuf = zsbuf;
-   cso_set_framebuffer(r->cso, &fb);
-
-   vg_set_viewport(r, (y0_top) ? VEGA_Y0_TOP : VEGA_Y0_BOTTOM);
-}
-
-/**
- * Set renderer blend state.  Blending is disabled.
- *
- * This function modifies blend state.
- */
-static void renderer_set_blend(struct renderer *r,
-                               VGbitfield channel_mask)
-{
-   struct pipe_blend_state blend;
-
-   memset(&blend, 0, sizeof(blend));
-
-   blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
-   blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
-   blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO;
-   blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-
-   if (channel_mask & VG_RED)
-      blend.rt[0].colormask |= PIPE_MASK_R;
-   if (channel_mask & VG_GREEN)
-      blend.rt[0].colormask |= PIPE_MASK_G;
-   if (channel_mask & VG_BLUE)
-      blend.rt[0].colormask |= PIPE_MASK_B;
-   if (channel_mask & VG_ALPHA)
-      blend.rt[0].colormask |= PIPE_MASK_A;
-
-   cso_set_blend(r->cso, &blend);
-}
-
-/**
- * Set renderer sampler and view states.
- *
- * This function modifies samplers and fragment_sampler_views states.
- */
-static void renderer_set_samplers(struct renderer *r,
-                                  uint num_views,
-                                  struct pipe_sampler_view **views)
-{
-   struct pipe_sampler_state sampler;
-   unsigned tex_filter = PIPE_TEX_FILTER_NEAREST;
-   unsigned tex_wrap = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   uint i;
-
-   memset(&sampler, 0, sizeof(sampler));
-
-   sampler.min_img_filter = tex_filter;
-   sampler.mag_img_filter = tex_filter;
-   sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
-
-   sampler.wrap_s = tex_wrap;
-   sampler.wrap_t = tex_wrap;
-   sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-
-   sampler.normalized_coords = 1;
-
-   /* set samplers */
-   for (i = 0; i < num_views; i++)
-      cso_single_sampler(r->cso, PIPE_SHADER_FRAGMENT, i, &sampler);
-   cso_single_sampler_done(r->cso, PIPE_SHADER_FRAGMENT);
-
-   /* set views */
-   cso_set_sampler_views(r->cso, PIPE_SHADER_FRAGMENT, num_views, views);
-}
-
-/**
- * Set custom renderer fragment shader, and optionally set samplers and views
- * and upload the fragment constant buffer.
- *
- * This function modifies fragment_shader, samplers and fragment_sampler_views
- * states.
- */
-static void renderer_set_custom_fs(struct renderer *renderer,
-                                   void *fs,
-                                   const struct pipe_sampler_state **samplers,
-                                   struct pipe_sampler_view **views,
-                                   VGint num_samplers,
-                                   const void *const_buffer,
-                                   VGint const_buffer_len)
-{
-   cso_set_fragment_shader_handle(renderer->cso, fs);
-
-   /* set samplers and views */
-   if (num_samplers) {
-      cso_set_samplers(renderer->cso, PIPE_SHADER_FRAGMENT, num_samplers, samplers);
-      cso_set_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT, num_samplers, views);
-   }
-
-   /* upload fs constant buffer */
-   if (const_buffer_len) {
-      struct pipe_resource *cbuf = renderer->fs_cbuf;
-
-      if (!cbuf || renderer->fs_cbuf_len != const_buffer_len ||
-          memcmp(renderer->fs_cbuf_data, const_buffer, const_buffer_len)) {
-         pipe_resource_reference(&cbuf, NULL);
-
-         cbuf = pipe_buffer_create(renderer->pipe->screen,
-               PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_DEFAULT,
-               const_buffer_len);
-         pipe_buffer_write(renderer->pipe, cbuf, 0,
-               const_buffer_len, const_buffer);
-         pipe_set_constant_buffer(renderer->pipe,
-               PIPE_SHADER_FRAGMENT, 0, cbuf);
-
-         renderer->fs_cbuf = cbuf;
-         if (const_buffer_len <= sizeof(renderer->fs_cbuf_data)) {
-            memcpy(renderer->fs_cbuf_data, const_buffer, const_buffer_len);
-            renderer->fs_cbuf_len = const_buffer_len;
-         }
-         else {
-            renderer->fs_cbuf_len = 0;
-         }
-      }
-   }
-}
-
-/**
- * Setup renderer quad position.
- */
-static void renderer_quad_pos(struct renderer *r,
-                              VGfloat x0, VGfloat y0,
-                              VGfloat x1, VGfloat y1,
-                              VGboolean scissor)
-{
-   VGfloat z;
-
-   /* the depth test is used for scissoring */
-   z = (scissor) ? 0.0f : 1.0f;
-
-   /* positions */
-   r->vertices[0][0][0] = x0;
-   r->vertices[0][0][1] = y0;
-   r->vertices[0][0][2] = z;
-
-   r->vertices[1][0][0] = x1;
-   r->vertices[1][0][1] = y0;
-   r->vertices[1][0][2] = z;
-
-   r->vertices[2][0][0] = x1;
-   r->vertices[2][0][1] = y1;
-   r->vertices[2][0][2] = z;
-
-   r->vertices[3][0][0] = x0;
-   r->vertices[3][0][1] = y1;
-   r->vertices[3][0][2] = z;
-}
-
-/**
- * Setup renderer quad texture coordinates.
- */
-static void renderer_quad_texcoord(struct renderer *r,
-                                   VGfloat x0, VGfloat y0,
-                                   VGfloat x1, VGfloat y1,
-                                   VGint tex_width, VGint tex_height)
-{
-   VGfloat s0, t0, s1, t1, r0, q0;
-   VGint i;
-
-   s0 = x0 / tex_width;
-   s1 = x1 / tex_width;
-   t0 = y0 / tex_height;
-   t1 = y1 / tex_height;
-   r0 = 0.0f;
-   q0 = 1.0f;
-
-   /* texcoords */
-   r->vertices[0][1][0] = s0;
-   r->vertices[0][1][1] = t0;
-
-   r->vertices[1][1][0] = s1;
-   r->vertices[1][1][1] = t0;
-
-   r->vertices[2][1][0] = s1;
-   r->vertices[2][1][1] = t1;
-
-   r->vertices[3][1][0] = s0;
-   r->vertices[3][1][1] = t1;
-
-   for (i = 0; i < 4; i++) {
-      r->vertices[i][1][2] = r0;
-      r->vertices[i][1][3] = q0;
-   }
-}
-
-/**
- * Draw renderer quad.
- */
-static void renderer_quad_draw(struct renderer *r)
-{
-   util_draw_user_vertex_buffer(r->cso, r->vertices, PIPE_PRIM_TRIANGLE_FAN,
-                                Elements(r->vertices),     /* verts */
-                                Elements(r->vertices[0])); /* attribs/vert */
-}
-
-/**
- * Prepare the renderer for copying.
- */
-VGboolean renderer_copy_begin(struct renderer *renderer,
-                              struct pipe_surface *dst,
-                              VGboolean y0_top,
-                              struct pipe_sampler_view *src)
-{
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   /* sanity check */
-   if (!renderer_can_support(renderer,
-            dst->texture, PIPE_BIND_RENDER_TARGET) ||
-       !renderer_can_support(renderer,
-          src->texture, PIPE_BIND_SAMPLER_VIEW))
-      return VG_FALSE;
-
-   cso_save_framebuffer(renderer->cso);
-   cso_save_viewport(renderer->cso);
-   cso_save_blend(renderer->cso);
-   cso_save_samplers(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_save_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_save_fragment_shader(renderer->cso);
-   cso_save_vertex_shader(renderer->cso);
-
-   renderer_set_target(renderer, dst, NULL, y0_top);
-
-   renderer_set_blend(renderer, ~0);
-   renderer_set_samplers(renderer, 1, &src);
-
-   renderer_set_fs(renderer, RENDERER_FS_TEXTURE);
-   renderer_set_vs(renderer, RENDERER_VS_TEXTURE);
-
-   renderer_set_mvp(renderer, NULL);
-
-   /* remember the texture size */
-   renderer->u.copy.tex_width = src->texture->width0;
-   renderer->u.copy.tex_height = src->texture->height0;
-   renderer->state = RENDERER_STATE_COPY;
-
-   return VG_TRUE;
-}
-
-/**
- * Draw into the destination rectangle given by (x, y, w, h).  The texture is
- * sampled from within the rectangle given by (sx, sy, sw, sh).
- *
- * The coordinates are in surface coordinates.
- */
-void renderer_copy(struct renderer *renderer,
-                   VGint x, VGint y, VGint w, VGint h,
-                   VGint sx, VGint sy, VGint sw, VGint sh)
-{
-   assert(renderer->state == RENDERER_STATE_COPY);
-
-   /* there is no depth buffer for scissoring anyway */
-   renderer_quad_pos(renderer, x, y, x + w, y + h, VG_FALSE);
-   renderer_quad_texcoord(renderer, sx, sy, sx + sw, sy + sh,
-         renderer->u.copy.tex_width,
-         renderer->u.copy.tex_height);
-
-   renderer_quad_draw(renderer);
-}
-
-/**
- * End copying and restore the states.
- */
-void renderer_copy_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_COPY);
-
-   cso_restore_framebuffer(renderer->cso);
-   cso_restore_viewport(renderer->cso);
-   cso_restore_blend(renderer->cso);
-   cso_restore_samplers(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_restore_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_restore_fragment_shader(renderer->cso);
-   cso_restore_vertex_shader(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-/**
- * Prepare the renderer for textured drawing.
- */
-VGboolean renderer_drawtex_begin(struct renderer *renderer,
-                                 struct pipe_sampler_view *src)
-{
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   if (!renderer_can_support(renderer, src->texture, PIPE_BIND_SAMPLER_VIEW))
-      return VG_FALSE;
-
-   cso_save_blend(renderer->cso);
-   cso_save_samplers(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_save_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_save_fragment_shader(renderer->cso);
-   cso_save_vertex_shader(renderer->cso);
-
-   renderer_set_blend(renderer, ~0);
-
-   renderer_set_samplers(renderer, 1, &src);
-
-   renderer_set_fs(renderer, RENDERER_FS_TEXTURE);
-   renderer_set_vs(renderer, RENDERER_VS_TEXTURE);
-
-   renderer_set_mvp(renderer, NULL);
-
-   /* remember the texture size */
-   renderer->u.drawtex.tex_width = src->texture->width0;
-   renderer->u.drawtex.tex_height = src->texture->height0;
-   renderer->state = RENDERER_STATE_DRAWTEX;
-
-   return VG_TRUE;
-}
-
-/**
- * Draw into the destination rectangle given by (x, y, w, h).  The texture is
- * sampled from within the rectangle given by (sx, sy, sw, sh).
- *
- * The coordinates are in surface coordinates.
- */
-void renderer_drawtex(struct renderer *renderer,
-                      VGint x, VGint y, VGint w, VGint h,
-                      VGint sx, VGint sy, VGint sw, VGint sh)
-{
-   assert(renderer->state == RENDERER_STATE_DRAWTEX);
-
-   /* with scissoring */
-   renderer_quad_pos(renderer, x, y, x + w, y + h, VG_TRUE);
-   renderer_quad_texcoord(renderer, sx, sy, sx + sw, sy + sh,
-         renderer->u.drawtex.tex_width,
-         renderer->u.drawtex.tex_height);
-
-   renderer_quad_draw(renderer);
-}
-
-/**
- * End textured drawing and restore the states.
- */
-void renderer_drawtex_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_DRAWTEX);
-
-   cso_restore_blend(renderer->cso);
-   cso_restore_samplers(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_restore_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT);
-   cso_restore_fragment_shader(renderer->cso);
-   cso_restore_vertex_shader(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-/**
- * Prepare the renderer for scissor update.  This will reset the depth buffer
- * to 1.0f.
- */
-VGboolean renderer_scissor_begin(struct renderer *renderer,
-                                 VGboolean restore_dsa)
-{
-   struct pipe_depth_stencil_alpha_state dsa;
-
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   if (restore_dsa)
-      cso_save_depth_stencil_alpha(renderer->cso);
-   cso_save_blend(renderer->cso);
-   cso_save_fragment_shader(renderer->cso);
-
-   /* enable depth writes */
-   memset(&dsa, 0, sizeof(dsa));
-   dsa.depth.enabled = 1;
-   dsa.depth.writemask = 1;
-   dsa.depth.func = PIPE_FUNC_ALWAYS;
-   cso_set_depth_stencil_alpha(renderer->cso, &dsa);
-
-   /* disable color writes */
-   renderer_set_blend(renderer, 0);
-   renderer_set_fs(renderer, RENDERER_FS_SCISSOR);
-
-   renderer_set_mvp(renderer, NULL);
-
-   renderer->u.scissor.restore_dsa = restore_dsa;
-   renderer->state = RENDERER_STATE_SCISSOR;
-
-   /* clear the depth buffer to 1.0f */
-   renderer->pipe->clear(renderer->pipe,
-         PIPE_CLEAR_DEPTHSTENCIL, NULL, 1.0f, 0);
-
-   return VG_TRUE;
-}
-
-/**
- * Add a scissor rectangle.  Depth values inside the rectangle will be set to
- * 0.0f.
- */
-void renderer_scissor(struct renderer *renderer,
-                      VGint x, VGint y, VGint width, VGint height)
-{
-   assert(renderer->state == RENDERER_STATE_SCISSOR);
-
-   renderer_quad_pos(renderer, x, y, x + width, y + height, VG_FALSE);
-   renderer_quad_draw(renderer);
-}
-
-/**
- * End scissor update and restore the states.
- */
-void renderer_scissor_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_SCISSOR);
-
-   if (renderer->u.scissor.restore_dsa)
-      cso_restore_depth_stencil_alpha(renderer->cso);
-   cso_restore_blend(renderer->cso);
-   cso_restore_fragment_shader(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-/**
- * Prepare the renderer for clearing.
- */
-VGboolean renderer_clear_begin(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   cso_save_blend(renderer->cso);
-   cso_save_fragment_shader(renderer->cso);
-   cso_save_vertex_shader(renderer->cso);
-
-   renderer_set_blend(renderer, ~0);
-   renderer_set_fs(renderer, RENDERER_FS_COLOR);
-   renderer_set_vs(renderer, RENDERER_VS_COLOR);
-
-   renderer_set_mvp(renderer, NULL);
-
-   renderer->state = RENDERER_STATE_CLEAR;
-
-   return VG_TRUE;
-}
-
-/**
- * Clear the framebuffer with the specified region and color.
- *
- * The coordinates are in surface coordinates.
- */
-void renderer_clear(struct renderer *renderer,
-                    VGint x, VGint y, VGint width, VGint height,
-                    const VGfloat color[4])
-{
-   VGuint i;
-
-   assert(renderer->state == RENDERER_STATE_CLEAR);
-
-   renderer_quad_pos(renderer, x, y, x + width, y + height, VG_TRUE);
-   for (i = 0; i < 4; i++)
-      memcpy(renderer->vertices[i][1], color, sizeof(VGfloat) * 4);
-
-   renderer_quad_draw(renderer);
-}
-
-/**
- * End clearing and retore the states.
- */
-void renderer_clear_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_CLEAR);
-
-   cso_restore_blend(renderer->cso);
-   cso_restore_fragment_shader(renderer->cso);
-   cso_restore_vertex_shader(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-/**
- * Prepare the renderer for image filtering.
- */
-VGboolean renderer_filter_begin(struct renderer *renderer,
-                                struct pipe_resource *dst,
-                                VGboolean y0_top,
-                                VGbitfield channel_mask,
-                                const struct pipe_sampler_state **samplers,
-                                struct pipe_sampler_view **views,
-                                VGint num_samplers,
-                                void *fs,
-                                const void *const_buffer,
-                                VGint const_buffer_len)
-{
-   struct pipe_surface *surf, surf_tmpl;
-
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   if (!fs)
-      return VG_FALSE;
-   if (!renderer_can_support(renderer, dst, PIPE_BIND_RENDER_TARGET))
-      return VG_FALSE;
-
-   u_surface_default_template(&surf_tmpl, dst);
-   surf = renderer->pipe->create_surface(renderer->pipe, dst, &surf_tmpl);
-   if (!surf)
-      return VG_FALSE;
-
-   cso_save_framebuffer(renderer->cso);
-   cso_save_viewport(renderer->cso);
-   cso_save_blend(renderer->cso);
-
-   /* set the image as the target */
-   renderer_set_target(renderer, surf, NULL, y0_top);
-   pipe_surface_reference(&surf, NULL);
-
-   renderer_set_blend(renderer, channel_mask);
-
-   if (num_samplers) {
-      struct pipe_resource *tex;
-
-      cso_save_samplers(renderer->cso, PIPE_SHADER_FRAGMENT);
-      cso_save_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT);
-      cso_save_fragment_shader(renderer->cso);
-      cso_save_vertex_shader(renderer->cso);
-
-      renderer_set_custom_fs(renderer, fs,
-                             samplers, views, num_samplers,
-                             const_buffer, const_buffer_len);
-      renderer_set_vs(renderer, RENDERER_VS_TEXTURE);
-
-      tex = views[0]->texture;
-      renderer->u.filter.tex_width = tex->width0;
-      renderer->u.filter.tex_height = tex->height0;
-      renderer->u.filter.use_sampler = VG_TRUE;
-   }
-   else {
-      cso_save_fragment_shader(renderer->cso);
-
-      renderer_set_custom_fs(renderer, fs, NULL, NULL, 0,
-                             const_buffer, const_buffer_len);
-
-      renderer->u.filter.use_sampler = VG_FALSE;
-   }
-
-   renderer_set_mvp(renderer, NULL);
-
-   renderer->state = RENDERER_STATE_FILTER;
-
-   return VG_TRUE;
-}
-
-/**
- * Draw into a rectangle of the destination with the specified region of the
- * texture(s).
- *
- * The coordinates are in surface coordinates.
- */
-void renderer_filter(struct renderer *renderer,
-                    VGint x, VGint y, VGint w, VGint h,
-                    VGint sx, VGint sy, VGint sw, VGint sh)
-{
-   assert(renderer->state == RENDERER_STATE_FILTER);
-
-   renderer_quad_pos(renderer, x, y, x + w, y + h, VG_FALSE);
-   if (renderer->u.filter.use_sampler) {
-      renderer_quad_texcoord(renderer, sx, sy, sx + sw, sy + sh,
-            renderer->u.filter.tex_width,
-            renderer->u.filter.tex_height);
-   }
-
-   renderer_quad_draw(renderer);
-}
-
-/**
- * End image filtering and restore the states.
- */
-void renderer_filter_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_FILTER);
-
-   if (renderer->u.filter.use_sampler) {
-      cso_restore_samplers(renderer->cso, PIPE_SHADER_FRAGMENT);
-      cso_restore_sampler_views(renderer->cso, PIPE_SHADER_FRAGMENT);
-      cso_restore_vertex_shader(renderer->cso);
-   }
-
-   cso_restore_framebuffer(renderer->cso);
-   cso_restore_viewport(renderer->cso);
-   cso_restore_blend(renderer->cso);
-   cso_restore_fragment_shader(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-/**
- * Prepare the renderer for polygon silhouette rendering.
- */
-VGboolean renderer_polygon_stencil_begin(struct renderer *renderer,
-                                         struct pipe_vertex_element *velem,
-                                         VGFillRule rule,
-                                         VGboolean restore_dsa)
-{
-   struct pipe_depth_stencil_alpha_state *dsa;
-   VGboolean manual_two_sides;
-
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   cso_save_vertex_elements(renderer->cso);
-   cso_save_blend(renderer->cso);
-   cso_save_depth_stencil_alpha(renderer->cso);
-
-   cso_set_vertex_elements(renderer->cso, 1, velem);
-
-   /* disable color writes */
-   renderer_set_blend(renderer, 0);
-
-   manual_two_sides = VG_FALSE;
-   dsa = &renderer->u.polygon_stencil.dsa;
-   memset(dsa, 0, sizeof(*dsa));
-   if (rule == VG_EVEN_ODD) {
-      dsa->stencil[0].enabled = 1;
-      dsa->stencil[0].writemask = 1;
-      dsa->stencil[0].fail_op = PIPE_STENCIL_OP_KEEP;
-      dsa->stencil[0].zfail_op = PIPE_STENCIL_OP_KEEP;
-      dsa->stencil[0].zpass_op = PIPE_STENCIL_OP_INVERT;
-      dsa->stencil[0].func = PIPE_FUNC_ALWAYS;
-      dsa->stencil[0].valuemask = ~0;
-   }
-   else {
-      assert(rule == VG_NON_ZERO);
-
-      /* front face */
-      dsa->stencil[0].enabled = 1;
-      dsa->stencil[0].writemask = ~0;
-      dsa->stencil[0].fail_op = PIPE_STENCIL_OP_KEEP;
-      dsa->stencil[0].zfail_op = PIPE_STENCIL_OP_KEEP;
-      dsa->stencil[0].zpass_op = PIPE_STENCIL_OP_INCR_WRAP;
-      dsa->stencil[0].func = PIPE_FUNC_ALWAYS;
-      dsa->stencil[0].valuemask = ~0;
-
-      if (renderer->pipe->screen->get_param(renderer->pipe->screen,
-                                            PIPE_CAP_TWO_SIDED_STENCIL)) {
-         /* back face */
-         dsa->stencil[1] = dsa->stencil[0];
-         dsa->stencil[1].zpass_op = PIPE_STENCIL_OP_DECR_WRAP;
-      }
-      else {
-         manual_two_sides = VG_TRUE;
-      }
-   }
-   cso_set_depth_stencil_alpha(renderer->cso, dsa);
-
-   if (manual_two_sides)
-      cso_save_rasterizer(renderer->cso);
-
-   renderer->u.polygon_stencil.manual_two_sides = manual_two_sides;
-   renderer->u.polygon_stencil.restore_dsa = restore_dsa;
-   renderer->state = RENDERER_STATE_POLYGON_STENCIL;
-
-   return VG_TRUE;
-}
-
-/**
- * Render a polygon silhouette to stencil buffer.
- */
-void renderer_polygon_stencil(struct renderer *renderer,
-                              struct pipe_vertex_buffer *vbuf,
-                              VGuint mode, VGuint start, VGuint count)
-{
-   assert(renderer->state == RENDERER_STATE_POLYGON_STENCIL);
-
-   cso_set_vertex_buffers(renderer->cso, 0, 1, vbuf);
-
-   if (!renderer->u.polygon_stencil.manual_two_sides) {
-      cso_draw_arrays(renderer->cso, mode, start, count);
-   }
-   else {
-      struct pipe_rasterizer_state raster;
-      struct pipe_depth_stencil_alpha_state dsa;
-
-      raster = renderer->g3d.rasterizer;
-      dsa = renderer->u.polygon_stencil.dsa;
-
-      /* front */
-      raster.cull_face = PIPE_FACE_BACK;
-      dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_INCR_WRAP;
-
-      cso_set_rasterizer(renderer->cso, &raster);
-      cso_set_depth_stencil_alpha(renderer->cso, &dsa);
-      cso_draw_arrays(renderer->cso, mode, start, count);
-
-      /* back */
-      raster.cull_face = PIPE_FACE_FRONT;
-      dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_DECR_WRAP;
-
-      cso_set_rasterizer(renderer->cso, &raster);
-      cso_set_depth_stencil_alpha(renderer->cso, &dsa);
-      cso_draw_arrays(renderer->cso, mode, start, count);
-   }
-}
-
-/**
- * End polygon silhouette rendering.
- */
-void renderer_polygon_stencil_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_POLYGON_STENCIL);
-
-   if (renderer->u.polygon_stencil.manual_two_sides)
-      cso_restore_rasterizer(renderer->cso);
-
-   cso_restore_vertex_elements(renderer->cso);
-
-   /* restore color writes */
-   cso_restore_blend(renderer->cso);
-
-   if (renderer->u.polygon_stencil.restore_dsa)
-      cso_restore_depth_stencil_alpha(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-/**
- * Prepare the renderer for polygon filling.
- */
-VGboolean renderer_polygon_fill_begin(struct renderer *renderer,
-                                      VGboolean save_dsa)
-{
-   struct pipe_depth_stencil_alpha_state dsa;
-
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   if (save_dsa)
-      cso_save_depth_stencil_alpha(renderer->cso);
-
-   /* setup stencil ops */
-   memset(&dsa, 0, sizeof(dsa));
-   dsa.stencil[0].enabled = 1;
-   dsa.stencil[0].func = PIPE_FUNC_NOTEQUAL;
-   dsa.stencil[0].fail_op = PIPE_STENCIL_OP_REPLACE;
-   dsa.stencil[0].zfail_op = PIPE_STENCIL_OP_REPLACE;
-   dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_REPLACE;
-   dsa.stencil[0].valuemask = ~0;
-   dsa.stencil[0].writemask = ~0;
-   dsa.depth = renderer->g3d.dsa.depth;
-   cso_set_depth_stencil_alpha(renderer->cso, &dsa);
-
-   renderer->state = RENDERER_STATE_POLYGON_FILL;
-
-   return VG_TRUE;
-}
-
-/**
- * Fill a polygon.
- */
-void renderer_polygon_fill(struct renderer *renderer,
-                           VGfloat min_x, VGfloat min_y,
-                           VGfloat max_x, VGfloat max_y)
-{
-   assert(renderer->state == RENDERER_STATE_POLYGON_FILL);
-
-   renderer_quad_pos(renderer, min_x, min_y, max_x, max_y, VG_TRUE);
-   renderer_quad_draw(renderer);
-}
-
-/**
- * End polygon filling.
- */
-void renderer_polygon_fill_end(struct renderer *renderer)
-{
-   assert(renderer->state == RENDERER_STATE_POLYGON_FILL);
-
-   cso_restore_depth_stencil_alpha(renderer->cso);
-
-   renderer->state = RENDERER_STATE_INIT;
-}
-
-struct renderer * renderer_create(struct vg_context *owner)
-{
-   struct renderer *renderer;
-   struct pipe_rasterizer_state *raster;
-   struct pipe_stencil_ref sr;
-   VGint i;
-
-   renderer = CALLOC_STRUCT(renderer);
-   if (!renderer)
-      return NULL;
-
-   renderer->pipe = owner->pipe;
-   renderer->cso = owner->cso_context;
-
-   /* init vertex data that doesn't change */
-   for (i = 0; i < 4; i++)
-      renderer->vertices[i][0][3] = 1.0f; /* w */
-
-   for (i = 0; i < 2; i++) {
-      renderer->velems[i].src_offset = i * 4 * sizeof(float);
-      renderer->velems[i].instance_divisor = 0;
-      renderer->velems[i].vertex_buffer_index = 0;
-      renderer->velems[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
-   }
-   cso_set_vertex_elements(renderer->cso, 2, renderer->velems);
-
-   /* GL rasterization rules */
-   raster = &renderer->g3d.rasterizer;
-   memset(raster, 0, sizeof(*raster));
-   raster->half_pixel_center = 1;
-   raster->bottom_edge_rule = 1;
-   raster->depth_clip = 1;
-   cso_set_rasterizer(renderer->cso, raster);
-
-   /* fixed at 0 */
-   memset(&sr, 0, sizeof(sr));
-   cso_set_stencil_ref(renderer->cso, &sr);
-
-   renderer_set_vs(renderer, RENDERER_VS_PLAIN);
-
-   renderer->state = RENDERER_STATE_INIT;
-
-   return renderer;
-}
-
-void renderer_destroy(struct renderer *ctx)
-{
-   int i;
-
-   for (i = 0; i < NUM_RENDERER_VS; i++) {
-      if (ctx->cached_vs[i])
-         cso_delete_vertex_shader(ctx->cso, ctx->cached_vs[i]);
-   }
-   for (i = 0; i < NUM_RENDERER_FS; i++) {
-      if (ctx->cached_fs[i])
-         cso_delete_fragment_shader(ctx->cso, ctx->cached_fs[i]);
-   }
-
-   pipe_resource_reference(&ctx->vs_cbuf, NULL);
-   pipe_resource_reference(&ctx->fs_cbuf, NULL);
-
-   FREE(ctx);
-}
-
-static void update_clip_state(struct renderer *renderer,
-                              const struct vg_state *state)
-{
-   struct pipe_depth_stencil_alpha_state *dsa = &renderer->g3d.dsa;
-
-   memset(dsa, 0, sizeof(struct pipe_depth_stencil_alpha_state));
-
-   if (state->scissoring) {
-      struct pipe_framebuffer_state *fb = &renderer->g3d.fb;
-      int i;
-
-      renderer_scissor_begin(renderer, VG_FALSE);
-
-      for (i = 0; i < state->scissor_rects_num; ++i) {
-         const float x      = state->scissor_rects[i * 4 + 0].f;
-         const float y      = state->scissor_rects[i * 4 + 1].f;
-         const float width  = state->scissor_rects[i * 4 + 2].f;
-         const float height = state->scissor_rects[i * 4 + 3].f;
-         VGint x0, y0, x1, y1, iw, ih;
-
-         x0 = (VGint) x;
-         y0 = (VGint) y;
-         if (x0 < 0)
-            x0 = 0;
-         if (y0 < 0)
-            y0 = 0;
-
-         /* note that x1 and y1 are exclusive */
-         x1 = (VGint) ceilf(x + width);
-         y1 = (VGint) ceilf(y + height);
-         if (x1 > fb->width)
-            x1 = fb->width;
-         if (y1 > fb->height)
-            y1 = fb->height;
-
-         iw = x1 - x0;
-         ih = y1 - y0;
-         if (iw > 0 && ih> 0 )
-            renderer_scissor(renderer, x0, y0, iw, ih);
-      }
-
-      renderer_scissor_end(renderer);
-
-      dsa->depth.enabled = 1; /* glEnable(GL_DEPTH_TEST); */
-      dsa->depth.writemask = 0;/*glDepthMask(FALSE);*/
-      dsa->depth.func = PIPE_FUNC_GEQUAL;
-   }
-}
-
-static void renderer_validate_blend(struct renderer *renderer,
-                                     const struct vg_state *state,
-                                     enum pipe_format fb_format)
-{
-   struct pipe_blend_state blend;
-
-   memset(&blend, 0, sizeof(blend));
-   blend.rt[0].colormask = PIPE_MASK_RGBA;
-   blend.rt[0].rgb_src_factor   = PIPE_BLENDFACTOR_ONE;
-   blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
-   blend.rt[0].rgb_dst_factor   = PIPE_BLENDFACTOR_ZERO;
-   blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-
-   /* TODO alpha masking happens after blending? */
-
-   switch (state->blend_mode) {
-   case VG_BLEND_SRC:
-      blend.rt[0].rgb_src_factor   = PIPE_BLENDFACTOR_ONE;
-      blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
-      blend.rt[0].rgb_dst_factor   = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-      break;
-   case VG_BLEND_SRC_OVER:
-      /* use the blend state only when there is no alpha channel */
-      if (!util_format_has_alpha(fb_format)) {
-         blend.rt[0].rgb_src_factor   = PIPE_BLENDFACTOR_SRC_ALPHA;
-         blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
-         blend.rt[0].rgb_dst_factor   = PIPE_BLENDFACTOR_INV_SRC_ALPHA;
-         blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_INV_SRC_ALPHA;
-         blend.rt[0].blend_enable = 1;
-      }
-      break;
-   case VG_BLEND_SRC_IN:
-      blend.rt[0].rgb_src_factor   = PIPE_BLENDFACTOR_ONE;
-      blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_DST_ALPHA;
-      blend.rt[0].rgb_dst_factor   = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].blend_enable = 1;
-      break;
-   case VG_BLEND_DST_IN:
-      blend.rt[0].rgb_src_factor   = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].rgb_dst_factor   = PIPE_BLENDFACTOR_ONE;
-      blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_SRC_ALPHA;
-      blend.rt[0].blend_enable = 1;
-      break;
-   case VG_BLEND_DST_OVER:
-   case VG_BLEND_MULTIPLY:
-   case VG_BLEND_SCREEN:
-   case VG_BLEND_DARKEN:
-   case VG_BLEND_LIGHTEN:
-   case VG_BLEND_ADDITIVE:
-      /* need a shader */
-      break;
-   default:
-      assert(!"not implemented blend mode");
-      break;
-   }
-
-   cso_set_blend(renderer->cso, &blend);
-}
-
-/**
- * Propogate OpenVG state changes to the renderer.  Only framebuffer, blending
- * and scissoring states are relevant here.
- */
-void renderer_validate(struct renderer *renderer,
-                       VGbitfield dirty,
-                       const struct st_framebuffer *stfb,
-                       const struct vg_state *state)
-{
-   assert(renderer->state == RENDERER_STATE_INIT);
-
-   dirty |= renderer->dirty;
-   renderer->dirty = 0;
-
-   if (dirty & FRAMEBUFFER_DIRTY) {
-      struct pipe_framebuffer_state *fb = &renderer->g3d.fb;
-      struct matrix *proj = &renderer->projection;
-
-      memset(fb, 0, sizeof(struct pipe_framebuffer_state));
-      fb->width  = stfb->width;
-      fb->height = stfb->height;
-      fb->nr_cbufs = 1;
-      fb->cbufs[0] = stfb->strb->surface;
-      fb->zsbuf = stfb->dsrb->surface;
-
-      cso_set_framebuffer(renderer->cso, fb);
-      vg_set_viewport(renderer, VEGA_Y0_BOTTOM);
-
-      matrix_load_identity(proj);
-      matrix_translate(proj, -1.0f, -1.0f);
-      matrix_scale(proj, 2.0f / fb->width, 2.0f / fb->height);
-
-      /* we also got a new depth buffer */
-      if (dirty & DEPTH_STENCIL_DIRTY) {
-         renderer->pipe->clear(renderer->pipe,
-               PIPE_CLEAR_DEPTHSTENCIL, NULL, 0.0, 0);
-      }
-   }
-
-   /* must be last because it renders to the depth buffer*/
-   if (dirty & DEPTH_STENCIL_DIRTY) {
-      update_clip_state(renderer, state);
-      cso_set_depth_stencil_alpha(renderer->cso, &renderer->g3d.dsa);
-   }
-
-   if (dirty & BLEND_DIRTY)
-      renderer_validate_blend(renderer, state, stfb->strb->format);
-}
-
-/**
- * Prepare the renderer for OpenVG pipeline.
- */
-void renderer_validate_for_shader(struct renderer *renderer,
-                                  const struct pipe_sampler_state **samplers,
-                                  struct pipe_sampler_view **views,
-                                  VGint num_samplers,
-                                  const struct matrix *modelview,
-                                  void *fs,
-                                  const void *const_buffer,
-                                  VGint const_buffer_len)
-{
-   struct matrix mvp = renderer->projection;
-
-   /* will be used in POLYGON_STENCIL and POLYGON_FILL */
-   matrix_mult(&mvp, modelview);
-   renderer_set_mvp(renderer, &mvp);
-
-   renderer_set_custom_fs(renderer, fs,
-                          samplers, views, num_samplers,
-                          const_buffer, const_buffer_len);
-}
-
-void renderer_validate_for_mask_rendering(struct renderer *renderer,
-                                          struct pipe_surface *dst,
-                                          const struct matrix *modelview)
-{
-   struct matrix mvp = renderer->projection;
-
-   /* will be used in POLYGON_STENCIL and POLYGON_FILL */
-   matrix_mult(&mvp, modelview);
-   renderer_set_mvp(renderer, &mvp);
-
-   renderer_set_target(renderer, dst, renderer->g3d.fb.zsbuf, VG_FALSE);
-   renderer_set_blend(renderer, ~0);
-   renderer_set_fs(renderer, RENDERER_FS_WHITE);
-
-   /* set internal dirty flags (hacky!) */
-   renderer->dirty = FRAMEBUFFER_DIRTY | BLEND_DIRTY;
-}
-
-void renderer_copy_surface(struct renderer *ctx,
-                           struct pipe_surface *src,
-                           int srcX0, int srcY0,
-                           int srcX1, int srcY1,
-                           struct pipe_surface *dst,
-                           int dstX0, int dstY0,
-                           int dstX1, int dstY1,
-                           float z, unsigned filter)
-{
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_screen *screen = pipe->screen;
-   struct pipe_sampler_view view_templ;
-   struct pipe_sampler_view *view;
-   struct pipe_box src_box;
-   struct pipe_resource texTemp, *tex;
-   const struct pipe_framebuffer_state *fb = &ctx->g3d.fb;
-   const int srcW = abs(srcX1 - srcX0);
-   const int srcH = abs(srcY1 - srcY0);
-   const int srcLeft = MIN2(srcX0, srcX1);
-   const int srcTop = MIN2(srcY0, srcY1);
-
-   assert(filter == PIPE_TEX_MIPFILTER_NEAREST ||
-          filter == PIPE_TEX_MIPFILTER_LINEAR);
-
-   if (srcLeft != srcX0) {
-      /* left-right flip */
-      int tmp = dstX0;
-      dstX0 = dstX1;
-      dstX1 = tmp;
-   }
-
-   if (srcTop != srcY0) {
-      /* up-down flip */
-      int tmp = dstY0;
-      dstY0 = dstY1;
-      dstY1 = tmp;
-   }
-
-   assert(screen->is_format_supported(screen, src->format, PIPE_TEXTURE_2D,
-                                      0, PIPE_BIND_SAMPLER_VIEW));
-   assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
-                                      0, PIPE_BIND_SAMPLER_VIEW));
-   assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
-                                      0, PIPE_BIND_RENDER_TARGET));
-
-   /*
-    * XXX for now we're always creating a temporary texture.
-    * Strictly speaking that's not always needed.
-    */
-
-   /* create temp texture */
-   memset(&texTemp, 0, sizeof(texTemp));
-   texTemp.target = PIPE_TEXTURE_2D;
-   texTemp.format = src->format;
-   texTemp.last_level = 0;
-   texTemp.width0 = srcW;
-   texTemp.height0 = srcH;
-   texTemp.depth0 = 1;
-   texTemp.array_size = 1;
-   texTemp.bind = PIPE_BIND_SAMPLER_VIEW;
-
-   tex = screen->resource_create(screen, &texTemp);
-   if (!tex)
-      return;
-
-   u_sampler_view_default_template(&view_templ, tex, tex->format);
-   view = pipe->create_sampler_view(pipe, tex, &view_templ);
-
-   if (!view)
-      return;
-
-   u_box_2d_zslice(srcLeft, srcTop, src->u.tex.first_layer, srcW, srcH, &src_box);
-
-   pipe->resource_copy_region(pipe,
-                              tex, 0, 0, 0, 0,  /* dest */
-                              src->texture, 0, &src_box);
-
-   assert(floatsEqual(z, 0.0f));
-
-   /* draw */
-   if (fb->cbufs[0] == dst) {
-      /* transform back to surface coordinates */
-      dstY0 = dst->height - dstY0;
-      dstY1 = dst->height - dstY1;
-
-      if (renderer_drawtex_begin(ctx, view)) {
-         renderer_drawtex(ctx,
-               dstX0, dstY0, dstX1 - dstX0, dstY1 - dstY0,
-               0, 0, view->texture->width0, view->texture->height0);
-         renderer_drawtex_end(ctx);
-      }
-   }
-   else {
-      if (renderer_copy_begin(ctx, dst, VG_TRUE, view)) {
-         renderer_copy(ctx,
-               dstX0, dstY0, dstX1 - dstX0, dstY1 - dstY0,
-               0, 0, view->texture->width0, view->texture->height0);
-         renderer_copy_end(ctx);
-      }
-   }
-}
-
-void renderer_texture_quad(struct renderer *r,
-                           struct pipe_resource *tex,
-                           VGfloat x1offset, VGfloat y1offset,
-                           VGfloat x2offset, VGfloat y2offset,
-                           VGfloat x1, VGfloat y1,
-                           VGfloat x2, VGfloat y2,
-                           VGfloat x3, VGfloat y3,
-                           VGfloat x4, VGfloat y4)
-{
-   const VGfloat z = 0.0f;
-
-   assert(r->state == RENDERER_STATE_INIT);
-   assert(tex->width0 != 0);
-   assert(tex->height0 != 0);
-
-   cso_save_vertex_shader(r->cso);
-
-   renderer_set_vs(r, RENDERER_VS_TEXTURE);
-
-   /* manually set up positions */
-   r->vertices[0][0][0] = x1;
-   r->vertices[0][0][1] = y1;
-   r->vertices[0][0][2] = z;
-
-   r->vertices[1][0][0] = x2;
-   r->vertices[1][0][1] = y2;
-   r->vertices[1][0][2] = z;
-
-   r->vertices[2][0][0] = x3;
-   r->vertices[2][0][1] = y3;
-   r->vertices[2][0][2] = z;
-
-   r->vertices[3][0][0] = x4;
-   r->vertices[3][0][1] = y4;
-   r->vertices[3][0][2] = z;
-
-   /* texcoords */
-   renderer_quad_texcoord(r, x1offset, y1offset,
-         x2offset, y2offset, tex->width0, tex->height0);
-
-   renderer_quad_draw(r);
-
-   cso_restore_vertex_shader(r->cso);
-}
diff --git a/src/gallium/state_trackers/vega/renderer.h b/src/gallium/state_trackers/vega/renderer.h
deleted file mode 100644 (file)
index fe71993..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- * Copyright 2010 LunarG, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef RENDERER_H
-#define RENDERER_H
-
-#include "VG/openvg.h"
-
-struct renderer;
-
-struct vg_context;
-struct vg_state;
-struct st_framebuffer;
-struct pipe_resource;
-struct pipe_sampler_state;
-struct pipe_sampler_view;
-struct pipe_surface;
-struct pipe_vertex_element;
-struct pipe_vertex_buffer;
-struct matrix;
-
-struct renderer *renderer_create(struct vg_context *owner);
-void renderer_destroy(struct renderer *);
-
-void renderer_validate(struct renderer *renderer,
-                       VGbitfield dirty,
-                       const struct st_framebuffer *stfb,
-                       const struct vg_state *state);
-
-void renderer_validate_for_shader(struct renderer *renderer,
-                                  const struct pipe_sampler_state **samplers,
-                                  struct pipe_sampler_view **views,
-                                  VGint num_samplers,
-                                  const struct matrix *modelview,
-                                  void *fs,
-                                  const void *const_buffer,
-                                  VGint const_buffer_len);
-
-void renderer_validate_for_mask_rendering(struct renderer *renderer,
-                                          struct pipe_surface *dst,
-                                          const struct matrix *modelview);
-
-VGboolean renderer_copy_begin(struct renderer *renderer,
-                              struct pipe_surface *dst,
-                              VGboolean y0_top,
-                              struct pipe_sampler_view *src);
-
-void renderer_copy(struct renderer *renderer,
-                   VGint x, VGint y, VGint w, VGint h,
-                   VGint sx, VGint sy, VGint sw, VGint sh);
-
-void renderer_copy_end(struct renderer *renderer);
-
-VGboolean renderer_drawtex_begin(struct renderer *renderer,
-                                 struct pipe_sampler_view *src);
-
-void renderer_drawtex(struct renderer *renderer,
-                      VGint x, VGint y, VGint w, VGint h,
-                      VGint sx, VGint sy, VGint sw, VGint sh);
-
-void renderer_drawtex_end(struct renderer *renderer);
-
-VGboolean renderer_scissor_begin(struct renderer *renderer,
-                                 VGboolean restore_dsa);
-
-void renderer_scissor(struct renderer *renderer,
-                      VGint x, VGint y, VGint width, VGint height);
-
-void renderer_scissor_end(struct renderer *renderer);
-
-VGboolean renderer_clear_begin(struct renderer *renderer);
-
-void renderer_clear(struct renderer *renderer,
-                    VGint x, VGint y, VGint width, VGint height,
-                    const VGfloat color[4]);
-
-void renderer_clear_end(struct renderer *renderer);
-
-VGboolean renderer_filter_begin(struct renderer *renderer,
-                                struct pipe_resource *dst,
-                                VGboolean y0_top,
-                                VGbitfield channel_mask,
-                                const struct pipe_sampler_state **samplers,
-                                struct pipe_sampler_view **views,
-                                VGint num_samplers,
-                                void *fs,
-                                const void *const_buffer,
-                                VGint const_buffer_len);
-
-void renderer_filter(struct renderer *renderer,
-                     VGint x, VGint y, VGint w, VGint h,
-                     VGint sx, VGint sy, VGint sw, VGint sh);
-
-void renderer_filter_end(struct renderer *renderer);
-
-VGboolean renderer_polygon_stencil_begin(struct renderer *renderer,
-                                         struct pipe_vertex_element *velem,
-                                         VGFillRule rule,
-                                         VGboolean restore_dsa);
-
-void renderer_polygon_stencil(struct renderer *renderer,
-                              struct pipe_vertex_buffer *vbuf,
-                              VGuint mode, VGuint start, VGuint count);
-
-void renderer_polygon_stencil_end(struct renderer *renderer);
-
-VGboolean renderer_polygon_fill_begin(struct renderer *renderer,
-                                      VGboolean save_dsa);
-
-void renderer_polygon_fill(struct renderer *renderer,
-                           VGfloat min_x, VGfloat min_y,
-                           VGfloat max_x, VGfloat max_y);
-
-void renderer_polygon_fill_end(struct renderer *renderer);
-
-void renderer_texture_quad(struct renderer *,
-                           struct pipe_resource *texture,
-                           VGfloat x1offset, VGfloat y1offset,
-                           VGfloat x2offset, VGfloat y2offset,
-                           VGfloat x1, VGfloat y1,
-                           VGfloat x2, VGfloat y2,
-                           VGfloat x3, VGfloat y3,
-                           VGfloat x4, VGfloat y4);
-
-void renderer_copy_surface(struct renderer *r,
-                           struct pipe_surface *src,
-                           int sx1, int sy1,
-                           int sx2, int sy2,
-                           struct pipe_surface *dst,
-                           int dx1, int dy1,
-                           int dx2, int dy2,
-                           float z, unsigned filter);
-
-
-#endif
diff --git a/src/gallium/state_trackers/vega/shader.c b/src/gallium/state_trackers/vega/shader.c
deleted file mode 100644 (file)
index 09ba404..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "shader.h"
-
-#include "vg_context.h"
-#include "shaders_cache.h"
-#include "paint.h"
-#include "mask.h"
-#include "image.h"
-#include "renderer.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "util/u_memory.h"
-#include "util/u_math.h"
-#include "util/u_format.h"
-
-#define MAX_CONSTANTS 28
-
-struct shader {
-   struct vg_context *context;
-
-   VGboolean color_transform;
-   VGboolean masking;
-   struct vg_paint *paint;
-   struct vg_image *image;
-
-   struct matrix modelview;
-   struct matrix paint_matrix;
-
-   VGboolean drawing_image;
-   VGImageMode image_mode;
-
-   float constants[MAX_CONSTANTS];
-   struct pipe_resource *cbuf;
-   struct pipe_shader_state fs_state;
-   void *fs;
-};
-
-struct shader * shader_create(struct vg_context *ctx)
-{
-   struct shader *shader = 0;
-
-   shader = CALLOC_STRUCT(shader);
-   shader->context = ctx;
-
-   return shader;
-}
-
-void shader_destroy(struct shader *shader)
-{
-   FREE(shader);
-}
-
-void shader_set_color_transform(struct shader *shader, VGboolean set)
-{
-   shader->color_transform = set;
-}
-
-void shader_set_masking(struct shader *shader, VGboolean set)
-{
-   shader->masking = set;
-}
-
-VGboolean shader_is_masking(struct shader *shader)
-{
-   return shader->masking;
-}
-
-void shader_set_paint(struct shader *shader, struct vg_paint *paint)
-{
-   shader->paint = paint;
-}
-
-struct vg_paint * shader_paint(struct shader *shader)
-{
-   return shader->paint;
-}
-
-static VGint setup_constant_buffer(struct shader *shader)
-{
-   const struct vg_state *state = &shader->context->state.vg;
-   VGint param_bytes = paint_constant_buffer_size(shader->paint);
-   VGint i;
-
-   param_bytes += sizeof(VGfloat) * 8;
-   assert(param_bytes <= sizeof(shader->constants));
-
-   if (state->color_transform) {
-      for (i = 0; i < 8; i++) {
-         VGfloat val = (i < 4) ? 127.0f : 1.0f;
-         shader->constants[i] =
-            CLAMP(state->color_transform_values[i], -val, val);
-      }
-   }
-   else {
-      memset(shader->constants, 0, sizeof(VGfloat) * 8);
-   }
-
-   paint_fill_constant_buffer(shader->paint,
-         &shader->paint_matrix, shader->constants + 8);
-
-   return param_bytes;
-}
-
-static VGboolean blend_use_shader(struct shader *shader)
-{
-   struct vg_context *ctx = shader->context;
-   VGboolean advanced_blending;
-
-   switch (ctx->state.vg.blend_mode) {
-   case VG_BLEND_DST_OVER:
-   case VG_BLEND_MULTIPLY:
-   case VG_BLEND_SCREEN:
-   case VG_BLEND_DARKEN:
-   case VG_BLEND_LIGHTEN:
-   case VG_BLEND_ADDITIVE:
-      advanced_blending = VG_TRUE;
-      break;
-   case VG_BLEND_SRC_OVER:
-      if (util_format_has_alpha(ctx->draw_buffer->strb->format)) {
-         /* no blending is required if the paints and the image are opaque */
-         advanced_blending = !paint_is_opaque(ctx->state.vg.fill_paint) ||
-                             !paint_is_opaque(ctx->state.vg.stroke_paint);
-         if (!advanced_blending && shader->drawing_image) {
-            advanced_blending =
-               util_format_has_alpha(shader->image->sampler_view->format);
-         }
-         break;
-      }
-      /* fall through */
-   default:
-      advanced_blending = VG_FALSE;
-      break;
-   }
-
-   return advanced_blending;
-}
-
-static VGint blend_bind_samplers(struct shader *shader,
-                                 struct pipe_sampler_state **samplers,
-                                 struct pipe_sampler_view **sampler_views)
-{
-   if (blend_use_shader(shader)) {
-      struct vg_context *ctx = shader->context;
-
-      samplers[2] = &ctx->blend_sampler;
-      sampler_views[2] = vg_prepare_blend_surface(ctx);
-
-      if (!samplers[0] || !sampler_views[0]) {
-         samplers[0] = samplers[2];
-         sampler_views[0] = sampler_views[2];
-      }
-      if (!samplers[1] || !sampler_views[1]) {
-         samplers[1] = samplers[0];
-         sampler_views[1] = sampler_views[0];
-      }
-
-      return 1;
-   }
-   return 0;
-}
-
-static VGint setup_samplers(struct shader *shader,
-                            struct pipe_sampler_state **samplers,
-                            struct pipe_sampler_view **sampler_views)
-{
-   /* a little wonky: we use the num as a boolean that just says
-    * whether any sampler/textures have been set. the actual numbering
-    * for samplers is always the same:
-    * 0 - paint sampler/texture for gradient/pattern
-    * 1 - mask sampler/texture
-    * 2 - blend sampler/texture
-    * 3 - image sampler/texture
-    * */
-   VGint num = 0;
-
-   samplers[0] = NULL;
-   samplers[1] = NULL;
-   samplers[2] = NULL;
-   samplers[3] = NULL;
-   sampler_views[0] = NULL;
-   sampler_views[1] = NULL;
-   sampler_views[2] = NULL;
-   sampler_views[3] = NULL;
-
-   num += paint_bind_samplers(shader->paint, samplers, sampler_views);
-   num += mask_bind_samplers(samplers, sampler_views);
-   num += blend_bind_samplers(shader, samplers, sampler_views);
-   if (shader->drawing_image && shader->image)
-      num += image_bind_samplers(shader->image, samplers, sampler_views);
-
-   return (num) ? 4 : 0;
-}
-
-static INLINE VGboolean is_format_bw(struct shader *shader)
-{
-#if 0
-   struct vg_context *ctx = shader->context;
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-#endif
-
-   if (shader->drawing_image && shader->image) {
-      if (shader->image->format == VG_BW_1)
-         return VG_TRUE;
-   }
-
-   return VG_FALSE;
-}
-
-static void setup_shader_program(struct shader *shader)
-{
-   struct vg_context *ctx = shader->context;
-   VGint shader_id = 0;
-   VGBlendMode blend_mode = ctx->state.vg.blend_mode;
-   VGboolean black_white = is_format_bw(shader);
-
-   /* 1st stage: fill */
-   if (!shader->drawing_image ||
-       (shader->image_mode == VG_DRAW_IMAGE_MULTIPLY || shader->image_mode == VG_DRAW_IMAGE_STENCIL)) {
-      switch(paint_type(shader->paint)) {
-      case VG_PAINT_TYPE_COLOR:
-         shader_id |= VEGA_SOLID_FILL_SHADER;
-         break;
-      case VG_PAINT_TYPE_LINEAR_GRADIENT:
-         shader_id |= VEGA_LINEAR_GRADIENT_SHADER;
-         break;
-      case VG_PAINT_TYPE_RADIAL_GRADIENT:
-         shader_id |= VEGA_RADIAL_GRADIENT_SHADER;
-         break;
-      case VG_PAINT_TYPE_PATTERN:
-         shader_id |= VEGA_PATTERN_SHADER;
-         break;
-
-      default:
-         abort();
-      }
-
-      if (paint_is_degenerate(shader->paint))
-         shader_id = VEGA_PAINT_DEGENERATE_SHADER;
-   }
-
-   /* second stage image */
-   if (shader->drawing_image) {
-      switch(shader->image_mode) {
-      case VG_DRAW_IMAGE_NORMAL:
-         shader_id |= VEGA_IMAGE_NORMAL_SHADER;
-         break;
-      case VG_DRAW_IMAGE_MULTIPLY:
-         shader_id |= VEGA_IMAGE_MULTIPLY_SHADER;
-         break;
-      case VG_DRAW_IMAGE_STENCIL:
-         shader_id |= VEGA_IMAGE_STENCIL_SHADER;
-         break;
-      default:
-         debug_printf("Unknown image mode!");
-      }
-   }
-
-   if (shader->color_transform)
-      shader_id |= VEGA_COLOR_TRANSFORM_SHADER;
-
-   if (blend_use_shader(shader)) {
-      if (shader->drawing_image && shader->image_mode == VG_DRAW_IMAGE_STENCIL)
-         shader_id |= VEGA_ALPHA_PER_CHANNEL_SHADER;
-      else
-         shader_id |= VEGA_ALPHA_NORMAL_SHADER;
-
-      switch(blend_mode) {
-      case VG_BLEND_SRC:
-         shader_id |= VEGA_BLEND_SRC_SHADER;
-         break;
-      case VG_BLEND_SRC_OVER:
-         shader_id |= VEGA_BLEND_SRC_OVER_SHADER;
-         break;
-      case VG_BLEND_DST_OVER:
-         shader_id |= VEGA_BLEND_DST_OVER_SHADER;
-         break;
-      case VG_BLEND_SRC_IN:
-         shader_id |= VEGA_BLEND_SRC_IN_SHADER;
-         break;
-      case VG_BLEND_DST_IN:
-         shader_id |= VEGA_BLEND_DST_IN_SHADER;
-         break;
-      case VG_BLEND_MULTIPLY:
-         shader_id |= VEGA_BLEND_MULTIPLY_SHADER;
-         break;
-      case VG_BLEND_SCREEN:
-         shader_id |= VEGA_BLEND_SCREEN_SHADER;
-         break;
-      case VG_BLEND_DARKEN:
-         shader_id |= VEGA_BLEND_DARKEN_SHADER;
-         break;
-      case VG_BLEND_LIGHTEN:
-         shader_id |= VEGA_BLEND_LIGHTEN_SHADER;
-         break;
-      case VG_BLEND_ADDITIVE:
-         shader_id |= VEGA_BLEND_ADDITIVE_SHADER;
-         break;
-      default:
-         assert(0);
-         break;
-      }
-   }
-   else {
-      /* update alpha of the source */
-      if (shader->drawing_image && shader->image_mode == VG_DRAW_IMAGE_STENCIL)
-         shader_id |= VEGA_ALPHA_PER_CHANNEL_SHADER;
-   }
-
-   if (shader->masking)
-      shader_id |= VEGA_MASK_SHADER;
-
-   if (black_white)
-      shader_id |= VEGA_BW_SHADER;
-
-   shader->fs = shaders_cache_fill(ctx->sc, shader_id);
-}
-
-
-void shader_bind(struct shader *shader)
-{
-   struct vg_context *ctx = shader->context;
-   struct pipe_sampler_state *samplers[PIPE_MAX_SAMPLERS];
-   struct pipe_sampler_view *sampler_views[PIPE_MAX_SAMPLERS];
-   VGint num_samplers, param_bytes;
-
-   /* first resolve the real paint type */
-   paint_resolve_type(shader->paint);
-
-   num_samplers = setup_samplers(shader, samplers, sampler_views);
-   param_bytes = setup_constant_buffer(shader);
-   setup_shader_program(shader);
-
-   renderer_validate_for_shader(ctx->renderer,
-         (const struct pipe_sampler_state **) samplers,
-         sampler_views, num_samplers,
-         &shader->modelview,
-         shader->fs, (const void *) shader->constants, param_bytes);
-}
-
-void shader_set_image_mode(struct shader *shader, VGImageMode image_mode)
-{
-   shader->image_mode = image_mode;
-}
-
-VGImageMode shader_image_mode(struct shader *shader)
-{
-   return shader->image_mode;
-}
-
-void shader_set_drawing_image(struct shader *shader, VGboolean drawing_image)
-{
-   shader->drawing_image = drawing_image;
-}
-
-VGboolean shader_drawing_image(struct shader *shader)
-{
-   return shader->drawing_image;
-}
-
-void shader_set_image(struct shader *shader, struct vg_image *img)
-{
-   shader->image = img;
-}
-
-/**
- * Set the transformation to map a vertex to the surface coordinates.
- */
-void shader_set_surface_matrix(struct shader *shader,
-                               const struct matrix *mat)
-{
-   shader->modelview = *mat;
-}
-
-/**
- * Set the transformation to map a pixel to the paint coordinates.
- */
-void shader_set_paint_matrix(struct shader *shader, const struct matrix *mat)
-{
-   const struct st_framebuffer *stfb = shader->context->draw_buffer;
-   const VGfloat px_center_offset = 0.5f;
-
-   memcpy(&shader->paint_matrix, mat, sizeof(*mat));
-
-   /* make it window-to-paint for the shaders */
-   matrix_translate(&shader->paint_matrix, px_center_offset,
-         stfb->height - 1.0f + px_center_offset);
-   matrix_scale(&shader->paint_matrix, 1.0f, -1.0f);
-}
diff --git a/src/gallium/state_trackers/vega/shader.h b/src/gallium/state_trackers/vega/shader.h
deleted file mode 100644 (file)
index 8b97e53..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef SHADER_H
-#define SHADER_H
-
-#include "VG/openvg.h"
-
-struct shader;
-struct vg_paint;
-struct vg_context;
-struct vg_image;
-struct matrix;
-
-struct shader *shader_create(struct vg_context *context);
-void shader_destroy(struct shader *shader);
-
-void shader_set_color_transform(struct shader *shader, VGboolean set);
-
-void shader_set_masking(struct shader *shader, VGboolean set);
-VGboolean shader_is_masking(struct shader *shader);
-
-void shader_set_paint(struct shader *shader, struct vg_paint *paint);
-struct vg_paint *shader_paint(struct shader *shader);
-
-void shader_set_image_mode(struct shader *shader, VGImageMode image_mode);
-VGImageMode shader_image_mode(struct shader *shader);
-
-void shader_set_drawing_image(struct shader *shader, VGboolean drawing_image);
-VGboolean shader_drawing_image(struct shader *shader);
-
-void shader_set_image(struct shader *shader, struct vg_image *img);
-
-void shader_set_surface_matrix(struct shader *shader,
-                               const struct matrix *mat);
-void shader_set_paint_matrix(struct shader *shader, const struct matrix *mat);
-
-void shader_bind(struct shader *shader);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/shaders_cache.c b/src/gallium/state_trackers/vega/shaders_cache.c
deleted file mode 100644 (file)
index c1082ca..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "shaders_cache.h"
-
-#include "vg_context.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_shader_tokens.h"
-
-#include "tgsi/tgsi_build.h"
-#include "tgsi/tgsi_dump.h"
-#include "tgsi/tgsi_parse.h"
-#include "tgsi/tgsi_util.h"
-#include "tgsi/tgsi_text.h"
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-#include "util/u_debug.h"
-#include "cso_cache/cso_hash.h"
-#include "cso_cache/cso_context.h"
-
-#include "VG/openvg.h"
-
-#include "asm_fill.h"
-
-/* Essentially we construct an ubber-shader based on the state
- * of the pipeline. The stages are:
- * 1) Paint generation (color/gradient/pattern)
- * 2) Image composition (normal/multiply/stencil)
- * 3) Color transform
- * 4) Per-channel alpha generation
- * 5) Extended blend (multiply/screen/darken/lighten)
- * 6) Mask
- * 7) Premultiply/Unpremultiply
- * 8) Color transform (to black and white)
- */
-#define SHADER_STAGES 8
-
-struct cached_shader {
-   void *driver_shader;
-   struct pipe_shader_state state;
-};
-
-struct shaders_cache {
-   struct vg_context *pipe;
-
-   struct cso_hash *hash;
-};
-
-
-static INLINE struct tgsi_token *tokens_from_assembly(const char *txt, int num_tokens)
-{
-   struct tgsi_token *tokens;
-
-   tokens = (struct tgsi_token *) MALLOC(num_tokens * sizeof(tokens[0]));
-
-   tgsi_text_translate(txt, tokens, num_tokens);
-
-#if DEBUG_SHADERS
-   tgsi_dump(tokens, 0);
-#endif
-
-   return tokens;
-}
-
-/*
-static const char max_shader_preamble[] =
-   "FRAG\n"
-   "DCL IN[0], POSITION, LINEAR\n"
-   "DCL IN[1], GENERIC[0], PERSPECTIVE\n"
-   "DCL OUT[0], COLOR, CONSTANT\n"
-   "DCL CONST[0..9], CONSTANT\n"
-   "DCL TEMP[0..9], CONSTANT\n"
-   "DCL SAMP[0..9], CONSTANT\n";
-
-   max_shader_preamble strlen == 175
-*/
-#define MAX_PREAMBLE 175
-
-static INLINE VGint range_min(VGint min, VGint current)
-{
-   if (min < 0)
-      min = current;
-   else
-      min = MIN2(min, current);
-   return min;
-}
-
-static INLINE VGint range_max(VGint max, VGint current)
-{
-   return MAX2(max, current);
-}
-
-static void *
-combine_shaders(const struct shader_asm_info *shaders[SHADER_STAGES], int num_shaders,
-                struct pipe_context *pipe,
-                struct pipe_shader_state *shader)
-{
-   VGboolean declare_input = VG_FALSE;
-   VGint start_const   = -1, end_const   = 0;
-   VGint start_temp    = -1, end_temp    = 0;
-   VGint start_sampler = -1, end_sampler = 0;
-   VGint i, current_shader = 0;
-   VGint num_consts, num_temps, num_samplers;
-   struct ureg_program *ureg;
-   struct ureg_src in[2];
-   struct ureg_src *sampler = NULL;
-   struct ureg_src *constant = NULL;
-   struct ureg_dst out, *temp = NULL;
-   void *p = NULL;
-
-   for (i = 0; i < num_shaders; ++i) {
-      if (shaders[i]->num_consts)
-         start_const = range_min(start_const, shaders[i]->start_const);
-      if (shaders[i]->num_temps)
-         start_temp = range_min(start_temp, shaders[i]->start_temp);
-      if (shaders[i]->num_samplers)
-         start_sampler = range_min(start_sampler, shaders[i]->start_sampler);
-
-      end_const = range_max(end_const, shaders[i]->start_const +
-                            shaders[i]->num_consts);
-      end_temp = range_max(end_temp, shaders[i]->start_temp +
-                            shaders[i]->num_temps);
-      end_sampler = range_max(end_sampler, shaders[i]->start_sampler +
-                            shaders[i]->num_samplers);
-      if (shaders[i]->needs_position)
-         declare_input = VG_TRUE;
-   }
-   /* if they're still unitialized, initialize them */
-   if (start_const < 0)
-      start_const = 0;
-   if (start_temp < 0)
-      start_temp = 0;
-   if (start_sampler < 0)
-       start_sampler = 0;
-
-   num_consts   = end_const   - start_const;
-   num_temps    = end_temp    - start_temp;
-   num_samplers = end_sampler - start_sampler;
-
-   ureg = ureg_create(TGSI_PROCESSOR_FRAGMENT);
-   if (!ureg)
-       return NULL;
-
-   if (declare_input) {
-      in[0] = ureg_DECL_fs_input(ureg,
-                                 TGSI_SEMANTIC_POSITION,
-                                 0,
-                                 TGSI_INTERPOLATE_LINEAR);
-      in[1] = ureg_DECL_fs_input(ureg,
-                                 TGSI_SEMANTIC_GENERIC,
-                                 0,
-                                 TGSI_INTERPOLATE_PERSPECTIVE);
-   }
-
-   /* we always have a color output */
-   out = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0);
-
-   if (num_consts >= 1) {
-      constant = malloc(sizeof(struct ureg_src) * end_const);
-      for (i = start_const; i < end_const; i++) {
-         constant[i] = ureg_DECL_constant(ureg, i);
-      }
-
-   }
-
-   if (num_temps >= 1) {
-      temp = malloc(sizeof(struct ureg_dst) * end_temp);
-      for (i = start_temp; i < end_temp; i++) {
-         temp[i] = ureg_DECL_temporary(ureg);
-      }
-   }
-
-   if (num_samplers >= 1) {
-      sampler = malloc(sizeof(struct ureg_src) * end_sampler);
-      for (i = start_sampler; i < end_sampler; i++) {
-         sampler[i] = ureg_DECL_sampler(ureg, i);
-      }
-   }
-
-   while (current_shader < num_shaders) {
-      if ((current_shader + 1) == num_shaders) {
-         shaders[current_shader]->func(ureg,
-                                       &out,
-                                       in,
-                                       sampler,
-                                       temp,
-                                       constant);
-      } else {
-         shaders[current_shader]->func(ureg,
-                                      &temp[0],
-                                      in,
-                                      sampler,
-                                      temp,
-                                      constant);
-      }
-      current_shader++;
-   }
-
-   ureg_END(ureg);
-
-   shader->tokens = ureg_finalize(ureg);
-   if (!shader->tokens) {
-      ureg_destroy(ureg);
-      return NULL;
-   }
-
-   p = pipe->create_fs_state(pipe, shader);
-
-   if (num_temps >= 1) {
-      for (i = start_temp; i < end_temp; i++) {
-         ureg_release_temporary(ureg, temp[i]);
-      }
-   }
-
-   ureg_destroy(ureg);
-
-   free(temp);
-   free(constant);
-   free(sampler);
-
-   return p;
-}
-
-static void *
-create_shader(struct pipe_context *pipe,
-              int id,
-              struct pipe_shader_state *shader)
-{
-   int idx = 0, sh;
-   const struct shader_asm_info * shaders[SHADER_STAGES];
-
-   /* first stage */
-   sh = SHADERS_GET_PAINT_SHADER(id);
-   switch (sh << SHADERS_PAINT_SHIFT) {
-   case VEGA_SOLID_FILL_SHADER:
-   case VEGA_LINEAR_GRADIENT_SHADER:
-   case VEGA_RADIAL_GRADIENT_SHADER:
-   case VEGA_PATTERN_SHADER:
-   case VEGA_PAINT_DEGENERATE_SHADER:
-      shaders[idx] = &shaders_paint_asm[(sh >> SHADERS_PAINT_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* second stage */
-   sh = SHADERS_GET_IMAGE_SHADER(id);
-   switch (sh) {
-   case VEGA_IMAGE_NORMAL_SHADER:
-   case VEGA_IMAGE_MULTIPLY_SHADER:
-   case VEGA_IMAGE_STENCIL_SHADER:
-      shaders[idx] = &shaders_image_asm[(sh >> SHADERS_IMAGE_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* sanity check */
-   assert(idx == ((!sh || sh == VEGA_IMAGE_NORMAL_SHADER) ? 1 : 2));
-
-   /* third stage */
-   sh = SHADERS_GET_COLOR_TRANSFORM_SHADER(id);
-   switch (sh) {
-   case VEGA_COLOR_TRANSFORM_SHADER:
-      shaders[idx] = &shaders_color_transform_asm[
-         (sh >> SHADERS_COLOR_TRANSFORM_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* fourth stage */
-   sh = SHADERS_GET_ALPHA_SHADER(id);
-   switch (sh) {
-   case VEGA_ALPHA_NORMAL_SHADER:
-   case VEGA_ALPHA_PER_CHANNEL_SHADER:
-      shaders[idx] = &shaders_alpha_asm[
-         (sh >> SHADERS_ALPHA_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* fifth stage */
-   sh = SHADERS_GET_BLEND_SHADER(id);
-   switch (sh) {
-   case VEGA_BLEND_SRC_SHADER:
-   case VEGA_BLEND_SRC_OVER_SHADER:
-   case VEGA_BLEND_DST_OVER_SHADER:
-   case VEGA_BLEND_SRC_IN_SHADER:
-   case VEGA_BLEND_DST_IN_SHADER:
-   case VEGA_BLEND_MULTIPLY_SHADER:
-   case VEGA_BLEND_SCREEN_SHADER:
-   case VEGA_BLEND_DARKEN_SHADER:
-   case VEGA_BLEND_LIGHTEN_SHADER:
-   case VEGA_BLEND_ADDITIVE_SHADER:
-      shaders[idx] = &shaders_blend_asm[(sh >> SHADERS_BLEND_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* sixth stage */
-   sh = SHADERS_GET_MASK_SHADER(id);
-   switch (sh) {
-   case VEGA_MASK_SHADER:
-      shaders[idx] = &shaders_mask_asm[(sh >> SHADERS_MASK_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* seventh stage */
-   sh = SHADERS_GET_PREMULTIPLY_SHADER(id);
-   switch (sh) {
-   case VEGA_PREMULTIPLY_SHADER:
-   case VEGA_UNPREMULTIPLY_SHADER:
-      shaders[idx] = &shaders_premultiply_asm[
-         (sh >> SHADERS_PREMULTIPLY_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   /* eighth stage */
-   sh = SHADERS_GET_BW_SHADER(id);
-   switch (sh) {
-   case VEGA_BW_SHADER:
-      shaders[idx] = &shaders_bw_asm[(sh >> SHADERS_BW_SHIFT) - 1];
-      assert(shaders[idx]->id == sh);
-      idx++;
-      break;
-   default:
-      break;
-   }
-
-   return combine_shaders(shaders, idx, pipe, shader);
-}
-
-/*************************************************/
-
-struct shaders_cache * shaders_cache_create(struct vg_context *vg)
-{
-   struct shaders_cache *sc = CALLOC_STRUCT(shaders_cache);
-
-   sc->pipe = vg;
-   sc->hash = cso_hash_create();
-
-   return sc;
-}
-
-void shaders_cache_destroy(struct shaders_cache *sc)
-{
-   struct cso_hash_iter iter = cso_hash_first_node(sc->hash);
-
-   while (!cso_hash_iter_is_null(iter)) {
-      struct cached_shader *cached =
-         (struct cached_shader *)cso_hash_iter_data(iter);
-      cso_delete_fragment_shader(sc->pipe->cso_context,
-                                 cached->driver_shader);
-      iter = cso_hash_erase(sc->hash, iter);
-   }
-
-   cso_hash_delete(sc->hash);
-   FREE(sc);
-}
-
-void * shaders_cache_fill(struct shaders_cache *sc,
-                          int shader_key)
-{
-   VGint key = shader_key;
-   struct cached_shader *cached;
-   struct cso_hash_iter iter = cso_hash_find(sc->hash, key);
-
-   if (cso_hash_iter_is_null(iter)) {
-      cached = CALLOC_STRUCT(cached_shader);
-      cached->driver_shader = create_shader(sc->pipe->pipe, key, &cached->state);
-
-      cso_hash_insert(sc->hash, key, cached);
-
-      return cached->driver_shader;
-   }
-
-   cached = (struct cached_shader *)cso_hash_iter_data(iter);
-
-   assert(cached->driver_shader);
-   return cached->driver_shader;
-}
-
-struct vg_shader * shader_create_from_text(struct pipe_context *pipe,
-                                           const char *txt, int num_tokens,
-                                           int type)
-{
-   struct vg_shader *shader = (struct vg_shader *)MALLOC(
-      sizeof(struct vg_shader));
-   struct tgsi_token *tokens = tokens_from_assembly(txt, num_tokens);
-   struct pipe_shader_state state;
-
-   debug_assert(type == PIPE_SHADER_VERTEX ||
-                type == PIPE_SHADER_FRAGMENT);
-
-   state.tokens = tokens;
-   memset(&state.stream_output, 0, sizeof(state.stream_output));
-   shader->type = type;
-   shader->tokens = tokens;
-
-   if (type == PIPE_SHADER_FRAGMENT)
-      shader->driver = pipe->create_fs_state(pipe, &state);
-   else
-      shader->driver = pipe->create_vs_state(pipe, &state);
-   return shader;
-}
-
-void vg_shader_destroy(struct vg_context *ctx, struct vg_shader *shader)
-{
-   if (shader->type == PIPE_SHADER_FRAGMENT)
-      cso_delete_fragment_shader(ctx->cso_context, shader->driver);
-   else
-      cso_delete_vertex_shader(ctx->cso_context, shader->driver);
-   FREE(shader->tokens);
-   FREE(shader);
-}
diff --git a/src/gallium/state_trackers/vega/shaders_cache.h b/src/gallium/state_trackers/vega/shaders_cache.h
deleted file mode 100644 (file)
index 05014f2..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef SHADERS_CACHE_H
-#define SHADERS_CACHE_H
-
-
-struct vg_context;
-struct pipe_context;
-struct tgsi_token;
-struct shaders_cache;
-
-#define _SHADERS_PAINT_BITS            3
-#define _SHADERS_IMAGE_BITS            2
-#define _SHADERS_COLOR_TRANSFORM_BITS  1
-#define _SHADERS_ALPHA_BITS            2
-#define _SHADERS_BLEND_BITS            4
-#define _SHADERS_MASK_BITS             1
-#define _SHADERS_PREMULTIPLY_BITS      2
-#define _SHADERS_BW_BITS               1
-
-#define SHADERS_PAINT_SHIFT           (0)
-#define SHADERS_IMAGE_SHIFT           (SHADERS_PAINT_SHIFT + _SHADERS_PAINT_BITS)
-#define SHADERS_COLOR_TRANSFORM_SHIFT (SHADERS_IMAGE_SHIFT + _SHADERS_IMAGE_BITS)
-#define SHADERS_ALPHA_SHIFT           (SHADERS_COLOR_TRANSFORM_SHIFT + _SHADERS_COLOR_TRANSFORM_BITS)
-#define SHADERS_BLEND_SHIFT           (SHADERS_ALPHA_SHIFT + _SHADERS_ALPHA_BITS)
-#define SHADERS_MASK_SHIFT            (SHADERS_BLEND_SHIFT + _SHADERS_BLEND_BITS)
-#define SHADERS_PREMULTIPLY_SHIFT     (SHADERS_MASK_SHIFT + _SHADERS_MASK_BITS)
-#define SHADERS_BW_SHIFT              (SHADERS_PREMULTIPLY_SHIFT + _SHADERS_PREMULTIPLY_BITS)
-
-#define _SHADERS_GET_STAGE(stage, id) \
-   ((id) & (((1 << _SHADERS_ ## stage ## _BITS) - 1) << SHADERS_ ## stage ## _SHIFT))
-
-#define SHADERS_GET_PAINT_SHADER(id)           _SHADERS_GET_STAGE(PAINT, id)
-#define SHADERS_GET_IMAGE_SHADER(id)           _SHADERS_GET_STAGE(IMAGE, id)
-#define SHADERS_GET_COLOR_TRANSFORM_SHADER(id) _SHADERS_GET_STAGE(COLOR_TRANSFORM, id)
-#define SHADERS_GET_ALPHA_SHADER(id)           _SHADERS_GET_STAGE(ALPHA, id)
-#define SHADERS_GET_BLEND_SHADER(id)           _SHADERS_GET_STAGE(BLEND, id)
-#define SHADERS_GET_MASK_SHADER(id)            _SHADERS_GET_STAGE(MASK, id)
-#define SHADERS_GET_PREMULTIPLY_SHADER(id)     _SHADERS_GET_STAGE(PREMULTIPLY, id)
-#define SHADERS_GET_BW_SHADER(id)              _SHADERS_GET_STAGE(BW, id)
-
-enum VegaShaderType {
-   VEGA_SOLID_FILL_SHADER         = 1 << SHADERS_PAINT_SHIFT,
-   VEGA_LINEAR_GRADIENT_SHADER    = 2 << SHADERS_PAINT_SHIFT,
-   VEGA_RADIAL_GRADIENT_SHADER    = 3 << SHADERS_PAINT_SHIFT,
-   VEGA_PATTERN_SHADER            = 4 << SHADERS_PAINT_SHIFT,
-   VEGA_PAINT_DEGENERATE_SHADER   = 5 << SHADERS_PAINT_SHIFT,
-
-   VEGA_IMAGE_NORMAL_SHADER       = 1 << SHADERS_IMAGE_SHIFT,
-   VEGA_IMAGE_MULTIPLY_SHADER     = 2 << SHADERS_IMAGE_SHIFT,
-   VEGA_IMAGE_STENCIL_SHADER      = 3 << SHADERS_IMAGE_SHIFT,
-
-   VEGA_COLOR_TRANSFORM_SHADER    = 1 <<  SHADERS_COLOR_TRANSFORM_SHIFT,
-
-   VEGA_ALPHA_NORMAL_SHADER       = 1 <<  SHADERS_ALPHA_SHIFT,
-   VEGA_ALPHA_PER_CHANNEL_SHADER  = 2 <<  SHADERS_ALPHA_SHIFT,
-
-   VEGA_BLEND_SRC_SHADER          = 1 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_SRC_OVER_SHADER     = 2 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_DST_OVER_SHADER     = 3 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_SRC_IN_SHADER       = 4 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_DST_IN_SHADER       = 5 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_MULTIPLY_SHADER     = 6 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_SCREEN_SHADER       = 7 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_DARKEN_SHADER       = 8 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_LIGHTEN_SHADER      = 9 << SHADERS_BLEND_SHIFT,
-   VEGA_BLEND_ADDITIVE_SHADER     = 10<< SHADERS_BLEND_SHIFT,
-
-   VEGA_MASK_SHADER               = 1 << SHADERS_MASK_SHIFT,
-
-   VEGA_PREMULTIPLY_SHADER        = 1 << SHADERS_PREMULTIPLY_SHIFT,
-   VEGA_UNPREMULTIPLY_SHADER      = 2 << SHADERS_PREMULTIPLY_SHIFT,
-
-   VEGA_BW_SHADER                 = 1 << SHADERS_BW_SHIFT
-};
-
-struct vg_shader {
-   void *driver;
-   struct tgsi_token *tokens;
-   int type;/* PIPE_SHADER_VERTEX, PIPE_SHADER_FRAGMENT */
-};
-
-struct shaders_cache *shaders_cache_create(struct vg_context *pipe);
-void shaders_cache_destroy(struct shaders_cache *sc);
-void *shaders_cache_fill(struct shaders_cache *sc,
-                         int shader_key);
-
-struct vg_shader *shader_create_from_text(struct pipe_context *pipe,
-                                          const char *txt, int num_tokens,
-                                          int type);
-
-void vg_shader_destroy(struct vg_context *ctx, struct vg_shader *shader);
-
-
-
-#endif
diff --git a/src/gallium/state_trackers/vega/stroker.c b/src/gallium/state_trackers/vega/stroker.c
deleted file mode 100644 (file)
index b9f0f2c..0000000
+++ /dev/null
@@ -1,1351 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "stroker.h"
-
-#include "path.h"
-#include "vg_state.h"
-#include "util_array.h"
-#include "arc.h"
-#include "bezier.h"
-#include "matrix.h"
-#include "path_utils.h"
-#include "polygon.h"
-
-#include "util/u_math.h"
-
-#ifndef M_2PI
-#define M_2PI 6.28318530717958647692528676655900576
-#endif
-
-#define STROKE_SEGMENTS 0
-#define STROKE_DEBUG 0
-#define DEBUG_EMITS 0
-
-static const VGfloat curve_threshold = 0.25f;
-
-static const VGfloat zero_coords[] = {0.f, 0.f};
-
-enum intersection_type {
-   NoIntersections,
-   BoundedIntersection,
-   UnboundedIntersection,
-};
-
-enum line_join_mode {
-   FlatJoin,
-   SquareJoin,
-   MiterJoin,
-   RoundJoin,
-   RoundCap
-};
-
-struct stroke_iterator {
-   void (*next)(struct stroke_iterator *);
-   VGboolean (*has_next)(struct stroke_iterator *);
-
-   VGPathCommand (*current_command)(struct stroke_iterator *it);
-   void (*current_coords)(struct stroke_iterator *it, VGfloat *coords);
-
-   VGint position;
-   VGint coord_position;
-
-   const VGubyte *cmds;
-   const VGfloat *coords;
-   VGint num_commands;
-   VGint num_coords;
-
-   struct polygon *curve_poly;
-   VGint curve_index;
-};
-
-static VGPathCommand stroke_itr_command(struct stroke_iterator *itr)
-{
-   return itr->current_command(itr);
-}
-
-static void stroke_itr_coords(struct stroke_iterator *itr, VGfloat *coords)
-{
-   itr->current_coords(itr, coords);
-}
-
-static void stroke_fw_itr_coords(struct stroke_iterator *itr, VGfloat *coords)
-{
-   if (itr->position >= itr->num_commands)
-      return;
-   switch (stroke_itr_command(itr)) {
-   case VG_MOVE_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      break;
-   case VG_LINE_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      break;
-   case VG_CUBIC_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      coords[2] = itr->coords[itr->coord_position + 2];
-      coords[3] = itr->coords[itr->coord_position + 3];
-      coords[4] = itr->coords[itr->coord_position + 4];
-      coords[5] = itr->coords[itr->coord_position + 5];
-      break;
-   default:
-      debug_assert(!"invalid command!\n");
-   }
-}
-
-
-static void stroke_bw_itr_coords(struct stroke_iterator *itr, VGfloat *coords)
-{
-   if (itr->position >= itr->num_commands)
-      return;
-   switch (stroke_itr_command(itr)) {
-   case VG_MOVE_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      break;
-   case VG_LINE_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      break;
-   case VG_CUBIC_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position + 4];
-      coords[1] = itr->coords[itr->coord_position + 5];
-      coords[2] = itr->coords[itr->coord_position + 2];
-      coords[3] = itr->coords[itr->coord_position + 3];
-      coords[4] = itr->coords[itr->coord_position + 0];
-      coords[5] = itr->coords[itr->coord_position + 1];
-      break;
-   default:
-      debug_assert(!"invalid command!\n");
-   }
-}
-
-
-static VGPathCommand stroke_fw_current_command(struct stroke_iterator *it)
-{
-   return it->cmds[it->position];
-}
-
-static VGPathCommand stroke_bw_current_command(struct stroke_iterator *it)
-{
-   VGPathCommand prev_cmd;
-   if (it->position == it->num_commands  -1)
-      return VG_MOVE_TO_ABS;
-
-   prev_cmd = it->cmds[it->position + 1];
-   return prev_cmd;
-}
-
-static VGboolean stroke_fw_has_next(struct stroke_iterator *itr)
-{
-   return itr->position < (itr->num_commands - 1);
-}
-
-static VGboolean stroke_bw_has_next(struct stroke_iterator *itr)
-{
-   return itr->position > 0;
-}
-
-static void stroke_fw_next(struct stroke_iterator *itr)
-{
-   VGubyte cmd;
-   debug_assert(stroke_fw_has_next(itr));
-
-   cmd = stroke_itr_command(itr);
-
-   itr->coord_position += num_elements_for_segments(&cmd, 1);
-   ++itr->position;
-}
-
-static void stroke_bw_next(struct stroke_iterator *itr)
-{
-   VGubyte cmd;
-   debug_assert(stroke_bw_has_next(itr));
-
-   --itr->position;
-   cmd = stroke_itr_command(itr);
-
-   itr->coord_position -= num_elements_for_segments(&cmd, 1);
-}
-
-static void stroke_itr_common_init(struct stroke_iterator *itr,
-                                   struct array *cmds,
-                                   struct array *coords)
-{
-   itr->cmds = (VGubyte*)cmds->data;
-   itr->num_commands = cmds->num_elements;
-
-   itr->coords = (VGfloat*)coords->data;
-   itr->num_coords = coords->num_elements;
-}
-
-static void stroke_forward_iterator(struct stroke_iterator *itr,
-                                    struct array *cmds,
-                                    struct array *coords)
-{
-   stroke_itr_common_init(itr, cmds, coords);
-   itr->position = 0;
-   itr->coord_position = 0;
-
-   itr->next = stroke_fw_next;
-   itr->has_next = stroke_fw_has_next;
-   itr->current_command = stroke_fw_current_command;
-   itr->current_coords = stroke_fw_itr_coords;
-}
-
-static void stroke_backward_iterator(struct stroke_iterator *itr,
-                                     struct array *cmds,
-                                     struct array *coords)
-{
-   VGubyte cmd;
-   stroke_itr_common_init(itr, cmds, coords);
-   itr->position = itr->num_commands - 1;
-
-   cmd = stroke_bw_current_command(itr);
-   itr->coord_position = itr->num_coords -
-                         num_elements_for_segments(&cmd, 1);
-
-   itr->next = stroke_bw_next;
-   itr->has_next = stroke_bw_has_next;
-   itr->current_command = stroke_bw_current_command;
-   itr->current_coords = stroke_bw_itr_coords;
-}
-
-
-
-static void stroke_flat_next(struct stroke_iterator *itr)
-{
-   VGubyte cmd;
-
-   if (itr->curve_index >= 0) {
-      ++itr->curve_index;
-      if (itr->curve_index >= polygon_vertex_count(itr->curve_poly)) {
-         itr->curve_index = -1;
-         polygon_destroy(itr->curve_poly);
-         itr->curve_poly = 0;
-      } else
-         return;
-   }
-   debug_assert(stroke_fw_has_next(itr));
-
-   cmd = itr->cmds[itr->position];
-   itr->coord_position += num_elements_for_segments(&cmd, 1);
-   ++itr->position;
-
-   cmd = itr->cmds[itr->position];
-
-   if (cmd == VG_CUBIC_TO_ABS) {
-      struct bezier bezier;
-      VGfloat bez[8];
-
-      bez[0] = itr->coords[itr->coord_position - 2];
-      bez[1] = itr->coords[itr->coord_position - 1];
-      bez[2] = itr->coords[itr->coord_position];
-      bez[3] = itr->coords[itr->coord_position + 1];
-      bez[4] = itr->coords[itr->coord_position + 2];
-      bez[5] = itr->coords[itr->coord_position + 3];
-      bez[6] = itr->coords[itr->coord_position + 4];
-      bez[7] = itr->coords[itr->coord_position + 5];
-
-      bezier_init(&bezier,
-                  bez[0], bez[1],
-                  bez[2], bez[3],
-                  bez[4], bez[5],
-                  bez[6], bez[7]);
-      /* skip the first one, it's the same as the prev point */
-      itr->curve_index = 1;
-      if (itr->curve_poly) {
-         polygon_destroy(itr->curve_poly);
-         itr->curve_poly = 0;
-      }
-      itr->curve_poly = bezier_to_polygon(&bezier);
-   }
-}
-
-static VGboolean stroke_flat_has_next(struct stroke_iterator *itr)
-{
-   return  (itr->curve_index >= 0 &&
-            itr->curve_index < (polygon_vertex_count(itr->curve_poly)-1))
-            || itr->position < (itr->num_commands - 1);
-}
-
-static VGPathCommand stroke_flat_current_command(struct stroke_iterator *it)
-{
-   if (it->cmds[it->position] == VG_CUBIC_TO_ABS) {
-      return VG_LINE_TO_ABS;
-   }
-   return it->cmds[it->position];
-}
-
-static void stroke_flat_itr_coords(struct stroke_iterator *itr, VGfloat *coords)
-{
-   if (itr->curve_index <= -1 && itr->position >= itr->num_commands)
-      return;
-
-   if (itr->curve_index >= 0) {
-      polygon_vertex(itr->curve_poly, itr->curve_index,
-                     coords);
-      return;
-   }
-
-   switch (stroke_itr_command(itr)) {
-   case VG_MOVE_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      break;
-   case VG_LINE_TO_ABS:
-      coords[0] = itr->coords[itr->coord_position];
-      coords[1] = itr->coords[itr->coord_position + 1];
-      break;
-   case VG_CUBIC_TO_ABS:
-   default:
-      debug_assert(!"invalid command!\n");
-   }
-}
-
-static void stroke_flat_iterator(struct stroke_iterator *itr,
-                                 struct array *cmds,
-                                 struct array *coords)
-{
-   stroke_itr_common_init(itr, cmds, coords);
-   itr->position = 0;
-   itr->coord_position = 0;
-
-   itr->next = stroke_flat_next;
-   itr->has_next = stroke_flat_has_next;
-   itr->current_command = stroke_flat_current_command;
-   itr->current_coords = stroke_flat_itr_coords;
-   itr->curve_index = -1;
-   itr->curve_poly = 0;
-}
-
-
-static INLINE VGboolean finite_coords4(const VGfloat *c)
-{
-   return
-      isfinite(c[0]) && isfinite(c[1]) &&
-      isfinite(c[2]) && isfinite(c[3]);
-}
-
-/* from Graphics Gems II */
-#define SAME_SIGNS(a, b) ((a) * (b) >= 0)
-static VGboolean do_lines_intersect(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2,
-                                    VGfloat x3, VGfloat y3, VGfloat x4, VGfloat y4)
-{
-   VGfloat a1, a2, b1, b2, c1, c2; /* Coefficients of line eqns */
-   VGfloat r1, r2, r3, r4;         /* 'sign' values */
-
-   a1 = y2 - y1;
-   b1 = x1 - x2;
-   c1 = x2 * y1 - x1 * y2;
-
-   r3 = a1 * x3 + b1 * y3 + c1;
-   r4 = a1 * x4 + b1 * y4 + c1;
-
-   if (r3 != 0 && r4 != 0 && SAME_SIGNS(r3, r4))
-      return VG_FALSE;
-
-   a2 = y4 - y3;
-   b2 = x3 - x4;
-   c2 = x4 * y3 - x3 * y4;
-
-   r1 = a2 * x1 + b2 * y1 + c2;
-   r2 = a2 * x2 + b2 * y2 + c2;
-
-   if (r1 != 0 && r2 != 0 && SAME_SIGNS(r1, r2))
-      return VG_FALSE;
-
-   return VG_TRUE;
-}
-
-static INLINE VGfloat line_dx(const VGfloat *l)
-{
-   return l[2] - l[0];
-}
-
-static INLINE VGfloat line_dy(const VGfloat *l)
-{
-   return l[3] - l[1];
-}
-
-static INLINE VGfloat line_angle(const VGfloat *l)
-{
-   const VGfloat dx = line_dx(l);
-   const VGfloat dy = line_dy(l);
-
-   const VGfloat theta = atan2(-dy, dx) * 360.0 / M_2PI;
-
-   const VGfloat theta_normalized = theta < 0 ? theta + 360 : theta;
-
-   if (floatsEqual(theta_normalized, 360.f))
-      return 0;
-   else
-      return theta_normalized;
-}
-
-static INLINE void line_set_length(VGfloat *l, VGfloat len)
-{
-   VGfloat uv[] = {l[0], l[1], l[2], l[3]};
-   if (null_line(l))
-      return;
-   line_normalize(uv);
-   l[2] = l[0] + line_dx(uv) * len;
-   l[3] = l[1] + line_dy(uv) * len;
-}
-
-static INLINE void line_translate(VGfloat *l, VGfloat x, VGfloat y)
-{
-   l[0] += x;
-   l[1] += y;
-   l[2] += x;
-   l[3] += y;
-}
-
-static INLINE VGfloat line_angle_to(const VGfloat *l1,
-                                    const VGfloat *l2)
-{
-   VGfloat a1, a2, delta, delta_normalized;
-   if (null_line(l1) || null_line(l1))
-      return 0;
-
-   a1 = line_angle(l1);
-   a2 = line_angle(l2);
-
-   delta = a2 - a1;
-   delta_normalized = delta < 0 ? delta + 360 : delta;
-
-   if (floatsEqual(delta, 360.f))
-      return 0;
-   else
-      return delta_normalized;
-}
-
-static INLINE VGfloat line_angles(const VGfloat *l1,
-                                  const VGfloat *l2)
-{
-   VGfloat cos_line, rad = 0;
-
-   if (null_line(l1) || null_line(l2))
-      return 0;
-
-   cos_line = (line_dx(l1)*line_dx(l2) + line_dy(l1)*line_dy(l2)) /
-              (line_lengthv(l1)*line_lengthv(l2));
-   rad = 0;
-
-   if (cos_line >= -1.0 && cos_line <= 1.0)
-      rad = acos(cos_line);
-   return rad * 360 / M_2PI;
-}
-
-
-static INLINE VGfloat adapted_angle_on_x(const VGfloat *line)
-{
-   const VGfloat identity[] = {0, 0, 1, 0};
-   VGfloat angle = line_angles(line, identity);
-   if (line_dy(line) > 0)
-      angle = 360 - angle;
-   return angle;
-}
-
-static enum intersection_type line_intersect(const VGfloat *l1,
-                                             const VGfloat *l2,
-                                             float *intersection_point)
-{
-   VGfloat isect[2] = { 0 };
-   enum intersection_type type;
-   VGboolean dx_zero, ldx_zero;
-
-   if (null_line(l1) || null_line(l2) ||
-       !finite_coords4(l1) || !finite_coords4(l2))
-      return NoIntersections;
-
-   type = do_lines_intersect(l1[0], l1[1], l1[2], l1[3], l2[0], l2[1], l2[2], l2[3])
-          ? BoundedIntersection : UnboundedIntersection;
-
-   dx_zero  = floatsEqual(line_dx(l1) + 1, 1);
-   ldx_zero = floatsEqual(line_dx(l2) + 1, 1);
-
-   /* one of the lines is vertical */
-   if (dx_zero && ldx_zero) {
-      type = NoIntersections;
-   } else if (dx_zero) {
-      VGfloat la = line_dy(l2) / line_dx(l2);
-      isect[0] = l1[0];
-      isect[1] = la * l1[0] + l2[1] - la * l2[0];
-   } else if (ldx_zero) {
-      VGfloat ta = line_dy(l1) / line_dx(l1);
-      isect[0] = l2[0];
-      isect[1] = ta * l2[0] + l1[1] - ta*l1[0];
-   } else {
-      VGfloat x;
-      VGfloat ta = line_dy(l1) / line_dx(l1);
-      VGfloat la = line_dy(l2) / line_dx(l2);
-      if (ta == la)
-         return NoIntersections;
-
-      x = ( - l2[1] + la * l2[0] + l1[1] - ta * l1[0] ) / (la - ta);
-      isect[0] = x;
-      isect[1] = ta*(x - l1[0]) + l1[1];
-   }
-   if (intersection_point) {
-      intersection_point[0] = isect[0];
-      intersection_point[1] = isect[1];
-   }
-   return type;
-}
-
-static INLINE enum line_join_mode stroker_join_mode(struct stroker *s)
-{
-   switch(s->join_style) {
-   case VG_JOIN_MITER:
-      return MiterJoin;
-   case VG_JOIN_ROUND:
-      return RoundJoin;
-   case VG_JOIN_BEVEL:
-      return FlatJoin;
-   default:
-      return FlatJoin;
-   }
-}
-
-static INLINE enum line_join_mode stroker_cap_mode(struct stroker *s)
-{
-   switch(s->cap_style) {
-   case VG_CAP_BUTT:
-      return FlatJoin;
-   case VG_CAP_ROUND:
-      return RoundCap;
-   case VG_CAP_SQUARE:
-      return SquareJoin;
-   default:
-      return FlatJoin;
-   }
-}
-
-void stroker_emit_move_to(struct stroker *stroker, VGfloat x, VGfloat y)
-{
-   VGubyte cmds = VG_MOVE_TO_ABS;
-   VGfloat coords[2] = {x, y};
-#if DEBUG_EMITS
-   debug_printf("emit move %f, %f\n", x, y);
-#endif
-   stroker->back2_x = stroker->back1_x;
-   stroker->back2_y = stroker->back1_y;
-   stroker->back1_x = x;
-   stroker->back1_y = y;
-
-   path_append_data(stroker->path,
-                    1,
-                    &cmds, &coords);
-}
-
-void stroker_emit_line_to(struct stroker *stroker, VGfloat x, VGfloat y)
-{
-   VGubyte cmds = VG_LINE_TO_ABS;
-   VGfloat coords[2] = {x, y};
-#if DEBUG_EMITS
-   debug_printf("emit line %f, %f\n", x, y);
-#endif
-   stroker->back2_x = stroker->back1_x;
-   stroker->back2_y = stroker->back1_y;
-   stroker->back1_x = x;
-   stroker->back1_y = y;
-   path_append_data(stroker->path,
-                    1,
-                    &cmds, &coords);
-}
-
-void stroker_emit_curve_to(struct stroker *stroker, VGfloat px1, VGfloat py1,
-                                  VGfloat px2, VGfloat py2,
-                                  VGfloat x, VGfloat y)
-{
-   VGubyte cmds = VG_CUBIC_TO_ABS;
-   VGfloat coords[6] = {px1, py1, px2, py2, x, y};
-#if DEBUG_EMITS
-   debug_printf("emit curve %f, %f, %f, %f, %f, %f\n", px1, py1,
-                px2, py2, x, y);
-#endif
-
-   if (px2 == x && py2 == y) {
-      if (px1 == x && py1 == y) {
-         stroker->back2_x = stroker->back1_x;
-         stroker->back2_y = stroker->back1_y;
-      } else {
-         stroker->back2_x = px1;
-         stroker->back2_y = py1;
-      }
-   } else {
-      stroker->back2_x = px2;
-      stroker->back2_y = py2;
-   }
-   stroker->back1_x = x;
-   stroker->back1_y = y;
-
-   path_append_data(stroker->path,
-                    1,
-                    &cmds, &coords);
-}
-
-static INLINE void create_round_join(struct stroker *stroker,
-                                     VGfloat x1, VGfloat y1,
-                                     VGfloat x2, VGfloat y2,
-                                     VGfloat width, VGfloat height)
-{
-   struct arc arc;
-   struct matrix matrix;
-
-   matrix_load_identity(&matrix);
-
-   /*stroker_emit_line_to(stroker, nx, ny);*/
-
-   arc_init(&arc, VG_SCCWARC_TO,
-            x1, y1, x2, y2, width/2, height/2, 0);
-   arc_stroker_emit(&arc, stroker, &matrix);
-}
-
-
-static void create_joins(struct stroker *stroker,
-                         VGfloat focal_x, VGfloat focal_y,
-                         const VGfloat *next_line, enum line_join_mode join)
-{
-#if DEBUG_EMITS
-   debug_printf("create_joins: focal=[%f, %f], next_line=[%f, %f,%f, %f]\n",
-                focal_x, focal_y,
-                next_line[0], next_line[1], next_line[2], next_line[3]);
-#endif
-   /* if we're alredy connected do nothing */
-   if (floatsEqual(stroker->back1_x, next_line[0]) &&
-       floatsEqual(stroker->back1_y, next_line[1]))
-      return;
-
-   if (join == FlatJoin) {
-      stroker_emit_line_to(stroker, next_line[0], next_line[1]);
-   } else {
-      VGfloat prev_line[] = {stroker->back2_x, stroker->back2_y,
-                             stroker->back1_x, stroker->back1_y};
-
-      VGfloat isect[2] = { 0 };
-      enum intersection_type type = line_intersect(prev_line, next_line, isect);
-
-      if (join == SquareJoin) {
-         VGfloat offset = stroker->stroke_width / 2;
-         VGfloat l1[4] = {prev_line[0],
-                          prev_line[1],
-                          prev_line[2],
-                          prev_line[3]};
-         VGfloat l2[4] = {next_line[2],
-                          next_line[3],
-                          next_line[0],
-                          next_line[1]};
-
-         line_translate(l1, line_dx(l1), line_dy(l1));
-         line_set_length(l1, offset);
-
-         line_translate(l2, line_dx(l2), line_dy(l2));
-         line_set_length(l2, offset);
-
-         stroker_emit_line_to(stroker, l1[2], l1[3]);
-         stroker_emit_line_to(stroker, l2[2], l2[3]);
-         stroker_emit_line_to(stroker, l2[0], l2[1]);
-      } else if (join == RoundJoin) {
-         VGfloat offset = stroker->stroke_width / 2;
-         VGfloat short_cut[4] = {prev_line[2], prev_line[3],
-                                 next_line[0], next_line[1]};
-         VGfloat angle = line_angles(prev_line, short_cut);
-
-         if (type == BoundedIntersection ||
-             (angle > 90 && !floatsEqual(angle, 90.f))) {
-            stroker_emit_line_to(stroker, next_line[0], next_line[1]);
-            return;
-         }
-         create_round_join(stroker, prev_line[2], prev_line[3],
-                           next_line[0], next_line[1],
-                           offset * 2, offset * 2);
-
-         stroker_emit_line_to(stroker, next_line[0], next_line[1]);
-      } else if (join == RoundCap) {
-         VGfloat offset = stroker->stroke_width / 2;
-         VGfloat l1[4] = { prev_line[0], prev_line[1],
-                           prev_line[2], prev_line[3] };
-         VGfloat l2[4] = {focal_x, focal_y,
-                          prev_line[2], prev_line[3]};
-
-         line_translate(l1, line_dx(l1), line_dy(l1));
-         line_set_length(l1, KAPPA * offset);
-
-         /* normal between prev_line and focal */
-         line_translate(l2, -line_dy(l2), line_dx(l2));
-         line_set_length(l2, KAPPA * offset);
-
-         stroker_emit_curve_to(stroker, l1[2], l1[3],
-                               l2[2], l2[3],
-                               l2[0], l2[1]);
-
-         l2[0] = l2[0];
-         l2[1] = l2[1];
-         l2[2] = l2[0] - line_dx(l2);
-         l2[3] = l2[1] - line_dy(l2);
-
-         line_translate(l1, next_line[0] - l1[0], next_line[1] - l1[1]);
-
-         stroker_emit_curve_to(stroker,
-                               l2[2], l2[3],
-                               l1[2], l1[3],
-                               l1[0], l1[1]);
-      } else if (join == MiterJoin) {
-         VGfloat miter_line[4] = {stroker->back1_x, stroker->back1_y,
-                                  isect[0], isect[1]};
-         VGfloat sl = (stroker->stroke_width * stroker->miter_limit);
-         VGfloat inside_line[4] = {prev_line[2], prev_line[3],
-                                   next_line[0], next_line[1]};
-         VGfloat angle = line_angle_to(inside_line, prev_line);
-
-         if (type == BoundedIntersection ||
-             (angle > 90 && !floatsEqual(angle, 90.f))) {
-            /*
-            debug_printf("f = %f, nl = %f, pl = %f, is = %f\n",
-                         focal_x, next_line[0],
-                         prev_line[2], isect[0]);*/
-            stroker_emit_line_to(stroker, next_line[0], next_line[1]);
-            return;
-         }
-
-         if (type == NoIntersections || line_lengthv(miter_line) > sl) {
-            stroker_emit_line_to(stroker, next_line[0], next_line[1]);
-         } else {
-            stroker_emit_line_to(stroker, isect[0], isect[1]);
-            stroker_emit_line_to(stroker, next_line[0], next_line[1]);
-         }
-      } else {
-         debug_assert(!"create_joins bad join style");
-      }
-   }
-}
-
-static void stroker_add_segment(struct stroker *stroker,
-                                VGPathCommand cmd,
-                                const VGfloat *coords,
-                                VGint num_coords)
-{
-   /* skip duplicated points */
-   if (stroker->segments->num_elements &&
-       stroker->last_cmd == cmd) {
-      VGfloat *data = stroker->control_points->data;
-      data += stroker->control_points->num_elements;
-      data -= num_coords;
-      switch (cmd) {
-      case VG_MOVE_TO_ABS:
-         if (floatsEqual(coords[0], data[0]) &&
-             floatsEqual(coords[1], data[1]))
-            return;
-         break;
-      case VG_LINE_TO_ABS:
-         if (floatsEqual(coords[0], data[0]) &&
-             floatsEqual(coords[1], data[1]))
-            return;
-         break;
-      case VG_CUBIC_TO_ABS:
-         if (floatsEqual(coords[0], data[0]) &&
-             floatsEqual(coords[1], data[1]) &&
-             floatsEqual(coords[2], data[2]) &&
-             floatsEqual(coords[3], data[3]) &&
-             floatsEqual(coords[4], data[4]) &&
-             floatsEqual(coords[5], data[5]))
-            return;
-         break;
-      default:
-         debug_assert(!"Invalid stroke segment");
-      }
-   } else if (stroker->last_cmd == VG_CUBIC_TO_ABS &&
-              cmd == VG_LINE_TO_ABS) {
-      VGfloat *data = stroker->control_points->data;
-      data += stroker->control_points->num_elements;
-      data -= 2;
-      if (floatsEqual(coords[0], data[0]) &&
-          floatsEqual(coords[1], data[1]))
-         return;
-   }
-   stroker->last_cmd = cmd;
-   array_append_data(stroker->segments, &cmd, 1);
-   array_append_data(stroker->control_points, coords, num_coords);
-}
-
-void stroker_move_to(struct stroker *stroker, VGfloat x, VGfloat y)
-{
-   VGfloat coords[2] = {x, y};
-#if STROKE_SEGMENTS
-   debug_printf("stroker_move_to(%f, %f)\n", x, y);
-#endif
-
-   if (stroker->segments->num_elements > 0)
-      stroker->process_subpath(stroker);
-
-   array_reset(stroker->segments);
-   array_reset(stroker->control_points);
-
-   stroker_add_segment(stroker, VG_MOVE_TO_ABS, coords, 2);
-}
-
-void stroker_line_to(struct stroker *stroker, VGfloat x, VGfloat y)
-{
-   VGfloat coords[] = {x, y};
-
-#if STROKE_SEGMENTS
-   debug_printf("stroker_line_to(%f, %f)\n", x, y);
-#endif
-   if (!stroker->segments->num_elements)
-      stroker_add_segment(stroker, VG_MOVE_TO_ABS, zero_coords, 2);
-
-   stroker_add_segment(stroker, VG_LINE_TO_ABS, coords, 2);
-}
-
-void stroker_curve_to(struct stroker *stroker, VGfloat px1, VGfloat py1,
-                      VGfloat px2, VGfloat py2,
-                      VGfloat x, VGfloat y)
-{
-   VGfloat coords[] = {px1, py1,
-                       px2, py2,
-                       x, y};
-#if STROKE_SEGMENTS
-   debug_printf("stroker_curve_to(%f, %f, %f, %f, %f, %f)\n",
-                px1, py1, px2, py2, x, y);
-#endif
-   if (!stroker->segments->num_elements)
-      stroker_add_segment(stroker, VG_MOVE_TO_ABS, zero_coords, 2);
-
-   stroker_add_segment(stroker, VG_CUBIC_TO_ABS, coords, 6);
-}
-
-static INLINE VGboolean is_segment_null(VGPathCommand cmd,
-                                        VGfloat *coords,
-                                        VGfloat *res)
-{
-   switch(cmd) {
-   case VG_MOVE_TO_ABS:
-   case VG_LINE_TO_ABS:
-      return floatsEqual(coords[0], res[0]) &&
-         floatsEqual(coords[1], res[1]);
-      break;
-   case VG_CUBIC_TO_ABS:
-      return floatsEqual(coords[0], res[0]) &&
-         floatsEqual(coords[1], res[1]) &&
-         floatsEqual(coords[2], res[0]) &&
-         floatsEqual(coords[3], res[1]) &&
-         floatsEqual(coords[4], res[0]) &&
-         floatsEqual(coords[5], res[1]);
-      break;
-   default:
-      assert(0);
-   }
-   return VG_FALSE;
-}
-
-static VGboolean vg_stroke_outline(struct stroke_iterator *it,
-                                struct stroker *stroker,
-                                VGboolean cap_first,
-                                VGfloat *start_tangent)
-{
-#define MAX_OFFSET 16
-   struct bezier offset_curves[MAX_OFFSET];
-   VGPathCommand first_element;
-   VGfloat start[2], prev[2];
-   VGboolean first = VG_TRUE;
-   VGfloat offset;
-
-   first_element = stroke_itr_command(it);
-   if (first_element != VG_MOVE_TO_ABS) {
-      stroker_emit_move_to(stroker, 0.f, 0.f);
-      prev[0] = 0.f;
-      prev[1] = 0.f;
-   }
-   stroke_itr_coords(it, start);
-#if STROKE_DEBUG
-   debug_printf(" -> (side) [%.2f, %.2f]\n",
-                start[0],
-                start[1]);
-#endif
-
-   prev[0] = start[0];
-   prev[1] = start[1];
-
-   offset = stroker->stroke_width / 2;
-
-   if (!it->has_next(it)) {
-      /* single point */
-
-      return VG_TRUE;
-   }
-
-   while (it->has_next(it)) {
-      VGPathCommand cmd;
-      VGfloat coords[8];
-
-      it->next(it);
-      cmd = stroke_itr_command(it);
-      stroke_itr_coords(it, coords);
-
-      if (cmd == VG_LINE_TO_ABS) {
-         VGfloat line[4] = {prev[0], prev[1], coords[0], coords[1]};
-         VGfloat normal[4];
-         line_normal(line, normal);
-
-#if STROKE_DEBUG
-         debug_printf("\n ---> (side) lineto [%.2f, %.2f]\n", coords[0], coords[1]);
-#endif
-         line_set_length(normal, offset);
-         line_translate(line, line_dx(normal), line_dy(normal));
-
-         /* if we are starting a new subpath, move to correct starting point */
-         if (first) {
-            if (cap_first)
-               create_joins(stroker, prev[0], prev[1], line,
-                            stroker_cap_mode(stroker));
-            else
-               stroker_emit_move_to(stroker, line[0], line[1]);
-            memcpy(start_tangent, line,
-                   sizeof(VGfloat) * 4);
-            first = VG_FALSE;
-         } else {
-            create_joins(stroker, prev[0], prev[1], line,
-                         stroker_join_mode(stroker));
-         }
-
-         /* add the stroke for this line */
-         stroker_emit_line_to(stroker, line[2], line[3]);
-         prev[0] = coords[0];
-         prev[1] = coords[1];
-      } else if (cmd == VG_CUBIC_TO_ABS) {
-#if STROKE_DEBUG
-         debug_printf("\n ---> (side) cubicTo [%.2f, %.2f]\n",
-                coords[4],
-                coords[5]);
-#endif
-         struct bezier bezier;
-         int count;
-
-         bezier_init(&bezier,
-                     prev[0], prev[1], coords[0], coords[1],
-                     coords[2], coords[3], coords[4], coords[5]);
-
-         count = bezier_translate_by_normal(&bezier,
-                                            offset_curves,
-                                            MAX_OFFSET,
-                                            offset,
-                                            curve_threshold);
-
-         if (count) {
-            /* if we are starting a new subpath, move to correct starting point */
-            VGfloat tangent[4];
-            VGint i;
-
-            bezier_start_tangent(&bezier, tangent);
-            line_translate(tangent,
-                           offset_curves[0].x1 - bezier.x1,
-                           offset_curves[0].y1 - bezier.y1);
-            if (first) {
-               VGfloat pt[2] = {offset_curves[0].x1,
-                                offset_curves[0].y1};
-
-               if (cap_first) {
-                  create_joins(stroker, prev[0], prev[1], tangent,
-                               stroker_cap_mode(stroker));
-               } else {
-                  stroker_emit_move_to(stroker, pt[0], pt[1]);
-               }
-               start_tangent[0] = tangent[0];
-               start_tangent[1] = tangent[1];
-               start_tangent[2] = tangent[2];
-               start_tangent[3] = tangent[3];
-               first = VG_FALSE;
-            } else {
-               create_joins(stroker, prev[0], prev[1], tangent,
-                            stroker_join_mode(stroker));
-            }
-
-            /* add these beziers */
-            for (i = 0; i < count; ++i) {
-               struct bezier *bez = &offset_curves[i];
-               stroker_emit_curve_to(stroker,
-                                     bez->x2, bez->y2,
-                                     bez->x3, bez->y3,
-                                     bez->x4, bez->y4);
-            }
-         }
-
-         prev[0] = coords[4];
-         prev[1] = coords[5];
-      }
-   }
-
-   if (floatsEqual(start[0], prev[0]) &&
-       floatsEqual(start[1], prev[1])) {
-      /* closed subpath, join first and last point */
-#if STROKE_DEBUG
-      debug_printf("\n stroker: closed subpath\n");
-#endif
-      create_joins(stroker, prev[0], prev[1], start_tangent,
-                   stroker_join_mode(stroker));
-      return VG_TRUE;
-   } else {
-#if STROKE_DEBUG
-      debug_printf("\n stroker: open subpath\n");
-#endif
-      return VG_FALSE;
-   }
-#undef MAX_OFFSET
-}
-
-static void stroker_process_subpath(struct stroker *stroker)
-{
-   VGboolean fwclosed, bwclosed;
-   VGfloat fw_start_tangent[4], bw_start_tangent[4];
-   struct stroke_iterator fwit;
-   struct stroke_iterator bwit;
-   debug_assert(stroker->segments->num_elements > 0);
-
-   memset(fw_start_tangent, 0,
-          sizeof(VGfloat)*4);
-   memset(bw_start_tangent, 0,
-          sizeof(VGfloat)*4);
-
-   stroke_forward_iterator(&fwit, stroker->segments,
-                           stroker->control_points);
-   stroke_backward_iterator(&bwit, stroker->segments,
-                            stroker->control_points);
-
-   debug_assert(fwit.cmds[0] == VG_MOVE_TO_ABS);
-
-   fwclosed = vg_stroke_outline(&fwit, stroker, VG_FALSE, fw_start_tangent);
-   bwclosed = vg_stroke_outline(&bwit, stroker, !fwclosed, bw_start_tangent);
-
-   if (!bwclosed)
-      create_joins(stroker,
-                   fwit.coords[0], fwit.coords[1], fw_start_tangent,
-                   stroker_cap_mode(stroker));
-   else {
-      /* hack to handle the requirement of the VG spec that says that strokes
-       * of len==0 that have butt cap or round cap still need
-       * to be rendered. (8.7.4 Stroke Generation) */
-      if (stroker->segments->num_elements <= 3) {
-         VGPathCommand cmd;
-         VGfloat data[8], coords[8];
-         struct stroke_iterator *it = &fwit;
-
-         stroke_forward_iterator(it, stroker->segments,
-                                 stroker->control_points);
-         cmd = stroke_itr_command(it);
-         stroke_itr_coords(it, coords);
-         if (cmd != VG_MOVE_TO_ABS) {
-            memset(data, 0, sizeof(VGfloat) * 8);
-            if (!is_segment_null(cmd, coords, data))
-               return;
-         } else {
-            data[0] = coords[0];
-            data[1] = coords[1];
-         }
-         while (it->has_next(it)) {
-            it->next(it);
-            cmd = stroke_itr_command(it);
-            stroke_itr_coords(it, coords);
-            if (!is_segment_null(cmd, coords, data))
-               return;
-         }
-         /* generate the square/round cap */
-         if (stroker->cap_style == VG_CAP_SQUARE) {
-            VGfloat offset = stroker->stroke_width / 2;
-            stroker_emit_move_to(stroker, data[0] - offset,
-                                 data[1] - offset);
-            stroker_emit_line_to(stroker, data[0] + offset,
-                                 data[1] - offset);
-            stroker_emit_line_to(stroker, data[0] + offset,
-                                 data[1] + offset);
-            stroker_emit_line_to(stroker, data[0] - offset,
-                                 data[1] + offset);
-            stroker_emit_line_to(stroker, data[0] - offset,
-                                 data[1] - offset);
-         } else if (stroker->cap_style == VG_CAP_ROUND) {
-            VGfloat offset = stroker->stroke_width / 2;
-            VGfloat cx = data[0], cy = data[1];
-            { /*circle */
-               struct arc arc;
-               struct matrix matrix;
-               matrix_load_identity(&matrix);
-
-               stroker_emit_move_to(stroker, cx + offset, cy);
-               arc_init(&arc, VG_SCCWARC_TO,
-                        cx + offset, cy,
-                        cx - offset, cy,
-                        offset, offset, 0);
-               arc_stroker_emit(&arc, stroker, &matrix);
-               arc_init(&arc, VG_SCCWARC_TO,
-                         cx - offset, cy,
-                         cx + offset, cy,
-                         offset, offset, 0);
-               arc_stroker_emit(&arc, stroker, &matrix);
-            }
-         }
-      }
-   }
-}
-
-static INLINE VGfloat dash_pattern(struct dash_stroker *stroker,
-                                   VGint idx)
-{
-   if (stroker->dash_pattern[idx] < 0)
-      return 0.f;
-   return stroker->dash_pattern[idx];
-}
-
-static void dash_stroker_process_subpath(struct stroker *str)
-{
-   struct dash_stroker *stroker = (struct dash_stroker *)str;
-   VGfloat sum_length = 0;
-   VGint i;
-   VGint idash = 0;
-   VGfloat pos = 0;
-   VGfloat elen = 0;
-   VGfloat doffset = stroker->dash_phase;
-   VGfloat estart = 0;
-   VGfloat estop = 0;
-   VGfloat cline[4];
-   struct stroke_iterator it;
-   VGfloat prev[2];
-   VGfloat move_to_pos[2];
-   VGfloat line_to_pos[2];
-
-   VGboolean has_move_to = VG_FALSE;
-
-   stroke_flat_iterator(&it, stroker->base.segments,
-                        stroker->base.control_points);
-
-   stroke_itr_coords(&it, prev);
-   move_to_pos[0] = prev[0];
-   move_to_pos[1] = prev[1];
-
-   debug_assert(stroker->dash_pattern_num > 0);
-
-   for (i = 0; i < stroker->dash_pattern_num; ++i) {
-      sum_length += dash_pattern(stroker, i);
-   }
-
-   if (floatIsZero(sum_length)) {
-      return;
-   }
-
-   doffset -= floorf(doffset / sum_length) * sum_length;
-
-   while (!floatIsZero(doffset) && doffset >= dash_pattern(stroker, idash)) {
-      doffset -= dash_pattern(stroker, idash);
-      idash = (idash + 1) % stroker->dash_pattern_num;
-   }
-
-   while (it.has_next(&it)) {
-      VGPathCommand cmd;
-      VGfloat coords[8];
-      VGboolean done;
-
-      it.next(&it);
-      cmd = stroke_itr_command(&it);
-      stroke_itr_coords(&it, coords);
-
-      debug_assert(cmd == VG_LINE_TO_ABS);
-      cline[0] = prev[0];
-      cline[1] = prev[1];
-      cline[2] = coords[0];
-      cline[3] = coords[1];
-
-      elen = line_lengthv(cline);
-
-      estop = estart + elen;
-
-      done = pos >= estop;
-      while (!done) {
-         VGfloat p2[2];
-
-         VGint idash_incr = 0;
-         VGboolean has_offset = doffset > 0;
-         VGfloat dpos = pos + dash_pattern(stroker, idash) - doffset - estart;
-
-         debug_assert(dpos >= 0);
-
-         if (dpos > elen) { /* dash extends this line */
-            doffset = dash_pattern(stroker, idash) - (dpos - elen);
-            pos = estop;
-            done = VG_TRUE;
-            p2[0] = cline[2];
-            p2[1] = cline[3];
-         } else { /* Dash is on this line */
-            line_point_at(cline, dpos/elen, p2);
-            pos = dpos + estart;
-            done = pos >= estop;
-            idash_incr = 1;
-            doffset = 0;
-         }
-
-         if (idash % 2 == 0) {
-            line_to_pos[0] = p2[0];
-            line_to_pos[1] = p2[1];
-
-            if (!has_offset || !has_move_to) {
-               stroker_move_to(&stroker->stroker, move_to_pos[0], move_to_pos[1]);
-               has_move_to = VG_TRUE;
-            }
-            stroker_line_to(&stroker->stroker, line_to_pos[0], line_to_pos[1]);
-         } else {
-            move_to_pos[0] = p2[0];
-            move_to_pos[1] = p2[1];
-         }
-
-         idash = (idash + idash_incr) % stroker->dash_pattern_num;
-      }
-
-      estart = estop;
-      prev[0] = coords[0];
-      prev[1] = coords[1];
-   }
-
-   if (it.curve_poly) {
-      polygon_destroy(it.curve_poly);
-      it.curve_poly = 0;
-   }
-
-   stroker->base.path = stroker->stroker.path;
-}
-
-static void default_begin(struct stroker *stroker)
-{
-   array_reset(stroker->segments);
-   array_reset(stroker->control_points);
-}
-
-static void default_end(struct stroker *stroker)
-{
-   if (stroker->segments->num_elements > 0)
-      stroker->process_subpath(stroker);
-}
-
-
-static void dash_stroker_begin(struct stroker *stroker)
-{
-   struct dash_stroker *dasher =
-      (struct dash_stroker *)stroker;
-
-   default_begin(&dasher->stroker);
-   default_begin(stroker);
-}
-
-static void dash_stroker_end(struct stroker *stroker)
-{
-   struct dash_stroker *dasher =
-      (struct dash_stroker *)stroker;
-
-   default_end(stroker);
-   default_end(&dasher->stroker);
-}
-
-void stroker_init(struct stroker *stroker,
-                  struct vg_state *state)
-{
-   stroker->stroke_width = state->stroke.line_width.f;
-   stroker->miter_limit = state->stroke.miter_limit.f;
-   stroker->cap_style = state->stroke.cap_style;
-   stroker->join_style = state->stroke.join_style;
-
-   stroker->begin = default_begin;
-   stroker->process_subpath = stroker_process_subpath;
-   stroker->end = default_end;
-
-   stroker->segments = array_create(sizeof(VGubyte));
-   stroker->control_points = array_create(sizeof(VGfloat));
-
-   stroker->back1_x = 0;
-   stroker->back1_y = 0;
-   stroker->back2_x = 0;
-   stroker->back2_y = 0;
-
-   stroker->path = path_create(VG_PATH_DATATYPE_F, 1.0f, 0.0f,
-                               0, 0, VG_PATH_CAPABILITY_ALL);
-
-   /* Initialize with an invalid value */
-   stroker->last_cmd = (VGPathCommand)0;
-}
-
-void dash_stroker_init(struct stroker *str,
-                       struct vg_state *state)
-{
-   struct dash_stroker *stroker = (struct dash_stroker *)str;
-   int i;
-
-   stroker_init(str, state);
-   stroker_init(&stroker->stroker, state);
-
-   {
-      int real_num = state->stroke.dash_pattern_num;
-      if (real_num % 2)/* if odd, ignore the last one */
-         --real_num;
-      for (i = 0; i < real_num; ++i)
-         stroker->dash_pattern[i] = state->stroke.dash_pattern[i].f;
-      stroker->dash_pattern_num = real_num;
-   }
-
-   stroker->dash_phase = state->stroke.dash_phase.f;
-   stroker->dash_phase_reset = state->stroke.dash_phase_reset;
-
-   stroker->base.begin = dash_stroker_begin;
-   stroker->base.process_subpath = dash_stroker_process_subpath;
-   stroker->base.end = dash_stroker_end;
-   path_destroy(stroker->base.path);
-   stroker->base.path = NULL;
-}
-
-void stroker_begin(struct stroker *stroker)
-{
-   stroker->begin(stroker);
-}
-
-void stroker_end(struct stroker *stroker)
-{
-   stroker->end(stroker);
-}
-
-void stroker_cleanup(struct stroker *stroker)
-{
-   array_destroy(stroker->segments);
-   array_destroy(stroker->control_points);
-}
-
-void dash_stroker_cleanup(struct dash_stroker *stroker)
-{
-   /* if stroker->base.path is null means we never
-    * processed a valid path so delete the temp one
-    * we already created */
-   if (!stroker->base.path)
-      path_destroy(stroker->stroker.path);
-   stroker_cleanup(&stroker->stroker);
-   stroker_cleanup((struct stroker*)stroker);
-}
diff --git a/src/gallium/state_trackers/vega/stroker.h b/src/gallium/state_trackers/vega/stroker.h
deleted file mode 100644 (file)
index 36543cd..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef STROKER_H
-#define STROKER_H
-
-#include "VG/openvg.h"
-#include "api_consts.h"
-
-struct path;
-struct vg_state;
-struct array;
-
-struct stroker {
-   void (*begin)(struct stroker *stroker);
-   void (*process_subpath)(struct stroker *stroker);
-   void (*end)(struct stroker *stroker);
-
-   struct array *segments;
-   struct array *control_points;
-   struct path *path;
-
-   VGfloat back1_x, back1_y;
-   VGfloat back2_x, back2_y;
-
-   VGfloat     stroke_width;
-   VGfloat     miter_limit;
-   VGCapStyle  cap_style;
-   VGJoinStyle join_style;
-
-   VGPathCommand last_cmd;
-};
-
-struct dash_stroker {
-   struct stroker base;
-
-   struct stroker stroker;
-
-   VGfloat dash_pattern[VEGA_MAX_DASH_COUNT];
-   VGint dash_pattern_num;
-   VGfloat dash_phase;
-   VGboolean dash_phase_reset;
-};
-
-void stroker_init(struct stroker *stroker,
-                  struct vg_state *state);
-void dash_stroker_init(struct stroker *stroker,
-                       struct vg_state *state);
-void dash_stroker_cleanup(struct dash_stroker *stroker);
-void stroker_cleanup(struct stroker *stroker);
-
-void stroker_begin(struct stroker *stroker);
-void stroker_move_to(struct stroker *stroker, VGfloat x, VGfloat y);
-void stroker_line_to(struct stroker *stroker, VGfloat x, VGfloat y);
-void stroker_curve_to(struct stroker *stroker, VGfloat px1, VGfloat py1,
-                      VGfloat px2, VGfloat py2,
-                      VGfloat x, VGfloat y);
-void stroker_end(struct stroker *stroker);
-
-void stroker_emit_move_to(struct stroker *stroker, VGfloat x, VGfloat y);
-void stroker_emit_line_to(struct stroker *stroker, VGfloat x, VGfloat y);
-void stroker_emit_curve_to(struct stroker *stroker, VGfloat px1, VGfloat py1,
-                           VGfloat px2, VGfloat py2,
-                           VGfloat x, VGfloat y);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/text.c b/src/gallium/state_trackers/vega/text.c
deleted file mode 100644 (file)
index 3537f3f..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2010 LunarG, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "util/u_memory.h"
-#include "cso_cache/cso_hash.h"
-
-#include "text.h"
-#include "image.h"
-#include "path.h"
-
-#ifdef OPENVG_VERSION_1_1
-
-struct vg_font {
-   struct vg_object base;
-   struct cso_hash *glyphs;
-};
-
-struct vg_glyph {
-   struct vg_object *object; /* it could be NULL */
-   VGboolean is_hinted;
-   VGfloat glyph_origin[2];
-   VGfloat escapement[2];
-};
-
-static VGboolean del_glyph(struct vg_font *font,
-                           VGuint glyphIndex)
-{
-   struct vg_glyph *glyph;
-
-   glyph = (struct vg_glyph *)
-      cso_hash_take(font->glyphs, (unsigned) glyphIndex);
-   FREE(glyph);
-
-   return (glyph != NULL);
-}
-
-static void add_glyph(struct vg_font *font,
-                      VGuint glyphIndex,
-                      struct vg_object *obj,
-                      VGboolean isHinted,
-                      const VGfloat glyphOrigin[2],
-                      const VGfloat escapement[2])
-{
-   struct vg_glyph *glyph;
-
-   /* remove the existing one */
-   del_glyph(font, glyphIndex);
-
-   glyph = CALLOC_STRUCT(vg_glyph);
-   glyph->object = obj;
-   glyph->is_hinted = isHinted;
-   memcpy(glyph->glyph_origin, glyphOrigin, sizeof(glyph->glyph_origin));
-   memcpy(glyph->escapement, escapement, sizeof(glyph->glyph_origin));
-
-   cso_hash_insert(font->glyphs, (unsigned) glyphIndex, glyph);
-}
-
-static struct vg_glyph *get_glyph(struct vg_font *font,
-                                  VGuint glyphIndex)
-{
-   struct cso_hash_iter iter;
-
-   iter = cso_hash_find(font->glyphs, (unsigned) glyphIndex);
-   return (struct vg_glyph *) cso_hash_iter_data(iter);
-}
-
-static void vg_render_glyph(struct vg_context *ctx,
-                            struct vg_glyph *glyph,
-                            VGbitfield paintModes,
-                            VGboolean allowAutoHinting)
-{
-   if (glyph->object && paintModes) {
-      struct vg_state *state = &ctx->state.vg;
-      struct matrix m;
-
-      m = state->glyph_user_to_surface_matrix;
-      matrix_translate(&m,
-            state->glyph_origin[0].f - glyph->glyph_origin[0],
-            state->glyph_origin[1].f - glyph->glyph_origin[1]);
-
-      if (glyph->object->type == VG_OBJECT_PATH) {
-         path_render((struct path *) glyph->object, paintModes, &m);
-      }
-      else {
-         assert(glyph->object->type == VG_OBJECT_IMAGE);
-         image_draw((struct vg_image *) glyph->object, &m);
-      }
-   }
-}
-
-static void vg_advance_glyph(struct vg_context *ctx,
-                             struct vg_glyph *glyph,
-                             VGfloat adjustment_x,
-                             VGfloat adjustment_y,
-                             VGboolean last)
-{
-   struct vg_value *glyph_origin = ctx->state.vg.glyph_origin;
-
-   glyph_origin[0].f += glyph->escapement[0] + adjustment_x;
-   glyph_origin[1].f += glyph->escapement[1] + adjustment_y;
-
-   if (last) {
-      glyph_origin[0].i = float_to_int_floor(glyph_origin[0].f);
-      glyph_origin[1].i = float_to_int_floor(glyph_origin[1].f);
-   }
-}
-
-struct vg_font *font_create(VGint glyphCapacityHint)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_font *font;
-
-   font = CALLOC_STRUCT(vg_font);
-   vg_init_object(&font->base, ctx, VG_OBJECT_FONT);
-   font->glyphs = cso_hash_create();
-
-   vg_context_add_object(ctx, &font->base);
-
-   return font;
-}
-
-void font_destroy(struct vg_font *font)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct cso_hash_iter iter;
-
-   vg_context_remove_object(ctx, &font->base);
-
-   iter = cso_hash_first_node(font->glyphs);
-   while (!cso_hash_iter_is_null(iter)) {
-      struct vg_glyph *glyph = (struct vg_glyph *) cso_hash_iter_data(iter);
-      FREE(glyph);
-      iter = cso_hash_iter_next(iter);
-   }
-   cso_hash_delete(font->glyphs);
-
-   vg_free_object(&font->base);
-
-   FREE(font);
-}
-
-void font_set_glyph_to_path(struct vg_font *font,
-                            VGuint glyphIndex,
-                            struct path *path,
-                            VGboolean isHinted,
-                            const VGfloat glyphOrigin[2],
-                            const VGfloat escapement[2])
-{
-   add_glyph(font, glyphIndex, (struct vg_object *) path,
-         isHinted, glyphOrigin, escapement);
-}
-
-void font_set_glyph_to_image(struct vg_font *font,
-                             VGuint glyphIndex,
-                             struct vg_image *image,
-                             const VGfloat glyphOrigin[2],
-                             const VGfloat escapement[2])
-{
-   add_glyph(font, glyphIndex, (struct vg_object *) image,
-         VG_TRUE, glyphOrigin, escapement);
-}
-
-void font_clear_glyph(struct vg_font *font,
-                      VGuint glyphIndex)
-{
-   if (!del_glyph(font, glyphIndex)) {
-      struct vg_context *ctx = vg_current_context();
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-   }
-}
-
-void font_draw_glyph(struct vg_font *font,
-                     VGuint glyphIndex,
-                     VGbitfield paintModes,
-                     VGboolean allowAutoHinting)
-{
-   struct vg_context *ctx = vg_current_context();
-   struct vg_glyph *glyph;
-
-   glyph = get_glyph(font, glyphIndex);
-   if (!glyph) {
-      vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-      return;
-   }
-
-   vg_render_glyph(ctx, glyph, paintModes, allowAutoHinting);
-   vg_advance_glyph(ctx, glyph, 0.0f, 0.0f, VG_TRUE);
-}
-
-void font_draw_glyphs(struct vg_font *font,
-                      VGint glyphCount,
-                      const VGuint *glyphIndices,
-                      const VGfloat *adjustments_x,
-                      const VGfloat *adjustments_y,
-                      VGbitfield paintModes,
-                      VGboolean allowAutoHinting)
-{
-   struct vg_context *ctx = vg_current_context();
-   VGint i;
-
-   for (i = 0; i < glyphCount; ++i) {
-      if (!get_glyph(font, glyphIndices[i])) {
-         vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
-         return;
-      }
-   }
-
-   for (i = 0; i < glyphCount; ++i) {
-      struct vg_glyph *glyph;
-      VGfloat adj_x, adj_y;
-
-      glyph = get_glyph(font, glyphIndices[i]);
-
-      vg_render_glyph(ctx, glyph, paintModes, allowAutoHinting);
-
-      adj_x = (adjustments_x) ? adjustments_x[i] : 0.0f;
-      adj_y = (adjustments_y) ? adjustments_y[i] : 0.0f;
-      vg_advance_glyph(ctx, glyph, adj_x, adj_y, (i == glyphCount - 1));
-   }
-}
-
-VGint font_num_glyphs(struct vg_font *font)
-{
-   return cso_hash_size(font->glyphs);
-}
-
-#endif /* OPENVG_VERSION_1_1 */
diff --git a/src/gallium/state_trackers/vega/text.h b/src/gallium/state_trackers/vega/text.h
deleted file mode 100644 (file)
index 6b3fa73..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2010 LunarG, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef _TEXT_H
-#define _TEXT_H
-
-#include "vg_context.h"
-#include "cso_cache/cso_hash.h"
-
-struct vg_font;
-struct vg_image;
-struct path;
-
-struct vg_font *font_create(VGint glyphCapacityHint);
-void font_destroy(struct vg_font *font);
-
-void font_set_glyph_to_path(struct vg_font *font,
-                            VGuint glyphIndex,
-                            struct path *path,
-                            VGboolean isHinted,
-                            const VGfloat glyphOrigin[2],
-                            const VGfloat escapement[2]);
-
-void font_set_glyph_to_image(struct vg_font *font,
-                             VGuint glyphIndex,
-                             struct vg_image *image,
-                             const VGfloat glyphOrigin[2],
-                             const VGfloat escapement[2]);
-
-void font_clear_glyph(struct vg_font *font,
-                      VGuint glyphIndex);
-
-void font_draw_glyph(struct vg_font *font,
-                     VGuint glyphIndex,
-                     VGbitfield paintModes,
-                     VGboolean allowAutoHinting);
-
-void font_draw_glyphs(struct vg_font *font,
-                      VGint glyphCount,
-                      const VGuint *glyphIndices,
-                      const VGfloat *adjustments_x,
-                      const VGfloat *adjustments_y,
-                      VGbitfield paintModes,
-                      VGboolean allowAutoHinting);
-
-VGint font_num_glyphs(struct vg_font *font);
-
-#endif /* _TEXT_H */
diff --git a/src/gallium/state_trackers/vega/util_array.h b/src/gallium/state_trackers/vega/util_array.h
deleted file mode 100644 (file)
index b2d22f4..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef UTIL_ARRAY_H
-#define UTIL_ARRAY_H
-
-#include "util/u_memory.h"
-
-#define DEFAULT_ARRAY_SIZE 256
-
-struct array {
-   VGint          datatype_size;
-   void          *data;
-   VGint          size;
-   VGint          num_elements;
-};
-
-static INLINE struct array *array_create(VGint datatype_size)
-{
-   struct array *array = CALLOC_STRUCT(array);
-   array->datatype_size = datatype_size;
-
-   array->size = DEFAULT_ARRAY_SIZE;
-   array->data = malloc(array->size * array->datatype_size);
-
-   return array;
-}
-
-
-static INLINE struct array *array_create_size(VGint datatype_size, VGint size)
-{
-   struct array *array = CALLOC_STRUCT(array);
-   array->datatype_size = datatype_size;
-
-   array->size = size;
-   array->data = malloc(array->size * array->datatype_size);
-
-   return array;
-}
-
-static INLINE void array_destroy(struct array *array)
-{
-   if (array)
-      free(array->data);
-   FREE(array);
-}
-
-static INLINE void array_resize(struct array *array, int num)
-{
-   VGint size = array->datatype_size * num;
-   void *data = malloc(size);
-   memcpy(data, array->data, array->size * array->datatype_size);
-   free(array->data);
-   array->data = data;
-   array->size = num;
-   array->num_elements = (array->num_elements > num) ? num :
-                         array->num_elements;
-}
-
-static INLINE void array_append_data(struct array *array,
-                              const void *data, int num_elements)
-{
-   VGbyte *adata;
-
-   while (array->num_elements + num_elements > array->size) {
-      array_resize(array, (array->num_elements + num_elements) * 1.5);
-   }
-   adata = (VGbyte *)array->data;
-   memcpy(adata + (array->num_elements * array->datatype_size), data,
-          num_elements * array->datatype_size);
-   array->num_elements += num_elements;
-}
-
-static INLINE void array_change_data(struct array *array,
-                              const void *data,
-                              int start_idx,
-                              int num_elements)
-{
-   VGbyte *adata = (VGbyte *)array->data;
-   memcpy(adata + (start_idx * array->datatype_size), data,
-          num_elements * array->datatype_size);
-}
-
-static INLINE void array_remove_element(struct array *array,
-                                        int idx)
-{
-   VGbyte *adata = (VGbyte *)array->data;
-   memmove(adata + (idx * array->datatype_size),
-           adata + ((idx + 1) * array->datatype_size),
-           (array->num_elements - idx - 1) * array->datatype_size);
-   --array->num_elements;
-}
-
-static INLINE void array_reset(struct array *array)
-{
-   array->num_elements = 0;
-}
-
-#endif
diff --git a/src/gallium/state_trackers/vega/vg_api.h b/src/gallium/state_trackers/vega/vg_api.h
deleted file mode 100644 (file)
index e97e238..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2010 LunarG Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef VG_API_H
-#define VG_API_H
-
-struct st_api;
-
-const struct st_api *
-vg_api_get(void);
-
-#endif /* VG_API_H */
diff --git a/src/gallium/state_trackers/vega/vg_context.c b/src/gallium/state_trackers/vega/vg_context.c
deleted file mode 100644 (file)
index 48a03c5..0000000
+++ /dev/null
@@ -1,537 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "vg_context.h"
-
-#include "paint.h"
-#include "renderer.h"
-#include "shaders_cache.h"
-#include "shader.h"
-#include "vg_manager.h"
-#include "api.h"
-#include "mask.h"
-#include "handle.h"
-
-#include "pipe/p_context.h"
-#include "util/u_inlines.h"
-
-#include "cso_cache/cso_context.h"
-
-#include "util/u_memory.h"
-#include "util/u_sampler.h"
-#include "util/u_surface.h"
-#include "util/u_format.h"
-
-struct vg_context *_vg_context = 0;
-
-struct vg_context * vg_current_context(void)
-{
-   return _vg_context;
-}
-
-/**
- * A depth/stencil rb will be needed regardless of what the visual says.
- */
-static boolean
-choose_depth_stencil_format(struct vg_context *ctx)
-{
-   struct pipe_screen *screen = ctx->pipe->screen;
-   enum pipe_format formats[] = {
-      PIPE_FORMAT_Z24_UNORM_S8_UINT,
-      PIPE_FORMAT_S8_UINT_Z24_UNORM,
-      PIPE_FORMAT_NONE
-   };
-   enum pipe_format *fmt;
-
-   for (fmt = formats; *fmt != PIPE_FORMAT_NONE; fmt++) {
-      if (screen->is_format_supported(screen, *fmt,
-               PIPE_TEXTURE_2D, 0, PIPE_BIND_DEPTH_STENCIL))
-         break;
-   }
-
-   ctx->ds_format = *fmt;
-
-   return (ctx->ds_format != PIPE_FORMAT_NONE);
-}
-
-void vg_set_current_context(struct vg_context *ctx)
-{
-   _vg_context = ctx;
-   api_make_dispatch_current((ctx) ? ctx->dispatch : NULL);
-}
-
-struct vg_context * vg_create_context(struct pipe_context *pipe,
-                                      const void *visual,
-                                      struct vg_context *share)
-{
-   struct vg_context *ctx;
-
-   ctx = CALLOC_STRUCT(vg_context);
-
-   ctx->pipe = pipe;
-   if (!choose_depth_stencil_format(ctx)) {
-      FREE(ctx);
-      return NULL;
-   }
-
-   ctx->dispatch = api_create_dispatch();
-
-   vg_init_state(&ctx->state.vg);
-   ctx->state.dirty = ALL_DIRTY;
-
-   ctx->cso_context = cso_create_context(pipe);
-
-   ctx->default_paint = paint_create(ctx);
-   ctx->state.vg.stroke_paint = ctx->default_paint;
-   ctx->state.vg.fill_paint = ctx->default_paint;
-
-
-   ctx->mask.sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   ctx->mask.sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   ctx->mask.sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   ctx->mask.sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
-   ctx->mask.sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
-   ctx->mask.sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
-   ctx->mask.sampler.normalized_coords = 0;
-
-   ctx->blend_sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   ctx->blend_sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   ctx->blend_sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   ctx->blend_sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
-   ctx->blend_sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
-   ctx->blend_sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
-   ctx->blend_sampler.normalized_coords = 0;
-
-   vg_set_error(ctx, VG_NO_ERROR);
-
-   ctx->owned_objects[VG_OBJECT_PAINT] = cso_hash_create();
-   ctx->owned_objects[VG_OBJECT_IMAGE] = cso_hash_create();
-   ctx->owned_objects[VG_OBJECT_MASK] = cso_hash_create();
-   ctx->owned_objects[VG_OBJECT_FONT] = cso_hash_create();
-   ctx->owned_objects[VG_OBJECT_PATH] = cso_hash_create();
-
-   ctx->renderer = renderer_create(ctx);
-   ctx->sc = shaders_cache_create(ctx);
-   ctx->shader = shader_create(ctx);
-
-   return ctx;
-}
-
-void vg_destroy_context(struct vg_context *ctx)
-{
-   struct pipe_resource **cbuf = &ctx->mask.cbuf;
-
-   renderer_destroy(ctx->renderer);
-   shaders_cache_destroy(ctx->sc);
-   shader_destroy(ctx->shader);
-   paint_destroy(ctx->default_paint);
-
-   if (*cbuf)
-      pipe_resource_reference(cbuf, NULL);
-
-   if (ctx->mask.union_fs)
-      vg_shader_destroy(ctx, ctx->mask.union_fs);
-   if (ctx->mask.intersect_fs)
-      vg_shader_destroy(ctx, ctx->mask.intersect_fs);
-   if (ctx->mask.subtract_fs)
-      vg_shader_destroy(ctx, ctx->mask.subtract_fs);
-   if (ctx->mask.set_fs)
-      vg_shader_destroy(ctx, ctx->mask.set_fs);
-
-   cso_destroy_context(ctx->cso_context);
-
-   cso_hash_delete(ctx->owned_objects[VG_OBJECT_PAINT]);
-   cso_hash_delete(ctx->owned_objects[VG_OBJECT_IMAGE]);
-   cso_hash_delete(ctx->owned_objects[VG_OBJECT_MASK]);
-   cso_hash_delete(ctx->owned_objects[VG_OBJECT_FONT]);
-   cso_hash_delete(ctx->owned_objects[VG_OBJECT_PATH]);
-
-   api_destroy_dispatch(ctx->dispatch);
-
-   FREE(ctx);
-}
-
-void vg_init_object(struct vg_object *obj, struct vg_context *ctx, enum vg_object_type type)
-{
-   obj->type = type;
-   obj->ctx = ctx;
-   obj->handle = create_handle(obj);
-}
-
-/** free object resources, but not the object itself */
-void vg_free_object(struct vg_object *obj)
-{
-   obj->type = 0;
-   obj->ctx = NULL;
-   destroy_handle(obj->handle);
-}
-
-VGboolean vg_context_is_object_valid(struct vg_context *ctx,
-                                enum vg_object_type type,
-                                VGHandle handle)
-{
-    if (ctx) {
-       struct cso_hash *hash = ctx->owned_objects[type];
-       if (!hash)
-          return VG_FALSE;
-       return cso_hash_contains(hash, (unsigned) handle);
-    }
-    return VG_FALSE;
-}
-
-void vg_context_add_object(struct vg_context *ctx,
-                           struct vg_object *obj)
-{
-    if (ctx) {
-       struct cso_hash *hash = ctx->owned_objects[obj->type];
-       if (!hash)
-          return;
-       cso_hash_insert(hash, (unsigned) obj->handle, obj);
-    }
-}
-
-void vg_context_remove_object(struct vg_context *ctx,
-                              struct vg_object *obj)
-{
-   if (ctx) {
-      struct cso_hash *hash = ctx->owned_objects[obj->type];
-      if (!hash)
-         return;
-      cso_hash_take(hash, (unsigned) obj->handle);
-   }
-}
-
-static struct pipe_resource *
-create_texture(struct pipe_context *pipe, enum pipe_format format,
-                    VGint width, VGint height)
-{
-   struct pipe_resource templ;
-
-   memset(&templ, 0, sizeof(templ));
-
-   if (format != PIPE_FORMAT_NONE) {
-      templ.format = format;
-   }
-   else {
-      templ.format = PIPE_FORMAT_B8G8R8A8_UNORM;
-   }
-
-   templ.target = PIPE_TEXTURE_2D;
-   templ.width0 = width;
-   templ.height0 = height;
-   templ.depth0 = 1;
-   templ.array_size = 1;
-   templ.last_level = 0;
-
-   if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1)) {
-      templ.bind = PIPE_BIND_DEPTH_STENCIL;
-   } else {
-      templ.bind = (PIPE_BIND_DISPLAY_TARGET |
-                    PIPE_BIND_RENDER_TARGET |
-                    PIPE_BIND_SAMPLER_VIEW);
-   }
-
-   return pipe->screen->resource_create(pipe->screen, &templ);
-}
-
-static struct pipe_sampler_view *
-create_tex_and_view(struct pipe_context *pipe, enum pipe_format format,
-                    VGint width, VGint height)
-{
-   struct pipe_resource *texture;
-   struct pipe_sampler_view view_templ;
-   struct pipe_sampler_view *view;
-
-   texture = create_texture(pipe, format, width, height);
-
-   if (!texture)
-      return NULL;
-
-   u_sampler_view_default_template(&view_templ, texture, texture->format);
-   view = pipe->create_sampler_view(pipe, texture, &view_templ);
-   /* want the texture to go away if the view is freed */
-   pipe_resource_reference(&texture, NULL);
-
-   return view;
-}
-
-static void
-vg_context_update_surface_mask_view(struct vg_context *ctx,
-                                    uint width, uint height)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct pipe_sampler_view *old_sampler_view = stfb->surface_mask_view;
-   struct pipe_context *pipe = ctx->pipe;
-
-   if (old_sampler_view &&
-       old_sampler_view->texture->width0 == width &&
-       old_sampler_view->texture->height0 == height)
-      return;
-
-   /*
-     we use PIPE_FORMAT_B8G8R8A8_UNORM because we want to render to
-     this texture and use it as a sampler, so while this wastes some
-     space it makes both of those a lot simpler
-   */
-   stfb->surface_mask_view = create_tex_and_view(pipe,
-         PIPE_FORMAT_B8G8R8A8_UNORM, width, height);
-
-   if (!stfb->surface_mask_view) {
-      if (old_sampler_view)
-         pipe_sampler_view_reference(&old_sampler_view, NULL);
-      return;
-   }
-
-   /* XXX could this call be avoided? */
-   vg_validate_state(ctx);
-
-   /* alpha mask starts with 1.f alpha */
-   mask_fill(0, 0, width, height, 1.f);
-
-   /* if we had an old surface copy it over */
-   if (old_sampler_view) {
-      struct pipe_box src_box;
-      u_box_origin_2d(MIN2(old_sampler_view->texture->width0,
-                           stfb->surface_mask_view->texture->width0),
-                      MIN2(old_sampler_view->texture->height0,
-                           stfb->surface_mask_view->texture->height0),
-                      &src_box);
-
-      pipe->resource_copy_region(pipe,
-                                 stfb->surface_mask_view->texture,
-                                 0, 0, 0, 0,
-                                 old_sampler_view->texture,
-                                 0, &src_box);
-   }
-
-   /* Free the old texture
-    */
-   if (old_sampler_view)
-      pipe_sampler_view_reference(&old_sampler_view, NULL);
-}
-
-static void
-vg_context_update_blend_texture_view(struct vg_context *ctx,
-                                     uint width, uint height)
-{
-   struct pipe_context *pipe = ctx->pipe;
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct pipe_sampler_view *old = stfb->blend_texture_view;
-
-   if (old &&
-       old->texture->width0 == width &&
-       old->texture->height0 == height)
-      return;
-
-   stfb->blend_texture_view = create_tex_and_view(pipe,
-         PIPE_FORMAT_B8G8R8A8_UNORM, width, height);
-
-   pipe_sampler_view_reference(&old, NULL);
-}
-
-static boolean
-vg_context_update_depth_stencil_rb(struct vg_context * ctx,
-                                   uint width, uint height)
-{
-   struct st_renderbuffer *dsrb = ctx->draw_buffer->dsrb;
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_surface surf_tmpl;
-
-   if ((dsrb->width == width && dsrb->height == height) && dsrb->texture)
-      return FALSE;
-
-   /* unreference existing ones */
-   pipe_surface_reference(&dsrb->surface, NULL);
-   pipe_resource_reference(&dsrb->texture, NULL);
-   dsrb->width = dsrb->height = 0;
-
-   dsrb->texture = create_texture(pipe, dsrb->format, width, height);
-   if (!dsrb->texture)
-      return TRUE;
-
-   u_surface_default_template(&surf_tmpl, dsrb->texture);
-   dsrb->surface = pipe->create_surface(pipe,
-                                        dsrb->texture,
-                                        &surf_tmpl);
-   if (!dsrb->surface) {
-      pipe_resource_reference(&dsrb->texture, NULL);
-      return TRUE;
-   }
-
-   dsrb->width = width;
-   dsrb->height = height;
-
-   assert(dsrb->surface->width == width);
-   assert(dsrb->surface->height == height);
-
-   return TRUE;
-}
-
-void vg_validate_state(struct vg_context *ctx)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-
-   vg_manager_validate_framebuffer(ctx);
-
-   if (vg_context_update_depth_stencil_rb(ctx, stfb->width, stfb->height))
-      ctx->state.dirty |= DEPTH_STENCIL_DIRTY;
-
-   /* blend state depends on fb format and paint color */
-   if ((ctx->state.dirty & FRAMEBUFFER_DIRTY) ||
-       (ctx->state.dirty & PAINT_DIRTY))
-      ctx->state.dirty |= BLEND_DIRTY;
-
-   renderer_validate(ctx->renderer, ctx->state.dirty,
-         ctx->draw_buffer, &ctx->state.vg);
-
-   ctx->state.dirty = 0;
-
-   shader_set_masking(ctx->shader, ctx->state.vg.masking);
-   shader_set_image_mode(ctx->shader, ctx->state.vg.image_mode);
-   shader_set_color_transform(ctx->shader, ctx->state.vg.color_transform);
-}
-
-VGboolean vg_object_is_valid(VGHandle object, enum vg_object_type type)
-{
-   struct vg_object *obj = handle_to_object(object);
-   if (obj && is_aligned(obj) && obj->type == type)
-      return VG_TRUE;
-   else
-      return VG_FALSE;
-}
-
-void vg_set_error(struct vg_context *ctx,
-                  VGErrorCode code)
-{
-   /*vgGetError returns the oldest error code provided by
-    * an API call on the current context since the previous
-    * call to vgGetError on that context (or since the creation
-    of the context).*/
-   if (ctx->_error == VG_NO_ERROR)
-      ctx->_error = code;
-}
-
-static void vg_prepare_blend_texture(struct vg_context *ctx,
-                                     struct pipe_sampler_view *src)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_blit_info info;
-
-   vg_context_update_blend_texture_view(ctx, stfb->width, stfb->height);
-
-   memset(&info, 0, sizeof info);
-   info.dst.resource = stfb->blend_texture_view->texture;
-   info.dst.level = 0;
-   info.dst.box.x = 0;
-   info.dst.box.y = 0;
-   info.dst.box.z = 0;
-   info.dst.box.width = stfb->width;
-   info.dst.box.height = stfb->height;
-   info.dst.box.depth = 1;
-   info.dst.format = stfb->blend_texture_view->format;
-   info.src.resource = src->texture;
-   info.src.level = src->u.tex.first_level;
-   info.src.box.x = 0;
-   info.src.box.y = 0;
-   info.src.box.z = src->u.tex.first_layer;
-   info.src.box.width = stfb->width;
-   info.src.box.height = stfb->height;
-   info.src.box.depth = 1;
-   info.src.format = src->format;
-   info.mask = PIPE_MASK_RGBA;
-   info.filter = PIPE_TEX_MIPFILTER_NEAREST;
-   info.scissor_enable = 0;
-
-   pipe->blit(pipe, &info);
-}
-
-struct pipe_sampler_view *vg_prepare_blend_surface(struct vg_context *ctx)
-{
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_sampler_view *view;
-   struct pipe_sampler_view view_templ;
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct st_renderbuffer *strb = stfb->strb;
-
-   vg_validate_state(ctx);
-
-   u_sampler_view_default_template(&view_templ, strb->texture, strb->texture->format);
-   view = pipe->create_sampler_view(pipe, strb->texture, &view_templ);
-
-   vg_prepare_blend_texture(ctx, view);
-
-   pipe_sampler_view_reference(&view, NULL);
-
-   return stfb->blend_texture_view;
-}
-
-
-struct pipe_sampler_view *vg_prepare_blend_surface_from_mask(struct vg_context *ctx)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-
-   vg_validate_state(ctx);
-
-   vg_context_update_surface_mask_view(ctx, stfb->width, stfb->height);
-   vg_prepare_blend_texture(ctx, stfb->surface_mask_view);
-
-   return stfb->blend_texture_view;
-}
-
-struct pipe_sampler_view *vg_get_surface_mask(struct vg_context *ctx)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-
-   vg_context_update_surface_mask_view(ctx, stfb->width, stfb->height);
-
-   return stfb->surface_mask_view;
-}
-
-/**
- * A transformation from window coordinates to paint coordinates.
- */
-VGboolean vg_get_paint_matrix(struct vg_context *ctx,
-                              const struct matrix *paint_to_user,
-                              const struct matrix *user_to_surface,
-                              struct matrix *mat)
-{
-   struct matrix tmp;
-
-   /* get user-to-paint matrix */
-   memcpy(mat, paint_to_user, sizeof(*paint_to_user));
-   if (!matrix_invert(mat))
-      return VG_FALSE;
-
-   /* get surface-to-user matrix */
-   memcpy(&tmp, user_to_surface, sizeof(*user_to_surface));
-   if (!matrix_invert(&tmp))
-      return VG_FALSE;
-
-   matrix_mult(mat, &tmp);
-
-   return VG_TRUE;
-}
diff --git a/src/gallium/state_trackers/vega/vg_context.h b/src/gallium/state_trackers/vega/vg_context.h
deleted file mode 100644 (file)
index 5a2a322..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef VG_CONTEXT_H
-#define VG_CONTEXT_H
-
-#include "vg_state.h"
-
-#include "pipe/p_format.h"
-#include "pipe/p_state.h"
-#include "util/u_pointer.h"
-#include "util/u_math.h"
-#include "state_tracker/st_api.h"
-
-#include "cso_cache/cso_hash.h"
-#include "cso_cache/cso_context.h"
-
-struct renderer;
-struct shaders_cache;
-struct shader;
-struct vg_shader;
-struct mapi_table;
-
-struct st_renderbuffer {
-   enum pipe_format   format;
-   struct pipe_surface *surface;
-   struct pipe_resource *texture;
-   VGint width, height;
-};
-
-struct st_framebuffer {
-   VGint width, height;
-   struct st_renderbuffer *strb;
-   struct st_renderbuffer *dsrb;
-
-   struct pipe_sampler_view *surface_mask_view;
-
-   struct pipe_sampler_view *blend_texture_view;
-
-
-   struct st_framebuffer_iface *iface;
-   enum st_attachment_type strb_att;
-
-   void *privateData;
-   int32_t stamp;
-   int32_t iface_stamp;
-};
-
-enum vg_object_type {
-   VG_OBJECT_UNKNOWN = 0,
-   VG_OBJECT_PAINT,
-   VG_OBJECT_IMAGE,
-   VG_OBJECT_MASK,
-   VG_OBJECT_FONT,
-   VG_OBJECT_PATH,
-
-   VG_OBJECT_LAST
-};
-enum dirty_state {
-   BLEND_DIRTY         = 1 << 0,
-   FRAMEBUFFER_DIRTY   = 1 << 1,
-   DEPTH_STENCIL_DIRTY = 1 << 2,
-   PAINT_DIRTY         = 1 << 3,
-
-   ALL_DIRTY           = BLEND_DIRTY |
-                         FRAMEBUFFER_DIRTY |
-                         DEPTH_STENCIL_DIRTY |
-                         PAINT_DIRTY
-};
-
-struct vg_context
-{
-   struct st_context_iface iface;
-   struct mapi_table *dispatch;
-
-   struct pipe_context *pipe;
-   enum pipe_format ds_format;
-
-   struct {
-      struct vg_state vg;
-      VGbitfield dirty;
-   } state;
-
-   VGErrorCode _error;
-
-   struct st_framebuffer *draw_buffer;
-
-   struct cso_hash *owned_objects[VG_OBJECT_LAST];
-
-   struct {
-      struct pipe_resource *cbuf;
-      struct pipe_sampler_state sampler;
-
-      struct vg_shader *union_fs;
-      struct vg_shader *intersect_fs;
-      struct vg_shader *subtract_fs;
-      struct vg_shader *set_fs;
-   } mask;
-
-   struct cso_context *cso_context;
-
-   struct renderer *renderer;
-   struct shaders_cache *sc;
-   struct shader *shader;
-
-   struct pipe_sampler_state blend_sampler;
-   struct vg_paint *default_paint;
-
-   int32_t draw_stamp;
-};
-
-
-/**
- *  Base class for VG objects like paths, images, fonts.
- */
-struct vg_object {
-   enum vg_object_type type;
-   VGHandle handle;
-   struct vg_context *ctx;
-};
-
-
-void vg_init_object(struct vg_object *obj, struct vg_context *ctx, enum vg_object_type type);
-void vg_free_object(struct vg_object *obj);
-
-VGboolean vg_object_is_valid(VGHandle object, enum vg_object_type type);
-
-struct vg_context *vg_create_context(struct pipe_context *pipe,
-                                     const void *visual,
-                                     struct vg_context *share);
-void vg_destroy_context(struct vg_context *ctx);
-struct vg_context *vg_current_context(void);
-void vg_set_current_context(struct vg_context *ctx);
-
-VGboolean vg_context_is_object_valid(struct vg_context *ctx,
-                                     enum vg_object_type type,
-                                     VGHandle object);
-void vg_context_add_object(struct vg_context *ctx,
-                           struct vg_object *obj);
-void vg_context_remove_object(struct vg_context *ctx,
-                              struct vg_object *obj);
-
-void vg_validate_state(struct vg_context *ctx);
-
-void vg_set_error(struct vg_context *ctx,
-                  VGErrorCode code);
-
-struct pipe_sampler_view *vg_prepare_blend_surface(struct vg_context *ctx);
-struct pipe_sampler_view *vg_prepare_blend_surface_from_mask(struct vg_context *ctx);
-
-struct pipe_sampler_view *vg_get_surface_mask(struct vg_context *ctx);
-
-VGboolean vg_get_paint_matrix(struct vg_context *ctx,
-                              const struct matrix *paint_to_user,
-                              const struct matrix *user_to_surface,
-                              struct matrix *mat);
-
-static INLINE VGboolean is_aligned_to(const void *ptr, VGbyte alignment)
-{
-   void *aligned = align_pointer(ptr, alignment);
-   return (ptr == aligned) ? VG_TRUE : VG_FALSE;
-}
-
-static INLINE VGboolean is_aligned(const void *ptr)
-{
-   return is_aligned_to(ptr, 4);
-}
-
-static INLINE void vg_shift_rectx(VGfloat coords[4],
-                                 const VGfloat *bounds,
-                                 const VGfloat shift)
-{
-   coords[0] += shift;
-   coords[2] -= shift;
-   if (bounds) {
-      coords[2] = MIN2(coords[2], bounds[2]);
-      /* bound x/y + width/height */
-      if ((coords[0] + coords[2]) > (bounds[0] + bounds[2])) {
-         coords[2] = (bounds[0] + bounds[2]) - coords[0];
-      }
-   }
-}
-
-static INLINE void vg_shift_recty(VGfloat coords[4],
-                                 const VGfloat *bounds,
-                                 const VGfloat shift)
-{
-   coords[1] += shift;
-   coords[3] -= shift;
-   if (bounds) {
-      coords[3] = MIN2(coords[3], bounds[3]);
-      if ((coords[1] + coords[3]) > (bounds[1] + bounds[3])) {
-         coords[3] = (bounds[1] + bounds[3]) - coords[1];
-      }
-   }
-}
-
-static INLINE void vg_bound_rect(VGfloat coords[4],
-                                 const VGfloat bounds[4],
-                                 VGfloat shift[4])
-{
-   /* if outside the bounds */
-   if (coords[0] > (bounds[0] + bounds[2]) ||
-       coords[1] > (bounds[1] + bounds[3]) ||
-       (coords[0] + coords[2]) < bounds[0] ||
-       (coords[1] + coords[3]) < bounds[1]) {
-      coords[0] = 0.f;
-      coords[1] = 0.f;
-      coords[2] = 0.f;
-      coords[3] = 0.f;
-      shift[0] = 0.f;
-      shift[1] = 0.f;
-      return;
-   }
-
-   /* bound x */
-   if (coords[0] < bounds[0]) {
-      shift[0] = bounds[0] - coords[0];
-      coords[2] -= shift[0];
-      coords[0] = bounds[0];
-   } else
-      shift[0] = 0.f;
-
-   /* bound y */
-   if (coords[1] < bounds[1]) {
-      shift[1] = bounds[1] - coords[1];
-      coords[3] -= shift[1];
-      coords[1] = bounds[1];
-   } else
-      shift[1] = 0.f;
-
-   shift[2] = bounds[2] - coords[2];
-   shift[3] = bounds[3] - coords[3];
-   /* bound width/height */
-   coords[2] = MIN2(coords[2], bounds[2]);
-   coords[3] = MIN2(coords[3], bounds[3]);
-
-   /* bound x/y + width/height */
-   if ((coords[0] + coords[2]) > (bounds[0] + bounds[2])) {
-      coords[2] = (bounds[0] + bounds[2]) - coords[0];
-   }
-   if ((coords[1] + coords[3]) > (bounds[1] + bounds[3])) {
-      coords[3] = (bounds[1] + bounds[3]) - coords[1];
-   }
-
-   /* if outside the bounds */
-   if ((coords[0] + coords[2]) < bounds[0] ||
-       (coords[1] + coords[3]) < bounds[1]) {
-      coords[0] = 0.f;
-      coords[1] = 0.f;
-      coords[2] = 0.f;
-      coords[3] = 0.f;
-      return;
-   }
-}
-
-#endif
diff --git a/src/gallium/state_trackers/vega/vg_manager.c b/src/gallium/state_trackers/vega/vg_manager.c
deleted file mode 100644 (file)
index 7960b06..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- * Copyright (C) 2010 LunarG Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "state_tracker/st_api.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
-#include "util/u_memory.h"
-#include "util/u_inlines.h"
-#include "util/u_box.h"
-#include "util/u_surface.h"
-
-#include "vg_api.h"
-#include "vg_manager.h"
-#include "vg_context.h"
-#include "api.h"
-#include "handle.h"
-
-static boolean
-vg_context_update_color_rb(struct vg_context *ctx, struct pipe_resource *pt)
-{
-   struct st_renderbuffer *strb = ctx->draw_buffer->strb;
-   struct pipe_context *pipe = ctx->pipe;
-   struct pipe_surface surf_tmpl;
-
-   if (strb->texture == pt) {
-      pipe_resource_reference(&pt, NULL);
-      return FALSE;
-   }
-
-   /* unreference existing ones */
-   pipe_surface_reference(&strb->surface, NULL);
-   pipe_resource_reference(&strb->texture, NULL);
-   strb->width = strb->height = 0;
-
-   strb->texture = pt;
-
-   u_surface_default_template(&surf_tmpl, strb->texture);
-   strb->surface = pipe->create_surface(pipe, strb->texture, &surf_tmpl);
-
-   if (!strb->surface) {
-      pipe_resource_reference(&strb->texture, NULL);
-      return TRUE;
-   }
-
-   strb->width = pt->width0;
-   strb->height = pt->height0;
-
-   return TRUE;
-}
-
-/**
- * Flush the front buffer if the current context renders to the front buffer.
- */
-void
-vg_manager_flush_frontbuffer(struct vg_context *ctx)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-
-   if (!stfb)
-      return;
-
-   switch (stfb->strb_att) {
-   case ST_ATTACHMENT_FRONT_LEFT:
-   case ST_ATTACHMENT_FRONT_RIGHT:
-      stfb->iface->flush_front(&ctx->iface, stfb->iface, stfb->strb_att);
-      break;
-   default:
-      break;
-   }
-}
-
-/**
- * Re-validate the framebuffer.
- */
-void
-vg_manager_validate_framebuffer(struct vg_context *ctx)
-{
-   struct st_framebuffer *stfb = ctx->draw_buffer;
-   struct pipe_resource *pt;
-   int32_t new_stamp;
-
-   /* no binding surface */
-   if (!stfb)
-      return;
-
-   new_stamp = p_atomic_read(&stfb->iface->stamp);
-   if (stfb->iface_stamp != new_stamp) {
-      do {
-        /* validate the fb */
-        if (!stfb->iface->validate((struct st_context_iface *)ctx,
-                                   stfb->iface, &stfb->strb_att,
-                                   1, &pt) || !pt)
-           return;
-
-        stfb->iface_stamp = new_stamp;
-        new_stamp = p_atomic_read(&stfb->iface->stamp);
-
-      } while (stfb->iface_stamp != new_stamp);
-
-      if (vg_context_update_color_rb(ctx, pt) ||
-          stfb->width != pt->width0 ||
-          stfb->height != pt->height0)
-         ++stfb->stamp;
-
-      stfb->width = pt->width0;
-      stfb->height = pt->height0;
-   }
-
-   if (ctx->draw_stamp != stfb->stamp) {
-      ctx->state.dirty |= FRAMEBUFFER_DIRTY;
-      ctx->draw_stamp = stfb->stamp;
-   }
-}
-
-static void
-vg_context_flush(struct st_context_iface *stctxi, unsigned flags,
-                 struct pipe_fence_handle **fence)
-{
-   struct vg_context *ctx = (struct vg_context *) stctxi;
-   unsigned pipe_flags = 0;
-
-   if (flags & ST_FLUSH_END_OF_FRAME) {
-      pipe_flags |= PIPE_FLUSH_END_OF_FRAME;
-   }
-
-   ctx->pipe->flush(ctx->pipe, fence, pipe_flags);
-   if (flags & ST_FLUSH_FRONT)
-      vg_manager_flush_frontbuffer(ctx);
-}
-
-static void
-vg_context_destroy(struct st_context_iface *stctxi)
-{
-   struct vg_context *ctx = (struct vg_context *) stctxi;
-   struct pipe_context *pipe = ctx->pipe;
-
-   vg_destroy_context(ctx);
-   pipe->destroy(pipe);
-}
-
-static struct st_context_iface *
-vg_api_create_context(struct st_api *stapi, struct st_manager *smapi,
-                      const struct st_context_attribs *attribs,
-                      enum st_context_error *error,
-                      struct st_context_iface *shared_stctxi)
-{
-   struct vg_context *shared_ctx = (struct vg_context *) shared_stctxi;
-   struct vg_context *ctx;
-   struct pipe_context *pipe;
-
-   if (!(stapi->profile_mask & (1 << attribs->profile))) {
-      *error = ST_CONTEXT_ERROR_BAD_API;
-      return NULL;
-   }
-
-   /* only 1.0 is supported */
-   if (attribs->major > 1 || (attribs->major == 1 && attribs->minor > 0)) {
-      *error = ST_CONTEXT_ERROR_BAD_VERSION;
-      return NULL;
-   }
-
-   /* for VGHandle / pointer lookups */
-   init_handles();
-
-   pipe = smapi->screen->context_create(smapi->screen, NULL);
-   if (!pipe) {
-      *error = ST_CONTEXT_ERROR_NO_MEMORY;
-      return NULL;
-   }
-   ctx = vg_create_context(pipe, NULL, shared_ctx);
-   if (!ctx) {
-      pipe->destroy(pipe);
-      *error = ST_CONTEXT_ERROR_NO_MEMORY;
-      return NULL;
-   }
-
-   ctx->iface.destroy = vg_context_destroy;
-
-   ctx->iface.flush = vg_context_flush;
-
-   ctx->iface.teximage = NULL;
-   ctx->iface.copy = NULL;
-
-   ctx->iface.st_context_private = (void *) smapi;
-
-   return &ctx->iface;
-}
-
-static struct st_renderbuffer *
-create_renderbuffer(enum pipe_format format)
-{
-   struct st_renderbuffer *strb;
-
-   strb = CALLOC_STRUCT(st_renderbuffer);
-   if (strb)
-      strb->format = format;
-
-   return strb;
-}
-
-static void
-destroy_renderbuffer(struct st_renderbuffer *strb)
-{
-   pipe_surface_reference(&strb->surface, NULL);
-   pipe_resource_reference(&strb->texture, NULL);
-   FREE(strb);
-}
-
-/**
- * Decide the buffer to render to.
- */
-static enum st_attachment_type
-choose_attachment(struct st_framebuffer_iface *stfbi)
-{
-   enum st_attachment_type statt;
-
-   statt = stfbi->visual->render_buffer;
-   if (statt != ST_ATTACHMENT_INVALID) {
-      /* use the buffer given by the visual, unless it is unavailable */
-      if (!st_visual_have_buffers(stfbi->visual, 1 << statt)) {
-         switch (statt) {
-         case ST_ATTACHMENT_BACK_LEFT:
-            statt = ST_ATTACHMENT_FRONT_LEFT;
-            break;
-         case ST_ATTACHMENT_BACK_RIGHT:
-            statt = ST_ATTACHMENT_FRONT_RIGHT;
-            break;
-         default:
-            break;
-         }
-
-         if (!st_visual_have_buffers(stfbi->visual, 1 << statt))
-            statt = ST_ATTACHMENT_INVALID;
-      }
-   }
-
-   return statt;
-}
-
-/**
- * Bind the context to the given framebuffers.
- */
-static boolean
-vg_context_bind_framebuffers(struct st_context_iface *stctxi,
-                             struct st_framebuffer_iface *stdrawi,
-                             struct st_framebuffer_iface *streadi)
-{
-   struct vg_context *ctx = (struct vg_context *) stctxi;
-   struct st_framebuffer *stfb;
-   enum st_attachment_type strb_att;
-
-   /* the draw and read framebuffers must be the same */
-   if (stdrawi != streadi)
-      return FALSE;
-
-   strb_att = (stdrawi) ? choose_attachment(stdrawi) : ST_ATTACHMENT_INVALID;
-
-   if (ctx->draw_buffer) {
-      stfb = ctx->draw_buffer;
-
-      /* free the existing fb */
-      if (!stdrawi ||
-          stfb->strb_att != strb_att ||
-          stfb->strb->format != stdrawi->visual->color_format) {
-         destroy_renderbuffer(stfb->strb);
-         destroy_renderbuffer(stfb->dsrb);
-         FREE(stfb);
-
-         ctx->draw_buffer = NULL;
-      }
-   }
-
-   if (!stdrawi)
-      return TRUE;
-
-   if (strb_att == ST_ATTACHMENT_INVALID)
-      return FALSE;
-
-   /* create a new fb */
-   if (!ctx->draw_buffer) {
-      stfb = CALLOC_STRUCT(st_framebuffer);
-      if (!stfb)
-         return FALSE;
-
-      stfb->strb = create_renderbuffer(stdrawi->visual->color_format);
-      if (!stfb->strb) {
-         FREE(stfb);
-         return FALSE;
-      }
-
-      stfb->dsrb = create_renderbuffer(ctx->ds_format);
-      if (!stfb->dsrb) {
-         FREE(stfb->strb);
-         FREE(stfb);
-         return FALSE;
-      }
-
-      stfb->width = 0;
-      stfb->height = 0;
-      stfb->strb_att = strb_att;
-      stfb->stamp = 1;
-      stfb->iface_stamp = p_atomic_read(&stdrawi->stamp) - 1;
-
-      ctx->draw_buffer = stfb;
-   }
-
-   ctx->draw_buffer->iface = stdrawi;
-   ctx->draw_stamp = ctx->draw_buffer->stamp - 1;
-
-   return TRUE;
-}
-
-static boolean
-vg_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
-                    struct st_framebuffer_iface *stdrawi,
-                    struct st_framebuffer_iface *streadi)
-{
-   struct vg_context *ctx = (struct vg_context *) stctxi;
-
-   if (stctxi)
-      vg_context_bind_framebuffers(stctxi, stdrawi, streadi);
-   vg_set_current_context(ctx);
-
-   return TRUE;
-}
-
-static struct st_context_iface *
-vg_api_get_current(struct st_api *stapi)
-{
-   struct vg_context *ctx = vg_current_context();
-
-   return (ctx) ? &ctx->iface : NULL;
-}
-
-static st_proc_t
-vg_api_get_proc_address(struct st_api *stapi, const char *procname)
-{
-   return api_get_proc_address(procname);
-}
-
-static void
-vg_api_destroy(struct st_api *stapi)
-{
-}
-
-static void
-vg_api_query_versions(struct st_api *stapi, struct st_manager *sm,
-                      struct st_config_options *options,
-                      int *gl_core_version,
-                      int *gl_compat_version,
-                      int *gl_es1_version,
-                      int *gl_es2_version)
-{
-}
-
-static const struct st_api vg_api = {
-   "Vega " PACKAGE_VERSION,
-   ST_API_OPENVG,
-   ST_PROFILE_DEFAULT_MASK,
-   0,
-   vg_api_destroy,
-   vg_api_query_versions,
-   vg_api_get_proc_address,
-   vg_api_create_context,
-   vg_api_make_current,
-   vg_api_get_current,
-};
-
-const struct st_api *
-vg_api_get(void)
-{
-   return &vg_api;
-}
diff --git a/src/gallium/state_trackers/vega/vg_manager.h b/src/gallium/state_trackers/vega/vg_manager.h
deleted file mode 100644 (file)
index 02b4842..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2010 LunarG Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef VG_MANAGER_H
-#define VG_MANAGER_H
-
-#include "state_tracker/st_api.h"
-#include "vg_context.h"
-
-void
-vg_manager_flush_frontbuffer(struct vg_context *ctx);
-
-void
-vg_manager_validate_framebuffer(struct vg_context *ctx);
-
-#endif /* VG_MANAGER_H */
diff --git a/src/gallium/state_trackers/vega/vg_state.c b/src/gallium/state_trackers/vega/vg_state.c
deleted file mode 100644 (file)
index 6f6bfda..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "vg_state.h"
-
-#include <string.h>
-
-void vg_init_state(struct vg_state *state)
-{
-   state->matrix_mode = VG_MATRIX_PATH_USER_TO_SURFACE;
-   state->fill_rule = VG_EVEN_ODD;
-   state->image_quality = VG_IMAGE_QUALITY_FASTER;
-   state->rendering_quality = VG_RENDERING_QUALITY_BETTER;
-   state->blend_mode = VG_BLEND_SRC_OVER;
-   state->image_mode = VG_DRAW_IMAGE_NORMAL;
-
-   memset(state->scissor_rects, 0, sizeof(state->scissor_rects));
-   state->scissor_rects_num = 0;
-
-   state->color_transform = VG_FALSE;
-   state->color_transform_values[0] = 1.0f;
-   state->color_transform_values[1] = 1.0f;
-   state->color_transform_values[2] = 1.0f;
-   state->color_transform_values[3] = 1.0f;
-   state->color_transform_values[4] = 0.0f;
-   state->color_transform_values[5] = 0.0f;
-   state->color_transform_values[6] = 0.0f;
-   state->color_transform_values[7] = 0.0f;
-
-   /* Stroke parameters */
-   state->stroke.line_width.f       = 1.0f;
-   state->stroke.line_width.i       = 1;
-   state->stroke.cap_style        = VG_CAP_BUTT;
-   state->stroke.join_style       = VG_JOIN_MITER;
-   state->stroke.miter_limit.f      = 4.0f;
-   state->stroke.miter_limit.i      = 4;
-   state->stroke.dash_pattern_num = 0;
-   state->stroke.dash_phase.f       = 0.0f;
-   state->stroke.dash_phase.i       = 0;
-   state->stroke.dash_phase_reset = VG_FALSE;
-
-   /* Edge fill color for VG_TILE_FILL tiling mode */
-   state->tile_fill_color[0] = 0.0f;
-   state->tile_fill_color[1] = 0.0f;
-   state->tile_fill_color[2] = 0.0f;
-   state->tile_fill_color[3] = 0.0f;
-
-   /* Color for vgClear */
-   state->clear_color[0] = 0.0f;
-   state->clear_color[1] = 0.0f;
-   state->clear_color[2] = 0.0f;
-   state->clear_color[3] = 0.0f;
-
-   /* Glyph origin */
-   state->glyph_origin[0].f = 0.0f;
-   state->glyph_origin[1].f = 0.0f;
-   state->glyph_origin[0].i = 0;
-   state->glyph_origin[1].i = 0;
-
-   /* Enable/disable alpha masking and scissoring */
-   state->masking = VG_FALSE;
-   state->scissoring = VG_FALSE;
-
-   /* Pixel layout information */
-   state->pixel_layout = VG_PIXEL_LAYOUT_UNKNOWN;
-   state->screen_layout = VG_PIXEL_LAYOUT_UNKNOWN;
-
-   /* Source format selection for image filters */
-   state->filter_format_linear = VG_FALSE;
-   state->filter_format_premultiplied = VG_FALSE;
-
-   /* Destination write enable mask for image filters */
-   state->filter_channel_mask = (VG_RED | VG_GREEN | VG_BLUE | VG_ALPHA);
-
-   matrix_load_identity(&state->path_user_to_surface_matrix);
-   matrix_load_identity(&state->image_user_to_surface_matrix);
-   matrix_load_identity(&state->fill_paint_to_user_matrix);
-   matrix_load_identity(&state->stroke_paint_to_user_matrix);
-   matrix_load_identity(&state->glyph_user_to_surface_matrix);
-}
-
-struct matrix *vg_state_matrix(struct vg_state *state)
-{
-    switch(state->matrix_mode) {
-    case VG_MATRIX_PATH_USER_TO_SURFACE:
-       return &state->path_user_to_surface_matrix;
-    case VG_MATRIX_IMAGE_USER_TO_SURFACE:
-       return &state->image_user_to_surface_matrix;
-    case VG_MATRIX_FILL_PAINT_TO_USER:
-       return &state->fill_paint_to_user_matrix;
-    case VG_MATRIX_STROKE_PAINT_TO_USER:
-       return &state->stroke_paint_to_user_matrix;
-#ifdef OPENVG_VERSION_1_1
-    case VG_MATRIX_GLYPH_USER_TO_SURFACE:
-       return &state->glyph_user_to_surface_matrix;
-#endif
-    default:
-       break;
-    }
-    return NULL;
-}
diff --git a/src/gallium/state_trackers/vega/vg_state.h b/src/gallium/state_trackers/vega/vg_state.h
deleted file mode 100644 (file)
index ed90689..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef VG_STATE_H
-#define VG_STATE_H
-
-#include "VG/openvg.h"
-
-#include "api_consts.h"
-#include "matrix.h"
-
-struct vg_value
-{
-   VGfloat f;
-   VGint   i;
-};
-
-struct vg_state {
-   /* Mode settings */
-   VGMatrixMode matrix_mode;
-   VGFillRule fill_rule;
-   VGImageQuality image_quality;
-   VGRenderingQuality rendering_quality;
-   VGBlendMode blend_mode;
-   VGImageMode image_mode;
-
-   /* Scissoring rectangles */
-   struct vg_value  scissor_rects[32*4];
-   VGint  scissor_rects_num;
-
-   /* Color Transformation */
-   VGboolean color_transform;
-   VGfloat color_transform_values[8];
-
-   /* Stroke parameters */
-   struct {
-      struct vg_value line_width;
-      VGCapStyle cap_style;
-      VGJoinStyle join_style;
-      struct vg_value miter_limit;
-      struct vg_value dash_pattern[VEGA_MAX_DASH_COUNT];
-      VGint   dash_pattern_num;
-      struct vg_value dash_phase;
-      VGboolean dash_phase_reset;
-   } stroke;
-
-   /* Edge fill color for VG_TILE_FILL tiling mode */
-   VGfloat tile_fill_color[4];
-   VGint tile_fill_colori[4];
-
-   /* Color for vgClear */
-   VGfloat clear_color[4];
-   VGint clear_colori[4];
-
-   /* Glyph origin */
-   struct vg_value glyph_origin[2];
-
-   /* Enable/disable alpha masking and scissoring */
-   VGboolean masking;
-   VGboolean scissoring;
-
-   /* Pixel layout information */
-   VGPixelLayout pixel_layout;
-   VGPixelLayout screen_layout;
-
-   /* Source format selection for image filters */
-   VGboolean filter_format_linear;
-   VGboolean filter_format_premultiplied;
-
-   /* Destination write enable mask for image filters */
-   VGbitfield filter_channel_mask;
-
-   struct matrix path_user_to_surface_matrix;
-   struct matrix image_user_to_surface_matrix;
-   struct matrix fill_paint_to_user_matrix;
-   struct matrix stroke_paint_to_user_matrix;
-   struct matrix glyph_user_to_surface_matrix;
-
-   struct vg_paint *stroke_paint;
-   struct vg_paint *fill_paint;
-};
-
-void vg_init_state(struct vg_state *state);
-struct matrix * vg_state_matrix(struct vg_state *state);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/vg_translate.c b/src/gallium/state_trackers/vega/vg_translate.c
deleted file mode 100644 (file)
index 4aad899..0000000
+++ /dev/null
@@ -1,1097 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "vg_translate.h"
-
-#include "pipe/p_format.h"
-#include "util/u_pack_color.h"
-
-void _vega_pack_rgba_span_float(struct vg_context *ctx,
-                                VGuint n, VGfloat rgba[][4],
-                                VGImageFormat dstFormat,
-                                void *dstAddr)
-{
-   VGuint i;
-
-   switch (dstFormat) {
-   case VG_sRGBX_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = 255;
-         dst[i] = r << 24 | g << 16 | b << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sRGBA_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = r << 24 | g << 16 | b << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sRGBA_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = r << 24 | g << 16 | b << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sRGB_565: {
-      VGshort *dst = (VGshort *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         r = (r / 255.0) * 32;
-         g = (g / 255.0) * 32;
-         b = (b / 255.0) * 32;
-
-         dst[i] = b | g << 5 | r << 11;
-      }
-      return;
-   }
-      break;
-   case VG_sRGBA_5551: {
-      VGshort *dst = (VGshort *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b, a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         r = (r / 255.0) * 32;
-         g = (g / 255.0) * 32;
-         b = (b / 255.0) * 32;
-         a = (a / 255.0);
-
-         dst[i] =  a | b << 1 | g << 6 | r << 11;
-      }
-      return;
-   }
-      break;
-   case VG_sRGBA_4444: {
-      VGshort *dst = (VGshort *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b, a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         r = (r / 255.0) * 16;
-         g = (g / 255.0) * 16;
-         b = (b / 255.0) * 16;
-         a = (a / 255.0) * 16;
-
-         dst[i] =  a | b << 4 | g << 8 | r << 12;
-      }
-      return;
-   }
-      break;
-   case VG_sL_8: {
-      VGubyte *dst = (VGubyte *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte a;
-         a = float_to_ubyte(rgba[i][3]);
-
-         dst[i] =  a;
-      }
-      return;
-   }
-      break;
-   case VG_lRGBX_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = 255;
-         dst[i] = r << 24 | g << 16 | b << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_lRGBA_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = r << 24 | g << 16 | b << 8 | a;
-      }
-      return;
-   }
-   case VG_lRGBA_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = r << 24 | g << 16 | b << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_lL_8: {
-      VGubyte *dst = (VGubyte *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte a;
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a;
-      }
-      return;
-   }
-      break;
-   case VG_A_8: {
-      VGubyte *dst = (VGubyte *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte a;
-         a = float_to_ubyte(rgba[i][3]);
-
-         dst[i] = a;
-      }
-      return;
-   }
-      break;
-   case VG_BW_1: {
-      VGshort *dst = (VGshort *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b, a;
-         VGubyte res;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-
-         res = (r + g + b + a)/4;
-         dst[i] =   (res & (128));
-      }
-      return;
-   }
-      break;
-#ifdef OPENVG_VERSION_1_1
-   case VG_A_1: {
-      VGshort *dst = (VGshort *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte a;
-         a = float_to_ubyte(rgba[i][3]);
-
-         dst[i] =   (a & (128));
-      }
-      return;
-   }
-      break;
-   case VG_A_4: {
-      VGshort *dst = (VGshort *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte a;
-         VGubyte res;
-         a = float_to_ubyte(rgba[i][3]);
-
-         res = a/4;
-         dst[i] =   (res & (128));
-      }
-      return;
-   }
-      break;
-#endif
-   case VG_sXRGB_8888:
-      break;
-   case VG_sARGB_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | r << 16 | g << 8 | b;
-      }
-      return;
-   }
-      break;
-   case VG_sARGB_8888_PRE:  {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | r << 16 | g << 8 | b;
-      }
-      return;
-   }
-      break;
-   case VG_sARGB_1555:
-      break;
-   case VG_sARGB_4444:
-      break;
-   case VG_lXRGB_8888:
-      break;
-   case VG_lARGB_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | r << 16 | g << 8 | b;
-      }
-      return;
-   }
-      break;
-   case VG_lARGB_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | r << 16 | g << 8 | b;
-      }
-      return;
-   }
-      break;
-   case VG_sBGRX_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = 0xff;
-         dst[i] = b << 24 | g << 16 | r << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sBGRA_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = b << 24 | g << 16 | r << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sBGRA_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = b << 24 | g << 16 | r << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sBGR_565:
-      break;
-   case VG_sBGRA_5551:
-      break;
-   case VG_sBGRA_4444:
-      break;
-   case VG_lBGRX_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = 0xff;
-         dst[i] = b << 24 | g << 16 | r << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_lBGRA_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = b << 24 | g << 16 | r << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_lBGRA_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = b << 24 | g << 16 | r << 8 | a;
-      }
-      return;
-   }
-      break;
-   case VG_sXBGR_8888:
-      break;
-   case VG_sABGR_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | b << 16 | g << 8 | r;
-      }
-      return;
-   }
-      break;
-   case VG_sABGR_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | b << 16 | g << 8 | r;
-      }
-      return;
-   }
-      break;
-   case VG_sABGR_1555:
-      break;
-   case VG_sABGR_4444:
-      break;
-   case VG_lXBGR_8888:
-      break;
-   case VG_lABGR_8888: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | b << 16 | g << 8 | r;
-      }
-      return;
-   }
-      break;
-   case VG_lABGR_8888_PRE: {
-      VGint *dst = (VGint *)dstAddr;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = float_to_ubyte(rgba[i][0]);
-         g = float_to_ubyte(rgba[i][1]);
-         b = float_to_ubyte(rgba[i][2]);
-         a = float_to_ubyte(rgba[i][3]);
-         dst[i] = a << 24 | b << 16 | g << 8 | r;
-      }
-      return;
-   }
-      break;
-   default:
-      assert(!"Unknown ReadPixels format");
-      break;
-   }
-   assert(!"Not implemented ReadPixels format");
-}
-
-void _vega_unpack_float_span_rgba(struct vg_context *ctx,
-                                  VGuint n,
-                                  VGuint offset,
-                                  const void * data,
-                                  VGImageFormat dataFormat,
-                                  VGfloat rgba[][4])
-{
-   VGuint i;
-   union util_color uc;
-
-   switch (dataFormat) {
-   case VG_sRGBX_8888: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         b = (*src >>  8) & 0xff;
-         a = 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_sRGBA_8888: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         b = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sRGBA_8888_PRE: {
-      VGint *src = (VGint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         b = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sRGB_565: {
-      VGshort *src = (VGshort *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGfloat clr[4];
-         clr[0] = ((*src >> 11) & 31)/31.;
-         clr[1] = ((*src >>  5) & 63)/63.;
-         clr[2] = ((*src >>  0) & 31)/31.;
-         clr[3] = 1.f;
-
-         util_pack_color(clr, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_sRGBA_5551: {
-      VGshort *src = (VGshort *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGfloat clr[4];
-         clr[0] = ((*src >> 10) & 31)/31.;
-         clr[1] = ((*src >>  5) & 31)/31.;
-         clr[2] = ((*src >>  1) & 31)/31.;
-         clr[3] = ((*src >>  0) & 1)/1.;
-
-         util_pack_color(clr, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_sRGBA_4444: {
-      VGshort *src = (VGshort *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGfloat clr[4];
-         clr[0] = ((*src >> 12) & 15)/15.;
-         clr[1] = ((*src >>  8) & 15)/15.;
-         clr[2] = ((*src >>  4) & 15)/15.;
-         clr[3] = ((*src >>  0) & 15)/15.;
-
-         util_pack_color(clr, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_sL_8: {
-      VGubyte *src = (VGubyte *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         util_pack_color_ub(0xff, 0xff, 0xff, *src, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_lRGBX_8888: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         b = (*src >>  8) & 0xff;
-         a = 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_lRGBA_8888: {
-      VGint *src = (VGint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         b = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_lRGBA_8888_PRE: {
-      VGint *src = (VGint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         r = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         b = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_lL_8: {
-      VGubyte *src = (VGubyte *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         util_pack_color_ub(0xff, 0xff, 0xff, *src, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_A_8: {
-      VGubyte *src = (VGubyte *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         util_pack_color_ub(0xff, 0xff, 0xff, *src, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-   }
-      return;
-   case VG_BW_1: {
-      VGubyte *src = (VGubyte *)data;
-      src += offset;
-      for (i = 0; i < n; i += 8) {
-         VGfloat clr[4];
-         VGuint j;
-         for (j = 0; j < 8 && j < n ; ++j) {
-            VGint shift = j;
-            clr[0] = (((*src) & (1<<shift)) >> shift);
-            clr[1] = clr[0];
-            clr[2] = clr[0];
-            clr[3] = 1.f;
-
-            util_pack_color(clr, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-            rgba[i+j][0] = uc.f[0];
-            rgba[i+j][1] = uc.f[1];
-            rgba[i+j][2] = uc.f[2];
-            rgba[i+j][3] = uc.f[3];
-         }
-         ++src;
-      }
-   }
-      return;
-#ifdef OPENVG_VERSION_1_1
-   case VG_A_1: {
-      VGubyte *src = (VGubyte *)data;
-      src += offset;
-      for (i = 0; i < n; i += 8) {
-         VGfloat clr[4];
-         VGuint j;
-         for (j = 0; j < 8 && j < n ; ++j) {
-            VGint shift = j;
-            clr[0] = 0.f;
-            clr[1] = 0.f;
-            clr[2] = 0.f;
-            clr[3] = (((*src) & (1<<shift)) >> shift);
-
-            util_pack_color(clr, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-            rgba[i+j][0] = uc.f[0];
-            rgba[i+j][1] = uc.f[1];
-            rgba[i+j][2] = uc.f[2];
-            rgba[i+j][3] = uc.f[3];
-         }
-         ++src;
-      }
-   }
-      return;
-   case VG_A_4: {
-      VGubyte *src = (VGubyte *)data;
-      src += offset/2;
-      for (i = 0; i < n; i += 2) {
-         VGfloat clr[4];
-         VGuint j;
-         for (j = 0; j < n && j < 2; ++j) {
-            VGint bitter, shift;
-            if (j == 0) {
-               bitter = 0x0f;
-               shift = 0;
-            } else {
-               bitter = 0xf0;
-               shift = 4;
-            }
-            clr[0] = 0.f;
-            clr[1] = 0.f;
-            clr[2] = 0.f;
-            clr[3] = ((*src) & (bitter)) >> shift;
-
-            util_pack_color(clr, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-            rgba[i+j][0] = uc.f[0];
-            rgba[i+j][1] = uc.f[1];
-            rgba[i+j][2] = uc.f[2];
-            rgba[i+j][3] = uc.f[3];
-         }
-         ++src;
-      }
-   }
-      return;
-#endif
-   case VG_sXRGB_8888:
-      break;
-   case VG_sARGB_8888: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         r = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         b = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sARGB_8888_PRE: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         r = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         b = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sARGB_1555:
-      break;
-   case VG_sARGB_4444:
-      break;
-   case VG_lXRGB_8888:
-      break;
-   case VG_lARGB_8888: {
-      VGint *src = (VGint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         r = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         b = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_lARGB_8888_PRE: {
-      VGint *src = (VGint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         r = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         b = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sBGRX_8888:
-      break;
-   case VG_sBGRA_8888:  {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         b = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         r = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sBGRA_8888_PRE:  {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         b = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         r = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sBGR_565:
-      break;
-   case VG_sBGRA_5551:
-      break;
-   case VG_sBGRA_4444:
-      break;
-   case VG_lBGRX_8888:
-      break;
-   case VG_lBGRA_8888:  {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         b = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         r = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_lBGRA_8888_PRE:  {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         b = (*src >> 24) & 0xff;
-         g = (*src >> 16) & 0xff;
-         r = (*src >>  8) & 0xff;
-         a = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sXBGR_8888:
-      break;
-   case VG_sABGR_8888: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         b = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         r = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sABGR_8888_PRE: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         b = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         r = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_sABGR_1555:
-      break;
-   case VG_sABGR_4444:
-      break;
-   case VG_lXBGR_8888:
-      break;
-   case VG_lABGR_8888: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         b = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         r = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   case VG_lABGR_8888_PRE: {
-      VGuint *src = (VGuint *)data;
-      src += offset;
-      for (i = 0; i < n; ++i) {
-         VGubyte r, g, b ,a;
-         a = (*src >> 24) & 0xff;
-         b = (*src >> 16) & 0xff;
-         g = (*src >>  8) & 0xff;
-         r = (*src >>  0) & 0xff;
-
-         util_pack_color_ub(r, g, b, a, PIPE_FORMAT_R32G32B32A32_FLOAT, &uc);
-         rgba[i][0] = uc.f[0];
-         rgba[i][1] = uc.f[1];
-         rgba[i][2] = uc.f[2];
-         rgba[i][3] = uc.f[3];
-         ++src;
-      }
-      return;
-   }
-      break;
-   default:
-      assert(!"Unknown ReadPixels format");
-      break;
-   }
-   assert(!"Not implemented ReadPixels format");
-}
-
-VGint _vega_size_for_format(VGImageFormat dataFormat)
-{
-   switch (dataFormat) {
-   case VG_sRGBX_8888:
-   case VG_sRGBA_8888:
-   case VG_sRGBA_8888_PRE:
-      return 4;
-   case VG_sRGB_565:
-   case VG_sRGBA_5551:
-   case VG_sRGBA_4444:
-      return 2;
-   case VG_sL_8:
-      return 1;
-   case VG_lRGBX_8888:
-   case VG_lRGBA_8888:
-   case VG_lRGBA_8888_PRE:
-      return 4;
-   case VG_lL_8:
-      return 1;
-   case VG_A_8:
-      return 1;
-   case VG_BW_1:
-      return 1;
-#ifdef OPENVG_VERSION_1_1
-   case VG_A_1:
-      break;
-   case VG_A_4:
-      break;
-#endif
-   case VG_sXRGB_8888:
-   case VG_sARGB_8888:
-   case VG_sARGB_8888_PRE:
-      return 4;
-   case VG_sARGB_1555:
-   case VG_sARGB_4444:
-      return 2;
-   case VG_lXRGB_8888:
-   case VG_lARGB_8888:
-   case VG_lARGB_8888_PRE:
-   case VG_sBGRX_8888:
-   case VG_sBGRA_8888:
-   case VG_sBGRA_8888_PRE:
-      return 4;
-   case VG_sBGR_565:
-   case VG_sBGRA_5551:
-   case VG_sBGRA_4444:
-      return 2;
-   case VG_lBGRX_8888:
-   case VG_lBGRA_8888:
-   case VG_lBGRA_8888_PRE:
-   case VG_sXBGR_8888:
-   case VG_sABGR_8888:
-   case VG_sABGR_8888_PRE:
-      return 4;
-   case VG_sABGR_1555:
-   case VG_sABGR_4444:
-      return 2;
-   case VG_lXBGR_8888:
-   case VG_lABGR_8888:
-   case VG_lABGR_8888_PRE:
-      return 4;
-   default:
-      assert(!"Unknown ReadPixels format");
-      break;
-   }
-   assert(!"Not implemented ReadPixels format");
-   return 0;
-}
diff --git a/src/gallium/state_trackers/vega/vg_translate.h b/src/gallium/state_trackers/vega/vg_translate.h
deleted file mode 100644 (file)
index 70815ba..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef VG_TRANSLATE_H
-#define VG_TRANSLATE_H
-
-#include "VG/openvg.h"
-#include "vg_context.h"
-
-/*FIXME: we really should be using translate module
- * but pipe_format can't express some of the VG formats
- * (the premultiplied ones) so currently it won't work */
-
-void _vega_pack_rgba_span_float(struct vg_context *ctx,
-                                VGuint n, VGfloat rgba[][4],
-                                VGImageFormat dstFormat,
-                                void *dstAddr);
-void _vega_unpack_float_span_rgba(struct vg_context *ctx,
-                                  VGuint n,
-                                  VGuint offset,
-                                  const void * data,
-                                  VGImageFormat dataFormat,
-                                  VGfloat rgba[][4]);
-VGint _vega_size_for_format(VGImageFormat format);
-
-#endif
diff --git a/src/gallium/state_trackers/vega/vgu.c b/src/gallium/state_trackers/vega/vgu.c
deleted file mode 100644 (file)
index 4206a91..0000000
+++ /dev/null
@@ -1,441 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "VG/openvg.h"
-#include "VG/vgu.h"
-
-#include "matrix.h"
-#include "path.h"
-#include "handle.h"
-
-#include "util/u_debug.h"
-#include "util/u_pointer.h"
-
-#include <math.h>
-#include <assert.h>
-
-
-static void vgu_append_float_coords(VGPath path,
-                                    const VGubyte *cmds,
-                                    VGint num_cmds,
-                                    const VGfloat *coords,
-                                    VGint num_coords)
-{
-   VGubyte common_data[40 * sizeof(VGfloat)];
-   struct path *p = handle_to_path(path);
-
-   vg_float_to_datatype(path_datatype(p), common_data, coords, num_coords);
-   vgAppendPathData(path, num_cmds, cmds, common_data);
-}
-
-VGUErrorCode vguLine(VGPath path,
-                     VGfloat x0, VGfloat y0,
-                     VGfloat x1, VGfloat y1)
-{
-   static const VGubyte cmds[] = {VG_MOVE_TO_ABS, VG_LINE_TO_ABS};
-   VGfloat coords[4];
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      return VGU_BAD_HANDLE_ERROR;
-   }
-   caps = vgGetPathCapabilities(path);
-   if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) {
-      return VGU_PATH_CAPABILITY_ERROR;
-   }
-
-   coords[0] = x0;
-   coords[1] = y0;
-   coords[2] = x1;
-   coords[3] = y1;
-
-   vgu_append_float_coords(path, cmds, 2, coords, 4);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguPolygon(VGPath path,
-                        const VGfloat * points,
-                        VGint count,
-                        VGboolean closed)
-{
-   VGubyte *cmds;
-   VGfloat *coords;
-   VGbitfield caps;
-   VGint i;
-
-   if (path == VG_INVALID_HANDLE) {
-      return VGU_BAD_HANDLE_ERROR;
-   }
-
-   if (!points || count <= 0 || !is_aligned(points)) {
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-   }
-
-   caps = vgGetPathCapabilities(path);
-   if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) {
-      return VGU_PATH_CAPABILITY_ERROR;
-   }
-
-   cmds   = malloc(sizeof(VGubyte) * count + 1);
-   coords = malloc(sizeof(VGfloat) * count * 2);
-
-   cmds[0] = VG_MOVE_TO_ABS;
-   coords[0] = points[0];
-   coords[1] = points[1];
-   for (i = 1; i < count; ++i) {
-      cmds[i] = VG_LINE_TO_ABS;
-      coords[2*i + 0] = points[2*i + 0];
-      coords[2*i + 1] = points[2*i + 1];
-   }
-
-   if (closed) {
-      cmds[i] = VG_CLOSE_PATH;
-      ++i;
-   }
-
-   vgu_append_float_coords(path, cmds, i, coords, 2*i);
-
-   free(cmds);
-   free(coords);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode  vguRect(VGPath path,
-                      VGfloat x, VGfloat y,
-                      VGfloat width, VGfloat height)
-{
-   static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
-                                  VG_HLINE_TO_REL,
-                                  VG_VLINE_TO_REL,
-                                  VG_HLINE_TO_REL,
-                                  VG_CLOSE_PATH
-   };
-   VGfloat coords[5];
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      return VGU_BAD_HANDLE_ERROR;
-   }
-   caps = vgGetPathCapabilities(path);
-   if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) {
-      return VGU_PATH_CAPABILITY_ERROR;
-   }
-   if (width <= 0 || height <= 0) {
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-   }
-
-   coords[0] =  x;
-   coords[1] =  y;
-   coords[2] =  width;
-   coords[3] =  height;
-   coords[4] = -width;
-
-   vgu_append_float_coords(path, cmds, 5, coords, 5);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguRoundRect(VGPath path,
-                          VGfloat x, VGfloat y,
-                          VGfloat width,
-                          VGfloat height,
-                          VGfloat arcWidth,
-                          VGfloat arcHeight)
-{
-   static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
-                                  VG_HLINE_TO_REL,
-                                  VG_SCCWARC_TO_REL,
-                                  VG_VLINE_TO_REL,
-                                  VG_SCCWARC_TO_REL,
-                                  VG_HLINE_TO_REL,
-                                  VG_SCCWARC_TO_REL,
-                                  VG_VLINE_TO_REL,
-                                  VG_SCCWARC_TO_REL,
-                                  VG_CLOSE_PATH
-   };
-   VGfloat c[26];
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      return VGU_BAD_HANDLE_ERROR;
-   }
-   caps = vgGetPathCapabilities(path);
-   if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) {
-      return VGU_PATH_CAPABILITY_ERROR;
-   }
-   if (width <= 0 || height <= 0) {
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-   }
-
-   c[0] =  x + arcWidth/2; c[1] =  y;
-
-   c[2] = width - arcWidth;
-
-   c[3] = arcWidth/2; c[4] = arcHeight/2; c[5] = 0;
-   c[6] = arcWidth/2; c[7] = arcHeight/2;
-
-   c[8] = height - arcHeight;
-
-   c[9] = arcWidth/2; c[10] = arcHeight/2; c[11] = 0;
-   c[12] = -arcWidth/2; c[13] = arcHeight/2;
-
-   c[14] = -(width - arcWidth);
-
-   c[15] = arcWidth/2; c[16] = arcHeight/2; c[17] = 0;
-   c[18] = -arcWidth/2; c[19] = -arcHeight/2;
-
-   c[20] = -(height - arcHeight);
-
-   c[21] = arcWidth/2; c[22] = arcHeight/2; c[23] = 0;
-   c[24] = arcWidth/2; c[25] = -arcHeight/2;
-
-   vgu_append_float_coords(path, cmds, 10, c, 26);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguEllipse(VGPath path,
-                        VGfloat cx, VGfloat cy,
-                        VGfloat width,
-                        VGfloat height)
-{
-   static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
-                                  VG_SCCWARC_TO_REL,
-                                  VG_SCCWARC_TO_REL,
-                                  VG_CLOSE_PATH
-   };
-   VGfloat coords[12];
-   VGbitfield caps;
-
-   if (path == VG_INVALID_HANDLE) {
-      return VGU_BAD_HANDLE_ERROR;
-   }
-   caps = vgGetPathCapabilities(path);
-   if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) {
-      return VGU_PATH_CAPABILITY_ERROR;
-   }
-   if (width <= 0 || height <= 0) {
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-   }
-
-   coords[0] = cx + width/2; coords[1] = cy;
-
-   coords[2] = width/2; coords[3] = height/2; coords[4] = 0;
-   coords[5] = -width; coords[6] = 0;
-
-   coords[7] = width/2; coords[8] = height/2; coords[9] = 0;
-   coords[10] = width; coords[11] = 0;
-
-   vgu_append_float_coords(path, cmds, 4, coords, 11);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguArc(VGPath path,
-                    VGfloat x, VGfloat y,
-                    VGfloat width, VGfloat height,
-                    VGfloat startAngle,
-                    VGfloat angleExtent,
-                    VGUArcType arcType)
-{
-   VGubyte cmds[11];
-   VGfloat coords[40];
-   VGbitfield caps;
-   VGfloat last = startAngle + angleExtent;
-   VGint i, c = 0;
-
-   if (path == VG_INVALID_HANDLE) {
-      return VGU_BAD_HANDLE_ERROR;
-   }
-   caps = vgGetPathCapabilities(path);
-   if (!(caps & VG_PATH_CAPABILITY_APPEND_TO)) {
-      return VGU_PATH_CAPABILITY_ERROR;
-   }
-   if (width <= 0 || height <= 0) {
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-   }
-   if (arcType != VGU_ARC_OPEN &&
-       arcType != VGU_ARC_CHORD &&
-       arcType != VGU_ARC_PIE) {
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-   }
-
-   cmds[c] = VG_MOVE_TO_ABS; ++c;
-   coords[0] = x+cos(DEGREES_TO_RADIANS(startAngle))*width/2;
-   coords[1] = y+sin(DEGREES_TO_RADIANS(startAngle))*height/2;
-#ifdef DEBUG_VGUARC
-   debug_printf("start [%f, %f]\n", coords[0], coords[1]);
-#endif
-   i = 2;
-   if (angleExtent > 0) {
-      VGfloat angle = startAngle + 180;
-      while (angle < last) {
-         cmds[c] = VG_SCCWARC_TO_ABS; ++c;
-         coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0;
-         coords[i+3] = x + cos(DEGREES_TO_RADIANS(angle))*width/2;
-         coords[i+4] = y + sin(DEGREES_TO_RADIANS(angle))*height/2;
-#ifdef DEBUG_VGUARC
-         debug_printf("1 [%f, %f]\n", coords[i+3],
-                      coords[i+4]);
-#endif
-         i += 5;
-         angle += 180;
-      }
-      cmds[c] = VG_SCCWARC_TO_ABS; ++c;
-      coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0;
-      coords[i+3] = x+cos(DEGREES_TO_RADIANS(last))*width/2;
-      coords[i+4] = y+sin(DEGREES_TO_RADIANS(last))*height/2;
-#ifdef DEBUG_VGUARC
-      debug_printf("2 [%f, %f]\n", coords[i+3],
-                   coords[i+4]);
-#endif
-      i += 5;
-   } else {
-      VGfloat angle = startAngle - 180;
-      while (angle > last) {
-         cmds[c] = VG_SCWARC_TO_ABS; ++c;
-         coords[i] =  width/2; coords[i+1] = height/2; coords[i+2] = 0;
-         coords[i+3] = x + cos(DEGREES_TO_RADIANS(angle)) * width/2;
-         coords[i+4] = y + sin(DEGREES_TO_RADIANS(angle)) * height/2;
-#ifdef DEBUG_VGUARC
-         debug_printf("3 [%f, %f]\n", coords[i+3],
-                      coords[i+4]);
-#endif
-         angle -= 180;
-         i += 5;
-      }
-      cmds[c] = VG_SCWARC_TO_ABS; ++c;
-      coords[i] = width/2; coords[i+1] = height/2; coords[i+2] = 0;
-      coords[i+3] = x + cos(DEGREES_TO_RADIANS(last)) * width/2;
-      coords[i+4] = y + sin(DEGREES_TO_RADIANS(last)) * height/2;
-#ifdef DEBUG_VGUARC
-      debug_printf("4 [%f, %f]\n", coords[i+3],
-                   coords[i+4]);
-#endif
-      i += 5;
-   }
-
-   if (arcType == VGU_ARC_PIE) {
-      cmds[c] = VG_LINE_TO_ABS; ++c;
-      coords[i] = x; coords[i + 1] = y;
-      i += 2;
-   }
-   if (arcType == VGU_ARC_PIE || arcType == VGU_ARC_CHORD) {
-      cmds[c] = VG_CLOSE_PATH;
-      ++c;
-   }
-
-   assert(c < 11);
-
-   vgu_append_float_coords(path, cmds, c, coords, i);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguComputeWarpQuadToSquare(VGfloat sx0, VGfloat sy0,
-                                        VGfloat sx1, VGfloat sy1,
-                                        VGfloat sx2, VGfloat sy2,
-                                        VGfloat sx3, VGfloat sy3,
-                                        VGfloat * matrix)
-{
-   struct matrix mat;
-
-   if (!matrix || !is_aligned(matrix))
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-
-   if (!matrix_quad_to_square(sx0, sy0,
-                              sx1, sy1,
-                              sx2, sy2,
-                              sx3, sy3,
-                              &mat))
-      return VGU_BAD_WARP_ERROR;
-
-   if (!matrix_is_invertible(&mat))
-      return VGU_BAD_WARP_ERROR;
-
-   memcpy(matrix, mat.m, sizeof(VGfloat) * 9);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguComputeWarpSquareToQuad(VGfloat dx0, VGfloat dy0,
-                                        VGfloat dx1, VGfloat dy1,
-                                        VGfloat dx2, VGfloat dy2,
-                                        VGfloat dx3, VGfloat dy3,
-                                        VGfloat * matrix)
-{
-   struct matrix mat;
-
-   if (!matrix || !is_aligned(matrix))
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-
-   if (!matrix_square_to_quad(dx0, dy0,
-                              dx1, dy1,
-                              dx2, dy2,
-                              dx3, dy3,
-                              &mat))
-      return VGU_BAD_WARP_ERROR;
-
-   if (!matrix_is_invertible(&mat))
-      return VGU_BAD_WARP_ERROR;
-
-   memcpy(matrix, mat.m, sizeof(VGfloat) * 9);
-
-   return VGU_NO_ERROR;
-}
-
-VGUErrorCode vguComputeWarpQuadToQuad(VGfloat dx0, VGfloat dy0,
-                                      VGfloat dx1, VGfloat dy1,
-                                      VGfloat dx2, VGfloat dy2,
-                                      VGfloat dx3, VGfloat dy3,
-                                      VGfloat sx0, VGfloat sy0,
-                                      VGfloat sx1, VGfloat sy1,
-                                      VGfloat sx2, VGfloat sy2,
-                                      VGfloat sx3, VGfloat sy3,
-                                      VGfloat * matrix)
-{
-   struct matrix mat;
-
-   if (!matrix || !is_aligned(matrix))
-      return VGU_ILLEGAL_ARGUMENT_ERROR;
-
-   if (!matrix_quad_to_quad(dx0, dy0,
-                            dx1, dy1,
-                            dx2, dy2,
-                            dx3, dy3,
-                            sx0, sy0,
-                            sx1, sy1,
-                            sx2, sy2,
-                            sx3, sy3,
-                            &mat))
-      return VGU_BAD_WARP_ERROR;
-
-   memcpy(matrix, mat.m, sizeof(VGfloat) * 9);
-
-   return VGU_NO_ERROR;
-}
index b0a6c8ca2d82d819eaf6f63d2271cda94d983435..90ba5715f13518f073bd1f9ce97eacec3c9658af 100644 (file)
@@ -232,10 +232,4 @@ endif
 es2api/glapi_mapi_tmp.h: glapi/gen/gl_and_es_API.xml $(glapi_gen_mapi_deps)
        $(call glapi_gen_mapi,$<,es2api)
 
-# XXX: Inline vgapi's Makefile.am here.
-EXTRA_DIST += vgapi
-# if HAVE_OPENVG
-# SUBDIRS += vgapi
-# endif
-
 include $(top_srcdir)/install-lib-links.mk
index d783ed32f5a7d5a0ddabbcb0fd7734dcff7cd331..012a5c3f44c7b3703a05c5c0c495f22c078f53bf 100644 (file)
@@ -816,25 +816,8 @@ typedef int GLclampx;
 
         return header
 
-class VGAPIPrinter(ABIPrinter):
-    """OpenVG API Printer"""
-
-    def __init__(self, entries):
-        super(VGAPIPrinter, self).__init__(entries)
-
-        self.api_defines = ['VG_VGEXT_PROTOTYPES']
-        self.api_headers = ['"VG/openvg.h"', '"VG/vgext.h"']
-        self.api_call = 'VG_API_CALL'
-        self.api_entry = 'VG_API_ENTRY'
-        self.api_attrs = 'VG_API_EXIT'
-
-        self.prefix_lib = 'vg'
-        self.prefix_app = 'vega'
-        self.prefix_noop = 'noop'
-        self.prefix_warn = 'vg'
-
 def parse_args():
-    printers = ['vgapi', 'glapi', 'es1api', 'es2api', 'shared-glapi']
+    printers = ['glapi', 'es1api', 'es2api', 'shared-glapi']
     modes = ['lib', 'app']
 
     parser = OptionParser(usage='usage: %prog [options] <filename>')
@@ -853,7 +836,6 @@ def parse_args():
 
 def main():
     printers = {
-        'vgapi': VGAPIPrinter,
         'glapi': GLAPIPrinter,
         'es1api': ES1APIPrinter,
         'es2api': ES2APIPrinter,
diff --git a/src/mapi/vgapi/.gitignore b/src/mapi/vgapi/.gitignore
deleted file mode 100644 (file)
index 5becb99..0000000
+++ /dev/null
@@ -1 +0,0 @@
-vgapi_tmp.h
diff --git a/src/mapi/vgapi/Makefile.am b/src/mapi/vgapi/Makefile.am
deleted file mode 100644 (file)
index 45ef4b2..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright © 2012 Intel Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-AM_CPPFLAGS = \
-       $(DEFINES) \
-       $(SELINUX_CFLAGS) \
-       -I$(top_srcdir)/include \
-       -I$(top_srcdir)/src/mapi \
-       -DMAPI_ABI_HEADER=\"vgapi_tmp.h\"
-
-AM_CFLAGS = $(VISIBILITY_CFLAGS)
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = vg.pc
-
-VG_includedir = $(includedir)/VG
-VG_include_HEADERS = \
-       $(top_srcdir)/include/VG/openvg.h \
-       $(top_srcdir)/include/VG/vgext.h \
-       $(top_srcdir)/include/VG/vgplatform.h \
-       $(top_srcdir)/include/VG/vgu.h
-
-lib_LTLIBRARIES = libOpenVG.la
-
-TOP=$(top_srcdir)
-include ../Makefile.sources
-libOpenVG_la_SOURCES = $(MAPI_FILES) vgapi_tmp.h
-libOpenVG_la_LIBADD = $(VG_LIB_DEPS)
-libOpenVG_la_LDFLAGS = \
-       -no-undefined \
-       -version-number 1 \
-       $(GC_SECTIONS) \
-       $(LD_NO_UNDEFINED)
-
-vgapi_tmp.h: $(srcdir)/vgapi.csv $(top_srcdir)/src/mapi/mapi_abi.py
-       $(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(top_srcdir)/src/mapi/mapi_abi.py \
-               --printer vgapi --mode lib $< > $@
-
-EXTRA_DIST = SConscript vgapi.csv
-BUILT_SOURCES = vgapi_tmp.h
-CLEANFILES = $(BUILT_SOURCES)
-
-include $(top_srcdir)/install-lib-links.mk
diff --git a/src/mapi/vgapi/SConscript b/src/mapi/vgapi/SConscript
deleted file mode 100644 (file)
index 63102c1..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#######################################################################
-# SConscript for vgapi
-
-from sys import executable as python_cmd
-
-Import('*')
-
-env = env.Clone()
-
-vgapi_header, = env.CodeGenerate(
-    target = 'vgapi_tmp.h',
-    script = '../mapi_abi.py',
-    source = 'vgapi.csv',
-    command = python_cmd + ' $SCRIPT --printer vgapi --mode lib $SOURCE > $TARGET'
-)
-
-env.Append(CPPDEFINES = [
-    'MAPI_ABI_HEADER=\\"vgapi/vgapi_tmp.h\\"',
-    'MAPI_DLL_EXPORTS',
-    'KHRONOS_DLL_EXPORTS',
-])
-
-env.Append(CPPPATH = [
-    '#/include',
-    '#/src/mapi',
-    Dir('..'), # vgapi/vgapi_tmp.h build path
-])
-
-mapi_sources = [
-    'entry.c',
-    'mapi.c',
-    'stub.c',
-    'table.c',
-    'u_current.c',
-    'u_execmem.c',
-]
-
-vgapi_objects = []
-for s in mapi_sources:
-    o = env.SharedObject(s[:-2], '../' + s)
-    vgapi_objects.append(o)
-
-env.Depends(vgapi_objects, vgapi_header)
-
-# libOpenVG.dll
-env['LIBPREFIX'] = 'lib'
-env['SHLIBPREFIX'] = 'lib'
-
-openvg = env.SharedLibrary(
-    target = 'OpenVG',
-    source = vgapi_objects,
-)
-
-env.InstallSharedLibrary(openvg, version=(1, 0, 0))
-
-if env['platform'] == 'windows':
-    openvg = env.FindIxes(openvg, 'LIBPREFIX', 'LIBSUFFIX')
-else:
-    openvg = env.FindIxes(openvg, 'SHLIBPREFIX', 'SHLIBSUFFIX')
-
-Export(['openvg'])
diff --git a/src/mapi/vgapi/vg.pc.in b/src/mapi/vgapi/vg.pc.in
deleted file mode 100644 (file)
index 27a3f63..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=${prefix}
-libdir=@libdir@
-includedir=@includedir@
-
-Name: vg
-Description: Mesa OpenVG 1.0 library
-Requires.private:
-Version: @VERSION@
-Libs: -L${libdir} -lOpenVG
-Libs.private: @VG_PC_LIB_PRIV@
-Cflags: -I${includedir}
diff --git a/src/mapi/vgapi/vgapi.csv b/src/mapi/vgapi/vgapi.csv
deleted file mode 100644 (file)
index 5b11d06..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# This is the source file for the various generate structs/tables/functions
-# used in st/vega.
-
-# OpenVG 1.0
-void,                   AppendPath,                VGPath dstPath, VGPath srcPath
-void,                   AppendPathData,            VGPath dstPath, VGint numSegments, const VGubyte *pathSegments, const void *pathData
-VGImage,                ChildImage,                VGImage parent, VGint x, VGint y, VGint width, VGint height
-void,                   Clear,                     VGint x, VGint y, VGint width, VGint height
-void,                   ClearImage,                VGImage image, VGint x, VGint y, VGint width, VGint height
-void,                   ClearPath,                 VGPath path, VGbitfield capabilities
-void,                   ColorMatrix,               VGImage dst, VGImage src, const VGfloat *matrix
-void,                   Convolve,                  VGImage dst, VGImage src, VGint kernelWidth, VGint kernelHeight, VGint shiftX, VGint shiftY, const VGshort *kernel, VGfloat scale, VGfloat bias, VGTilingMode tilingMode
-void,                   CopyImage,                 VGImage dst, VGint dx, VGint dy, VGImage src, VGint sx, VGint sy, VGint width, VGint height, VGboolean dither
-void,                   CopyPixels,                VGint dx, VGint dy, VGint sx, VGint sy, VGint width, VGint height
-VGImage,                CreateImage,               VGImageFormat format, VGint width, VGint height, VGbitfield allowedQuality
-VGPaint,                CreatePaint,               void
-VGPath,                 CreatePath,                VGint pathFormat, VGPathDatatype datatype, VGfloat scale, VGfloat bias, VGint segmentCapacityHint, VGint coordCapacityHint, VGbitfield capabilities
-void,                   DestroyImage,              VGImage image
-void,                   DestroyPaint,              VGPaint paint
-void,                   DestroyPath,               VGPath path
-void,                   DrawImage,                 VGImage image
-void,                   DrawPath,                  VGPath path, VGbitfield paintModes
-void,                   Finish,                    void
-void,                   Flush,                     void
-void,                   GaussianBlur,              VGImage dst, VGImage src, VGfloat stdDeviationX, VGfloat stdDeviationY, VGTilingMode tilingMode
-VGuint,                 GetColor,                  VGPaint paint
-VGErrorCode,            GetError,                  void
-void,                   GetImageSubData,           VGImage image, void *data, VGint dataStride, VGImageFormat dataFormat, VGint x, VGint y, VGint width, VGint height
-void,                   GetMatrix,                 VGfloat *m
-VGPaint,                GetPaint,                  VGPaintMode paintMode
-VGint,                  GetParameterVectorSize,    VGHandle object, VGint paramType
-VGfloat,                GetParameterf,             VGHandle object, VGint paramType
-void,                   GetParameterfv,            VGHandle object, VGint paramType, VGint count, VGfloat *values
-VGint,                  GetParameteri,             VGHandle object, VGint paramType
-void,                   GetParameteriv,            VGHandle object, VGint paramType, VGint count, VGint *values
-VGImage,                GetParent,                 VGImage image 
-VGbitfield,             GetPathCapabilities,       VGPath path
-void,                   GetPixels,                 VGImage dst, VGint dx, VGint dy, VGint sx, VGint sy, VGint width, VGint height
-const VGubyte *,        GetString,                 VGStringID name
-VGint,                  GetVectorSize,             VGParamType type
-VGfloat,                Getf,                      VGParamType type
-void,                   Getfv,                     VGParamType type, VGint count, VGfloat *values
-VGint,                  Geti,                      VGParamType type
-void,                   Getiv,                     VGParamType type, VGint count, VGint *values
-VGHardwareQueryResult,  HardwareQuery,             VGHardwareQueryType key, VGint setting
-void,                   ImageSubData,              VGImage image, const void *data, VGint dataStride, VGImageFormat dataFormat, VGint x, VGint y, VGint width, VGint height
-VGboolean,              InterpolatePath,           VGPath dstPath, VGPath startPath, VGPath endPath, VGfloat amount
-void,                   LoadIdentity,              void
-void,                   LoadMatrix,                const VGfloat *m
-void,                   Lookup,                    VGImage dst, VGImage src, const VGubyte *redLUT, const VGubyte *greenLUT, const VGubyte *blueLUT, const VGubyte *alphaLUT, VGboolean outputLinear, VGboolean outputPremultiplied
-void,                   LookupSingle,              VGImage dst, VGImage src, const VGuint *lookupTable, VGImageChannel sourceChannel, VGboolean outputLinear, VGboolean outputPremultiplied
-void,                   Mask,                      VGHandle mask, VGMaskOperation operation, VGint x, VGint y, VGint width, VGint height
-void,                   ModifyPathCoords,          VGPath dstPath, VGint startIndex, VGint numSegments, const void *pathData
-void,                   MultMatrix,                const VGfloat *m
-void,                   PaintPattern,              VGPaint paint, VGImage pattern
-void,                   PathBounds,                VGPath path, VGfloat *minX, VGfloat *minY, VGfloat *width, VGfloat *height
-VGfloat,                PathLength,                VGPath path, VGint startSegment, VGint numSegments
-void,                   PathTransformedBounds,     VGPath path, VGfloat *minX, VGfloat *minY, VGfloat *width, VGfloat *height
-void,                   PointAlongPath,            VGPath path, VGint startSegment, VGint numSegments, VGfloat distance, VGfloat *x, VGfloat *y, VGfloat *tangentX, VGfloat *tangentY
-void,                   ReadPixels,                void *data, VGint dataStride, VGImageFormat dataFormat, VGint sx, VGint sy, VGint width, VGint height
-void,                   RemovePathCapabilities,    VGPath path, VGbitfield capabilities
-void,                   Rotate,                    VGfloat angle
-void,                   Scale,                     VGfloat sx, VGfloat sy
-void,                   SeparableConvolve,         VGImage dst, VGImage src, VGint kernelWidth, VGint kernelHeight, VGint shiftX, VGint shiftY, const VGshort *kernelX, const VGshort *kernelY, VGfloat scale, VGfloat bias, VGTilingMode tilingMode
-void,                   SetColor,                  VGPaint paint, VGuint rgba
-void,                   SetPaint,                  VGPaint paint, VGbitfield paintModes
-void,                   SetParameterf,             VGHandle object, VGint paramType, VGfloat value
-void,                   SetParameterfv,            VGHandle object, VGint paramType, VGint count, const VGfloat *values
-void,                   SetParameteri,             VGHandle object, VGint paramType, VGint value
-void,                   SetParameteriv,            VGHandle object, VGint paramType, VGint count, const VGint *values
-void,                   SetPixels,                 VGint dx, VGint dy, VGImage src, VGint sx, VGint sy, VGint width, VGint height
-void,                   Setf,                      VGParamType type, VGfloat value
-void,                   Setfv,                     VGParamType type, VGint count, const VGfloat *values
-void,                   Seti,                      VGParamType type, VGint value
-void,                   Setiv,                     VGParamType type, VGint count, const VGint *values
-void,                   Shear,                     VGfloat shx, VGfloat shy
-void,                   TransformPath,             VGPath dstPath, VGPath srcPath
-void,                   Translate,                 VGfloat tx, VGfloat ty
-void,                   WritePixels,               const void *data, VGint dataStride, VGImageFormat dataFormat, VGint dx, VGint dy, VGint width, VGint height
-
-## OpenVG 1.1
-void,                   ClearGlyph,                VGFont font, VGuint glyphIndex
-void,                   CopyMask,                  VGMaskLayer maskLayer, VGint dx, VGint dy, VGint sx, VGint sy, VGint width, VGint height
-VGFont,                 CreateFont,                VGint glyphCapacityHint
-VGMaskLayer,            CreateMaskLayer,           VGint width, VGint height
-void,                   DestroyFont,               VGFont font
-void,                   DestroyMaskLayer,          VGMaskLayer maskLayer
-void,                   DrawGlyph,                 VGFont font, VGuint glyphIndex, VGbitfield paintModes, VGboolean allowAutoHinting
-void,                   DrawGlyphs,                VGFont font, VGint glyphCount, const VGuint *glyphIndices, const VGfloat *adjustments_x, const VGfloat *adjustments_y, VGbitfield paintModes, VGboolean allowAutoHinting
-void,                   FillMaskLayer,             VGMaskLayer maskLayer, VGint x, VGint y, VGint width, VGint height, VGfloat value
-void,                   RenderToMask,              VGPath path, VGbitfield paintModes, VGMaskOperation operation
-void,                   SetGlyphToImage,           VGFont font, VGuint glyphIndex, VGImage image, const VGfloat glyphOrigin[2], const VGfloat escapement[2]
-void,                   SetGlyphToPath,            VGFont font, VGuint glyphIndex, VGPath path, VGboolean isHinted, const VGfloat glyphOrigin[2], const VGfloat escapement[2]