Changeset 561 for trunk/src/opengl/util


Ignore:
Timestamp:
Feb 11, 2010, 11:19:06 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.1 sources.

Location:
trunk
Files:
4 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/opengl/util/composition_mode_colorburn.glsl

    r2 r561  
    66{
    77    vec4 result;
    8     result.rgb = mix(src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a),
    9                      src.a * (src.rgb * dst.a + dst.rgb * src.a - src.a * dst.a) / max(src.rgb, 0.00001) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a),
     8    result.rgb = mix(src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a),
     9                     src.a * (src.rgb * dst.a + dst.rgb * src.a - src.a * dst.a) / max(src.rgb, 0.00001) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a),
    1010                     step(src.a * dst.a, src.rgb * dst.a + dst.rgb * src.a));
    1111    result.a = src.a + dst.a - src.a * dst.a;
  • trunk/src/opengl/util/composition_mode_colordodge.glsl

    r2 r561  
    66{
    77    vec4 result;
    8     vec3 temp = src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a);
    9     result.rgb = mix(dst.rgb * src.a / max(1 - src.rgb / max(src.a, 0.000001), 0.000001) + temp,
     8    vec3 temp = src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a);
     9    result.rgb = mix(dst.rgb * src.a / max(1.0 - src.rgb / max(src.a, 0.000001), 0.000001) + temp,
    1010                     src.a * dst.a + temp,
    1111                     step(src.a * dst.a, src.rgb * dst.a + dst.rgb * src.a));
  • trunk/src/opengl/util/composition_mode_darken.glsl

    r2 r561  
    44{
    55    vec4 result;
    6     result.rgb = min(src.rgb * dst.a, dst.rgb * src.a) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a);
     6    result.rgb = min(src.rgb * dst.a, dst.rgb * src.a) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a);
    77    result.a = src.a + dst.a - src.a * dst.a;
    88    return result;
  • trunk/src/opengl/util/composition_mode_difference.glsl

    r2 r561  
    44{
    55    vec4 result;
    6     result.rgb = src.rgb + dst.rgb - 2 * min(src.rgb * dst.a, dst.rgb * src.a);
     6    result.rgb = src.rgb + dst.rgb - 2.0 * min(src.rgb * dst.a, dst.rgb * src.a);
    77    result.a = src.a + dst.a - src.a * dst.a;
    88    return result;
  • trunk/src/opengl/util/composition_mode_exclusion.glsl

    r2 r561  
    44{
    55    vec4 result;
    6     result.rgb = (src.rgb * dst.a + dst.rgb * src.a - 2 * src.rgb * dst.rgb) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a);
     6    result.rgb = (src.rgb * dst.a + dst.rgb * src.a - 2.0 * src.rgb * dst.rgb) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a);
    77    result.a = src.a + dst.a - src.a * dst.a;
    88    return result;
  • trunk/src/opengl/util/composition_mode_hardlight.glsl

    r2 r561  
    66{
    77    vec4 result;
    8     result.rgb = mix(2 * src.rgb * dst.rgb + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a),
    9                      src.a * dst.a - 2 * (dst.a - dst.rgb) * (src.a - src.rgb) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a),
    10                      step(src.a, 2 * src.rgb));
     8    result.rgb = mix(2.0 * src.rgb * dst.rgb + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a),
     9                     src.a * dst.a - 2.0 * (dst.a - dst.rgb) * (src.a - src.rgb) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a),
     10                     step(src.a, 2.0 * src.rgb));
    1111    result.a = src.a + dst.a - src.a * dst.a;
    1212
  • trunk/src/opengl/util/composition_mode_lighten.glsl

    r2 r561  
    44{
    55    vec4 result;
    6     result.rgb = max(src.rgb * dst.a, dst.rgb * src.a) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a);
     6    result.rgb = max(src.rgb * dst.a, dst.rgb * src.a) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a);
    77    result.a = src.a + dst.a - src.a * dst.a;
    88    return result;
  • trunk/src/opengl/util/composition_mode_multiply.glsl

    r2 r561  
    44{
    55    vec4 result;
    6     result.rgb = src.rgb * dst.rgb + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a);
     6    result.rgb = src.rgb * dst.rgb + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a);
    77    result.a = src.a + dst.a - src.a * dst.a;
    88    return result;
  • trunk/src/opengl/util/composition_mode_overlay.glsl

    r2 r561  
    66{
    77    vec4 result;
    8     result.rgb = mix(2 * src.rgb * dst.rgb + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a),
    9                      src.a * dst.a - 2 * (dst.a - dst.rgb) * (src.a - src.rgb) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a),
    10                      step(dst.a, 2 * dst.rgb));
     8    result.rgb = mix(2.0 * src.rgb * dst.rgb + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a),
     9                     src.a * dst.a - 2.0 * (dst.a - dst.rgb) * (src.a - src.rgb) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a),
     10                     step(dst.a, 2.0 * dst.rgb));
    1111    result.a = src.a + dst.a - src.a * dst.a;
    1212    return result;
  • trunk/src/opengl/util/composition_mode_softlight.glsl

    r2 r561  
    1 // Dca' = 2.Sca < Sa ?
    2 //        Dca.(Sa - (1 - Dca/Da).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa) :
    3 //          (8.Dca <= Da ?
    4 //           Dca.(Sa - (1 - Dca/Da).(2.Sca - Sa).(3 - 8.Dca/Da)) + Sca.(1 - Da) + Dca.(1 - Sa) :
    5 //           (Dca.Sa + ((Dca/Da)^(0.5).Da - Dca).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa))
     1// if 2.Sca <= Sa
     2//     Dca' = Dca.(Sa + (2.Sca - Sa).(1 - Dca/Da)) + Sca.(1 - Da) + Dca.(1 - Sa)
     3// otherwise if 2.Sca > Sa and 4.Dca <= Da
     4//     Dca' = Dca.Sa + Da.(2.Sca - Sa).(4.Dca/Da.(4.Dca/Da + 1).(Dca/Da - 1) + 7.Dca/Da) + Sca.(1 - Da) + Dca.(1 - Sa)
     5// otherwise if 2.Sca > Sa and 4.Dca > Da
     6//     Dca' = Dca.Sa + Da.(2.Sca - Sa).((Dca/Da)^0.5 - Dca/Da) + Sca.(1 - Da) + Dca.(1 - Sa)
    67// Da'  = Sa + Da - Sa.Da
     8
    79vec4 composite(vec4 src, vec4 dst)
    810{
    911    vec4 result;
    1012    float da = max(dst.a, 0.00001);
    11     result.rgb = mix(dst.rgb * (src.a - (1 - dst.rgb / da) * (2 * src.rgb - src.a)),
    12                      mix(dst.rgb * (src.a - (1 - dst.rgb / da) * (2 * src.rgb - src.a) * (3 - 8 * dst.rgb / da)),
    13                          (dst.rgb * src.a + (sqrt(dst.rgb / da) * dst.a - dst.rgb) * (2 * src.rgb - src.a)),
    14                          step(dst.a, 8 * dst.rgb)),
    15                      step(src.a, 2 * src.rgb)) + src.rgb * (1 - dst.a) + dst.rgb * (1 - src.a);
     13    vec3 dst_np = dst.rgb / da;
     14    result.rgb = mix(dst.rgb * (src.a + (2.0 * src.rgb - src.a) * (1.0 - dst_np)),
     15                     mix(dst.rgb * src.a + dst.a * (2.0 * src.rgb - src.a) * ((16.0 * dst_np - 12.0) * dst_np + 3.0) * dst_np,
     16                         dst.rgb * src.a + dst.a * (2.0 * src.rgb - src.a) * (sqrt(dst_np) - dst_np),
     17                         step(dst.a, 4.0 * dst.rgb)),
     18                     step(src.a, 2.0 * src.rgb))
     19                 + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a);
    1620    result.a = src.a + dst.a - src.a * dst.a;
    1721    return result;
  • trunk/src/opengl/util/conical_brush.glsl

    r2 r561  
    2121    if (abs(A.y) == abs(A.x))
    2222        A.y += 0.002;
    23     float t = (atan2(-A.y, A.x) + angle) / (2.0 * M_PI);
     23    float t = (atan(-A.y, A.x) + angle) / (2.0 * M_PI);
    2424    float val = t - floor(t);
    2525    return texture1D(palette, val);
  • trunk/src/opengl/util/ellipse_aa.glsl

    r2 r561  
    1 #include "ellipse_functions.glsl"
     1uniform vec3 inv_matrix_m0;
     2uniform vec3 inv_matrix_m1;
     3uniform vec3 inv_matrix_m2;
     4
     5uniform vec2 ellipse_offset;
     6
     7// ellipse equation
     8
     9// s^2/a^2 + t^2/b^2 = 1
     10//
     11// implicit equation:
     12// g(s,t) = 1 - s^2/r_s^2 - t^2/r_t^2
     13
     14// distance from ellipse:
     15// grad = [dg/dx dg/dy]
     16// d(s, t) ~= g(s, t) / |grad|
     17
     18// dg/dx = dg/ds * ds/dx + dg/dt * dt/dx
     19// dg/dy = dg/ds * ds/dy + dg/dt * dt/dy
     20
     21float ellipse_aa()
     22{
     23    mat3 mat;
     24
     25    mat[0] = inv_matrix_m0;
     26    mat[1] = inv_matrix_m1;
     27    mat[2] = inv_matrix_m2;
     28
     29    vec3 hcoords = mat * vec3(gl_FragCoord.xy + ellipse_offset, 1);
     30    float inv_w = 1.0 / hcoords.z;
     31    vec2 st = hcoords.xy * inv_w;
     32
     33    vec4 xy = vec4(mat[0].xy, mat[1].xy);
     34    vec2 h = vec2(mat[0].z, mat[1].z);
     35
     36    vec4 dstdxy = (xy.xzyw - h.xyxy * st.xxyy) * inv_w;
     37
     38    //dstdxy.x = (mat[0].x - mat[0].z * st.x) * inv_w; // ds/dx
     39    //dstdxy.y = (mat[1].x - mat[1].z * st.x) * inv_w; // ds/dy
     40    //dstdxy.z = (mat[0].y - mat[0].z * st.y) * inv_w; // dt/dx
     41    //dstdxy.w = (mat[1].y - mat[1].z * st.y) * inv_w; // dt/dy
     42
     43    vec2 inv_r = gl_TexCoord[0].xy;
     44    vec2 n = st * inv_r;
     45    float g = 1.0 - dot(n, n);
     46
     47    vec2 dgdst = -2.0 * n * inv_r;
     48
     49    vec2 grad = vec2(dot(dgdst, dstdxy.xz),
     50                     dot(dgdst, dstdxy.yw));
     51
     52    return smoothstep(-0.5, 0.5, g * inversesqrt(dot(grad, grad)));
     53}
    254
    355void main()
    456{
    5     gl_FragColor = ellipse_aa();
     57    gl_FragColor = ellipse_aa().xxxx;
    658}
  • trunk/src/opengl/util/fragmentprograms_p.h

    r2 r561  
    22**
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    4 ** Contact: Qt Software Information (qt-info@nokia.com)
     4** All rights reserved.
     5** Contact: Nokia Corporation (qt-info@nokia.com)
    56**
    67** This file is part of the QtOpenGL module of the Qt Toolkit.
     
    2122** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    2223**
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
     24** In addition, as a special exception, Nokia gives you certain additional
     25** rights.  These rights are described in the Nokia Qt LGPL Exception
     26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    2727**
    2828** GNU General Public License Usage
     
    3434** met: http://www.gnu.org/copyleft/gpl.html.
    3535**
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at qt-sales@nokia.com.
     36** If you have questions regarding the use of this file, please contact
     37** Nokia at qt-info@nokia.com.
    3838** $QT_END_LICENSE$
    3939**
    4040****************************************************************************/
    41 #ifndef FRAGMENTPROGRAMS_H
    42 #define FRAGMENTPROGRAMS_H
     41
     42#ifndef FRAGMENTPROGRAMS_P_H
     43#define FRAGMENTPROGRAMS_P_H
    4344
    4445//
     
    7273    VAR_FMP,
    7374    VAR_INV_MATRIX_M0,
    74     VAR_ANGLE,
     75    VAR_ANGLE
    7576};
    7677
     
    8182    FRAGMENT_PROGRAM_BRUSH_LINEAR,
    8283    FRAGMENT_PROGRAM_BRUSH_TEXTURE,
    83     FRAGMENT_PROGRAM_BRUSH_PATTERN,
     84    FRAGMENT_PROGRAM_BRUSH_PATTERN
    8485};
    8586
     
    110111    COMPOSITION_MODES_EXCLUSION_NOMASK,
    111112    COMPOSITION_MODE_BLEND_MODE_MASK,
    112     COMPOSITION_MODE_BLEND_MODE_NOMASK,
     113    COMPOSITION_MODE_BLEND_MODE_NOMASK
    113114};
    114115
    115116enum FragmentMaskType {
    116117    FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
    117     FRAGMENT_PROGRAM_MASK_ELLIPSE_AA,
     118    FRAGMENT_PROGRAM_MASK_ELLIPSE_AA
    118119};
    119120
     
    132133    "TEMP R3;\n"
    133134    "TEMP R4;\n"
    134     "ADD R4.x, fragment.position, c[0];\n"
     135    "ADD R3.z, fragment.position.x, c[0].x;\n"
    135136    "ADD R0.y, fragment.position, -c[0].x;\n"
    136     "MAX R2.x, R0.y, fragment.texcoord[0].y;\n"
     137    "MAX R4.x, fragment.texcoord[0].y, R0.y;\n"
    137138    "ADD R0.x, fragment.position.y, c[0];\n"
    138     "MIN R2.y, R0.x, fragment.texcoord[0].x;\n"
    139     "ADD R3.x, fragment.position, -c[0];\n"
    140     "ADD R1.zw, -fragment.texcoord[0], -fragment.texcoord[0];\n"
    141     "MOV R3.y, R4.x;\n"
    142     "MOV R0.yw, R2.x;\n"
    143     "MOV R0.xz, R2.y;\n"
     139    "MIN R3.w, R0.x, fragment.texcoord[0].x;\n"
     140    "ADD R2.z, fragment.position.x, -c[0].x;\n"
     141    "MOV R2.w, R3.z;\n"
     142    "MOV R0.yw, R4.x;\n"
     143    "MOV R0.xz, R3.w;\n"
    144144    "MAD R0, fragment.texcoord[1].xxzz, R0, fragment.texcoord[1].yyww;\n"
    145     "MAD R1.xy, fragment.position.x, c[0].y, -R0.zwzw;\n"
    146     "MOV R0.w, R1.x;\n"
    147     "MOV R1.x, R0.y;\n"
    148     "MOV R0.z, R0.x;\n"
    149     "SGE R2.zw, R1.xyxy, R0;\n"
    150     "MAX R0.xy, R0.zwzw, R1;\n"
    151     "MIN R0.zw, R0, R1.xyxy;\n"
    152     "MAD R2.zw, R2, R1, fragment.texcoord[0];\n"
    153     "ADD R1, R3.xyxy, -R0.zzww;\n"
    154     "MAD R1, R1, R2.zzww, R2.x;\n"
    155     "ADD R3.zw, R0.xyxy, R0;\n"
    156     "ADD R3.y, R2, -R2.x;\n"
    157     "ADD R2.zw, R1.xyyw, -R2.x;\n"
    158     "ADD R4.zw, R4.x, -R0;\n"
    159     "MUL R2.zw, R4, R2;\n"
    160     "ADD R4.zw, R1.xyyw, R1.xyxz;\n"
    161     "ADD R1.xz, R2.y, -R1;\n"
    162     "MAD R2.zw, -R2, c[0].x, R3.y;\n"
    163     "MAD R3.zw, R3, c[0].x, -R3.x;\n"
    164     "MAD R3.zw, R3, R3.y, -R2;\n"
    165     "ADD R1.y, R4.x, -R3.x;\n"
    166     "MAD R4.zw, -R4, c[0].x, R2.y;\n"
    167     "MUL R4.zw, R4, R1.y;\n"
    168     "ADD R1.yw, R0.xxzy, -R3.x;\n"
    169     "MUL R1.xy, R1.xzzw, R1.ywzw;\n"
    170     "MAD R1.zw, R1.xyxy, c[0].x, -R4;\n"
    171     "SGE R1.xy, R4.x, R0;\n"
    172     "MUL R1.zw, R1.xyxy, R1;\n"
    173     "MAD R1.xy, R1, R3.zwzw, R2.zwzw;\n"
    174     "SGE R2.zw, R3.x, R0;\n"
    175     "ADD R1.zw, R4, R1;\n"
    176     "ADD R1.zw, R1, -R1.xyxy;\n"
    177     "MAD R1.xy, R2.zwzw, R1.zwzw, R1;\n"
    178     "ADD R1.xy, R1, -R3.y;\n"
    179     "SGE R0.zw, R4.x, R0;\n"
    180     "MAD R0.zw, R0, R1.xyxy, R3.y;\n"
    181     "SGE R0.xy, R0, R3.x;\n"
    182     "MUL R0.xy, R0.zwzw, R0;\n"
    183     "ADD R0.x, R3.y, -R0;\n"
    184     "SGE R0.z, R2.y, R2.x;\n"
    185     "ADD R0.x, R0, -R0.y;\n"
     145    "MAD R0.zw, fragment.position.x, c[0].y, -R0;\n"
     146    "MOV R2.x, R0;\n"
     147    "MOV R2.y, R0.z;\n"
     148    "MOV R1.w, R0;\n"
     149    "MOV R1.z, R0.y;\n"
     150    "MIN R1.xy, R2, R1.zwzw;\n"
     151    "SGE R0.xy, R1.zwzw, R2;\n"
     152    "ADD R0.zw, -fragment.texcoord[0], -fragment.texcoord[0];\n"
     153    "MAD R3.xy, R0, R0.zwzw, fragment.texcoord[0].zwzw;\n"
     154    "ADD R0, -R1.xxyy, R2.zwzw;\n"
     155    "MAD R0, R0, R3.xxyy, R4.x;\n"
     156    "ADD R3.xy, R0.ywzw, R0.xzzw;\n"
     157    "ADD R4.zw, R3.w, -R0.xyxz;\n"
     158    "ADD R0.zw, -R4.x, R0.xyyw;\n"
     159    "ADD R0.xy, R3.z, -R1;\n"
     160    "MAX R1.zw, R2.xyxy, R1;\n"
     161    "MUL R0.xy, R0, R0.zwzw;\n"
     162    "MAD R3.xy, -R3, c[0].x, R3.w;\n"
     163    "ADD R2.w, R3.z, -R2.z;\n"
     164    "MUL R2.xy, R3, R2.w;\n"
     165    "ADD R2.w, R3, -R4.x;\n"
     166    "ADD R3.xy, -R2.z, R1.zwzw;\n"
     167    "MUL R3.xy, R4.zwzw, R3;\n"
     168    "ADD R4.zw, R1.xyxy, R1;\n"
     169    "MAD R0.zw, R4, c[0].x, -R2.z;\n"
     170    "MAD R0.xy, -R0, c[0].x, R2.w;\n"
     171    "MAD R4.zw, R0, R2.w, -R0.xyxy;\n"
     172    "SGE R0.zw, R3.z, R1;\n"
     173    "MAD R0.xy, R0.zwzw, R4.zwzw, R0;\n"
     174    "MAD R3.xy, R3, c[0].x, -R2;\n"
     175    "MAD R0.zw, R0, R3.xyxy, R2.xyxy;\n"
     176    "ADD R2.xy, R0.zwzw, -R0;\n"
     177    "SGE R0.zw, R2.z, R1.xyxy;\n"
     178    "MAD R0.xy, R0.zwzw, R2, R0;\n"
     179    "SGE R0.zw, R1, R2.z;\n"
     180    "ADD R0.xy, R0, -R2.w;\n"
     181    "SGE R1.xy, R3.z, R1;\n"
     182    "MAD R0.xy, R1, R0, R2.w;\n"
     183    "MAD R0.x, -R0, R0.z, R2.w;\n"
     184    "SGE R0.z, R3.w, R4.x;\n"
     185    "MAD R0.x, -R0.y, R0.w, R0;\n"
    186186    "MUL result.color, R0.x, R0.z;\n"
    187187    "END\n"
     
    196196    "TEMP R1;\n"
    197197    "TEMP R2;\n"
    198     "ADD R0.xy, fragment.position, c[0];\n"
    199     "MUL R1.xyz, R0.y, c[2];\n"
    200     "MAD R0.xyz, R0.x, c[1], R1;\n"
    201     "ADD R0.xyz, R0, c[3];\n"
     198    "ADD R0.xy, fragment.position, c[3];\n"
     199    "MUL R1.xyz, R0.y, c[1];\n"
     200    "MAD R0.xyz, R0.x, c[0], R1;\n"
     201    "ADD R0.xyz, R0, c[2];\n"
    202202    "RCP R2.z, R0.z;\n"
    203203    "MUL R0.zw, R0.xyxy, R2.z;\n"
    204204    "MUL R2.xy, R0.zwzw, fragment.texcoord[0];\n"
    205     "MOV R1.xy, c[1];\n"
    206     "MOV R1.zw, c[2].xyxy;\n"
    207     "MOV R0.x, c[1].z;\n"
    208     "MOV R0.y, c[2].z;\n"
    209     "MAD R0, -R0.xyxy, R0.zzww, R1.xzyw;\n"
     205    "MOV R1.xy, c[0];\n"
     206    "MOV R1.zw, c[1].xyxy;\n"
     207    "MOV R0.x, c[0].z;\n"
     208    "MOV R0.y, c[1].z;\n"
     209    "MAD R0, R0.zzww, -R0.xyxy, R1.xzyw;\n"
    210210    "MUL R1.xy, R2, fragment.texcoord[0];\n"
    211     "MUL R0, R0, R2.z;\n"
     211    "MUL R0, R2.z, R0;\n"
    212212    "MUL R1.xy, R1, c[4].x;\n"
    213213    "MUL R1.zw, R1.xyxy, R0.xyxz;\n"
    214     "MUL R0.xy, R1, R0.ywzw;\n"
    215     "ADD R0.w, R0.x, R0.y;\n"
    216     "MUL R0.xy, R2, R2;\n"
     214    "MUL R0.zw, R1.xyxy, R0.xyyw;\n"
     215    "ADD R0.y, R0.z, R0.w;\n"
     216    "ADD R0.x, R1.z, R1.w;\n"
     217    "MUL R0.xy, R0, R0;\n"
    217218    "ADD R0.x, R0, R0.y;\n"
    218     "ADD R0.z, R1, R1.w;\n"
    219     "MUL R0.zw, R0, R0;\n"
    220     "ADD R0.y, R0.z, R0.w;\n"
    221     "RSQ R0.y, R0.y;\n"
    222     "ADD R0.x, -R0, c[4].y;\n"
    223     "MAD_SAT R0.x, R0.y, R0, -c[4].z;\n"
     219    "MUL R0.zw, R2.xyxy, R2.xyxy;\n"
     220    "ADD R0.z, R0, R0.w;\n"
     221    "ADD R0.y, -R0.z, c[4];\n"
     222    "RSQ R0.x, R0.x;\n"
     223    "MAD_SAT R0.x, R0, R0.y, -c[4].z;\n"
    224224    "MUL R0.y, -R0.x, c[4].w;\n"
    225225    "ADD R0.y, R0, c[5].x;\n"
     
    231231static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
    232232    "!!ARBfp1.0\n"
    233     "PARAM c[7] = { program.local[0..3],\n"
    234     "           { 1 },\n"
    235     "           program.local[5..6] };\n"
     233    "PARAM c[7] = { program.local[0..5],\n"
     234    "           { 1 } };\n"
    236235    "TEMP R0;\n"
    237236    "TEMP R1;\n"
     
    239238    "TEMP R3;\n"
    240239    "MUL R0.xy, fragment.position, c[3];\n"
    241     "TEX R1, R0, texture[0], 2D;\n"
    242     "MUL R0.xyz, R1, c[6].y;\n"
    243     "MUL R2.xyz, R0, fragment.color.primary.w;\n"
    244     "MUL R0.xyz, fragment.color.primary, c[6].x;\n"
    245     "MAD R2.xyz, R0, R1.w, R2;\n"
    246     "ADD R3.xy, fragment.position, c[0];\n"
    247     "ADD R0.w, -R1, c[4].x;\n"
    248     "MUL R0.xyz, fragment.color.primary, c[5].y;\n"
    249     "MAD R2.xyz, R0, R0.w, R2;\n"
    250     "MUL R0.xyz, R1, c[5].z;\n"
    251     "ADD R0.w, -fragment.color.primary, c[4].x;\n"
    252     "MAD R2.xyz, R0, R0.w, R2;\n"
    253     "ADD R0.y, -R1.w, c[4].x;\n"
    254     "MUL R0.x, fragment.color.primary.w, R1.w;\n"
    255     "MUL R0.y, fragment.color.primary.w, R0;\n"
    256     "MUL R0.z, R1.w, R0.w;\n"
    257     "DP3 R2.w, R0, c[5];\n"
    258     "MUL R3.xy, R3, c[1];\n"
    259     "TEX R0, R3, texture[1], 2D;\n"
    260     "ADD R2, R2, -R1;\n"
    261     "DP4 R0.x, R0, c[2];\n"
    262     "MAD result.color, R0.x, R2, R1;\n"
     240    "TEX R0, R0, texture[0], 2D;\n"
     241    "MUL R1.xyz, R0, c[0].y;\n"
     242    "MUL R2.xyz, fragment.color.primary.w, R1;\n"
     243    "MUL R1.xyz, fragment.color.primary, c[0].x;\n"
     244    "MAD R2.xyz, R0.w, R1, R2;\n"
     245    "ADD R3.xy, fragment.position, c[4];\n"
     246    "ADD R1.w, -R0, c[6].x;\n"
     247    "MUL R1.xyz, fragment.color.primary, c[1].y;\n"
     248    "MAD R2.xyz, R1.w, R1, R2;\n"
     249    "MUL R1.xyz, R0, c[1].z;\n"
     250    "ADD R2.w, -fragment.color.primary, c[6].x;\n"
     251    "MAD R2.xyz, R2.w, R1, R2;\n"
     252    "MUL R1.z, R0.w, R2.w;\n"
     253    "MUL R1.x, fragment.color.primary.w, R0.w;\n"
     254    "MUL R1.y, fragment.color.primary.w, R1.w;\n"
     255    "DP3 R2.w, R1, c[1];\n"
     256    "MUL R3.xy, R3, c[2];\n"
     257    "TEX R1, R3, texture[1], 2D;\n"
     258    "ADD R2, R2, -R0;\n"
     259    "DP4 R1.x, R1, c[5];\n"
     260    "MAD result.color, R1.x, R2, R0;\n"
    263261    "END\n"
    264262    ;
     
    271269    "TEMP R1;\n"
    272270    "TEMP R2;\n"
    273     "MUL R0.xy, fragment.position, c[3];\n"
    274     "TEX R1, R0, texture[0], 2D;\n"
    275     "ADD R0.x, -R1.w, c[4];\n"
    276     "MUL R0.xyz, fragment.color.primary, R0.x;\n"
    277     "MAD R0.xyz, fragment.color.primary, R1, R0;\n"
    278     "ADD R0.w, -fragment.color.primary, c[4].x;\n"
    279     "MAD R2.xyz, R1, R0.w, R0;\n"
    280     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    281     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    282     "ADD R0.xy, fragment.position, c[0];\n"
    283     "MUL R0.xy, R0, c[1];\n"
    284     "TEX R0, R0, texture[1], 2D;\n"
    285     "ADD R2, R2, -R1;\n"
    286     "DP4 R0.x, R0, c[2];\n"
    287     "MAD result.color, R0.x, R2, R1;\n"
     271    "MUL R0.xy, fragment.position, c[1];\n"
     272    "TEX R0, R0, texture[0], 2D;\n"
     273    "ADD R1.x, -R0.w, c[4];\n"
     274    "MUL R1.xyz, fragment.color.primary, R1.x;\n"
     275    "MAD R1.xyz, fragment.color.primary, R0, R1;\n"
     276    "ADD R1.w, -fragment.color.primary, c[4].x;\n"
     277    "MAD R2.xyz, R0, R1.w, R1;\n"
     278    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
     279    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
     280    "ADD R1.xy, fragment.position, c[2];\n"
     281    "MUL R1.xy, R1, c[0];\n"
     282    "TEX R1, R1, texture[1], 2D;\n"
     283    "ADD R2, R2, -R0;\n"
     284    "DP4 R1.x, R1, c[3];\n"
     285    "MAD result.color, R1.x, R2, R0;\n"
    288286    "END\n"
    289287    ;
     
    295293    "TEMP R1;\n"
    296294    "TEMP R2;\n"
    297     "MUL R0.xy, fragment.position, c[3];\n"
    298     "TEX R1, R0, texture[0], 2D;\n"
    299     "ADD R0.xy, fragment.position, c[0];\n"
    300     "ADD R2, fragment.color.primary, R1;\n"
    301     "MUL R0.xy, R0, c[1];\n"
    302     "MAD R2, -fragment.color.primary, R1, R2;\n"
    303     "TEX R0, R0, texture[1], 2D;\n"
    304     "ADD R2, R2, -R1;\n"
    305     "DP4 R0.x, R0, c[2];\n"
    306     "MAD result.color, R0.x, R2, R1;\n"
     295    "MUL R0.xy, fragment.position, c[1];\n"
     296    "TEX R0, R0, texture[0], 2D;\n"
     297    "ADD R1.xy, fragment.position, c[2];\n"
     298    "ADD R2, fragment.color.primary, R0;\n"
     299    "MUL R1.xy, R1, c[0];\n"
     300    "MAD R2, -fragment.color.primary, R0, R2;\n"
     301    "TEX R1, R1, texture[1], 2D;\n"
     302    "ADD R2, R2, -R0;\n"
     303    "DP4 R1.x, R1, c[3];\n"
     304    "MAD result.color, R1.x, R2, R0;\n"
    307305    "END\n"
    308306    ;
     
    316314    "TEMP R2;\n"
    317315    "TEMP R3;\n"
    318     "MUL R0.xy, fragment.position, c[3];\n"
     316    "MUL R0.xy, fragment.position, c[1];\n"
    319317    "TEX R1, R0, texture[0], 2D;\n"
    320318    "ADD R0.w, -R1, c[4].y;\n"
     
    337335    "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    338336    "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    339     "ADD R0.xy, fragment.position, c[0];\n"
    340     "MUL R0.xy, R0, c[1];\n"
     337    "ADD R0.xy, fragment.position, c[2];\n"
     338    "MUL R0.xy, R0, c[0];\n"
    341339    "TEX R0, R0, texture[1], 2D;\n"
    342340    "ADD R2, R2, -R1;\n"
    343     "DP4 R0.x, R0, c[2];\n"
     341    "DP4 R0.x, R0, c[3];\n"
    344342    "MAD result.color, R0.x, R2, R1;\n"
    345343    "END\n"
     
    353351    "TEMP R1;\n"
    354352    "TEMP R2;\n"
    355     "MUL R0.xy, fragment.position, c[3];\n"
    356     "TEX R1, R0, texture[0], 2D;\n"
    357     "MUL R2.xyz, R1, fragment.color.primary.w;\n"
    358     "MUL R0.xyz, fragment.color.primary, R1.w;\n"
    359     "MIN R0.xyz, R0, R2;\n"
    360     "ADD R0.w, -R1, c[4].x;\n"
    361     "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
    362     "ADD R0.w, -fragment.color.primary, c[4].x;\n"
    363     "MAD R2.xyz, R1, R0.w, R0;\n"
    364     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    365     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    366     "ADD R0.xy, fragment.position, c[0];\n"
    367     "MUL R0.xy, R0, c[1];\n"
    368     "TEX R0, R0, texture[1], 2D;\n"
    369     "ADD R2, R2, -R1;\n"
    370     "DP4 R0.x, R0, c[2];\n"
    371     "MAD result.color, R0.x, R2, R1;\n"
     353    "MUL R0.xy, fragment.position, c[1];\n"
     354    "TEX R0, R0, texture[0], 2D;\n"
     355    "MUL R2.xyz, fragment.color.primary.w, R0;\n"
     356    "MUL R1.xyz, fragment.color.primary, R0.w;\n"
     357    "MIN R1.xyz, R1, R2;\n"
     358    "ADD R1.w, -R0, c[4].x;\n"
     359    "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
     360    "ADD R1.w, -fragment.color.primary, c[4].x;\n"
     361    "MAD R2.xyz, R0, R1.w, R1;\n"
     362    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
     363    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
     364    "ADD R1.xy, fragment.position, c[2];\n"
     365    "MUL R1.xy, R1, c[0];\n"
     366    "TEX R1, R1, texture[1], 2D;\n"
     367    "ADD R2, R2, -R0;\n"
     368    "DP4 R1.x, R1, c[3];\n"
     369    "MAD result.color, R1.x, R2, R0;\n"
    372370    "END\n"
    373371    ;
     
    380378    "TEMP R1;\n"
    381379    "TEMP R2;\n"
    382     "MUL R0.xy, fragment.position, c[3];\n"
    383     "TEX R1, R0, texture[0], 2D;\n"
    384     "MUL R2.xyz, R1, fragment.color.primary.w;\n"
    385     "MUL R0.xyz, fragment.color.primary, R1.w;\n"
    386     "MAX R0.xyz, R0, R2;\n"
    387     "ADD R0.w, -R1, c[4].x;\n"
    388     "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
    389     "ADD R0.w, -fragment.color.primary, c[4].x;\n"
    390     "MAD R2.xyz, R1, R0.w, R0;\n"
    391     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    392     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    393     "ADD R0.xy, fragment.position, c[0];\n"
    394     "MUL R0.xy, R0, c[1];\n"
    395     "TEX R0, R0, texture[1], 2D;\n"
    396     "ADD R2, R2, -R1;\n"
    397     "DP4 R0.x, R0, c[2];\n"
    398     "MAD result.color, R0.x, R2, R1;\n"
     380    "MUL R0.xy, fragment.position, c[1];\n"
     381    "TEX R0, R0, texture[0], 2D;\n"
     382    "MUL R2.xyz, fragment.color.primary.w, R0;\n"
     383    "MUL R1.xyz, fragment.color.primary, R0.w;\n"
     384    "MAX R1.xyz, R1, R2;\n"
     385    "ADD R1.w, -R0, c[4].x;\n"
     386    "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
     387    "ADD R1.w, -fragment.color.primary, c[4].x;\n"
     388    "MAD R2.xyz, R0, R1.w, R1;\n"
     389    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
     390    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
     391    "ADD R1.xy, fragment.position, c[2];\n"
     392    "MUL R1.xy, R1, c[0];\n"
     393    "TEX R1, R1, texture[1], 2D;\n"
     394    "ADD R2, R2, -R0;\n"
     395    "DP4 R1.x, R1, c[3];\n"
     396    "MAD result.color, R1.x, R2, R0;\n"
    399397    "END\n"
    400398    ;
     
    403401    "!!ARBfp1.0\n"
    404402    "PARAM c[5] = { program.local[0..3],\n"
    405     "           { 1, 1e-06 } };\n"
    406     "TEMP R0;\n"
    407     "TEMP R1;\n"
    408     "TEMP R2;\n"
    409     "TEMP R3;\n"
    410     "MUL R0.xy, fragment.position, c[3];\n"
     403    "           { 1, 1e-006 } };\n"
     404    "TEMP R0;\n"
     405    "TEMP R1;\n"
     406    "TEMP R2;\n"
     407    "TEMP R3;\n"
     408    "MUL R0.xy, fragment.position, c[1];\n"
    411409    "TEX R0, R0, texture[0], 2D;\n"
    412     "ADD R1.y, -fragment.color.primary.w, c[4].x;\n"
    413     "MAX R1.x, fragment.color.primary.w, c[4].y;\n"
    414     "MUL R2.xyz, R0, R1.y;\n"
     410    "ADD R1.x, -fragment.color.primary.w, c[4];\n"
     411    "MAX R1.y, fragment.color.primary.w, c[4];\n"
     412    "MUL R2.xyz, R0, R1.x;\n"
    415413    "ADD R1.w, -R0, c[4].x;\n"
    416414    "MAD R3.xyz, fragment.color.primary, R1.w, R2;\n"
    417     "RCP R1.x, R1.x;\n"
    418     "MAD R1.xyz, -fragment.color.primary, R1.x, c[4].x;\n"
     415    "RCP R1.y, R1.y;\n"
     416    "MAD R1.xyz, -fragment.color.primary, R1.y, c[4].x;\n"
    419417    "MAX R1.xyz, R1, c[4].y;\n"
    420     "MUL R2.xyz, R0, fragment.color.primary.w;\n"
     418    "MUL R2.xyz, fragment.color.primary.w, R0;\n"
    421419    "MUL R1.w, fragment.color.primary, R0;\n"
    422420    "RCP R1.x, R1.x;\n"
     
    431429    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
    432430    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
    433     "ADD R1.xy, fragment.position, c[0];\n"
    434     "MUL R1.xy, R1, c[1];\n"
     431    "ADD R1.xy, fragment.position, c[2];\n"
     432    "MUL R1.xy, R1, c[0];\n"
    435433    "TEX R1, R1, texture[1], 2D;\n"
    436434    "ADD R2, R2, -R0;\n"
    437     "DP4 R1.x, R1, c[2];\n"
     435    "DP4 R1.x, R1, c[3];\n"
    438436    "MAD result.color, R1.x, R2, R0;\n"
    439437    "END\n"
     
    443441    "!!ARBfp1.0\n"
    444442    "PARAM c[5] = { program.local[0..3],\n"
    445     "           { 1, 9.9999997e-06 } };\n"
     443    "           { 1, 9.9999997e-006 } };\n"
    446444    "TEMP R0;\n"
    447445    "TEMP R1;\n"
     
    449447    "TEMP R3;\n"
    450448    "TEMP R4;\n"
    451     "MUL R0.xy, fragment.position, c[3];\n"
     449    "MUL R0.xy, fragment.position, c[1];\n"
    452450    "TEX R0, R0, texture[0], 2D;\n"
    453451    "ADD R1.w, -R0, c[4].x;\n"
    454     "MUL R1.xyz, R0, fragment.color.primary.w;\n"
     452    "MUL R1.xyz, fragment.color.primary.w, R0;\n"
    455453    "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
    456454    "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
    457455    "MUL R3.xyz, fragment.color.primary.w, R1;\n"
    458456    "MAX R1.xyz, fragment.color.primary, c[4].y;\n"
     457    "ADD R2.w, -fragment.color.primary, c[4].x;\n"
    459458    "MUL R4.xyz, fragment.color.primary, R1.w;\n"
    460459    "RCP R1.x, R1.x;\n"
     
    462461    "RCP R1.z, R1.z;\n"
    463462    "MAD R3.xyz, R3, R1, R4;\n"
    464     "ADD R2.w, -fragment.color.primary, c[4].x;\n"
    465463    "MUL R1.xyz, R0, R2.w;\n"
    466464    "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
    467     "ADD R2.w, -fragment.color.primary, c[4].x;\n"
    468465    "MAD R3.xyz, R0, R2.w, R3;\n"
    469466    "MUL R1.w, fragment.color.primary, R0;\n"
     
    473470    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
    474471    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
    475     "ADD R1.xy, fragment.position, c[0];\n"
    476     "MUL R1.xy, R1, c[1];\n"
     472    "ADD R1.xy, fragment.position, c[2];\n"
     473    "MUL R1.xy, R1, c[0];\n"
    477474    "TEX R1, R1, texture[1], 2D;\n"
    478475    "ADD R2, R2, -R0;\n"
    479     "DP4 R1.x, R1, c[2];\n"
     476    "DP4 R1.x, R1, c[3];\n"
    480477    "MAD result.color, R1.x, R2, R0;\n"
    481478    "END\n"
     
    490487    "TEMP R2;\n"
    491488    "TEMP R3;\n"
    492     "MUL R0.xy, fragment.position, c[3];\n"
     489    "MUL R0.xy, fragment.position, c[1];\n"
    493490    "TEX R1, R0, texture[0], 2D;\n"
    494491    "ADD R0.w, -R1, c[4].y;\n"
     
    511508    "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    512509    "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    513     "ADD R0.xy, fragment.position, c[0];\n"
    514     "MUL R0.xy, R0, c[1];\n"
     510    "ADD R0.xy, fragment.position, c[2];\n"
     511    "MUL R0.xy, R0, c[0];\n"
    515512    "TEX R0, R0, texture[1], 2D;\n"
    516513    "ADD R2, R2, -R1;\n"
    517     "DP4 R0.x, R0, c[2];\n"
     514    "DP4 R0.x, R0, c[3];\n"
    518515    "MAD result.color, R0.x, R2, R1;\n"
    519516    "END\n"
     
    523520    "!!ARBfp1.0\n"
    524521    "PARAM c[6] = { program.local[0..3],\n"
    525     "           { 1, 9.9999997e-06, 2, 8 },\n"
    526     "           { 3 } };\n"
     522    "           { 1, 2, 9.9999997e-006, 4 },\n"
     523    "           { 16, 12, 3 } };\n"
    527524    "TEMP R0;\n"
    528525    "TEMP R1;\n"
     
    531528    "TEMP R4;\n"
    532529    "TEMP R5;\n"
    533     "MUL R0.xy, fragment.position, c[3];\n"
     530    "MUL R0.xy, fragment.position, c[1];\n"
    534531    "TEX R0, R0, texture[0], 2D;\n"
    535     "MAX R1.x, R0.w, c[4].y;\n"
    536     "RCP R1.w, R1.x;\n"
    537     "MUL R2.xyz, R0, R1.w;\n"
    538     "MUL R1.xyz, -R2, c[4].w;\n"
    539     "RSQ R2.w, R2.x;\n"
    540     "ADD R4.xyz, R1, c[5].x;\n"
    541     "MAD R1.xyz, -R0, R1.w, c[4].x;\n"
    542     "RSQ R2.z, R2.z;\n"
    543     "RSQ R2.y, R2.y;\n"
    544     "RCP R2.x, R2.w;\n"
    545     "RCP R2.z, R2.z;\n"
    546     "RCP R2.y, R2.y;\n"
    547     "MAD R5.xyz, R2, R0.w, -R0;\n"
    548     "MAD R2.xyz, fragment.color.primary, c[4].z, -fragment.color.primary.w;\n"
    549     "MUL R3.xyz, R1, R2;\n"
    550     "MAD R3.xyz, -R3, R4, fragment.color.primary.w;\n"
    551     "MUL R4.xyz, R5, R2;\n"
    552     "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n"
    553     "MAD R5.xyz, R0, fragment.color.primary.w, R4;\n"
    554     "MUL R3.xyz, R0, R3;\n"
    555     "MUL R4.xyz, R0, c[4].w;\n"
    556     "ADD R5.xyz, R5, -R3;\n"
    557     "SGE R4.xyz, R4, R0.w;\n"
    558     "MUL R4.xyz, R4, R5;\n"
    559     "ADD R2.xyz, R3, R4;\n"
     532    "MAX R1.x, R0.w, c[4].z;\n"
     533    "RCP R1.x, R1.x;\n"
     534    "MUL R2.xyz, R0, R1.x;\n"
     535    "MAD R1.xyz, R2, c[5].x, -c[5].y;\n"
     536    "MAD R3.xyz, R2, R1, c[5].z;\n"
     537    "MAD R1.xyz, fragment.color.primary, c[4].y, -fragment.color.primary.w;\n"
     538    "MUL R4.xyz, R0.w, R1;\n"
     539    "MUL R5.xyz, R4, R3;\n"
     540    "RSQ R1.w, R2.x;\n"
     541    "RSQ R2.w, R2.z;\n"
     542    "RCP R3.x, R1.w;\n"
     543    "RSQ R1.w, R2.y;\n"
     544    "MUL R5.xyz, R2, R5;\n"
     545    "RCP R3.z, R2.w;\n"
     546    "RCP R3.y, R1.w;\n"
     547    "ADD R3.xyz, -R2, R3;\n"
     548    "MUL R3.xyz, R4, R3;\n"
     549    "ADD R2.xyz, -R2, c[4].x;\n"
     550    "MAD R1.xyz, R1, R2, fragment.color.primary.w;\n"
     551    "MUL R2.xyz, fragment.color.primary, c[4].y;\n"
     552    "MAD R4.xyz, fragment.color.primary.w, R0, R5;\n"
     553    "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n"
     554    "ADD R5.xyz, R3, -R4;\n"
     555    "MUL R3.xyz, R0, c[4].w;\n"
     556    "SGE R3.xyz, R3, R0.w;\n"
     557    "MAD R3.xyz, R3, R5, R4;\n"
     558    "MAD R3.xyz, -R0, R1, R3;\n"
    560559    "MUL R1.xyz, R0, R1;\n"
    561     "MUL R3.xyz, fragment.color.primary, c[4].z;\n"
    562     "ADD R2.xyz, R2, -R1;\n"
    563     "SGE R3.xyz, R3, fragment.color.primary.w;\n"
    564     "MUL R2.xyz, R3, R2;\n"
    565     "ADD R1.xyz, R1, R2;\n"
    566     "ADD R1.w, -R0, c[4].x;\n"
     560    "SGE R2.xyz, R2, fragment.color.primary.w;\n"
     561    "MAD R2.xyz, R2, R3, R1;\n"
     562    "ADD R1.x, -R0.w, c[4];\n"
     563    "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n"
     564    "ADD R1.x, -fragment.color.primary.w, c[4];\n"
     565    "MAD R2.xyz, R0, R1.x, R2;\n"
     566    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
     567    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
     568    "ADD R1.xy, fragment.position, c[2];\n"
     569    "MUL R1.xy, R1, c[0];\n"
     570    "TEX R1, R1, texture[1], 2D;\n"
     571    "ADD R2, R2, -R0;\n"
     572    "DP4 R1.x, R1, c[3];\n"
     573    "MAD result.color, R1.x, R2, R0;\n"
     574    "END\n"
     575    ;
     576
     577static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE =
     578    "!!ARBfp1.0\n"
     579    "PARAM c[5] = { program.local[0..3],\n"
     580    "           { 2 } };\n"
     581    "TEMP R0;\n"
     582    "TEMP R1;\n"
     583    "TEMP R2;\n"
     584    "TEMP R3;\n"
     585    "MUL R0.xy, fragment.position, c[1];\n"
     586    "TEX R0, R0, texture[0], 2D;\n"
     587    "ADD R1.xyz, fragment.color.primary, R0;\n"
     588    "MUL R3.xyz, fragment.color.primary.w, R0;\n"
     589    "MUL R2.xyz, fragment.color.primary, R0.w;\n"
     590    "MIN R2.xyz, R2, R3;\n"
     591    "MAD R2.xyz, -R2, c[4].x, R1;\n"
     592    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
     593    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
     594    "ADD R1.xy, fragment.position, c[2];\n"
     595    "MUL R1.xy, R1, c[0];\n"
     596    "TEX R1, R1, texture[1], 2D;\n"
     597    "ADD R2, R2, -R0;\n"
     598    "DP4 R1.x, R1, c[3];\n"
     599    "MAD result.color, R1.x, R2, R0;\n"
     600    "END\n"
     601    ;
     602
     603static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION =
     604    "!!ARBfp1.0\n"
     605    "PARAM c[5] = { program.local[0..3],\n"
     606    "           { 2, 1 } };\n"
     607    "TEMP R0;\n"
     608    "TEMP R1;\n"
     609    "TEMP R2;\n"
     610    "MUL R0.xy, fragment.position, c[1];\n"
     611    "TEX R0, R0, texture[0], 2D;\n"
     612    "MUL R1.xyz, fragment.color.primary.w, R0;\n"
     613    "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
     614    "MUL R1.xyz, fragment.color.primary, R0;\n"
     615    "MAD R1.xyz, -R1, c[4].x, R2;\n"
     616    "ADD R1.w, -R0, c[4].y;\n"
    567617    "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
    568     "ADD R1.w, -fragment.color.primary, c[4].x;\n"
     618    "ADD R1.w, -fragment.color.primary, c[4].y;\n"
    569619    "MAD R2.xyz, R0, R1.w, R1;\n"
    570620    "ADD R1.z, fragment.color.primary.w, R0.w;\n"
    571621    "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
    572     "ADD R1.xy, fragment.position, c[0];\n"
    573     "MUL R1.xy, R1, c[1];\n"
     622    "ADD R1.xy, fragment.position, c[2];\n"
     623    "MUL R1.xy, R1, c[0];\n"
    574624    "TEX R1, R1, texture[1], 2D;\n"
    575625    "ADD R2, R2, -R0;\n"
    576     "DP4 R1.x, R1, c[2];\n"
     626    "DP4 R1.x, R1, c[3];\n"
    577627    "MAD result.color, R1.x, R2, R0;\n"
    578628    "END\n"
    579629    ;
    580630
    581 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE =
    582     "!!ARBfp1.0\n"
    583     "PARAM c[5] = { program.local[0..3],\n"
    584     "           { 2 } };\n"
    585     "TEMP R0;\n"
    586     "TEMP R1;\n"
    587     "TEMP R2;\n"
    588     "TEMP R3;\n"
    589     "MUL R0.xy, fragment.position, c[3];\n"
    590     "TEX R1, R0, texture[0], 2D;\n"
    591     "MUL R2.xyz, R1, fragment.color.primary.w;\n"
    592     "MUL R0.xyz, fragment.color.primary, R1.w;\n"
    593     "MIN R0.xyz, R0, R2;\n"
    594     "ADD R3.xyz, fragment.color.primary, R1;\n"
    595     "MAD R2.xyz, -R0, c[4].x, R3;\n"
    596     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    597     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    598     "ADD R0.xy, fragment.position, c[0];\n"
    599     "MUL R0.xy, R0, c[1];\n"
    600     "TEX R0, R0, texture[1], 2D;\n"
    601     "ADD R2, R2, -R1;\n"
    602     "DP4 R0.x, R0, c[2];\n"
    603     "MAD result.color, R0.x, R2, R1;\n"
    604     "END\n"
    605     ;
    606 
    607 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION =
    608     "!!ARBfp1.0\n"
    609     "PARAM c[5] = { program.local[0..3],\n"
    610     "           { 1, 2 } };\n"
    611     "TEMP R0;\n"
    612     "TEMP R1;\n"
    613     "TEMP R2;\n"
    614     "MUL R0.xy, fragment.position, c[3];\n"
    615     "TEX R1, R0, texture[0], 2D;\n"
    616     "MUL R0.xyz, R1, fragment.color.primary.w;\n"
    617     "MAD R2.xyz, fragment.color.primary, R1.w, R0;\n"
    618     "MUL R0.xyz, fragment.color.primary, R1;\n"
    619     "MAD R0.xyz, -R0, c[4].y, R2;\n"
    620     "ADD R0.w, -R1, c[4].x;\n"
    621     "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
    622     "ADD R0.w, -fragment.color.primary, c[4].x;\n"
    623     "MAD R2.xyz, R1, R0.w, R0;\n"
    624     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
    625     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
    626     "ADD R0.xy, fragment.position, c[0];\n"
    627     "MUL R0.xy, R0, c[1];\n"
    628     "TEX R0, R0, texture[1], 2D;\n"
    629     "ADD R2, R2, -R1;\n"
    630     "DP4 R0.x, R0, c[2];\n"
    631     "MAD result.color, R0.x, R2, R1;\n"
    632     "END\n"
    633     ;
    634 
    635631static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
    636632    "!!ARBfp1.0\n"
    637     "PARAM c[4] = { program.local[0],\n"
    638     "           { 1 },\n"
    639     "           program.local[2..3] };\n"
    640     "TEMP R0;\n"
    641     "TEMP R1;\n"
    642     "TEMP R2;\n"
    643     "MUL R0.xy, fragment.position, c[0];\n"
     633    "PARAM c[4] = { program.local[0..2],\n"
     634    "           { 1 } };\n"
     635    "TEMP R0;\n"
     636    "TEMP R1;\n"
     637    "TEMP R2;\n"
     638    "MUL R0.xy, fragment.position, c[2];\n"
    644639    "TEX R0, R0, texture[0], 2D;\n"
    645     "MUL R1.xyz, R0, c[3].y;\n"
    646     "MUL R2.xyz, R1, fragment.color.primary.w;\n"
    647     "MUL R1.xyz, fragment.color.primary, c[3].x;\n"
    648     "MAD R2.xyz, R1, R0.w, R2;\n"
    649     "MUL R0.xyz, R0, c[2].z;\n"
    650     "ADD R1.w, -R0, c[1].x;\n"
    651     "MUL R1.xyz, fragment.color.primary, c[2].y;\n"
    652     "MAD R1.xyz, R1, R1.w, R2;\n"
    653     "ADD R1.w, -fragment.color.primary, c[1].x;\n"
    654     "MAD result.color.xyz, R0, R1.w, R1;\n"
    655     "ADD R0.y, -R0.w, c[1].x;\n"
     640    "MUL R1.xyz, R0, c[0].y;\n"
     641    "MUL R2.xyz, fragment.color.primary.w, R1;\n"
     642    "MUL R1.xyz, fragment.color.primary, c[0].x;\n"
     643    "MAD R2.xyz, R0.w, R1, R2;\n"
     644    "MUL R0.xyz, R0, c[1].z;\n"
     645    "ADD R1.w, -R0, c[3].x;\n"
     646    "MUL R1.xyz, fragment.color.primary, c[1].y;\n"
     647    "MAD R1.xyz, R1.w, R1, R2;\n"
     648    "ADD R2.x, -fragment.color.primary.w, c[3];\n"
     649    "MAD result.color.xyz, R2.x, R0, R1;\n"
    656650    "MUL R0.x, fragment.color.primary.w, R0.w;\n"
    657     "MUL R0.z, R0.w, R1.w;\n"
    658     "MUL R0.y, fragment.color.primary.w, R0;\n"
    659     "DP3 result.color.w, R0, c[2];\n"
     651    "MUL R0.z, R0.w, R2.x;\n"
     652    "MUL R0.y, fragment.color.primary.w, R1.w;\n"
     653    "DP3 result.color.w, R0, c[1];\n"
    660654    "END\n"
    661655    ;
     
    733727    "MUL R0.xy, fragment.position, c[0];\n"
    734728    "TEX R0, R0, texture[0], 2D;\n"
    735     "MUL R2.xyz, R0, fragment.color.primary.w;\n"
     729    "MUL R2.xyz, fragment.color.primary.w, R0;\n"
    736730    "MUL R1.xyz, fragment.color.primary, R0.w;\n"
    737731    "MIN R1.xyz, R1, R2;\n"
     
    754748    "MUL R0.xy, fragment.position, c[0];\n"
    755749    "TEX R0, R0, texture[0], 2D;\n"
    756     "MUL R2.xyz, R0, fragment.color.primary.w;\n"
     750    "MUL R2.xyz, fragment.color.primary.w, R0;\n"
    757751    "MUL R1.xyz, fragment.color.primary, R0.w;\n"
    758752    "MAX R1.xyz, R1, R2;\n"
     
    769763    "!!ARBfp1.0\n"
    770764    "PARAM c[2] = { program.local[0],\n"
    771     "           { 1, 1e-06 } };\n"
     765    "           { 1, 1e-006 } };\n"
    772766    "TEMP R0;\n"
    773767    "TEMP R1;\n"
     
    783777    "MAD R2.xyz, -fragment.color.primary, R2.x, c[1].x;\n"
    784778    "MAX R2.xyz, R2, c[1].y;\n"
    785     "MUL R0.xyz, R0, fragment.color.primary.w;\n"
     779    "MUL R0.xyz, fragment.color.primary.w, R0;\n"
    786780    "MUL R1.w, fragment.color.primary, R0;\n"
    787781    "RCP R2.x, R2.x;\n"
     
    802796    "!!ARBfp1.0\n"
    803797    "PARAM c[2] = { program.local[0],\n"
    804     "           { 1, 9.9999997e-06 } };\n"
     798    "           { 1, 9.9999997e-006 } };\n"
    805799    "TEMP R0;\n"
    806800    "TEMP R1;\n"
     
    810804    "MUL R0.xy, fragment.position, c[0];\n"
    811805    "TEX R0, R0, texture[0], 2D;\n"
    812     "MUL R1.xyz, R0, fragment.color.primary.w;\n"
     806    "MUL R1.xyz, fragment.color.primary.w, R0;\n"
    813807    "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
    814808    "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
     
    823817    "MAD R1.xyz, R3, R1, R4;\n"
    824818    "MUL R3.xyz, R0, R2.w;\n"
    825     "ADD R2.w, -fragment.color.primary, c[1].x;\n"
    826819    "MAD R0.xyz, R0, R2.w, R1;\n"
    827820    "MAD R1.xyz, fragment.color.primary, R1.w, R3;\n"
     
    870863    "!!ARBfp1.0\n"
    871864    "PARAM c[3] = { program.local[0],\n"
    872     "           { 1, 9.9999997e-06, 2, 8 },\n"
    873     "           { 3 } };\n"
     865    "           { 1, 2, 9.9999997e-006, 4 },\n"
     866    "           { 16, 12, 3 } };\n"
    874867    "TEMP R0;\n"
    875868    "TEMP R1;\n"
     
    880873    "MUL R0.xy, fragment.position, c[0];\n"
    881874    "TEX R0, R0, texture[0], 2D;\n"
    882     "MAX R1.x, R0.w, c[1].y;\n"
    883     "RCP R1.w, R1.x;\n"
    884     "MUL R2.xyz, R0, R1.w;\n"
    885     "MUL R1.xyz, -R2, c[1].w;\n"
    886     "ADD R4.xyz, R1, c[2].x;\n"
    887     "MAD R1.xyz, -R0, R1.w, c[1].x;\n"
    888     "RSQ R2.w, R2.x;\n"
    889     "RSQ R2.z, R2.z;\n"
    890     "RSQ R2.y, R2.y;\n"
    891     "RCP R2.x, R2.w;\n"
    892     "RCP R2.z, R2.z;\n"
    893     "RCP R2.y, R2.y;\n"
    894     "MAD R5.xyz, R2, R0.w, -R0;\n"
    895     "MAD R2.xyz, fragment.color.primary, c[1].z, -fragment.color.primary.w;\n"
    896     "MUL R3.xyz, R1, R2;\n"
    897     "MAD R3.xyz, -R3, R4, fragment.color.primary.w;\n"
    898     "MUL R4.xyz, R5, R2;\n"
    899     "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n"
    900     "MAD R5.xyz, R0, fragment.color.primary.w, R4;\n"
    901     "MUL R3.xyz, R0, R3;\n"
    902     "MUL R4.xyz, R0, c[1].w;\n"
    903     "ADD R5.xyz, R5, -R3;\n"
    904     "SGE R4.xyz, R4, R0.w;\n"
    905     "MUL R4.xyz, R4, R5;\n"
    906     "ADD R2.xyz, R3, R4;\n"
     875    "MAX R1.x, R0.w, c[1].z;\n"
     876    "RCP R1.x, R1.x;\n"
     877    "MUL R2.xyz, R0, R1.x;\n"
     878    "MAD R1.xyz, R2, c[2].x, -c[2].y;\n"
     879    "MAD R3.xyz, R2, R1, c[2].z;\n"
     880    "MAD R1.xyz, fragment.color.primary, c[1].y, -fragment.color.primary.w;\n"
     881    "MUL R4.xyz, R0.w, R1;\n"
     882    "MUL R5.xyz, R4, R3;\n"
     883    "RSQ R1.w, R2.x;\n"
     884    "RCP R3.x, R1.w;\n"
     885    "RSQ R2.w, R2.z;\n"
     886    "RSQ R1.w, R2.y;\n"
     887    "MUL R5.xyz, R2, R5;\n"
     888    "RCP R3.z, R2.w;\n"
     889    "RCP R3.y, R1.w;\n"
     890    "ADD R3.xyz, -R2, R3;\n"
     891    "MUL R3.xyz, R4, R3;\n"
     892    "ADD R2.xyz, -R2, c[1].x;\n"
     893    "MAD R1.xyz, R1, R2, fragment.color.primary.w;\n"
     894    "MUL R2.xyz, fragment.color.primary, c[1].y;\n"
     895    "MAD R4.xyz, fragment.color.primary.w, R0, R5;\n"
     896    "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n"
     897    "ADD R5.xyz, R3, -R4;\n"
     898    "MUL R3.xyz, R0, c[1].w;\n"
     899    "SGE R3.xyz, R3, R0.w;\n"
     900    "MAD R3.xyz, R3, R5, R4;\n"
     901    "MAD R3.xyz, -R0, R1, R3;\n"
    907902    "MUL R1.xyz, R0, R1;\n"
    908     "MUL R3.xyz, fragment.color.primary, c[1].z;\n"
    909     "ADD R2.xyz, R2, -R1;\n"
    910     "SGE R3.xyz, R3, fragment.color.primary.w;\n"
    911     "MUL R2.xyz, R3, R2;\n"
    912     "ADD R1.xyz, R1, R2;\n"
    913     "ADD R1.w, -R0, c[1].x;\n"
    914     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
    915     "ADD R1.w, fragment.color.primary, R0;\n"
    916     "ADD R2.x, -fragment.color.primary.w, c[1];\n"
    917     "MAD result.color.xyz, R0, R2.x, R1;\n"
    918     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
     903    "SGE R2.xyz, R2, fragment.color.primary.w;\n"
     904    "MAD R2.xyz, R2, R3, R1;\n"
     905    "ADD R1.x, -R0.w, c[1];\n"
     906    "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n"
     907    "ADD R1.x, fragment.color.primary.w, R0.w;\n"
     908    "ADD R1.y, -fragment.color.primary.w, c[1].x;\n"
     909    "MAD result.color.xyz, R0, R1.y, R2;\n"
     910    "MAD result.color.w, -fragment.color.primary, R0, R1.x;\n"
    919911    "END\n"
    920912    ;
     
    929921    "MUL R0.xy, fragment.position, c[0];\n"
    930922    "TEX R0, R0, texture[0], 2D;\n"
    931     "MUL R2.xyz, R0, fragment.color.primary.w;\n"
     923    "MUL R2.xyz, fragment.color.primary.w, R0;\n"
    932924    "MUL R1.xyz, fragment.color.primary, R0.w;\n"
    933925    "ADD R1.w, fragment.color.primary, R0;\n"
     
    942934    "!!ARBfp1.0\n"
    943935    "PARAM c[2] = { program.local[0],\n"
    944     "           { 1, 2 } };\n"
     936    "           { 2, 1 } };\n"
    945937    "TEMP R0;\n"
    946938    "TEMP R1;\n"
     
    948940    "MUL R0.xy, fragment.position, c[0];\n"
    949941    "TEX R0, R0, texture[0], 2D;\n"
    950     "MUL R1.xyz, R0, fragment.color.primary.w;\n"
     942    "MUL R1.xyz, fragment.color.primary.w, R0;\n"
    951943    "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
    952944    "MUL R1.xyz, fragment.color.primary, R0;\n"
    953     "MAD R1.xyz, -R1, c[1].y, R2;\n"
    954     "ADD R1.w, -R0, c[1].x;\n"
     945    "MAD R1.xyz, -R1, c[1].x, R2;\n"
     946    "ADD R1.w, -R0, c[1].y;\n"
    955947    "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
    956948    "ADD R1.w, fragment.color.primary, R0;\n"
    957     "ADD R2.x, -fragment.color.primary.w, c[1];\n"
     949    "ADD R2.x, -fragment.color.primary.w, c[1].y;\n"
    958950    "MAD result.color.xyz, R0, R2.x, R1;\n"
    959951    "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
     
    965957    "PARAM c[3] = { program.local[0..2] };\n"
    966958    "TEMP R0;\n"
    967     "ADD R0.xy, fragment.position, c[0];\n"
    968     "MUL R0.xy, R0, c[1];\n"
     959    "ADD R0.xy, fragment.position, c[1];\n"
     960    "MUL R0.xy, R0, c[0];\n"
    969961    "TEX R0, R0, texture[0], 2D;\n"
    970962    "DP4 R0.x, R0, c[2];\n"
     
    975967static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK =
    976968    "!!ARBfp1.0\n"
    977     "PARAM c[1] = { program.local[0] };\n"
    978969    "MOV result.color, fragment.color.primary;\n"
    979970    "END\n"
     
    982973static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
    983974    "!!ARBfp1.0\n"
    984     "PARAM c[12] = { program.local[0..6],\n"
    985     "           { 2, 4, 1 },\n"
    986     "           program.local[8..11] };\n"
    987     "TEMP R0;\n"
    988     "TEMP R1;\n"
    989     "TEMP R2;\n"
    990     "TEMP R3;\n"
    991     "MUL R0.xyz, fragment.position.y, c[4];\n"
    992     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    993     "ADD R0.xyz, R0, c[5];\n"
     975    "PARAM c[12] = { program.local[0..10],\n"
     976    "           { 2, 4, 1 } };\n"
     977    "TEMP R0;\n"
     978    "TEMP R1;\n"
     979    "TEMP R2;\n"
     980    "TEMP R3;\n"
     981    "MUL R0.xyz, fragment.position.y, c[3];\n"
     982    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     983    "ADD R0.xyz, R0, c[4];\n"
    994984    "RCP R0.z, R0.z;\n"
    995985    "MUL R0.xy, R0, R0.z;\n"
    996986    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    997987    "ADD R0.z, R0, R0.w;\n"
    998     "MUL R0.xy, R0, c[6];\n"
     988    "MUL R0.xy, R0, c[0];\n"
    999989    "ADD R0.x, R0, R0.y;\n"
    1000     "MUL R0.z, c[8].x, -R0;\n"
    1001     "MUL R0.y, R0.z, c[7];\n"
    1002     "MUL R0.x, R0, c[7];\n"
    1003     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1004     "RSQ R0.z, R0.y;\n"
    1005     "RCP R0.z, R0.z;\n"
    1006     "ADD R0.x, -R0, R0.z;\n"
    1007     "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
    1008     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    1009     "MOV R0.y, c[7].x;\n"
    1010     "MUL R0.y, c[8].x, R0;\n"
    1011     "RCP R0.y, R0.y;\n"
    1012     "MUL R0.x, R0, R0.y;\n"
    1013     "TEX R0, R0, texture[2], 1D;\n"
    1014     "MUL R2.xyz, R1, c[11].y;\n"
    1015     "MUL R3.xyz, R2, R0.w;\n"
    1016     "MUL R2.xyz, R0, c[11].x;\n"
    1017     "MAD R2.xyz, R2, R1.w, R3;\n"
    1018     "ADD R3.xy, fragment.position, c[0];\n"
    1019     "ADD R2.w, -R1, c[7].z;\n"
    1020     "MUL R0.xyz, R0, c[10].y;\n"
    1021     "MAD R2.xyz, R0, R2.w, R2;\n"
    1022     "MUL R0.xyz, R1, c[10].z;\n"
    1023     "ADD R3.z, -R0.w, c[7];\n"
    1024     "MAD R2.xyz, R0, R3.z, R2;\n"
    1025     "MUL R0.y, R0.w, R2.w;\n"
    1026     "MUL R0.x, R0.w, R1.w;\n"
    1027     "MUL R0.z, R1.w, R3;\n"
    1028     "DP3 R2.w, R0, c[10];\n"
    1029     "MUL R3.xy, R3, c[1];\n"
    1030     "TEX R0, R3, texture[1], 2D;\n"
    1031     "ADD R2, R2, -R1;\n"
    1032     "DP4 R0.x, R0, c[2];\n"
    1033     "MAD result.color, R0.x, R2, R1;\n"
     990    "MUL R0.z, -R0, c[1].x;\n"
     991    "MUL R0.y, R0.x, c[11].x;\n"
     992    "MUL R0.z, R0, c[11].y;\n"
     993    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     994    "RSQ R0.x, R0.x;\n"
     995    "RCP R0.z, R0.x;\n"
     996    "ADD R1.x, -R0.y, R0.z;\n"
     997    "MOV R0.x, c[11];\n"
     998    "MUL R0.z, R0.x, c[1].x;\n"
     999    "RCP R1.y, R0.z;\n"
     1000    "MUL R0.xy, fragment.position, c[8];\n"
     1001    "TEX R0, R0, texture[0], 2D;\n"
     1002    "MUL R1.x, R1, R1.y;\n"
     1003    "TEX R1, R1, texture[2], 1D;\n"
     1004    "MUL R2.xyz, R0, c[5].y;\n"
     1005    "MUL R3.xyz, R1.w, R2;\n"
     1006    "MUL R2.xyz, R1, c[5].x;\n"
     1007    "MAD R2.xyz, R0.w, R2, R3;\n"
     1008    "ADD R3.xy, fragment.position, c[9];\n"
     1009    "ADD R2.w, -R0, c[11].z;\n"
     1010    "MUL R1.xyz, R1, c[6].y;\n"
     1011    "MAD R2.xyz, R2.w, R1, R2;\n"
     1012    "MUL R1.xyz, R0, c[6].z;\n"
     1013    "ADD R3.z, -R1.w, c[11];\n"
     1014    "MAD R2.xyz, R3.z, R1, R2;\n"
     1015    "MUL R1.y, R1.w, R2.w;\n"
     1016    "MUL R1.x, R1.w, R0.w;\n"
     1017    "MUL R1.z, R0.w, R3;\n"
     1018    "DP3 R2.w, R1, c[6];\n"
     1019    "MUL R3.xy, R3, c[7];\n"
     1020    "TEX R1, R3, texture[1], 2D;\n"
     1021    "ADD R2, R2, -R0;\n"
     1022    "DP4 R1.x, R1, c[10];\n"
     1023    "MAD result.color, R1.x, R2, R0;\n"
    10341024    "END\n"
    10351025    ;
     
    10371027static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY =
    10381028    "!!ARBfp1.0\n"
    1039     "PARAM c[10] = { program.local[0..6],\n"
    1040     "           { 2, 4, 1 },\n"
    1041     "           program.local[8..9] };\n"
    1042     "TEMP R0;\n"
    1043     "TEMP R1;\n"
    1044     "TEMP R2;\n"
    1045     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1046     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1047     "ADD R0.xyz, R0, c[5];\n"
     1029    "PARAM c[10] = { program.local[0..8],\n"
     1030    "           { 2, 4, 1 } };\n"
     1031    "TEMP R0;\n"
     1032    "TEMP R1;\n"
     1033    "TEMP R2;\n"
     1034    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1035    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1036    "ADD R0.xyz, R0, c[4];\n"
    10481037    "RCP R0.z, R0.z;\n"
    10491038    "MUL R0.xy, R0, R0.z;\n"
    10501039    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1051     "MUL R0.xy, R0, c[6];\n"
    10521040    "ADD R0.z, R0, R0.w;\n"
     1041    "MUL R0.xy, R0, c[0];\n"
    10531042    "ADD R0.x, R0, R0.y;\n"
    1054     "MUL R0.z, c[8].x, -R0;\n"
    1055     "MUL R0.y, R0.z, c[7];\n"
    1056     "MUL R0.x, R0, c[7];\n"
    1057     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1058     "RSQ R0.y, R0.y;\n"
    1059     "RCP R0.z, R0.y;\n"
    1060     "ADD R0.x, -R0, R0.z;\n"
    1061     "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
    1062     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    1063     "MOV R0.y, c[7].x;\n"
    1064     "MUL R0.y, c[8].x, R0;\n"
    1065     "RCP R0.y, R0.y;\n"
    1066     "MUL R0.x, R0, R0.y;\n"
    1067     "TEX R0, R0, texture[2], 1D;\n"
    1068     "ADD R2.x, -R1.w, c[7].z;\n"
    1069     "MUL R2.xyz, R0, R2.x;\n"
    1070     "MAD R0.xyz, R0, R1, R2;\n"
    1071     "ADD R2.x, -R0.w, c[7].z;\n"
    1072     "MAD R2.xyz, R1, R2.x, R0;\n"
    1073     "ADD R0.z, R0.w, R1.w;\n"
    1074     "MAD R2.w, -R0, R1, R0.z;\n"
    1075     "ADD R0.xy, fragment.position, c[0];\n"
    1076     "MUL R0.xy, R0, c[1];\n"
    1077     "TEX R0, R0, texture[1], 2D;\n"
    1078     "ADD R2, R2, -R1;\n"
    1079     "DP4 R0.x, R0, c[2];\n"
    1080     "MAD result.color, R0.x, R2, R1;\n"
     1043    "MUL R0.z, -R0, c[1].x;\n"
     1044    "MUL R0.y, R0.x, c[9].x;\n"
     1045    "MUL R0.z, R0, c[9].y;\n"
     1046    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1047    "RSQ R0.x, R0.x;\n"
     1048    "RCP R0.z, R0.x;\n"
     1049    "ADD R1.x, -R0.y, R0.z;\n"
     1050    "MOV R0.x, c[9];\n"
     1051    "MUL R0.z, R0.x, c[1].x;\n"
     1052    "RCP R1.y, R0.z;\n"
     1053    "MUL R0.xy, fragment.position, c[6];\n"
     1054    "TEX R0, R0, texture[0], 2D;\n"
     1055    "MUL R1.x, R1, R1.y;\n"
     1056    "TEX R1, R1, texture[2], 1D;\n"
     1057    "ADD R2.x, -R0.w, c[9].z;\n"
     1058    "MUL R2.xyz, R1, R2.x;\n"
     1059    "MAD R1.xyz, R1, R0, R2;\n"
     1060    "ADD R2.x, -R1.w, c[9].z;\n"
     1061    "MAD R2.xyz, R0, R2.x, R1;\n"
     1062    "ADD R1.z, R1.w, R0.w;\n"
     1063    "MAD R2.w, -R1, R0, R1.z;\n"
     1064    "ADD R1.xy, fragment.position, c[7];\n"
     1065    "MUL R1.xy, R1, c[5];\n"
     1066    "TEX R1, R1, texture[1], 2D;\n"
     1067    "ADD R2, R2, -R0;\n"
     1068    "DP4 R1.x, R1, c[8];\n"
     1069    "MAD result.color, R1.x, R2, R0;\n"
    10811070    "END\n"
    10821071    ;
     
    10841073static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN =
    10851074    "!!ARBfp1.0\n"
    1086     "PARAM c[10] = { program.local[0..6],\n"
    1087     "           { 2, 4 },\n"
    1088     "           program.local[8..9] };\n"
    1089     "TEMP R0;\n"
    1090     "TEMP R1;\n"
    1091     "TEMP R2;\n"
    1092     "TEMP R3;\n"
    1093     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1094     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1095     "ADD R0.xyz, R0, c[5];\n"
     1075    "PARAM c[10] = { program.local[0..8],\n"
     1076    "           { 2, 4 } };\n"
     1077    "TEMP R0;\n"
     1078    "TEMP R1;\n"
     1079    "TEMP R2;\n"
     1080    "TEMP R3;\n"
     1081    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1082    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1083    "ADD R0.xyz, R0, c[4];\n"
    10961084    "RCP R0.z, R0.z;\n"
    10971085    "MUL R0.xy, R0, R0.z;\n"
    10981086    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1099     "MUL R0.xy, R0, c[6];\n"
    11001087    "ADD R0.z, R0, R0.w;\n"
     1088    "MUL R0.xy, R0, c[0];\n"
    11011089    "ADD R0.x, R0, R0.y;\n"
    1102     "MUL R0.z, c[8].x, -R0;\n"
    1103     "MUL R0.y, R0.z, c[7];\n"
    1104     "MUL R0.x, R0, c[7];\n"
    1105     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1106     "MOV R0.z, c[7].x;\n"
    1107     "RSQ R0.y, R0.y;\n"
    1108     "RCP R0.y, R0.y;\n"
    1109     "MUL R0.z, c[8].x, R0;\n"
    1110     "MUL R1.xy, fragment.position, c[9];\n"
    1111     "ADD R3.xy, fragment.position, c[0];\n"
     1090    "MUL R0.y, R0.x, c[9].x;\n"
     1091    "MOV R0.x, c[9];\n"
     1092    "MUL R0.z, -R0, c[1].x;\n"
     1093    "MUL R0.z, R0, c[9].y;\n"
     1094    "MAD R0.z, R0.y, R0.y, -R0;\n"
     1095    "ADD R3.xy, fragment.position, c[7];\n"
     1096    "MUL R0.w, R0.x, c[1].x;\n"
     1097    "RSQ R0.z, R0.z;\n"
     1098    "RCP R0.x, R0.z;\n"
     1099    "RCP R0.z, R0.w;\n"
     1100    "ADD R0.x, -R0.y, R0;\n"
     1101    "MUL R0.z, R0.x, R0;\n"
     1102    "TEX R1, R0.z, texture[2], 1D;\n"
     1103    "MUL R0.xy, fragment.position, c[6];\n"
     1104    "TEX R0, R0, texture[0], 2D;\n"
     1105    "ADD R2, R1, R0;\n"
     1106    "MAD R2, -R1, R0, R2;\n"
     1107    "MUL R3.xy, R3, c[5];\n"
     1108    "TEX R1, R3, texture[1], 2D;\n"
     1109    "ADD R2, R2, -R0;\n"
     1110    "DP4 R1.x, R1, c[8];\n"
     1111    "MAD result.color, R1.x, R2, R0;\n"
     1112    "END\n"
     1113    ;
     1114
     1115static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY =
     1116    "!!ARBfp1.0\n"
     1117    "PARAM c[10] = { program.local[0..8],\n"
     1118    "           { 2, 4, 1 } };\n"
     1119    "TEMP R0;\n"
     1120    "TEMP R1;\n"
     1121    "TEMP R2;\n"
     1122    "TEMP R3;\n"
     1123    "TEMP R4;\n"
     1124    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1125    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1126    "ADD R0.xyz, R0, c[4];\n"
     1127    "RCP R0.z, R0.z;\n"
     1128    "MUL R0.xy, R0, R0.z;\n"
     1129    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     1130    "ADD R0.z, R0, R0.w;\n"
     1131    "MUL R0.xy, R0, c[0];\n"
     1132    "ADD R0.x, R0, R0.y;\n"
     1133    "MUL R0.y, R0.x, c[9].x;\n"
     1134    "MOV R0.x, c[9];\n"
     1135    "MUL R0.z, -R0, c[1].x;\n"
     1136    "MUL R0.z, R0, c[9].y;\n"
     1137    "MAD R0.z, R0.y, R0.y, -R0;\n"
     1138    "MUL R1.xy, fragment.position, c[6];\n"
    11121139    "TEX R1, R1, texture[0], 2D;\n"
    1113     "ADD R0.x, -R0, R0.y;\n"
    1114     "RCP R0.z, R0.z;\n"
     1140    "MUL R0.w, R0.x, c[1].x;\n"
     1141    "RSQ R0.z, R0.z;\n"
     1142    "RCP R0.x, R0.z;\n"
     1143    "ADD R2.w, -R1, c[9].z;\n"
     1144    "RCP R0.z, R0.w;\n"
     1145    "ADD R0.x, -R0.y, R0;\n"
    11151146    "MUL R0.x, R0, R0.z;\n"
    11161147    "TEX R0, R0, texture[2], 1D;\n"
    1117     "ADD R2, R0, R1;\n"
    1118     "MAD R2, -R0, R1, R2;\n"
    1119     "MUL R3.xy, R3, c[1];\n"
    1120     "TEX R0, R3, texture[1], 2D;\n"
    1121     "ADD R2, R2, -R1;\n"
    1122     "DP4 R0.x, R0, c[2];\n"
    1123     "MAD result.color, R0.x, R2, R1;\n"
    1124     "END\n"
    1125     ;
    1126 
    1127 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY =
    1128     "!!ARBfp1.0\n"
    1129     "PARAM c[10] = { program.local[0..6],\n"
    1130     "           { 2, 4, 1 },\n"
    1131     "           program.local[8..9] };\n"
    1132     "TEMP R0;\n"
    1133     "TEMP R1;\n"
    1134     "TEMP R2;\n"
    1135     "TEMP R3;\n"
    1136     "TEMP R4;\n"
    1137     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1138     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1139     "ADD R0.xyz, R0, c[5];\n"
    1140     "RCP R0.z, R0.z;\n"
    1141     "MUL R0.xy, R0, R0.z;\n"
    1142     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1143     "MUL R0.xy, R0, c[6];\n"
    1144     "ADD R0.z, R0, R0.w;\n"
    1145     "ADD R0.x, R0, R0.y;\n"
    1146     "MUL R0.z, c[8].x, -R0;\n"
    1147     "MUL R0.y, R0.z, c[7];\n"
    1148     "MUL R0.x, R0, c[7];\n"
    1149     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1150     "MOV R0.z, c[7].x;\n"
    1151     "RSQ R0.y, R0.y;\n"
    1152     "RCP R0.y, R0.y;\n"
    1153     "MUL R0.z, c[8].x, R0;\n"
    1154     "MUL R1.xy, fragment.position, c[9];\n"
    1155     "TEX R1, R1, texture[0], 2D;\n"
    1156     "ADD R0.x, -R0, R0.y;\n"
    1157     "RCP R0.z, R0.z;\n"
    1158     "MUL R0.x, R0, R0.z;\n"
    1159     "TEX R0, R0, texture[2], 1D;\n"
    1160     "ADD R2.w, -R1, c[7].z;\n"
    11611148    "ADD R3.xyz, R0.w, -R0;\n"
    11621149    "ADD R2.xyz, R1.w, -R1;\n"
    11631150    "MUL R2.xyz, R2, R3;\n"
    1164     "MUL R2.xyz, R2, c[7].x;\n"
     1151    "MUL R2.xyz, R2, c[9].x;\n"
    11651152    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    11661153    "MUL R4.xyz, R0, R2.w;\n"
    11671154    "MUL R3.xyz, R0, R1;\n"
    11681155    "MAD R0.xyz, R0, R2.w, R2;\n"
    1169     "ADD R2.x, -R0.w, c[7].z;\n"
    1170     "MAD R3.xyz, R3, c[7].x, R4;\n"
     1156    "ADD R2.x, -R0.w, c[9].z;\n"
     1157    "MAD R3.xyz, R3, c[9].x, R4;\n"
    11711158    "MAD R3.xyz, R1, R2.x, R3;\n"
    11721159    "MAD R0.xyz, R1, R2.x, R0;\n"
    1173     "MUL R2.xyz, R1, c[7].x;\n"
     1160    "MUL R2.xyz, R1, c[9].x;\n"
    11741161    "ADD R0.xyz, R0, -R3;\n"
    11751162    "SGE R2.xyz, R2, R1.w;\n"
     
    11771164    "ADD R0.z, R0.w, R1.w;\n"
    11781165    "MAD R2.w, -R0, R1, R0.z;\n"
    1179     "ADD R0.xy, fragment.position, c[0];\n"
    1180     "MUL R0.xy, R0, c[1];\n"
     1166    "ADD R0.xy, fragment.position, c[7];\n"
     1167    "MUL R0.xy, R0, c[5];\n"
    11811168    "TEX R0, R0, texture[1], 2D;\n"
    11821169    "ADD R2, R2, -R1;\n"
    1183     "DP4 R0.x, R0, c[2];\n"
     1170    "DP4 R0.x, R0, c[8];\n"
    11841171    "MAD result.color, R0.x, R2, R1;\n"
    11851172    "END\n"
     
    11881175static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN =
    11891176    "!!ARBfp1.0\n"
    1190     "PARAM c[10] = { program.local[0..6],\n"
    1191     "           { 2, 4, 1 },\n"
    1192     "           program.local[8..9] };\n"
    1193     "TEMP R0;\n"
    1194     "TEMP R1;\n"
    1195     "TEMP R2;\n"
    1196     "TEMP R3;\n"
    1197     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1198     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1199     "ADD R0.xyz, R0, c[5];\n"
     1177    "PARAM c[10] = { program.local[0..8],\n"
     1178    "           { 2, 4, 1 } };\n"
     1179    "TEMP R0;\n"
     1180    "TEMP R1;\n"
     1181    "TEMP R2;\n"
     1182    "TEMP R3;\n"
     1183    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1184    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1185    "ADD R0.xyz, R0, c[4];\n"
    12001186    "RCP R0.z, R0.z;\n"
    12011187    "MUL R0.xy, R0, R0.z;\n"
    12021188    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1203     "MUL R0.xy, R0, c[6];\n"
    12041189    "ADD R0.z, R0, R0.w;\n"
     1190    "MUL R0.xy, R0, c[0];\n"
    12051191    "ADD R0.x, R0, R0.y;\n"
    1206     "MUL R0.z, c[8].x, -R0;\n"
    1207     "MUL R0.y, R0.z, c[7];\n"
    1208     "MUL R0.x, R0, c[7];\n"
    1209     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1210     "MOV R0.z, c[7].x;\n"
    1211     "RSQ R0.y, R0.y;\n"
    1212     "RCP R0.y, R0.y;\n"
    1213     "MUL R0.z, c[8].x, R0;\n"
    1214     "MUL R1.xy, fragment.position, c[9];\n"
    1215     "TEX R1, R1, texture[0], 2D;\n"
    1216     "ADD R0.x, -R0, R0.y;\n"
    1217     "RCP R0.z, R0.z;\n"
     1192    "MUL R0.z, -R0, c[1].x;\n"
     1193    "MUL R0.y, R0.x, c[9].x;\n"
     1194    "MUL R0.z, R0, c[9].y;\n"
     1195    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1196    "RSQ R0.z, R0.x;\n"
     1197    "MOV R0.x, c[9];\n"
     1198    "MUL R0.x, R0, c[1];\n"
     1199    "RCP R0.z, R0.z;\n"
     1200    "ADD R0.z, -R0.y, R0;\n"
     1201    "RCP R0.w, R0.x;\n"
     1202    "MUL R1.x, R0.z, R0.w;\n"
     1203    "MUL R0.xy, fragment.position, c[6];\n"
     1204    "TEX R0, R0, texture[0], 2D;\n"
     1205    "TEX R1, R1, texture[2], 1D;\n"
     1206    "MUL R3.xyz, R1.w, R0;\n"
     1207    "MUL R2.xyz, R1, R0.w;\n"
     1208    "MIN R2.xyz, R2, R3;\n"
     1209    "ADD R2.w, -R0, c[9].z;\n"
     1210    "MAD R1.xyz, R1, R2.w, R2;\n"
     1211    "ADD R2.x, -R1.w, c[9].z;\n"
     1212    "MAD R2.xyz, R0, R2.x, R1;\n"
     1213    "ADD R1.z, R1.w, R0.w;\n"
     1214    "MAD R2.w, -R1, R0, R1.z;\n"
     1215    "ADD R1.xy, fragment.position, c[7];\n"
     1216    "MUL R1.xy, R1, c[5];\n"
     1217    "TEX R1, R1, texture[1], 2D;\n"
     1218    "ADD R2, R2, -R0;\n"
     1219    "DP4 R1.x, R1, c[8];\n"
     1220    "MAD result.color, R1.x, R2, R0;\n"
     1221    "END\n"
     1222    ;
     1223
     1224static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN =
     1225    "!!ARBfp1.0\n"
     1226    "PARAM c[10] = { program.local[0..8],\n"
     1227    "           { 2, 4, 1 } };\n"
     1228    "TEMP R0;\n"
     1229    "TEMP R1;\n"
     1230    "TEMP R2;\n"
     1231    "TEMP R3;\n"
     1232    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1233    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1234    "ADD R0.xyz, R0, c[4];\n"
     1235    "RCP R0.z, R0.z;\n"
     1236    "MUL R0.xy, R0, R0.z;\n"
     1237    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     1238    "ADD R0.z, R0, R0.w;\n"
     1239    "MUL R0.xy, R0, c[0];\n"
     1240    "ADD R0.x, R0, R0.y;\n"
     1241    "MUL R0.z, -R0, c[1].x;\n"
     1242    "MUL R0.y, R0.x, c[9].x;\n"
     1243    "MUL R0.z, R0, c[9].y;\n"
     1244    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1245    "RSQ R0.z, R0.x;\n"
     1246    "MOV R0.x, c[9];\n"
     1247    "MUL R0.x, R0, c[1];\n"
     1248    "RCP R0.z, R0.z;\n"
     1249    "ADD R0.z, -R0.y, R0;\n"
     1250    "RCP R0.w, R0.x;\n"
     1251    "MUL R1.x, R0.z, R0.w;\n"
     1252    "MUL R0.xy, fragment.position, c[6];\n"
     1253    "TEX R0, R0, texture[0], 2D;\n"
     1254    "TEX R1, R1, texture[2], 1D;\n"
     1255    "MUL R3.xyz, R1.w, R0;\n"
     1256    "MUL R2.xyz, R1, R0.w;\n"
     1257    "MAX R2.xyz, R2, R3;\n"
     1258    "ADD R2.w, -R0, c[9].z;\n"
     1259    "MAD R1.xyz, R1, R2.w, R2;\n"
     1260    "ADD R2.x, -R1.w, c[9].z;\n"
     1261    "MAD R2.xyz, R0, R2.x, R1;\n"
     1262    "ADD R1.z, R1.w, R0.w;\n"
     1263    "MAD R2.w, -R1, R0, R1.z;\n"
     1264    "ADD R1.xy, fragment.position, c[7];\n"
     1265    "MUL R1.xy, R1, c[5];\n"
     1266    "TEX R1, R1, texture[1], 2D;\n"
     1267    "ADD R2, R2, -R0;\n"
     1268    "DP4 R1.x, R1, c[8];\n"
     1269    "MAD result.color, R1.x, R2, R0;\n"
     1270    "END\n"
     1271    ;
     1272
     1273static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE =
     1274    "!!ARBfp1.0\n"
     1275    "PARAM c[10] = { program.local[0..8],\n"
     1276    "           { 2, 4, 1, 1e-006 } };\n"
     1277    "TEMP R0;\n"
     1278    "TEMP R1;\n"
     1279    "TEMP R2;\n"
     1280    "TEMP R3;\n"
     1281    "TEMP R4;\n"
     1282    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1283    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1284    "ADD R0.xyz, R0, c[4];\n"
     1285    "RCP R0.z, R0.z;\n"
     1286    "MUL R0.xy, R0, R0.z;\n"
     1287    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     1288    "ADD R0.z, R0, R0.w;\n"
     1289    "MUL R0.xy, R0, c[0];\n"
     1290    "ADD R0.x, R0, R0.y;\n"
     1291    "MUL R0.y, R0.x, c[9].x;\n"
     1292    "MOV R0.x, c[9];\n"
     1293    "MUL R0.z, -R0, c[1].x;\n"
     1294    "MUL R0.z, R0, c[9].y;\n"
     1295    "MAD R0.z, R0.y, R0.y, -R0;\n"
     1296    "MUL R0.w, R0.x, c[1].x;\n"
     1297    "RSQ R0.z, R0.z;\n"
     1298    "RCP R0.x, R0.z;\n"
     1299    "RCP R0.z, R0.w;\n"
     1300    "ADD R0.x, -R0.y, R0;\n"
    12181301    "MUL R0.x, R0, R0.z;\n"
    12191302    "TEX R0, R0, texture[2], 1D;\n"
    1220     "MUL R3.xyz, R1, R0.w;\n"
    1221     "MUL R2.xyz, R0, R1.w;\n"
    1222     "MIN R2.xyz, R2, R3;\n"
    1223     "ADD R2.w, -R1, c[7].z;\n"
    1224     "MAD R0.xyz, R0, R2.w, R2;\n"
    1225     "ADD R2.x, -R0.w, c[7].z;\n"
    1226     "MAD R2.xyz, R1, R2.x, R0;\n"
    1227     "ADD R0.z, R0.w, R1.w;\n"
    1228     "MAD R2.w, -R0, R1, R0.z;\n"
    1229     "ADD R0.xy, fragment.position, c[0];\n"
    1230     "MUL R0.xy, R0, c[1];\n"
    1231     "TEX R0, R0, texture[1], 2D;\n"
    1232     "ADD R2, R2, -R1;\n"
    1233     "DP4 R0.x, R0, c[2];\n"
    1234     "MAD result.color, R0.x, R2, R1;\n"
    1235     "END\n"
    1236     ;
    1237 
    1238 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN =
    1239     "!!ARBfp1.0\n"
    1240     "PARAM c[10] = { program.local[0..6],\n"
    1241     "           { 2, 4, 1 },\n"
    1242     "           program.local[8..9] };\n"
    1243     "TEMP R0;\n"
    1244     "TEMP R1;\n"
    1245     "TEMP R2;\n"
    1246     "TEMP R3;\n"
    1247     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1248     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1249     "ADD R0.xyz, R0, c[5];\n"
    1250     "RCP R0.z, R0.z;\n"
    1251     "MUL R0.xy, R0, R0.z;\n"
    1252     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1253     "MUL R0.xy, R0, c[6];\n"
    1254     "ADD R0.z, R0, R0.w;\n"
    1255     "ADD R0.x, R0, R0.y;\n"
    1256     "MUL R0.z, c[8].x, -R0;\n"
    1257     "MUL R0.y, R0.z, c[7];\n"
    1258     "MUL R0.x, R0, c[7];\n"
    1259     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1260     "MOV R0.z, c[7].x;\n"
    1261     "RSQ R0.y, R0.y;\n"
    1262     "RCP R0.y, R0.y;\n"
    1263     "MUL R0.z, c[8].x, R0;\n"
    1264     "MUL R1.xy, fragment.position, c[9];\n"
     1303    "MAX R1.x, R0.w, c[9].w;\n"
     1304    "RCP R1.x, R1.x;\n"
     1305    "MAD R1.xyz, -R0, R1.x, c[9].z;\n"
     1306    "MAX R2.xyz, R1, c[9].w;\n"
     1307    "MUL R1.xy, fragment.position, c[6];\n"
    12651308    "TEX R1, R1, texture[0], 2D;\n"
    1266     "ADD R0.x, -R0, R0.y;\n"
    1267     "RCP R0.z, R0.z;\n"
    1268     "MUL R0.x, R0, R0.z;\n"
    1269     "TEX R0, R0, texture[2], 1D;\n"
    1270     "MUL R3.xyz, R1, R0.w;\n"
    1271     "MUL R2.xyz, R0, R1.w;\n"
    1272     "MAX R2.xyz, R2, R3;\n"
    1273     "ADD R2.w, -R1, c[7].z;\n"
    1274     "MAD R0.xyz, R0, R2.w, R2;\n"
    1275     "ADD R2.x, -R0.w, c[7].z;\n"
    1276     "MAD R2.xyz, R1, R2.x, R0;\n"
    1277     "ADD R0.z, R0.w, R1.w;\n"
    1278     "MAD R2.w, -R0, R1, R0.z;\n"
    1279     "ADD R0.xy, fragment.position, c[0];\n"
    1280     "MUL R0.xy, R0, c[1];\n"
    1281     "TEX R0, R0, texture[1], 2D;\n"
    1282     "ADD R2, R2, -R1;\n"
    1283     "DP4 R0.x, R0, c[2];\n"
    1284     "MAD result.color, R0.x, R2, R1;\n"
    1285     "END\n"
    1286     ;
    1287 
    1288 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE =
    1289     "!!ARBfp1.0\n"
    1290     "PARAM c[10] = { program.local[0..6],\n"
    1291     "           { 2, 4, 1, 1e-06 },\n"
    1292     "           program.local[8..9] };\n"
    1293     "TEMP R0;\n"
    1294     "TEMP R1;\n"
    1295     "TEMP R2;\n"
    1296     "TEMP R3;\n"
    1297     "TEMP R4;\n"
    1298     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1299     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1300     "ADD R0.xyz, R0, c[5];\n"
    1301     "RCP R0.z, R0.z;\n"
    1302     "MUL R0.xy, R0, R0.z;\n"
    1303     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1304     "MUL R0.xy, R0, c[6];\n"
    1305     "ADD R0.z, R0, R0.w;\n"
    1306     "ADD R0.x, R0, R0.y;\n"
    1307     "MUL R0.z, c[8].x, -R0;\n"
    1308     "MUL R0.y, R0.z, c[7];\n"
    1309     "MUL R0.x, R0, c[7];\n"
    1310     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1311     "MOV R0.z, c[7].x;\n"
    1312     "RSQ R0.y, R0.y;\n"
    1313     "RCP R0.y, R0.y;\n"
    1314     "MUL R0.z, c[8].x, R0;\n"
    1315     "ADD R0.x, -R0, R0.y;\n"
    1316     "RCP R0.z, R0.z;\n"
    1317     "MUL R0.x, R0, R0.z;\n"
    1318     "TEX R0, R0, texture[2], 1D;\n"
    1319     "MAX R1.x, R0.w, c[7].w;\n"
    1320     "RCP R1.x, R1.x;\n"
    1321     "MAD R1.xyz, -R0, R1.x, c[7].z;\n"
    1322     "MAX R2.xyz, R1, c[7].w;\n"
    1323     "MUL R1.xy, fragment.position, c[9];\n"
    1324     "TEX R1, R1, texture[0], 2D;\n"
    1325     "ADD R2.w, -R0, c[7].z;\n"
     1309    "ADD R2.w, -R0, c[9].z;\n"
    13261310    "MUL R3.xyz, R1, R2.w;\n"
    1327     "ADD R2.w, -R1, c[7].z;\n"
     1311    "ADD R2.w, -R1, c[9].z;\n"
    13281312    "MAD R4.xyz, R0, R2.w, R3;\n"
    1329     "MUL R3.xyz, R1, R0.w;\n"
     1313    "MUL R3.xyz, R0.w, R1;\n"
    13301314    "MUL R2.w, R0, R1;\n"
    13311315    "MAD R0.xyz, R0, R1.w, R3;\n"
     
    13401324    "ADD R0.z, R0.w, R1.w;\n"
    13411325    "MAD R2.w, -R0, R1, R0.z;\n"
    1342     "ADD R0.xy, fragment.position, c[0];\n"
    1343     "MUL R0.xy, R0, c[1];\n"
     1326    "ADD R0.xy, fragment.position, c[7];\n"
     1327    "MUL R0.xy, R0, c[5];\n"
    13441328    "TEX R0, R0, texture[1], 2D;\n"
    13451329    "ADD R2, R2, -R1;\n"
    1346     "DP4 R0.x, R0, c[2];\n"
     1330    "DP4 R0.x, R0, c[8];\n"
    13471331    "MAD result.color, R0.x, R2, R1;\n"
    13481332    "END\n"
     
    13511335static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN =
    13521336    "!!ARBfp1.0\n"
    1353     "PARAM c[10] = { program.local[0..6],\n"
    1354     "           { 2, 4, 1, 9.9999997e-06 },\n"
    1355     "           program.local[8..9] };\n"
     1337    "PARAM c[10] = { program.local[0..8],\n"
     1338    "           { 2, 4, 1, 9.9999997e-006 } };\n"
    13561339    "TEMP R0;\n"
    13571340    "TEMP R1;\n"
     
    13601343    "TEMP R4;\n"
    13611344    "TEMP R5;\n"
    1362     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1363     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1364     "ADD R0.xyz, R0, c[5];\n"
     1345    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1346    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1347    "ADD R0.xyz, R0, c[4];\n"
    13651348    "RCP R0.z, R0.z;\n"
    13661349    "MUL R0.xy, R0, R0.z;\n"
    13671350    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1368     "MUL R0.xy, R0, c[6];\n"
    13691351    "ADD R0.z, R0, R0.w;\n"
     1352    "MUL R0.xy, R0, c[0];\n"
    13701353    "ADD R0.x, R0, R0.y;\n"
    1371     "MUL R0.z, c[8].x, -R0;\n"
    1372     "MUL R0.y, R0.z, c[7];\n"
    1373     "MUL R0.x, R0, c[7];\n"
    1374     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1375     "MOV R0.z, c[7].x;\n"
    1376     "RSQ R0.y, R0.y;\n"
    1377     "RCP R0.y, R0.y;\n"
    1378     "MUL R0.z, c[8].x, R0;\n"
    1379     "MUL R1.xy, fragment.position, c[9];\n"
    1380     "TEX R1, R1, texture[0], 2D;\n"
    1381     "ADD R0.x, -R0, R0.y;\n"
    1382     "RCP R0.z, R0.z;\n"
    1383     "MUL R0.x, R0, R0.z;\n"
     1354    "MUL R0.z, -R0, c[1].x;\n"
     1355    "MUL R0.y, R0.x, c[9].x;\n"
     1356    "MUL R0.z, R0, c[9].y;\n"
     1357    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1358    "RSQ R0.z, R0.x;\n"
     1359    "MOV R0.x, c[9];\n"
     1360    "MUL R0.w, R0.x, c[1].x;\n"
     1361    "RCP R0.z, R0.z;\n"
     1362    "ADD R0.x, -R0.y, R0.z;\n"
     1363    "RCP R0.y, R0.w;\n"
     1364    "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     1365    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     1366    "MUL R0.x, R0, R0.y;\n"
    13841367    "TEX R0, R0, texture[2], 1D;\n"
    1385     "MUL R2.xyz, R1, R0.w;\n"
     1368    "MUL R2.xyz, R0.w, R1;\n"
    13861369    "MAD R3.xyz, R0, R1.w, R2;\n"
    13871370    "MAD R2.xyz, -R0.w, R1.w, R3;\n"
    13881371    "MUL R4.xyz, R0.w, R2;\n"
    1389     "MAX R2.xyz, R0, c[7].w;\n"
    1390     "ADD R2.w, -R1, c[7].z;\n"
     1372    "MAX R2.xyz, R0, c[9].w;\n"
     1373    "ADD R2.w, -R1, c[9].z;\n"
    13911374    "MUL R5.xyz, R0, R2.w;\n"
    1392     "ADD R3.w, -R0, c[7].z;\n"
     1375    "ADD R3.w, -R0, c[9].z;\n"
    13931376    "RCP R2.x, R2.x;\n"
    13941377    "RCP R2.y, R2.y;\n"
     
    14041387    "ADD R0.z, R0.w, R1.w;\n"
    14051388    "MAD R2.w, -R0, R1, R0.z;\n"
    1406     "ADD R0.xy, fragment.position, c[0];\n"
    1407     "MUL R0.xy, R0, c[1];\n"
     1389    "ADD R0.xy, fragment.position, c[7];\n"
     1390    "MUL R0.xy, R0, c[5];\n"
    14081391    "TEX R0, R0, texture[1], 2D;\n"
    14091392    "ADD R2, R2, -R1;\n"
    1410     "DP4 R0.x, R0, c[2];\n"
     1393    "DP4 R0.x, R0, c[8];\n"
    14111394    "MAD result.color, R0.x, R2, R1;\n"
    14121395    "END\n"
     
    14151398static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT =
    14161399    "!!ARBfp1.0\n"
    1417     "PARAM c[10] = { program.local[0..6],\n"
    1418     "           { 2, 4, 1 },\n"
    1419     "           program.local[8..9] };\n"
     1400    "PARAM c[10] = { program.local[0..8],\n"
     1401    "           { 2, 4, 1 } };\n"
    14201402    "TEMP R0;\n"
    14211403    "TEMP R1;\n"
     
    14231405    "TEMP R3;\n"
    14241406    "TEMP R4;\n"
    1425     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1426     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1427     "ADD R0.xyz, R0, c[5];\n"
     1407    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1408    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1409    "ADD R0.xyz, R0, c[4];\n"
    14281410    "RCP R0.z, R0.z;\n"
    14291411    "MUL R0.xy, R0, R0.z;\n"
    14301412    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1431     "MUL R0.xy, R0, c[6];\n"
    14321413    "ADD R0.z, R0, R0.w;\n"
     1414    "MUL R0.xy, R0, c[0];\n"
    14331415    "ADD R0.x, R0, R0.y;\n"
    1434     "MUL R0.z, c[8].x, -R0;\n"
    1435     "MUL R0.y, R0.z, c[7];\n"
    1436     "MUL R0.x, R0, c[7];\n"
    1437     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1438     "MOV R0.z, c[7].x;\n"
    1439     "RSQ R0.y, R0.y;\n"
    1440     "RCP R0.y, R0.y;\n"
    1441     "MUL R0.z, c[8].x, R0;\n"
    1442     "MUL R1.xy, fragment.position, c[9];\n"
     1416    "MUL R0.y, R0.x, c[9].x;\n"
     1417    "MOV R0.x, c[9];\n"
     1418    "MUL R0.z, -R0, c[1].x;\n"
     1419    "MUL R0.z, R0, c[9].y;\n"
     1420    "MAD R0.z, R0.y, R0.y, -R0;\n"
     1421    "MUL R1.xy, fragment.position, c[6];\n"
    14431422    "TEX R1, R1, texture[0], 2D;\n"
    1444     "ADD R0.x, -R0, R0.y;\n"
    1445     "RCP R0.z, R0.z;\n"
     1423    "MUL R0.w, R0.x, c[1].x;\n"
     1424    "RSQ R0.z, R0.z;\n"
     1425    "RCP R0.x, R0.z;\n"
     1426    "ADD R2.w, -R1, c[9].z;\n"
     1427    "RCP R0.z, R0.w;\n"
     1428    "ADD R0.x, -R0.y, R0;\n"
    14461429    "MUL R0.x, R0, R0.z;\n"
    14471430    "TEX R0, R0, texture[2], 1D;\n"
    1448     "ADD R2.w, -R1, c[7].z;\n"
    14491431    "ADD R3.xyz, R0.w, -R0;\n"
    14501432    "ADD R2.xyz, R1.w, -R1;\n"
    14511433    "MUL R2.xyz, R2, R3;\n"
    1452     "MUL R2.xyz, R2, c[7].x;\n"
     1434    "MUL R2.xyz, R2, c[9].x;\n"
    14531435    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    14541436    "MUL R4.xyz, R0, R2.w;\n"
    14551437    "MAD R2.xyz, R0, R2.w, R2;\n"
    14561438    "MUL R3.xyz, R0, R1;\n"
    1457     "ADD R2.w, -R0, c[7].z;\n"
    1458     "MAD R3.xyz, R3, c[7].x, R4;\n"
    1459     "MUL R0.xyz, R0, c[7].x;\n"
     1439    "ADD R2.w, -R0, c[9].z;\n"
     1440    "MAD R3.xyz, R3, c[9].x, R4;\n"
     1441    "MUL R0.xyz, R0, c[9].x;\n"
    14601442    "SGE R0.xyz, R0, R0.w;\n"
    14611443    "MAD R3.xyz, R1, R2.w, R3;\n"
     
    14651447    "ADD R0.z, R0.w, R1.w;\n"
    14661448    "MAD R2.w, -R0, R1, R0.z;\n"
    1467     "ADD R0.xy, fragment.position, c[0];\n"
    1468     "MUL R0.xy, R0, c[1];\n"
     1449    "ADD R0.xy, fragment.position, c[7];\n"
     1450    "MUL R0.xy, R0, c[5];\n"
    14691451    "TEX R0, R0, texture[1], 2D;\n"
    14701452    "ADD R2, R2, -R1;\n"
    1471     "DP4 R0.x, R0, c[2];\n"
     1453    "DP4 R0.x, R0, c[8];\n"
    14721454    "MAD result.color, R0.x, R2, R1;\n"
    14731455    "END\n"
     
    14761458static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT =
    14771459    "!!ARBfp1.0\n"
    1478     "PARAM c[11] = { program.local[0..6],\n"
    1479     "           { 2, 4, 1, 9.9999997e-06 },\n"
    1480     "           program.local[8..9],\n"
    1481     "           { 8, 3 } };\n"
     1460    "PARAM c[11] = { program.local[0..8],\n"
     1461    "           { 2, 4, 1, 9.9999997e-006 },\n"
     1462    "           { 16, 12, 3 } };\n"
    14821463    "TEMP R0;\n"
    14831464    "TEMP R1;\n"
     
    14871468    "TEMP R5;\n"
    14881469    "TEMP R6;\n"
    1489     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1490     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1491     "ADD R0.xyz, R0, c[5];\n"
     1470    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1471    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1472    "ADD R0.xyz, R0, c[4];\n"
    14921473    "RCP R0.z, R0.z;\n"
    14931474    "MUL R0.xy, R0, R0.z;\n"
    14941475    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1495     "MUL R0.xy, R0, c[6];\n"
    14961476    "ADD R0.z, R0, R0.w;\n"
     1477    "MUL R0.xy, R0, c[0];\n"
    14971478    "ADD R0.x, R0, R0.y;\n"
    1498     "MUL R0.z, c[8].x, -R0;\n"
    1499     "MUL R0.y, R0.z, c[7];\n"
    1500     "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
     1479    "MUL R0.z, -R0, c[1].x;\n"
     1480    "MUL R0.y, R0.z, c[9];\n"
     1481    "MUL R0.x, R0, c[9];\n"
     1482    "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
    15011483    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    1502     "MUL R0.x, R0, c[7];\n"
    15031484    "MAD R0.y, R0.x, R0.x, -R0;\n"
    1504     "MAX R0.z, R1.w, c[7].w;\n"
    1505     "RCP R2.w, R0.z;\n"
    1506     "MUL R2.xyz, R1, R2.w;\n"
    1507     "MUL R6.xyz, -R2, c[10].x;\n"
    1508     "MAD R3.xyz, -R1, R2.w, c[7].z;\n"
    15091485    "RSQ R0.y, R0.y;\n"
    15101486    "RCP R0.y, R0.y;\n"
    1511     "ADD R0.x, -R0, R0.y;\n"
    1512     "MOV R0.y, c[7].x;\n"
    1513     "MUL R0.y, c[8].x, R0;\n"
    1514     "RCP R0.y, R0.y;\n"
    1515     "MUL R0.x, R0, R0.y;\n"
     1487    "ADD R0.y, -R0.x, R0;\n"
     1488    "MOV R0.x, c[9];\n"
     1489    "MUL R0.x, R0, c[1];\n"
     1490    "MAX R0.z, R1.w, c[9].w;\n"
     1491    "RCP R0.z, R0.z;\n"
     1492    "MUL R3.xyz, R1, R0.z;\n"
     1493    "MAD R4.xyz, R3, c[10].x, -c[10].y;\n"
     1494    "RCP R0.x, R0.x;\n"
     1495    "MUL R0.x, R0.y, R0;\n"
    15161496    "TEX R0, R0, texture[2], 1D;\n"
    1517     "MAD R4.xyz, R0, c[7].x, -R0.w;\n"
    1518     "MUL R5.xyz, R3, R4;\n"
    1519     "MAD R3.xyz, -R3, R4, R0.w;\n"
    1520     "ADD R6.xyz, R6, c[10].y;\n"
    1521     "RSQ R2.x, R2.x;\n"
    1522     "RSQ R2.z, R2.z;\n"
    1523     "RSQ R2.y, R2.y;\n"
    1524     "MAD R5.xyz, -R5, R6, R0.w;\n"
    1525     "MUL R3.xyz, R1, R3;\n"
    1526     "ADD R2.w, -R1, c[7].z;\n"
    1527     "RCP R2.x, R2.x;\n"
    1528     "RCP R2.z, R2.z;\n"
    1529     "RCP R2.y, R2.y;\n"
    1530     "MAD R2.xyz, R2, R1.w, -R1;\n"
    1531     "MUL R6.xyz, R2, R4;\n"
    1532     "MUL R2.xyz, R1, R5;\n"
    1533     "MAD R6.xyz, R1, R0.w, R6;\n"
    1534     "MUL R4.xyz, R0, c[7].x;\n"
    1535     "MUL R5.xyz, R1, c[10].x;\n"
    1536     "ADD R6.xyz, R6, -R2;\n"
    1537     "SGE R5.xyz, R5, R1.w;\n"
    1538     "MUL R5.xyz, R5, R6;\n"
    1539     "ADD R2.xyz, R2, R5;\n"
    1540     "SGE R4.xyz, R4, R0.w;\n"
    1541     "ADD R2.xyz, R2, -R3;\n"
    1542     "MUL R2.xyz, R4, R2;\n"
    1543     "ADD R2.xyz, R3, R2;\n"
    1544     "MAD R0.xyz, R0, R2.w, R2;\n"
    1545     "ADD R2.x, -R0.w, c[7].z;\n"
    1546     "MAD R2.xyz, R1, R2.x, R0;\n"
     1497    "MAD R2.xyz, R0, c[9].x, -R0.w;\n"
     1498    "MAD R4.xyz, R3, R4, c[10].z;\n"
     1499    "MUL R5.xyz, R1.w, R2;\n"
     1500    "MUL R6.xyz, R5, R4;\n"
     1501    "RSQ R2.w, R3.x;\n"
     1502    "RCP R4.x, R2.w;\n"
     1503    "RSQ R2.w, R3.y;\n"
     1504    "RSQ R3.w, R3.z;\n"
     1505    "RCP R4.y, R2.w;\n"
     1506    "RCP R4.z, R3.w;\n"
     1507    "ADD R4.xyz, -R3, R4;\n"
     1508    "MUL R6.xyz, R3, R6;\n"
     1509    "MUL R4.xyz, R5, R4;\n"
     1510    "ADD R3.xyz, -R3, c[9].z;\n"
     1511    "MAD R2.xyz, R2, R3, R0.w;\n"
     1512    "MUL R3.xyz, R0, c[9].x;\n"
     1513    "MAD R5.xyz, R0.w, R1, R6;\n"
     1514    "MAD R4.xyz, R0.w, R1, R4;\n"
     1515    "ADD R6.xyz, R4, -R5;\n"
     1516    "MUL R4.xyz, R1, c[9].y;\n"
     1517    "SGE R4.xyz, R4, R1.w;\n"
     1518    "MAD R4.xyz, R4, R6, R5;\n"
     1519    "MAD R4.xyz, -R1, R2, R4;\n"
     1520    "SGE R3.xyz, R3, R0.w;\n"
     1521    "MUL R2.xyz, R1, R2;\n"
     1522    "ADD R2.w, -R1, c[9].z;\n"
     1523    "MAD R2.xyz, R3, R4, R2;\n"
     1524    "MAD R2.xyz, R0, R2.w, R2;\n"
     1525    "ADD R0.x, -R0.w, c[9].z;\n"
     1526    "MAD R2.xyz, R1, R0.x, R2;\n"
    15471527    "ADD R0.z, R0.w, R1.w;\n"
    15481528    "MAD R2.w, -R0, R1, R0.z;\n"
    1549     "ADD R0.xy, fragment.position, c[0];\n"
    1550     "MUL R0.xy, R0, c[1];\n"
     1529    "ADD R0.xy, fragment.position, c[7];\n"
     1530    "MUL R0.xy, R0, c[5];\n"
    15511531    "TEX R0, R0, texture[1], 2D;\n"
    15521532    "ADD R2, R2, -R1;\n"
    1553     "DP4 R0.x, R0, c[2];\n"
     1533    "DP4 R0.x, R0, c[8];\n"
    15541534    "MAD result.color, R0.x, R2, R1;\n"
    15551535    "END\n"
     
    15581538static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE =
    15591539    "!!ARBfp1.0\n"
    1560     "PARAM c[10] = { program.local[0..6],\n"
    1561     "           { 2, 4 },\n"
    1562     "           program.local[8..9] };\n"
    1563     "TEMP R0;\n"
    1564     "TEMP R1;\n"
    1565     "TEMP R2;\n"
    1566     "TEMP R3;\n"
    1567     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1568     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1569     "ADD R0.xyz, R0, c[5];\n"
     1540    "PARAM c[10] = { program.local[0..8],\n"
     1541    "           { 2, 4 } };\n"
     1542    "TEMP R0;\n"
     1543    "TEMP R1;\n"
     1544    "TEMP R2;\n"
     1545    "TEMP R3;\n"
     1546    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1547    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1548    "ADD R0.xyz, R0, c[4];\n"
    15701549    "RCP R0.z, R0.z;\n"
    15711550    "MUL R0.xy, R0, R0.z;\n"
    15721551    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    15731552    "ADD R0.z, R0, R0.w;\n"
    1574     "MUL R0.xy, R0, c[6];\n"
     1553    "MUL R0.xy, R0, c[0];\n"
    15751554    "ADD R0.x, R0, R0.y;\n"
    1576     "MUL R0.z, c[8].x, -R0;\n"
    1577     "MUL R0.y, R0.z, c[7];\n"
    1578     "MUL R0.x, R0, c[7];\n"
    1579     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1580     "RSQ R0.z, R0.y;\n"
    1581     "RCP R0.z, R0.z;\n"
    1582     "ADD R0.x, -R0, R0.z;\n"
    1583     "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
    1584     "MOV R0.y, c[7].x;\n"
    1585     "MUL R0.y, c[8].x, R0;\n"
    1586     "RCP R0.y, R0.y;\n"
    1587     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    1588     "MUL R0.x, R0, R0.y;\n"
    1589     "TEX R0, R0, texture[2], 1D;\n"
    1590     "ADD R3.xyz, R0, R1;\n"
    1591     "MUL R2.xyz, R1, R0.w;\n"
    1592     "MUL R0.xyz, R0, R1.w;\n"
    1593     "MIN R0.xyz, R0, R2;\n"
    1594     "MAD R2.xyz, -R0, c[7].x, R3;\n"
    1595     "ADD R0.z, R0.w, R1.w;\n"
    1596     "MAD R2.w, -R0, R1, R0.z;\n"
    1597     "ADD R0.xy, fragment.position, c[0];\n"
    1598     "MUL R0.xy, R0, c[1];\n"
    1599     "TEX R0, R0, texture[1], 2D;\n"
    1600     "ADD R2, R2, -R1;\n"
    1601     "DP4 R0.x, R0, c[2];\n"
    1602     "MAD result.color, R0.x, R2, R1;\n"
     1555    "MUL R0.z, -R0, c[1].x;\n"
     1556    "MUL R0.y, R0.x, c[9].x;\n"
     1557    "MUL R0.z, R0, c[9].y;\n"
     1558    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1559    "RSQ R0.z, R0.x;\n"
     1560    "MOV R0.x, c[9];\n"
     1561    "MUL R0.x, R0, c[1];\n"
     1562    "RCP R0.z, R0.z;\n"
     1563    "ADD R0.z, -R0.y, R0;\n"
     1564    "RCP R0.w, R0.x;\n"
     1565    "MUL R1.x, R0.z, R0.w;\n"
     1566    "MUL R0.xy, fragment.position, c[6];\n"
     1567    "TEX R0, R0, texture[0], 2D;\n"
     1568    "TEX R1, R1, texture[2], 1D;\n"
     1569    "ADD R2.xyz, R1, R0;\n"
     1570    "MUL R3.xyz, R1.w, R0;\n"
     1571    "MUL R1.xyz, R1, R0.w;\n"
     1572    "MIN R1.xyz, R1, R3;\n"
     1573    "MAD R2.xyz, -R1, c[9].x, R2;\n"
     1574    "ADD R1.z, R1.w, R0.w;\n"
     1575    "MAD R2.w, -R1, R0, R1.z;\n"
     1576    "ADD R1.xy, fragment.position, c[7];\n"
     1577    "MUL R1.xy, R1, c[5];\n"
     1578    "TEX R1, R1, texture[1], 2D;\n"
     1579    "ADD R2, R2, -R0;\n"
     1580    "DP4 R1.x, R1, c[8];\n"
     1581    "MAD result.color, R1.x, R2, R0;\n"
    16031582    "END\n"
    16041583    ;
     
    16061585static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION =
    16071586    "!!ARBfp1.0\n"
    1608     "PARAM c[10] = { program.local[0..6],\n"
    1609     "           { 2, 4, 1 },\n"
    1610     "           program.local[8..9] };\n"
    1611     "TEMP R0;\n"
    1612     "TEMP R1;\n"
    1613     "TEMP R2;\n"
    1614     "TEMP R3;\n"
    1615     "MUL R0.xyz, fragment.position.y, c[4];\n"
    1616     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    1617     "ADD R0.xyz, R0, c[5];\n"
    1618     "RCP R0.z, R0.z;\n"
    1619     "MUL R0.xy, R0, R0.z;\n"
    1620     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1621     "MUL R0.xy, R0, c[6];\n"
    1622     "ADD R0.z, R0, R0.w;\n"
    1623     "ADD R0.x, R0, R0.y;\n"
    1624     "MUL R0.z, c[8].x, -R0;\n"
    1625     "MUL R0.y, R0.z, c[7];\n"
    1626     "MUL R0.x, R0, c[7];\n"
    1627     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1628     "MOV R0.z, c[7].x;\n"
    1629     "RSQ R0.y, R0.y;\n"
    1630     "RCP R0.y, R0.y;\n"
    1631     "MUL R0.z, c[8].x, R0;\n"
    1632     "MUL R1.xy, fragment.position, c[9];\n"
    1633     "TEX R1, R1, texture[0], 2D;\n"
    1634     "ADD R0.x, -R0, R0.y;\n"
    1635     "RCP R0.z, R0.z;\n"
    1636     "MUL R0.x, R0, R0.z;\n"
    1637     "TEX R0, R0, texture[2], 1D;\n"
    1638     "MUL R2.xyz, R1, R0.w;\n"
    1639     "MAD R3.xyz, R0, R1.w, R2;\n"
    1640     "MUL R2.xyz, R0, R1;\n"
    1641     "MAD R2.xyz, -R2, c[7].x, R3;\n"
    1642     "ADD R2.w, -R1, c[7].z;\n"
    1643     "MAD R0.xyz, R0, R2.w, R2;\n"
    1644     "ADD R2.x, -R0.w, c[7].z;\n"
    1645     "MAD R2.xyz, R1, R2.x, R0;\n"
    1646     "ADD R0.z, R0.w, R1.w;\n"
    1647     "MAD R2.w, -R0, R1, R0.z;\n"
    1648     "ADD R0.xy, fragment.position, c[0];\n"
    1649     "MUL R0.xy, R0, c[1];\n"
    1650     "TEX R0, R0, texture[1], 2D;\n"
    1651     "ADD R2, R2, -R1;\n"
    1652     "DP4 R0.x, R0, c[2];\n"
    1653     "MAD result.color, R0.x, R2, R1;\n"
    1654     "END\n"
    1655     ;
    1656 
    1657 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
    1658     "!!ARBfp1.0\n"
    1659     "PARAM c[9] = { program.local[0..3],\n"
    1660     "           { 2, 4, 1 },\n"
    1661     "           program.local[5..8] };\n"
    1662     "TEMP R0;\n"
    1663     "TEMP R1;\n"
    1664     "TEMP R2;\n"
    1665     "TEMP R3;\n"
    1666     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1667     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1668     "ADD R0.xyz, R0, c[2];\n"
     1587    "PARAM c[10] = { program.local[0..8],\n"
     1588    "           { 2, 4, 1 } };\n"
     1589    "TEMP R0;\n"
     1590    "TEMP R1;\n"
     1591    "TEMP R2;\n"
     1592    "TEMP R3;\n"
     1593    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1594    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1595    "ADD R0.xyz, R0, c[4];\n"
    16691596    "RCP R0.z, R0.z;\n"
    16701597    "MUL R0.xy, R0, R0.z;\n"
    16711598    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    16721599    "ADD R0.z, R0, R0.w;\n"
    1673     "MUL R0.xy, R0, c[3];\n"
     1600    "MUL R0.xy, R0, c[0];\n"
    16741601    "ADD R0.x, R0, R0.y;\n"
    1675     "MUL R0.z, c[5].x, -R0;\n"
    1676     "MUL R0.y, R0.z, c[4];\n"
    1677     "MUL R0.x, R0, c[4];\n"
    1678     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1679     "RSQ R0.z, R0.y;\n"
    1680     "RCP R0.z, R0.z;\n"
    1681     "ADD R0.x, -R0, R0.z;\n"
    1682     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     1602    "MUL R0.z, -R0, c[1].x;\n"
     1603    "MUL R0.y, R0.x, c[9].x;\n"
     1604    "MUL R0.z, R0, c[9].y;\n"
     1605    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1606    "RSQ R0.z, R0.x;\n"
     1607    "MOV R0.x, c[9];\n"
     1608    "MUL R0.x, R0, c[1];\n"
     1609    "RCP R0.z, R0.z;\n"
     1610    "ADD R0.z, -R0.y, R0;\n"
     1611    "RCP R0.w, R0.x;\n"
     1612    "MUL R1.x, R0.z, R0.w;\n"
     1613    "MUL R0.xy, fragment.position, c[6];\n"
     1614    "TEX R0, R0, texture[0], 2D;\n"
     1615    "TEX R1, R1, texture[2], 1D;\n"
     1616    "MUL R2.xyz, R1.w, R0;\n"
     1617    "MAD R3.xyz, R1, R0.w, R2;\n"
     1618    "MUL R2.xyz, R1, R0;\n"
     1619    "MAD R2.xyz, -R2, c[9].x, R3;\n"
     1620    "ADD R2.w, -R0, c[9].z;\n"
     1621    "MAD R1.xyz, R1, R2.w, R2;\n"
     1622    "ADD R2.x, -R1.w, c[9].z;\n"
     1623    "MAD R2.xyz, R0, R2.x, R1;\n"
     1624    "ADD R1.z, R1.w, R0.w;\n"
     1625    "MAD R2.w, -R1, R0, R1.z;\n"
     1626    "ADD R1.xy, fragment.position, c[7];\n"
     1627    "MUL R1.xy, R1, c[5];\n"
     1628    "TEX R1, R1, texture[1], 2D;\n"
     1629    "ADD R2, R2, -R0;\n"
     1630    "DP4 R1.x, R1, c[8];\n"
     1631    "MAD result.color, R1.x, R2, R0;\n"
     1632    "END\n"
     1633    ;
     1634
     1635static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
     1636    "!!ARBfp1.0\n"
     1637    "PARAM c[9] = { program.local[0..7],\n"
     1638    "           { 2, 4, 1 } };\n"
     1639    "TEMP R0;\n"
     1640    "TEMP R1;\n"
     1641    "TEMP R2;\n"
     1642    "TEMP R3;\n"
     1643    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1644    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1645    "ADD R0.xyz, R0, c[4];\n"
     1646    "RCP R0.z, R0.z;\n"
     1647    "MUL R0.xy, R0, R0.z;\n"
     1648    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     1649    "ADD R0.z, R0, R0.w;\n"
     1650    "MUL R0.xy, R0, c[0];\n"
     1651    "ADD R0.x, R0, R0.y;\n"
     1652    "MUL R0.z, -R0, c[1].x;\n"
     1653    "MUL R0.y, R0.x, c[8].x;\n"
     1654    "MUL R0.z, R0, c[8].y;\n"
     1655    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1656    "RSQ R0.x, R0.x;\n"
     1657    "RCP R0.z, R0.x;\n"
     1658    "ADD R0.y, -R0, R0.z;\n"
     1659    "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    16831660    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    1684     "MUL R2.xyz, R1, c[8].y;\n"
    1685     "MOV R0.y, c[4].x;\n"
    1686     "MUL R0.y, c[5].x, R0;\n"
    1687     "RCP R0.y, R0.y;\n"
    1688     "MUL R0.x, R0, R0.y;\n"
     1661    "MUL R2.xyz, R1, c[5].y;\n"
     1662    "MOV R0.x, c[8];\n"
     1663    "MUL R0.x, R0, c[1];\n"
     1664    "RCP R0.x, R0.x;\n"
     1665    "MUL R0.x, R0.y, R0;\n"
    16891666    "TEX R0, R0, texture[1], 1D;\n"
    1690     "MUL R3.xyz, R2, R0.w;\n"
    1691     "MUL R2.xyz, R0, c[8].x;\n"
    1692     "MAD R2.xyz, R2, R1.w, R3;\n"
    1693     "ADD R2.w, -R1, c[4].z;\n"
    1694     "MUL R0.xyz, R0, c[7].y;\n"
    1695     "MAD R0.xyz, R0, R2.w, R2;\n"
    1696     "ADD R2.x, -R0.w, c[4].z;\n"
    1697     "MUL R1.xyz, R1, c[7].z;\n"
    1698     "MAD result.color.xyz, R1, R2.x, R0;\n"
     1667    "MUL R3.xyz, R0.w, R2;\n"
     1668    "MUL R2.xyz, R0, c[5].x;\n"
     1669    "MAD R2.xyz, R1.w, R2, R3;\n"
     1670    "ADD R2.w, -R1, c[8].z;\n"
     1671    "MUL R0.xyz, R0, c[6].y;\n"
     1672    "MAD R0.xyz, R2.w, R0, R2;\n"
     1673    "ADD R2.x, -R0.w, c[8].z;\n"
     1674    "MUL R1.xyz, R1, c[6].z;\n"
     1675    "MAD result.color.xyz, R2.x, R1, R0;\n"
    16991676    "MUL R0.x, R0.w, R1.w;\n"
    17001677    "MUL R0.z, R1.w, R2.x;\n"
    17011678    "MUL R0.y, R0.w, R2.w;\n"
    1702     "DP3 result.color.w, R0, c[7];\n"
     1679    "DP3 result.color.w, R0, c[6];\n"
    17031680    "END\n"
    17041681    ;
     
    17061683static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
    17071684    "!!ARBfp1.0\n"
    1708     "PARAM c[7] = { program.local[0..3],\n"
    1709     "           { 2, 4, 1 },\n"
    1710     "           program.local[5..6] };\n"
    1711     "TEMP R0;\n"
    1712     "TEMP R1;\n"
    1713     "TEMP R2;\n"
    1714     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1715     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1716     "ADD R0.xyz, R0, c[2];\n"
     1685    "PARAM c[7] = { program.local[0..5],\n"
     1686    "           { 2, 4, 1 } };\n"
     1687    "TEMP R0;\n"
     1688    "TEMP R1;\n"
     1689    "TEMP R2;\n"
     1690    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1691    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1692    "ADD R0.xyz, R0, c[4];\n"
    17171693    "RCP R0.z, R0.z;\n"
    17181694    "MUL R0.xy, R0, R0.z;\n"
    17191695    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1720     "MUL R0.xy, R0, c[3];\n"
    17211696    "ADD R0.z, R0, R0.w;\n"
     1697    "MUL R0.xy, R0, c[0];\n"
    17221698    "ADD R0.x, R0, R0.y;\n"
    1723     "MUL R0.z, c[5].x, -R0;\n"
    1724     "MUL R0.y, R0.z, c[4];\n"
    1725     "MUL R0.x, R0, c[4];\n"
    1726     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1727     "RSQ R0.y, R0.y;\n"
    1728     "RCP R0.z, R0.y;\n"
    1729     "ADD R0.x, -R0, R0.z;\n"
    1730     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     1699    "MUL R0.z, -R0, c[1].x;\n"
     1700    "MUL R0.y, R0.x, c[6].x;\n"
     1701    "MUL R0.z, R0, c[6].y;\n"
     1702    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1703    "RSQ R0.x, R0.x;\n"
     1704    "RCP R0.z, R0.x;\n"
     1705    "ADD R0.y, -R0, R0.z;\n"
     1706    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
    17311707    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    1732     "MOV R0.y, c[4].x;\n"
    1733     "MUL R0.y, c[5].x, R0;\n"
    1734     "RCP R0.y, R0.y;\n"
    1735     "MUL R0.x, R0, R0.y;\n"
     1708    "MOV R0.x, c[6];\n"
     1709    "MUL R0.x, R0, c[1];\n"
     1710    "RCP R0.x, R0.x;\n"
     1711    "MUL R0.x, R0.y, R0;\n"
    17361712    "TEX R0, R0, texture[1], 1D;\n"
    1737     "ADD R2.x, -R1.w, c[4].z;\n"
     1713    "ADD R2.x, -R1.w, c[6].z;\n"
    17381714    "MUL R2.xyz, R0, R2.x;\n"
    17391715    "MAD R0.xyz, R0, R1, R2;\n"
    17401716    "ADD R2.x, R0.w, R1.w;\n"
    1741     "ADD R2.y, -R0.w, c[4].z;\n"
     1717    "ADD R2.y, -R0.w, c[6].z;\n"
    17421718    "MAD result.color.xyz, R1, R2.y, R0;\n"
    17431719    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    17471723static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK =
    17481724    "!!ARBfp1.0\n"
    1749     "PARAM c[7] = { program.local[0..3],\n"
    1750     "           { 2, 4 },\n"
    1751     "           program.local[5..6] };\n"
    1752     "TEMP R0;\n"
    1753     "TEMP R1;\n"
    1754     "TEMP R2;\n"
    1755     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1756     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1757     "ADD R0.xyz, R0, c[2];\n"
     1725    "PARAM c[7] = { program.local[0..5],\n"
     1726    "           { 2, 4 } };\n"
     1727    "TEMP R0;\n"
     1728    "TEMP R1;\n"
     1729    "TEMP R2;\n"
     1730    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1731    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1732    "ADD R0.xyz, R0, c[4];\n"
    17581733    "RCP R0.z, R0.z;\n"
    17591734    "MUL R0.xy, R0, R0.z;\n"
    17601735    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    17611736    "ADD R0.z, R0, R0.w;\n"
    1762     "MUL R0.xy, R0, c[3];\n"
     1737    "MUL R0.xy, R0, c[0];\n"
    17631738    "ADD R0.x, R0, R0.y;\n"
    1764     "MUL R0.z, c[5].x, -R0;\n"
    1765     "MUL R0.y, R0.z, c[4];\n"
    1766     "MUL R0.x, R0, c[4];\n"
    1767     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1768     "RSQ R0.z, R0.y;\n"
    1769     "RCP R0.z, R0.z;\n"
    1770     "ADD R0.x, -R0, R0.z;\n"
    1771     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
    1772     "MOV R0.y, c[4].x;\n"
    1773     "MUL R0.y, c[5].x, R0;\n"
    1774     "RCP R0.y, R0.y;\n"
     1739    "MUL R0.z, -R0, c[1].x;\n"
     1740    "MUL R0.y, R0.x, c[6].x;\n"
     1741    "MUL R0.z, R0, c[6].y;\n"
     1742    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1743    "RSQ R0.z, R0.x;\n"
     1744    "MOV R0.x, c[6];\n"
     1745    "MUL R0.w, R0.x, c[1].x;\n"
     1746    "RCP R0.z, R0.z;\n"
     1747    "ADD R0.x, -R0.y, R0.z;\n"
     1748    "RCP R0.y, R0.w;\n"
     1749    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
    17751750    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    17761751    "MUL R0.x, R0, R0.y;\n"
     
    17831758static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK =
    17841759    "!!ARBfp1.0\n"
    1785     "PARAM c[7] = { program.local[0..3],\n"
    1786     "           { 2, 4, 1 },\n"
    1787     "           program.local[5..6] };\n"
    1788     "TEMP R0;\n"
    1789     "TEMP R1;\n"
    1790     "TEMP R2;\n"
    1791     "TEMP R3;\n"
    1792     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1793     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1794     "ADD R0.xyz, R0, c[2];\n"
     1760    "PARAM c[7] = { program.local[0..5],\n"
     1761    "           { 2, 4, 1 } };\n"
     1762    "TEMP R0;\n"
     1763    "TEMP R1;\n"
     1764    "TEMP R2;\n"
     1765    "TEMP R3;\n"
     1766    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1767    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1768    "ADD R0.xyz, R0, c[4];\n"
    17951769    "RCP R0.z, R0.z;\n"
    17961770    "MUL R0.xy, R0, R0.z;\n"
    17971771    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1798     "MUL R0.xy, R0, c[3];\n"
    17991772    "ADD R0.z, R0, R0.w;\n"
     1773    "MUL R0.xy, R0, c[0];\n"
    18001774    "ADD R0.x, R0, R0.y;\n"
    1801     "MUL R0.z, c[5].x, -R0;\n"
    1802     "MUL R0.y, R0.z, c[4];\n"
    1803     "MUL R0.x, R0, c[4];\n"
    1804     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1805     "MOV R0.z, c[4].x;\n"
    1806     "RSQ R0.y, R0.y;\n"
    1807     "RCP R0.y, R0.y;\n"
    1808     "MUL R0.z, c[5].x, R0;\n"
    1809     "MUL R1.xy, fragment.position, c[6];\n"
     1775    "MUL R0.y, R0.x, c[6].x;\n"
     1776    "MOV R0.x, c[6];\n"
     1777    "MUL R0.z, -R0, c[1].x;\n"
     1778    "MUL R0.z, R0, c[6].y;\n"
     1779    "MAD R0.z, R0.y, R0.y, -R0;\n"
     1780    "MUL R1.xy, fragment.position, c[5];\n"
    18101781    "TEX R1, R1, texture[0], 2D;\n"
    1811     "ADD R0.x, -R0, R0.y;\n"
    1812     "RCP R0.z, R0.z;\n"
     1782    "MUL R0.w, R0.x, c[1].x;\n"
     1783    "RSQ R0.z, R0.z;\n"
     1784    "RCP R0.x, R0.z;\n"
     1785    "ADD R2.w, -R1, c[6].z;\n"
     1786    "RCP R0.z, R0.w;\n"
     1787    "ADD R0.x, -R0.y, R0;\n"
    18131788    "MUL R0.x, R0, R0.z;\n"
    18141789    "TEX R0, R0, texture[1], 1D;\n"
     
    18161791    "ADD R2.xyz, R1.w, -R1;\n"
    18171792    "MUL R2.xyz, R2, R3;\n"
    1818     "ADD R2.w, -R1, c[4].z;\n"
    1819     "MUL R2.xyz, R2, c[4].x;\n"
     1793    "MUL R2.xyz, R2, c[6].x;\n"
    18201794    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    18211795    "MAD R2.xyz, R0, R2.w, R2;\n"
    18221796    "MUL R3.xyz, R0, R2.w;\n"
    18231797    "MUL R0.xyz, R0, R1;\n"
    1824     "ADD R2.w, -R0, c[4].z;\n"
    1825     "MAD R0.xyz, R0, c[4].x, R3;\n"
     1798    "ADD R2.w, -R0, c[6].z;\n"
     1799    "MAD R0.xyz, R0, c[6].x, R3;\n"
    18261800    "MAD R0.xyz, R1, R2.w, R0;\n"
    18271801    "MAD R2.xyz, R1, R2.w, R2;\n"
    1828     "MUL R1.xyz, R1, c[4].x;\n"
     1802    "MUL R1.xyz, R1, c[6].x;\n"
    18291803    "ADD R2.w, R0, R1;\n"
    18301804    "ADD R2.xyz, R2, -R0;\n"
     
    18371811static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK =
    18381812    "!!ARBfp1.0\n"
    1839     "PARAM c[7] = { program.local[0..3],\n"
    1840     "           { 2, 4, 1 },\n"
    1841     "           program.local[5..6] };\n"
    1842     "TEMP R0;\n"
    1843     "TEMP R1;\n"
    1844     "TEMP R2;\n"
    1845     "TEMP R3;\n"
    1846     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1847     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1848     "ADD R0.xyz, R0, c[2];\n"
     1813    "PARAM c[7] = { program.local[0..5],\n"
     1814    "           { 2, 4, 1 } };\n"
     1815    "TEMP R0;\n"
     1816    "TEMP R1;\n"
     1817    "TEMP R2;\n"
     1818    "TEMP R3;\n"
     1819    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1820    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1821    "ADD R0.xyz, R0, c[4];\n"
    18491822    "RCP R0.z, R0.z;\n"
    18501823    "MUL R0.xy, R0, R0.z;\n"
    18511824    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1852     "MUL R0.xy, R0, c[3];\n"
    18531825    "ADD R0.z, R0, R0.w;\n"
     1826    "MUL R0.xy, R0, c[0];\n"
    18541827    "ADD R0.x, R0, R0.y;\n"
    1855     "MUL R0.z, c[5].x, -R0;\n"
    1856     "MUL R0.y, R0.z, c[4];\n"
    1857     "MUL R0.x, R0, c[4];\n"
    1858     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1859     "MOV R0.z, c[4].x;\n"
    1860     "RSQ R0.y, R0.y;\n"
    1861     "RCP R0.y, R0.y;\n"
    1862     "MUL R0.z, c[5].x, R0;\n"
    1863     "MUL R1.xy, fragment.position, c[6];\n"
    1864     "TEX R1, R1, texture[0], 2D;\n"
    1865     "ADD R0.x, -R0, R0.y;\n"
    1866     "RCP R0.z, R0.z;\n"
     1828    "MUL R0.z, -R0, c[1].x;\n"
     1829    "MUL R0.y, R0.x, c[6].x;\n"
     1830    "MUL R0.z, R0, c[6].y;\n"
     1831    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1832    "RSQ R0.z, R0.x;\n"
     1833    "MOV R0.x, c[6];\n"
     1834    "MUL R0.w, R0.x, c[1].x;\n"
     1835    "RCP R0.z, R0.z;\n"
     1836    "ADD R0.x, -R0.y, R0.z;\n"
     1837    "RCP R0.y, R0.w;\n"
     1838    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     1839    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     1840    "MUL R0.x, R0, R0.y;\n"
     1841    "TEX R0, R0, texture[1], 1D;\n"
     1842    "MUL R2.xyz, R0, R1.w;\n"
     1843    "MUL R3.xyz, R0.w, R1;\n"
     1844    "MIN R2.xyz, R2, R3;\n"
     1845    "ADD R2.w, -R1, c[6].z;\n"
     1846    "MAD R0.xyz, R0, R2.w, R2;\n"
     1847    "ADD R2.x, R0.w, R1.w;\n"
     1848    "ADD R2.y, -R0.w, c[6].z;\n"
     1849    "MAD result.color.xyz, R1, R2.y, R0;\n"
     1850    "MAD result.color.w, -R0, R1, R2.x;\n"
     1851    "END\n"
     1852    ;
     1853
     1854static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
     1855    "!!ARBfp1.0\n"
     1856    "PARAM c[7] = { program.local[0..5],\n"
     1857    "           { 2, 4, 1 } };\n"
     1858    "TEMP R0;\n"
     1859    "TEMP R1;\n"
     1860    "TEMP R2;\n"
     1861    "TEMP R3;\n"
     1862    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1863    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1864    "ADD R0.xyz, R0, c[4];\n"
     1865    "RCP R0.z, R0.z;\n"
     1866    "MUL R0.xy, R0, R0.z;\n"
     1867    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     1868    "ADD R0.z, R0, R0.w;\n"
     1869    "MUL R0.xy, R0, c[0];\n"
     1870    "ADD R0.x, R0, R0.y;\n"
     1871    "MUL R0.z, -R0, c[1].x;\n"
     1872    "MUL R0.y, R0.x, c[6].x;\n"
     1873    "MUL R0.z, R0, c[6].y;\n"
     1874    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1875    "RSQ R0.z, R0.x;\n"
     1876    "MOV R0.x, c[6];\n"
     1877    "MUL R0.w, R0.x, c[1].x;\n"
     1878    "RCP R0.z, R0.z;\n"
     1879    "ADD R0.x, -R0.y, R0.z;\n"
     1880    "RCP R0.y, R0.w;\n"
     1881    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     1882    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     1883    "MUL R0.x, R0, R0.y;\n"
     1884    "TEX R0, R0, texture[1], 1D;\n"
     1885    "MUL R2.xyz, R0, R1.w;\n"
     1886    "MUL R3.xyz, R0.w, R1;\n"
     1887    "MAX R2.xyz, R2, R3;\n"
     1888    "ADD R2.w, -R1, c[6].z;\n"
     1889    "MAD R0.xyz, R0, R2.w, R2;\n"
     1890    "ADD R2.x, R0.w, R1.w;\n"
     1891    "ADD R2.y, -R0.w, c[6].z;\n"
     1892    "MAD result.color.xyz, R1, R2.y, R0;\n"
     1893    "MAD result.color.w, -R0, R1, R2.x;\n"
     1894    "END\n"
     1895    ;
     1896
     1897static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
     1898    "!!ARBfp1.0\n"
     1899    "PARAM c[7] = { program.local[0..5],\n"
     1900    "           { 2, 4, 1, 1e-006 } };\n"
     1901    "TEMP R0;\n"
     1902    "TEMP R1;\n"
     1903    "TEMP R2;\n"
     1904    "TEMP R3;\n"
     1905    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1906    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1907    "ADD R0.xyz, R0, c[4];\n"
     1908    "RCP R0.z, R0.z;\n"
     1909    "MUL R0.xy, R0, R0.z;\n"
     1910    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     1911    "ADD R0.z, R0, R0.w;\n"
     1912    "MUL R0.xy, R0, c[0];\n"
     1913    "ADD R0.x, R0, R0.y;\n"
     1914    "MUL R0.y, R0.x, c[6].x;\n"
     1915    "MOV R0.x, c[6];\n"
     1916    "MUL R0.z, -R0, c[1].x;\n"
     1917    "MUL R0.z, R0, c[6].y;\n"
     1918    "MAD R0.z, R0.y, R0.y, -R0;\n"
     1919    "MUL R0.w, R0.x, c[1].x;\n"
     1920    "RSQ R0.z, R0.z;\n"
     1921    "RCP R0.x, R0.z;\n"
     1922    "RCP R0.z, R0.w;\n"
     1923    "ADD R0.x, -R0.y, R0;\n"
    18671924    "MUL R0.x, R0, R0.z;\n"
    18681925    "TEX R0, R0, texture[1], 1D;\n"
    1869     "MUL R2.xyz, R0, R1.w;\n"
    1870     "MUL R3.xyz, R1, R0.w;\n"
    1871     "MIN R2.xyz, R2, R3;\n"
    1872     "ADD R2.w, -R1, c[4].z;\n"
    1873     "MAD R0.xyz, R0, R2.w, R2;\n"
    1874     "ADD R2.x, R0.w, R1.w;\n"
    1875     "ADD R2.y, -R0.w, c[4].z;\n"
    1876     "MAD result.color.xyz, R1, R2.y, R0;\n"
    1877     "MAD result.color.w, -R0, R1, R2.x;\n"
    1878     "END\n"
    1879     ;
    1880 
    1881 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
    1882     "!!ARBfp1.0\n"
    1883     "PARAM c[7] = { program.local[0..3],\n"
    1884     "           { 2, 4, 1 },\n"
    1885     "           program.local[5..6] };\n"
    1886     "TEMP R0;\n"
    1887     "TEMP R1;\n"
    1888     "TEMP R2;\n"
    1889     "TEMP R3;\n"
    1890     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1891     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1892     "ADD R0.xyz, R0, c[2];\n"
    1893     "RCP R0.z, R0.z;\n"
    1894     "MUL R0.xy, R0, R0.z;\n"
    1895     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1896     "MUL R0.xy, R0, c[3];\n"
    1897     "ADD R0.z, R0, R0.w;\n"
    1898     "ADD R0.x, R0, R0.y;\n"
    1899     "MUL R0.z, c[5].x, -R0;\n"
    1900     "MUL R0.y, R0.z, c[4];\n"
    1901     "MUL R0.x, R0, c[4];\n"
    1902     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1903     "MOV R0.z, c[4].x;\n"
    1904     "RSQ R0.y, R0.y;\n"
    1905     "RCP R0.y, R0.y;\n"
    1906     "MUL R0.z, c[5].x, R0;\n"
    1907     "MUL R1.xy, fragment.position, c[6];\n"
     1926    "MAX R1.x, R0.w, c[6].w;\n"
     1927    "RCP R1.x, R1.x;\n"
     1928    "MAD R1.xyz, -R0, R1.x, c[6].z;\n"
     1929    "MAX R2.xyz, R1, c[6].w;\n"
     1930    "MUL R1.xy, fragment.position, c[5];\n"
    19081931    "TEX R1, R1, texture[0], 2D;\n"
    1909     "ADD R0.x, -R0, R0.y;\n"
    1910     "RCP R0.z, R0.z;\n"
    1911     "MUL R0.x, R0, R0.z;\n"
    1912     "TEX R0, R0, texture[1], 1D;\n"
    1913     "MUL R2.xyz, R0, R1.w;\n"
    1914     "MUL R3.xyz, R1, R0.w;\n"
    1915     "MAX R2.xyz, R2, R3;\n"
    1916     "ADD R2.w, -R1, c[4].z;\n"
    1917     "MAD R0.xyz, R0, R2.w, R2;\n"
    1918     "ADD R2.x, R0.w, R1.w;\n"
    1919     "ADD R2.y, -R0.w, c[4].z;\n"
    1920     "MAD result.color.xyz, R1, R2.y, R0;\n"
    1921     "MAD result.color.w, -R0, R1, R2.x;\n"
    1922     "END\n"
    1923     ;
    1924 
    1925 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
    1926     "!!ARBfp1.0\n"
    1927     "PARAM c[7] = { program.local[0..3],\n"
    1928     "           { 2, 4, 1, 1e-06 },\n"
    1929     "           program.local[5..6] };\n"
    1930     "TEMP R0;\n"
    1931     "TEMP R1;\n"
    1932     "TEMP R2;\n"
    1933     "TEMP R3;\n"
    1934     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1935     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1936     "ADD R0.xyz, R0, c[2];\n"
    1937     "RCP R0.z, R0.z;\n"
    1938     "MUL R0.xy, R0, R0.z;\n"
    1939     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1940     "MUL R0.xy, R0, c[3];\n"
    1941     "ADD R0.z, R0, R0.w;\n"
    1942     "ADD R0.x, R0, R0.y;\n"
    1943     "MUL R0.z, c[5].x, -R0;\n"
    1944     "MUL R0.y, R0.z, c[4];\n"
    1945     "MUL R0.x, R0, c[4];\n"
    1946     "MAD R0.y, R0.x, R0.x, -R0;\n"
    1947     "MOV R0.z, c[4].x;\n"
    1948     "RSQ R0.y, R0.y;\n"
    1949     "RCP R0.y, R0.y;\n"
    1950     "MUL R0.z, c[5].x, R0;\n"
    1951     "ADD R0.x, -R0, R0.y;\n"
    1952     "RCP R0.z, R0.z;\n"
    1953     "MUL R0.x, R0, R0.z;\n"
    1954     "TEX R0, R0, texture[1], 1D;\n"
    1955     "MAX R1.x, R0.w, c[4].w;\n"
    1956     "RCP R1.x, R1.x;\n"
    1957     "MAD R1.xyz, -R0, R1.x, c[4].z;\n"
    1958     "MAX R2.xyz, R1, c[4].w;\n"
    1959     "MUL R1.xy, fragment.position, c[6];\n"
    1960     "TEX R1, R1, texture[0], 2D;\n"
    1961     "ADD R2.w, -R0, c[4].z;\n"
     1932    "ADD R2.w, -R0, c[6].z;\n"
    19621933    "MUL R3.xyz, R1, R2.w;\n"
    1963     "ADD R2.w, -R1, c[4].z;\n"
     1934    "ADD R2.w, -R1, c[6].z;\n"
    19641935    "MAD R3.xyz, R0, R2.w, R3;\n"
    1965     "MUL R1.xyz, R1, R0.w;\n"
     1936    "MUL R1.xyz, R0.w, R1;\n"
    19661937    "MAD R0.xyz, R0, R1.w, R1;\n"
    19671938    "MUL R2.w, R0, R1;\n"
     
    19811952static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK =
    19821953    "!!ARBfp1.0\n"
    1983     "PARAM c[7] = { program.local[0..3],\n"
    1984     "           { 2, 4, 1, 9.9999997e-06 },\n"
    1985     "           program.local[5..6] };\n"
     1954    "PARAM c[7] = { program.local[0..5],\n"
     1955    "           { 2, 4, 1, 9.9999997e-006 } };\n"
    19861956    "TEMP R0;\n"
    19871957    "TEMP R1;\n"
     
    19901960    "TEMP R4;\n"
    19911961    "TEMP R5;\n"
    1992     "MUL R0.xyz, fragment.position.y, c[1];\n"
    1993     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    1994     "ADD R0.xyz, R0, c[2];\n"
     1962    "MUL R0.xyz, fragment.position.y, c[3];\n"
     1963    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     1964    "ADD R0.xyz, R0, c[4];\n"
    19951965    "RCP R0.z, R0.z;\n"
    19961966    "MUL R0.xy, R0, R0.z;\n"
    19971967    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    1998     "MUL R0.xy, R0, c[3];\n"
    19991968    "ADD R0.z, R0, R0.w;\n"
     1969    "MUL R0.xy, R0, c[0];\n"
    20001970    "ADD R0.x, R0, R0.y;\n"
    2001     "MUL R0.z, c[5].x, -R0;\n"
    2002     "MUL R0.y, R0.z, c[4];\n"
    2003     "MUL R0.x, R0, c[4];\n"
    2004     "MAD R0.y, R0.x, R0.x, -R0;\n"
    2005     "MOV R0.z, c[4].x;\n"
    2006     "RSQ R0.y, R0.y;\n"
    2007     "RCP R0.y, R0.y;\n"
    2008     "MUL R0.z, c[5].x, R0;\n"
    2009     "MUL R1.xy, fragment.position, c[6];\n"
    2010     "TEX R1, R1, texture[0], 2D;\n"
    2011     "ADD R0.x, -R0, R0.y;\n"
    2012     "RCP R0.z, R0.z;\n"
    2013     "MUL R0.x, R0, R0.z;\n"
     1971    "MUL R0.z, -R0, c[1].x;\n"
     1972    "MUL R0.y, R0.x, c[6].x;\n"
     1973    "MUL R0.z, R0, c[6].y;\n"
     1974    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     1975    "RSQ R0.z, R0.x;\n"
     1976    "MOV R0.x, c[6];\n"
     1977    "MUL R0.w, R0.x, c[1].x;\n"
     1978    "RCP R0.z, R0.z;\n"
     1979    "ADD R0.x, -R0.y, R0.z;\n"
     1980    "RCP R0.y, R0.w;\n"
     1981    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     1982    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     1983    "MUL R0.x, R0, R0.y;\n"
    20141984    "TEX R0, R0, texture[1], 1D;\n"
    2015     "MUL R2.xyz, R1, R0.w;\n"
     1985    "MUL R2.xyz, R0.w, R1;\n"
    20161986    "MAD R3.xyz, R0, R1.w, R2;\n"
    2017     "ADD R2.w, -R1, c[4].z;\n"
     1987    "ADD R2.w, -R1, c[6].z;\n"
    20181988    "MAD R2.xyz, -R0.w, R1.w, R3;\n"
    20191989    "MUL R4.xyz, R0.w, R2;\n"
    2020     "MAX R2.xyz, R0, c[4].w;\n"
     1990    "MAX R2.xyz, R0, c[6].w;\n"
    20211991    "MUL R5.xyz, R0, R2.w;\n"
    2022     "ADD R3.w, -R0, c[4].z;\n"
     1992    "ADD R3.w, -R0, c[6].z;\n"
    20231993    "RCP R2.x, R2.x;\n"
    20241994    "RCP R2.y, R2.y;\n"
     
    20392009static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
    20402010    "!!ARBfp1.0\n"
    2041     "PARAM c[7] = { program.local[0..3],\n"
    2042     "           { 2, 4, 1 },\n"
    2043     "           program.local[5..6] };\n"
     2011    "PARAM c[7] = { program.local[0..5],\n"
     2012    "           { 2, 4, 1 } };\n"
    20442013    "TEMP R0;\n"
    20452014    "TEMP R1;\n"
     
    20472016    "TEMP R3;\n"
    20482017    "TEMP R4;\n"
    2049     "MUL R0.xyz, fragment.position.y, c[1];\n"
    2050     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    2051     "ADD R0.xyz, R0, c[2];\n"
     2018    "MUL R0.xyz, fragment.position.y, c[3];\n"
     2019    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     2020    "ADD R0.xyz, R0, c[4];\n"
    20522021    "RCP R0.z, R0.z;\n"
    20532022    "MUL R0.xy, R0, R0.z;\n"
    20542023    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    2055     "MUL R0.xy, R0, c[3];\n"
    20562024    "ADD R0.z, R0, R0.w;\n"
     2025    "MUL R0.xy, R0, c[0];\n"
    20572026    "ADD R0.x, R0, R0.y;\n"
    2058     "MUL R0.z, c[5].x, -R0;\n"
    2059     "MUL R0.y, R0.z, c[4];\n"
    2060     "MUL R0.x, R0, c[4];\n"
    2061     "MAD R0.y, R0.x, R0.x, -R0;\n"
    2062     "MOV R0.z, c[4].x;\n"
    2063     "RSQ R0.y, R0.y;\n"
    2064     "RCP R0.y, R0.y;\n"
    2065     "MUL R0.z, c[5].x, R0;\n"
    2066     "MUL R1.xy, fragment.position, c[6];\n"
     2027    "MUL R0.y, R0.x, c[6].x;\n"
     2028    "MOV R0.x, c[6];\n"
     2029    "MUL R0.z, -R0, c[1].x;\n"
     2030    "MUL R0.z, R0, c[6].y;\n"
     2031    "MAD R0.z, R0.y, R0.y, -R0;\n"
     2032    "MUL R1.xy, fragment.position, c[5];\n"
    20672033    "TEX R1, R1, texture[0], 2D;\n"
    2068     "ADD R0.x, -R0, R0.y;\n"
    2069     "RCP R0.z, R0.z;\n"
     2034    "MUL R0.w, R0.x, c[1].x;\n"
     2035    "RSQ R0.z, R0.z;\n"
     2036    "RCP R0.x, R0.z;\n"
     2037    "ADD R2.w, -R1, c[6].z;\n"
     2038    "RCP R0.z, R0.w;\n"
     2039    "ADD R0.x, -R0.y, R0;\n"
    20702040    "MUL R0.x, R0, R0.z;\n"
    20712041    "TEX R0, R0, texture[1], 1D;\n"
    2072     "ADD R2.w, -R1, c[4].z;\n"
    20732042    "ADD R3.xyz, R0.w, -R0;\n"
    20742043    "ADD R2.xyz, R1.w, -R1;\n"
    20752044    "MUL R2.xyz, R2, R3;\n"
    2076     "MUL R2.xyz, R2, c[4].x;\n"
     2045    "MUL R2.xyz, R2, c[6].x;\n"
    20772046    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    20782047    "MUL R4.xyz, R0, R2.w;\n"
    20792048    "MUL R3.xyz, R0, R1;\n"
    20802049    "MAD R2.xyz, R0, R2.w, R2;\n"
    2081     "ADD R2.w, -R0, c[4].z;\n"
    2082     "MUL R0.xyz, R0, c[4].x;\n"
     2050    "ADD R2.w, -R0, c[6].z;\n"
     2051    "MUL R0.xyz, R0, c[6].x;\n"
    20832052    "MAD R2.xyz, R1, R2.w, R2;\n"
    2084     "MAD R3.xyz, R3, c[4].x, R4;\n"
     2053    "MAD R3.xyz, R3, c[6].x, R4;\n"
    20852054    "MAD R1.xyz, R1, R2.w, R3;\n"
    20862055    "ADD R2.w, R0, R1;\n"
     
    20942063static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
    20952064    "!!ARBfp1.0\n"
    2096     "PARAM c[8] = { program.local[0..3],\n"
    2097     "           { 2, 4, 1, 9.9999997e-06 },\n"
    2098     "           program.local[5..6],\n"
    2099     "           { 8, 3 } };\n"
     2065    "PARAM c[8] = { program.local[0..5],\n"
     2066    "           { 2, 4, 1, 9.9999997e-006 },\n"
     2067    "           { 16, 12, 3 } };\n"
    21002068    "TEMP R0;\n"
    21012069    "TEMP R1;\n"
     
    21052073    "TEMP R5;\n"
    21062074    "TEMP R6;\n"
    2107     "MUL R0.xyz, fragment.position.y, c[1];\n"
    2108     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    2109     "ADD R0.xyz, R0, c[2];\n"
     2075    "MUL R0.xyz, fragment.position.y, c[3];\n"
     2076    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     2077    "ADD R0.xyz, R0, c[4];\n"
    21102078    "RCP R0.z, R0.z;\n"
    21112079    "MUL R0.xy, R0, R0.z;\n"
    21122080    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    2113     "MUL R0.xy, R0, c[3];\n"
    21142081    "ADD R0.z, R0, R0.w;\n"
     2082    "MUL R0.xy, R0, c[0];\n"
    21152083    "ADD R0.x, R0, R0.y;\n"
    2116     "MUL R0.z, c[5].x, -R0;\n"
    2117     "MUL R0.y, R0.z, c[4];\n"
    2118     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     2084    "MUL R0.z, -R0, c[1].x;\n"
     2085    "MUL R0.y, R0.z, c[6];\n"
     2086    "MUL R0.x, R0, c[6];\n"
     2087    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
    21192088    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    2120     "MUL R0.x, R0, c[4];\n"
    21212089    "MAD R0.y, R0.x, R0.x, -R0;\n"
    2122     "MAX R0.z, R1.w, c[4].w;\n"
    2123     "RCP R2.w, R0.z;\n"
    2124     "MUL R2.xyz, R1, R2.w;\n"
    2125     "MUL R6.xyz, -R2, c[7].x;\n"
    2126     "MAD R3.xyz, -R1, R2.w, c[4].z;\n"
    21272090    "RSQ R0.y, R0.y;\n"
    21282091    "RCP R0.y, R0.y;\n"
    2129     "ADD R0.x, -R0, R0.y;\n"
    2130     "MOV R0.y, c[4].x;\n"
    2131     "MUL R0.y, c[5].x, R0;\n"
    2132     "RCP R0.y, R0.y;\n"
     2092    "ADD R0.y, -R0.x, R0;\n"
     2093    "MOV R0.x, c[6];\n"
     2094    "MUL R0.x, R0, c[1];\n"
     2095    "MAX R0.z, R1.w, c[6].w;\n"
     2096    "RCP R0.z, R0.z;\n"
     2097    "MUL R3.xyz, R1, R0.z;\n"
     2098    "MAD R4.xyz, R3, c[7].x, -c[7].y;\n"
     2099    "RCP R0.x, R0.x;\n"
     2100    "MUL R0.x, R0.y, R0;\n"
     2101    "TEX R0, R0, texture[1], 1D;\n"
     2102    "MAD R2.xyz, R0, c[6].x, -R0.w;\n"
     2103    "MAD R4.xyz, R3, R4, c[7].z;\n"
     2104    "MUL R5.xyz, R1.w, R2;\n"
     2105    "MUL R6.xyz, R5, R4;\n"
     2106    "RSQ R2.w, R3.x;\n"
     2107    "RCP R4.x, R2.w;\n"
     2108    "RSQ R2.w, R3.y;\n"
     2109    "RSQ R3.w, R3.z;\n"
     2110    "RCP R4.y, R2.w;\n"
     2111    "RCP R4.z, R3.w;\n"
     2112    "ADD R4.xyz, -R3, R4;\n"
     2113    "MUL R6.xyz, R3, R6;\n"
     2114    "MUL R4.xyz, R5, R4;\n"
     2115    "ADD R3.xyz, -R3, c[6].z;\n"
     2116    "MAD R2.xyz, R2, R3, R0.w;\n"
     2117    "MUL R3.xyz, R0, c[6].x;\n"
     2118    "MAD R5.xyz, R0.w, R1, R6;\n"
     2119    "MAD R4.xyz, R0.w, R1, R4;\n"
     2120    "ADD R6.xyz, R4, -R5;\n"
     2121    "MUL R4.xyz, R1, c[6].y;\n"
     2122    "SGE R4.xyz, R4, R1.w;\n"
     2123    "MAD R4.xyz, R4, R6, R5;\n"
     2124    "MAD R4.xyz, -R1, R2, R4;\n"
     2125    "MUL R2.xyz, R1, R2;\n"
     2126    "SGE R3.xyz, R3, R0.w;\n"
     2127    "MAD R2.xyz, R3, R4, R2;\n"
     2128    "ADD R2.w, -R1, c[6].z;\n"
     2129    "MAD R2.xyz, R0, R2.w, R2;\n"
     2130    "ADD R0.x, R0.w, R1.w;\n"
     2131    "ADD R0.y, -R0.w, c[6].z;\n"
     2132    "MAD result.color.xyz, R1, R0.y, R2;\n"
     2133    "MAD result.color.w, -R0, R1, R0.x;\n"
     2134    "END\n"
     2135    ;
     2136
     2137static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
     2138    "!!ARBfp1.0\n"
     2139    "PARAM c[7] = { program.local[0..5],\n"
     2140    "           { 2, 4 } };\n"
     2141    "TEMP R0;\n"
     2142    "TEMP R1;\n"
     2143    "TEMP R2;\n"
     2144    "TEMP R3;\n"
     2145    "MUL R0.xyz, fragment.position.y, c[3];\n"
     2146    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     2147    "ADD R0.xyz, R0, c[4];\n"
     2148    "RCP R0.z, R0.z;\n"
     2149    "MUL R0.xy, R0, R0.z;\n"
     2150    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
     2151    "ADD R0.z, R0, R0.w;\n"
     2152    "MUL R0.xy, R0, c[0];\n"
     2153    "ADD R0.x, R0, R0.y;\n"
     2154    "MUL R0.z, -R0, c[1].x;\n"
     2155    "MUL R0.y, R0.x, c[6].x;\n"
     2156    "MUL R0.z, R0, c[6].y;\n"
     2157    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     2158    "RSQ R0.z, R0.x;\n"
     2159    "MOV R0.x, c[6];\n"
     2160    "MUL R0.w, R0.x, c[1].x;\n"
     2161    "RCP R0.z, R0.z;\n"
     2162    "ADD R0.x, -R0.y, R0.z;\n"
     2163    "RCP R0.y, R0.w;\n"
     2164    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     2165    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    21332166    "MUL R0.x, R0, R0.y;\n"
    21342167    "TEX R0, R0, texture[1], 1D;\n"
    2135     "MAD R4.xyz, R0, c[4].x, -R0.w;\n"
    2136     "MUL R5.xyz, R3, R4;\n"
    2137     "MAD R3.xyz, -R3, R4, R0.w;\n"
    2138     "ADD R6.xyz, R6, c[7].y;\n"
    2139     "RSQ R2.x, R2.x;\n"
    2140     "RSQ R2.z, R2.z;\n"
    2141     "RSQ R2.y, R2.y;\n"
    2142     "MAD R5.xyz, -R5, R6, R0.w;\n"
    2143     "MUL R3.xyz, R1, R3;\n"
    2144     "RCP R2.x, R2.x;\n"
    2145     "RCP R2.z, R2.z;\n"
    2146     "RCP R2.y, R2.y;\n"
    2147     "MAD R2.xyz, R2, R1.w, -R1;\n"
    2148     "MUL R6.xyz, R2, R4;\n"
    2149     "MUL R2.xyz, R1, R5;\n"
    2150     "MUL R4.xyz, R0, c[4].x;\n"
    2151     "MAD R6.xyz, R1, R0.w, R6;\n"
    2152     "MUL R5.xyz, R1, c[7].x;\n"
    2153     "ADD R6.xyz, R6, -R2;\n"
    2154     "SGE R5.xyz, R5, R1.w;\n"
    2155     "MUL R5.xyz, R5, R6;\n"
    2156     "ADD R2.xyz, R2, R5;\n"
    2157     "ADD R2.xyz, R2, -R3;\n"
    2158     "SGE R4.xyz, R4, R0.w;\n"
    2159     "MUL R2.xyz, R4, R2;\n"
    2160     "ADD R2.xyz, R3, R2;\n"
    2161     "ADD R2.w, -R1, c[4].z;\n"
    2162     "MAD R0.xyz, R0, R2.w, R2;\n"
    2163     "ADD R2.x, R0.w, R1.w;\n"
    2164     "ADD R2.y, -R0.w, c[4].z;\n"
    2165     "MAD result.color.xyz, R1, R2.y, R0;\n"
    2166     "MAD result.color.w, -R0, R1, R2.x;\n"
    2167     "END\n"
    2168     ;
    2169 
    2170 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
    2171     "!!ARBfp1.0\n"
    2172     "PARAM c[7] = { program.local[0..3],\n"
    2173     "           { 2, 4 },\n"
    2174     "           program.local[5..6] };\n"
    2175     "TEMP R0;\n"
    2176     "TEMP R1;\n"
    2177     "TEMP R2;\n"
    2178     "TEMP R3;\n"
    2179     "MUL R0.xyz, fragment.position.y, c[1];\n"
    2180     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    2181     "ADD R0.xyz, R0, c[2];\n"
    2182     "RCP R0.z, R0.z;\n"
    2183     "MUL R0.xy, R0, R0.z;\n"
    2184     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    2185     "MUL R0.xy, R0, c[3];\n"
    2186     "ADD R0.z, R0, R0.w;\n"
    2187     "ADD R0.x, R0, R0.y;\n"
    2188     "MUL R0.z, c[5].x, -R0;\n"
    2189     "MUL R0.y, R0.z, c[4];\n"
    2190     "MUL R0.x, R0, c[4];\n"
    2191     "MAD R0.y, R0.x, R0.x, -R0;\n"
    2192     "MOV R0.z, c[4].x;\n"
    2193     "RSQ R0.y, R0.y;\n"
    2194     "RCP R0.y, R0.y;\n"
    2195     "MUL R0.z, c[5].x, R0;\n"
    2196     "MUL R1.xy, fragment.position, c[6];\n"
    2197     "TEX R1, R1, texture[0], 2D;\n"
    2198     "ADD R0.x, -R0, R0.y;\n"
    2199     "RCP R0.z, R0.z;\n"
    2200     "MUL R0.x, R0, R0.z;\n"
    2201     "TEX R0, R0, texture[1], 1D;\n"
    22022168    "MUL R2.xyz, R0, R1.w;\n"
    2203     "MUL R3.xyz, R1, R0.w;\n"
     2169    "MUL R3.xyz, R0.w, R1;\n"
    22042170    "ADD R0.xyz, R0, R1;\n"
    22052171    "MIN R2.xyz, R2, R3;\n"
    22062172    "ADD R1.x, R0.w, R1.w;\n"
    2207     "MAD result.color.xyz, -R2, c[4].x, R0;\n"
     2173    "MAD result.color.xyz, -R2, c[6].x, R0;\n"
    22082174    "MAD result.color.w, -R0, R1, R1.x;\n"
    22092175    "END\n"
     
    22122178static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
    22132179    "!!ARBfp1.0\n"
    2214     "PARAM c[7] = { program.local[0..3],\n"
    2215     "           { 2, 4, 1 },\n"
    2216     "           program.local[5..6] };\n"
    2217     "TEMP R0;\n"
    2218     "TEMP R1;\n"
    2219     "TEMP R2;\n"
    2220     "TEMP R3;\n"
    2221     "MUL R0.xyz, fragment.position.y, c[1];\n"
    2222     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    2223     "ADD R0.xyz, R0, c[2];\n"
     2180    "PARAM c[7] = { program.local[0..5],\n"
     2181    "           { 2, 4, 1 } };\n"
     2182    "TEMP R0;\n"
     2183    "TEMP R1;\n"
     2184    "TEMP R2;\n"
     2185    "TEMP R3;\n"
     2186    "MUL R0.xyz, fragment.position.y, c[3];\n"
     2187    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     2188    "ADD R0.xyz, R0, c[4];\n"
    22242189    "RCP R0.z, R0.z;\n"
    22252190    "MUL R0.xy, R0, R0.z;\n"
    22262191    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    2227     "MUL R0.xy, R0, c[3];\n"
    22282192    "ADD R0.z, R0, R0.w;\n"
     2193    "MUL R0.xy, R0, c[0];\n"
    22292194    "ADD R0.x, R0, R0.y;\n"
    2230     "MUL R0.z, c[5].x, -R0;\n"
    2231     "MUL R0.y, R0.z, c[4];\n"
    2232     "MUL R0.x, R0, c[4];\n"
    2233     "MAD R0.y, R0.x, R0.x, -R0;\n"
    2234     "MOV R0.z, c[4].x;\n"
    2235     "RSQ R0.y, R0.y;\n"
    2236     "RCP R0.y, R0.y;\n"
    2237     "MUL R0.z, c[5].x, R0;\n"
    2238     "MUL R1.xy, fragment.position, c[6];\n"
    2239     "TEX R1, R1, texture[0], 2D;\n"
    2240     "ADD R0.x, -R0, R0.y;\n"
    2241     "RCP R0.z, R0.z;\n"
    2242     "MUL R0.x, R0, R0.z;\n"
     2195    "MUL R0.z, -R0, c[1].x;\n"
     2196    "MUL R0.y, R0.x, c[6].x;\n"
     2197    "MUL R0.z, R0, c[6].y;\n"
     2198    "MAD R0.x, R0.y, R0.y, -R0.z;\n"
     2199    "RSQ R0.z, R0.x;\n"
     2200    "MOV R0.x, c[6];\n"
     2201    "MUL R0.w, R0.x, c[1].x;\n"
     2202    "RCP R0.z, R0.z;\n"
     2203    "ADD R0.x, -R0.y, R0.z;\n"
     2204    "RCP R0.y, R0.w;\n"
     2205    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     2206    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     2207    "MUL R0.x, R0, R0.y;\n"
    22432208    "TEX R0, R0, texture[1], 1D;\n"
    2244     "MUL R2.xyz, R1, R0.w;\n"
     2209    "MUL R2.xyz, R0.w, R1;\n"
    22452210    "MAD R3.xyz, R0, R1.w, R2;\n"
    22462211    "MUL R2.xyz, R0, R1;\n"
    2247     "MAD R2.xyz, -R2, c[4].x, R3;\n"
    2248     "ADD R2.w, -R1, c[4].z;\n"
     2212    "MAD R2.xyz, -R2, c[6].x, R3;\n"
     2213    "ADD R2.w, -R1, c[6].z;\n"
    22492214    "MAD R0.xyz, R0, R2.w, R2;\n"
    22502215    "ADD R2.x, R0.w, R1.w;\n"
    2251     "ADD R2.y, -R0.w, c[4].z;\n"
     2216    "ADD R2.y, -R0.w, c[6].z;\n"
    22522217    "MAD result.color.xyz, R1, R2.y, R0;\n"
    22532218    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    22572222static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK =
    22582223    "!!ARBfp1.0\n"
    2259     "PARAM c[9] = { program.local[0..3],\n"
    2260     "           { 2, 4 },\n"
    2261     "           program.local[5..8] };\n"
    2262     "TEMP R0;\n"
    2263     "TEMP R1;\n"
    2264     "MUL R0.xyz, fragment.position.y, c[1];\n"
    2265     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    2266     "ADD R0.xyz, R0, c[2];\n"
     2224    "PARAM c[9] = { program.local[0..7],\n"
     2225    "           { 2, 4 } };\n"
     2226    "TEMP R0;\n"
     2227    "TEMP R1;\n"
     2228    "MUL R0.xyz, fragment.position.y, c[3];\n"
     2229    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     2230    "ADD R0.xyz, R0, c[4];\n"
    22672231    "RCP R0.z, R0.z;\n"
    22682232    "MUL R0.xy, R0, R0.z;\n"
    22692233    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    2270     "MUL R0.xy, R0, c[3];\n"
    22712234    "ADD R0.z, R0, R0.w;\n"
     2235    "MUL R0.xy, R0, c[0];\n"
    22722236    "ADD R0.x, R0, R0.y;\n"
    2273     "MUL R0.z, c[5].x, -R0;\n"
    2274     "MUL R0.y, R0.z, c[4];\n"
    2275     "MUL R0.x, R0, c[4];\n"
     2237    "MUL R0.z, -R0, c[1].x;\n"
     2238    "MUL R0.y, R0.z, c[8];\n"
     2239    "MUL R0.x, R0, c[8];\n"
    22762240    "MAD R0.y, R0.x, R0.x, -R0;\n"
    22772241    "RSQ R0.y, R0.y;\n"
    22782242    "RCP R0.y, R0.y;\n"
    22792243    "ADD R1.x, -R0, R0.y;\n"
    2280     "MOV R0.z, c[4].x;\n"
    2281     "MUL R0.z, c[5].x, R0;\n"
    2282     "RCP R1.y, R0.z;\n"
    2283     "ADD R0.xy, fragment.position, c[6];\n"
    2284     "MUL R0.xy, R0, c[7];\n"
    2285     "TEX R0, R0, texture[0], 2D;\n"
     2244    "MOV R0.x, c[8];\n"
     2245    "MUL R0.x, R0, c[1];\n"
     2246    "RCP R1.y, R0.x;\n"
     2247    "ADD R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     2248    "MUL R0.zw, R0, c[5].xyxy;\n"
     2249    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    22862250    "MUL R1.x, R1, R1.y;\n"
    2287     "DP4 R1.y, R0, c[8];\n"
     2251    "DP4 R1.y, R0, c[7];\n"
    22882252    "TEX R0, R1, texture[1], 1D;\n"
    22892253    "MUL result.color, R0, R1.y;\n"
     
    22932257static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
    22942258    "!!ARBfp1.0\n"
    2295     "PARAM c[6] = { program.local[0..3],\n"
    2296     "           { 2, 4 },\n"
    2297     "           program.local[5] };\n"
    2298     "TEMP R0;\n"
    2299     "MUL R0.xyz, fragment.position.y, c[1];\n"
    2300     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    2301     "ADD R0.xyz, R0, c[2];\n"
     2259    "PARAM c[6] = { program.local[0..4],\n"
     2260    "           { 2, 4 } };\n"
     2261    "TEMP R0;\n"
     2262    "MUL R0.xyz, fragment.position.y, c[3];\n"
     2263    "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
     2264    "ADD R0.xyz, R0, c[4];\n"
    23022265    "RCP R0.z, R0.z;\n"
    23032266    "MUL R0.xy, R0, R0.z;\n"
    23042267    "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
    2305     "MUL R0.xy, R0, c[3];\n"
     2268    "MUL R0.xy, R0, c[0];\n"
     2269    "ADD R0.z, R0, R0.w;\n"
    23062270    "ADD R0.x, R0, R0.y;\n"
    2307     "ADD R0.z, R0, R0.w;\n"
    2308     "MUL R0.z, c[5].x, -R0;\n"
    2309     "MUL R0.y, R0.z, c[4];\n"
    2310     "MUL R0.x, R0, c[4];\n"
    2311     "MAD R0.y, R0.x, R0.x, -R0;\n"
    2312     "MOV R0.z, c[4].x;\n"
    2313     "RSQ R0.y, R0.y;\n"
    2314     "MUL R0.z, c[5].x, R0;\n"
    2315     "RCP R0.y, R0.y;\n"
    2316     "RCP R0.z, R0.z;\n"
     2271    "MUL R0.z, -R0, c[1].x;\n"
     2272    "MUL R0.y, R0.z, c[5];\n"
     2273    "MUL R0.x, R0, c[5];\n"
     2274    "MAD R0.z, R0.x, R0.x, -R0.y;\n"
     2275    "MOV R0.y, c[5].x;\n"
     2276    "RSQ R0.z, R0.z;\n"
     2277    "MUL R0.w, R0.y, c[1].x;\n"
     2278    "RCP R0.y, R0.z;\n"
     2279    "RCP R0.z, R0.w;\n"
    23172280    "ADD R0.x, -R0, R0.y;\n"
    23182281    "MUL R0.x, R0, R0.z;\n"
     
    23232286static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
    23242287    "!!ARBfp1.0\n"
    2325     "PARAM c[13] = { program.local[0..5],\n"
    2326     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2327     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2328     "           program.local[8],\n"
    2329     "           { 0.15915494 },\n"
    2330     "           program.local[10..12] };\n"
    2331     "TEMP R0;\n"
    2332     "TEMP R1;\n"
    2333     "TEMP R2;\n"
    2334     "TEMP R3;\n"
    2335     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2336     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2337     "ADD R0.xyz, R0, c[5];\n"
    2338     "RCP R0.z, R0.z;\n"
    2339     "MUL R0.xy, R0, R0.z;\n"
    2340     "ABS R0.w, R0.x;\n"
    2341     "ABS R0.z, R0.y;\n"
    2342     "ADD R0.z, R0, -R0.w;\n"
    2343     "ADD R0.w, R0.y, c[6].x;\n"
    2344     "ABS R0.z, R0;\n"
    2345     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2346     "ABS R0.z, -R0.y;\n"
    2347     "ADD R0.z, R0, c[6].y;\n"
    2348     "ADD R0.w, R0.x, R0.z;\n"
    2349     "ADD R1.x, R0.z, -R0;\n"
    2350     "RCP R1.y, R0.w;\n"
    2351     "RCP R1.x, R1.x;\n"
    2352     "MUL R0.w, R0, R1.x;\n"
    2353     "ADD R0.z, R0.x, -R0;\n"
    2354     "MUL R0.z, R0, R1.y;\n"
    2355     "CMP R0.z, R0.x, R0.w, R0;\n"
    2356     "MUL R0.w, R0.z, R0.z;\n"
    2357     "MOV R1.x, c[7].y;\n"
    2358     "CMP R0.x, R0, c[7], R1;\n"
    2359     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2360     "MAD R0.x, R0.w, R0.z, R0;\n"
    2361     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2362     "MAD R0.x, R0, R0.y, c[8];\n"
    2363     "MUL R0.x, R0, c[9];\n"
     2288    "PARAM c[13] = { program.local[0..9],\n"
     2289    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     2290    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     2291    "           { 0.33299461, 0.99999559, 1 } };\n"
     2292    "TEMP R0;\n"
     2293    "TEMP R1;\n"
     2294    "TEMP R2;\n"
     2295    "TEMP R3;\n"
     2296    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2297    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2298    "ADD R0.xyz, R0, c[3];\n"
     2299    "RCP R0.z, R0.z;\n"
     2300    "MUL R0.xy, R0, R0.z;\n"
     2301    "ABS R0.z, R0.x;\n"
     2302    "ABS R0.w, R0.y;\n"
     2303    "ADD R0.w, R0, -R0.z;\n"
     2304    "ADD R1.x, R0.y, c[10].y;\n"
     2305    "ABS R0.w, R0;\n"
     2306    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2307    "ABS R0.w, -R0.y;\n"
     2308    "MAX R1.x, R0.z, R0.w;\n"
     2309    "RCP R1.y, R1.x;\n"
     2310    "MIN R1.x, R0.z, R0.w;\n"
     2311    "MUL R1.x, R1, R1.y;\n"
     2312    "MUL R1.y, R1.x, R1.x;\n"
     2313    "MAD R1.z, R1.y, c[11].x, c[11].y;\n"
     2314    "MAD R1.z, R1, R1.y, -c[11];\n"
     2315    "MAD R1.z, R1, R1.y, c[11].w;\n"
     2316    "MAD R1.z, R1, R1.y, -c[12].x;\n"
     2317    "MAD R1.y, R1.z, R1, c[12];\n"
     2318    "MUL R1.x, R1.y, R1;\n"
     2319    "ADD R1.y, -R1.x, c[10].w;\n"
     2320    "ADD R0.z, -R0, R0.w;\n"
     2321    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2322    "ADD R0.w, -R0.z, c[10].z;\n"
     2323    "CMP R0.x, R0, R0.w, R0.z;\n"
     2324    "CMP R0.x, -R0.y, -R0, R0;\n"
     2325    "ADD R0.x, R0, c[0];\n"
     2326    "MUL R1.x, R0, c[10];\n"
     2327    "FLR R1.y, R1.x;\n"
     2328    "MUL R0.xy, fragment.position, c[7];\n"
     2329    "TEX R0, R0, texture[0], 2D;\n"
     2330    "ADD R1.x, R1, -R1.y;\n"
     2331    "TEX R1, R1, texture[2], 1D;\n"
     2332    "MUL R2.xyz, R0, c[4].y;\n"
     2333    "MUL R3.xyz, R1.w, R2;\n"
     2334    "MUL R2.xyz, R1, c[4].x;\n"
     2335    "MAD R2.xyz, R0.w, R2, R3;\n"
     2336    "ADD R3.xy, fragment.position, c[8];\n"
     2337    "ADD R2.w, -R0, c[12].z;\n"
     2338    "MUL R1.xyz, R1, c[5].y;\n"
     2339    "MAD R2.xyz, R2.w, R1, R2;\n"
     2340    "MUL R1.xyz, R0, c[5].z;\n"
     2341    "ADD R3.z, -R1.w, c[12];\n"
     2342    "MAD R2.xyz, R3.z, R1, R2;\n"
     2343    "MUL R1.y, R1.w, R2.w;\n"
     2344    "MUL R1.x, R1.w, R0.w;\n"
     2345    "MUL R1.z, R0.w, R3;\n"
     2346    "DP3 R2.w, R1, c[5];\n"
     2347    "MUL R3.xy, R3, c[6];\n"
     2348    "TEX R1, R3, texture[1], 2D;\n"
     2349    "ADD R2, R2, -R0;\n"
     2350    "DP4 R1.x, R1, c[9];\n"
     2351    "MAD result.color, R1.x, R2, R0;\n"
     2352    "END\n"
     2353    ;
     2354
     2355static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY =
     2356    "!!ARBfp1.0\n"
     2357    "PARAM c[11] = { program.local[0..7],\n"
     2358    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     2359    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     2360    "           { 0.33299461, 0.99999559, 1 } };\n"
     2361    "TEMP R0;\n"
     2362    "TEMP R1;\n"
     2363    "TEMP R2;\n"
     2364    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2365    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2366    "ADD R0.xyz, R0, c[3];\n"
     2367    "RCP R0.z, R0.z;\n"
     2368    "MUL R0.xy, R0, R0.z;\n"
     2369    "ABS R0.z, R0.x;\n"
     2370    "ABS R0.w, R0.y;\n"
     2371    "ADD R0.w, R0, -R0.z;\n"
     2372    "ADD R1.x, R0.y, c[8].y;\n"
     2373    "ABS R0.w, R0;\n"
     2374    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2375    "ABS R0.w, -R0.y;\n"
     2376    "MAX R1.x, R0.z, R0.w;\n"
     2377    "RCP R1.y, R1.x;\n"
     2378    "MIN R1.x, R0.z, R0.w;\n"
     2379    "MUL R1.x, R1, R1.y;\n"
     2380    "MUL R1.y, R1.x, R1.x;\n"
     2381    "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
     2382    "MAD R1.z, R1, R1.y, -c[9];\n"
     2383    "MAD R1.z, R1, R1.y, c[9].w;\n"
     2384    "MAD R1.z, R1, R1.y, -c[10].x;\n"
     2385    "MAD R1.y, R1.z, R1, c[10];\n"
     2386    "MUL R1.x, R1.y, R1;\n"
     2387    "ADD R1.y, -R1.x, c[8].w;\n"
     2388    "ADD R0.z, -R0, R0.w;\n"
     2389    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2390    "ADD R0.w, -R0.z, c[8].z;\n"
     2391    "CMP R0.x, R0, R0.w, R0.z;\n"
     2392    "CMP R0.x, -R0.y, -R0, R0;\n"
     2393    "ADD R0.x, R0, c[0];\n"
     2394    "MUL R1.x, R0, c[8];\n"
     2395    "FLR R1.y, R1.x;\n"
     2396    "MUL R0.xy, fragment.position, c[5];\n"
     2397    "TEX R0, R0, texture[0], 2D;\n"
     2398    "ADD R1.x, R1, -R1.y;\n"
     2399    "TEX R1, R1, texture[2], 1D;\n"
     2400    "ADD R2.x, -R0.w, c[10].z;\n"
     2401    "MUL R2.xyz, R1, R2.x;\n"
     2402    "MAD R1.xyz, R1, R0, R2;\n"
     2403    "ADD R2.x, -R1.w, c[10].z;\n"
     2404    "MAD R2.xyz, R0, R2.x, R1;\n"
     2405    "ADD R1.z, R1.w, R0.w;\n"
     2406    "MAD R2.w, -R1, R0, R1.z;\n"
     2407    "ADD R1.xy, fragment.position, c[6];\n"
     2408    "MUL R1.xy, R1, c[4];\n"
     2409    "TEX R1, R1, texture[1], 2D;\n"
     2410    "ADD R2, R2, -R0;\n"
     2411    "DP4 R1.x, R1, c[7];\n"
     2412    "MAD result.color, R1.x, R2, R0;\n"
     2413    "END\n"
     2414    ;
     2415
     2416static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN =
     2417    "!!ARBfp1.0\n"
     2418    "PARAM c[11] = { program.local[0..7],\n"
     2419    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     2420    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     2421    "           { 0.33299461, 0.99999559 } };\n"
     2422    "TEMP R0;\n"
     2423    "TEMP R1;\n"
     2424    "TEMP R2;\n"
     2425    "TEMP R3;\n"
     2426    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2427    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2428    "ADD R0.xyz, R0, c[3];\n"
     2429    "RCP R0.z, R0.z;\n"
     2430    "MUL R0.xy, R0, R0.z;\n"
     2431    "ADD R3.xy, fragment.position, c[6];\n"
     2432    "ABS R0.z, R0.x;\n"
     2433    "ABS R0.w, R0.y;\n"
     2434    "ADD R0.w, R0, -R0.z;\n"
     2435    "ADD R1.x, R0.y, c[8].y;\n"
     2436    "ABS R0.w, R0;\n"
     2437    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2438    "ABS R0.w, -R0.y;\n"
     2439    "MAX R1.x, R0.z, R0.w;\n"
     2440    "RCP R1.y, R1.x;\n"
     2441    "MIN R1.x, R0.z, R0.w;\n"
     2442    "MUL R1.x, R1, R1.y;\n"
     2443    "MUL R1.y, R1.x, R1.x;\n"
     2444    "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
     2445    "MAD R1.z, R1, R1.y, -c[9];\n"
     2446    "MAD R1.z, R1, R1.y, c[9].w;\n"
     2447    "MAD R1.z, R1, R1.y, -c[10].x;\n"
     2448    "MAD R1.y, R1.z, R1, c[10];\n"
     2449    "MUL R1.x, R1.y, R1;\n"
     2450    "ADD R0.z, -R0, R0.w;\n"
     2451    "ADD R1.y, -R1.x, c[8].w;\n"
     2452    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2453    "ADD R0.w, -R0.z, c[8].z;\n"
     2454    "CMP R0.x, R0, R0.w, R0.z;\n"
     2455    "CMP R0.x, -R0.y, -R0, R0;\n"
     2456    "ADD R0.x, R0, c[0];\n"
     2457    "MUL R0.x, R0, c[8];\n"
    23642458    "FLR R0.y, R0.x;\n"
    2365     "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
    2366     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    2367     "ADD R0.x, R0, -R0.y;\n"
    2368     "TEX R0, R0, texture[2], 1D;\n"
    2369     "MUL R2.xyz, R1, c[12].y;\n"
    2370     "MUL R3.xyz, R2, R0.w;\n"
    2371     "MUL R2.xyz, R0, c[12].x;\n"
    2372     "MAD R2.xyz, R2, R1.w, R3;\n"
    2373     "ADD R3.xy, fragment.position, c[0];\n"
    2374     "ADD R2.w, -R1, c[7];\n"
    2375     "MUL R0.xyz, R0, c[11].y;\n"
    2376     "MAD R2.xyz, R0, R2.w, R2;\n"
    2377     "MUL R0.xyz, R1, c[11].z;\n"
    2378     "ADD R3.z, -R0.w, c[7].w;\n"
    2379     "MAD R2.xyz, R0, R3.z, R2;\n"
    2380     "MUL R0.y, R0.w, R2.w;\n"
    2381     "MUL R0.x, R0.w, R1.w;\n"
    2382     "MUL R0.z, R1.w, R3;\n"
    2383     "DP3 R2.w, R0, c[11];\n"
    2384     "MUL R3.xy, R3, c[1];\n"
    2385     "TEX R0, R3, texture[1], 2D;\n"
    2386     "ADD R2, R2, -R1;\n"
    2387     "DP4 R0.x, R0, c[2];\n"
    2388     "MAD result.color, R0.x, R2, R1;\n"
    2389     "END\n"
    2390     ;
    2391 
    2392 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY =
    2393     "!!ARBfp1.0\n"
    2394     "PARAM c[11] = { program.local[0..5],\n"
    2395     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2396     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2397     "           program.local[8],\n"
    2398     "           { 0.15915494 },\n"
    2399     "           program.local[10] };\n"
    2400     "TEMP R0;\n"
    2401     "TEMP R1;\n"
    2402     "TEMP R2;\n"
    2403     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2404     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2405     "ADD R0.xyz, R0, c[5];\n"
    2406     "RCP R0.z, R0.z;\n"
    2407     "MUL R0.xy, R0, R0.z;\n"
    2408     "ABS R0.w, R0.x;\n"
    2409     "ABS R0.z, R0.y;\n"
    2410     "ADD R0.z, R0, -R0.w;\n"
    2411     "ADD R0.w, R0.y, c[6].x;\n"
    2412     "ABS R0.z, R0;\n"
    2413     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2414     "ABS R0.z, -R0.y;\n"
    2415     "ADD R0.z, R0, c[6].y;\n"
    2416     "ADD R0.w, R0.x, R0.z;\n"
    2417     "ADD R1.x, R0.z, -R0;\n"
    2418     "RCP R1.y, R0.w;\n"
    2419     "RCP R1.x, R1.x;\n"
    2420     "MUL R0.w, R0, R1.x;\n"
    2421     "ADD R0.z, R0.x, -R0;\n"
    2422     "MUL R0.z, R0, R1.y;\n"
    2423     "CMP R0.z, R0.x, R0.w, R0;\n"
    2424     "MUL R0.w, R0.z, R0.z;\n"
    2425     "MOV R1.x, c[7].y;\n"
    2426     "CMP R0.x, R0, c[7], R1;\n"
    2427     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2428     "MAD R0.x, R0.w, R0.z, R0;\n"
    2429     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2430     "MAD R0.x, R0, R0.y, c[8];\n"
    2431     "MUL R0.x, R0, c[9];\n"
    2432     "FLR R0.y, R0.x;\n"
    2433     "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
    2434     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    2435     "ADD R0.x, R0, -R0.y;\n"
    2436     "TEX R0, R0, texture[2], 1D;\n"
    2437     "ADD R2.x, -R1.w, c[7].w;\n"
    2438     "MUL R2.xyz, R0, R2.x;\n"
    2439     "MAD R0.xyz, R0, R1, R2;\n"
    2440     "ADD R2.x, -R0.w, c[7].w;\n"
    2441     "MAD R2.xyz, R1, R2.x, R0;\n"
    2442     "ADD R0.z, R0.w, R1.w;\n"
    2443     "MAD R2.w, -R0, R1, R0.z;\n"
    2444     "ADD R0.xy, fragment.position, c[0];\n"
    2445     "MUL R0.xy, R0, c[1];\n"
    2446     "TEX R0, R0, texture[1], 2D;\n"
    2447     "ADD R2, R2, -R1;\n"
    2448     "DP4 R0.x, R0, c[2];\n"
    2449     "MAD result.color, R0.x, R2, R1;\n"
    2450     "END\n"
    2451     ;
    2452 
    2453 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN =
    2454     "!!ARBfp1.0\n"
    2455     "PARAM c[11] = { program.local[0..5],\n"
    2456     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2457     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2458     "           program.local[8],\n"
    2459     "           { 0.15915494 },\n"
    2460     "           program.local[10] };\n"
    2461     "TEMP R0;\n"
    2462     "TEMP R1;\n"
    2463     "TEMP R2;\n"
    2464     "TEMP R3;\n"
    2465     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2466     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2467     "ADD R0.xyz, R0, c[5];\n"
    2468     "RCP R0.z, R0.z;\n"
    2469     "MUL R0.xy, R0, R0.z;\n"
    2470     "ADD R3.xy, fragment.position, c[0];\n"
    2471     "ABS R0.w, R0.x;\n"
    2472     "ABS R0.z, R0.y;\n"
    2473     "ADD R0.z, R0, -R0.w;\n"
    2474     "ADD R0.w, R0.y, c[6].x;\n"
    2475     "ABS R0.z, R0;\n"
    2476     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2477     "ABS R0.z, -R0.y;\n"
    2478     "ADD R0.z, R0, c[6].y;\n"
    2479     "ADD R0.w, R0.x, R0.z;\n"
    2480     "ADD R1.x, R0.z, -R0;\n"
    2481     "RCP R1.y, R0.w;\n"
    2482     "RCP R1.x, R1.x;\n"
    2483     "MUL R0.w, R0, R1.x;\n"
    2484     "ADD R0.z, R0.x, -R0;\n"
    2485     "MUL R0.z, R0, R1.y;\n"
    2486     "CMP R0.z, R0.x, R0.w, R0;\n"
    2487     "MUL R0.w, R0.z, R0.z;\n"
    2488     "MOV R1.x, c[7].y;\n"
    2489     "CMP R0.x, R0, c[7], R1;\n"
    2490     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2491     "MUL R1.xy, fragment.position, c[10];\n"
    2492     "TEX R1, R1, texture[0], 2D;\n"
    2493     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2494     "MAD R0.x, R0.w, R0.z, R0;\n"
    2495     "MAD R0.x, R0, R0.y, c[8];\n"
    2496     "MUL R0.x, R0, c[9];\n"
     2459    "ADD R0.z, R0.x, -R0.y;\n"
     2460    "TEX R1, R0.z, texture[2], 1D;\n"
     2461    "MUL R0.xy, fragment.position, c[5];\n"
     2462    "TEX R0, R0, texture[0], 2D;\n"
     2463    "ADD R2, R1, R0;\n"
     2464    "MAD R2, -R1, R0, R2;\n"
     2465    "MUL R3.xy, R3, c[4];\n"
     2466    "TEX R1, R3, texture[1], 2D;\n"
     2467    "ADD R2, R2, -R0;\n"
     2468    "DP4 R1.x, R1, c[7];\n"
     2469    "MAD result.color, R1.x, R2, R0;\n"
     2470    "END\n"
     2471    ;
     2472
     2473static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY =
     2474    "!!ARBfp1.0\n"
     2475    "PARAM c[11] = { program.local[0..7],\n"
     2476    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     2477    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     2478    "           { 3.141593, 0.15915494, 2, 1 } };\n"
     2479    "TEMP R0;\n"
     2480    "TEMP R1;\n"
     2481    "TEMP R2;\n"
     2482    "TEMP R3;\n"
     2483    "TEMP R4;\n"
     2484    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2485    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2486    "ADD R0.xyz, R0, c[3];\n"
     2487    "RCP R0.z, R0.z;\n"
     2488    "MUL R0.xy, R0, R0.z;\n"
     2489    "ABS R0.z, R0.x;\n"
     2490    "ABS R0.w, R0.y;\n"
     2491    "ADD R0.w, R0, -R0.z;\n"
     2492    "ADD R1.x, R0.y, c[8];\n"
     2493    "ABS R0.w, R0;\n"
     2494    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2495    "ABS R0.w, -R0.y;\n"
     2496    "MAX R1.x, R0.z, R0.w;\n"
     2497    "RCP R1.y, R1.x;\n"
     2498    "MIN R1.x, R0.z, R0.w;\n"
     2499    "MUL R1.x, R1, R1.y;\n"
     2500    "MUL R1.y, R1.x, R1.x;\n"
     2501    "MAD R1.z, R1.y, c[8].y, c[8];\n"
     2502    "MAD R1.z, R1, R1.y, -c[8].w;\n"
     2503    "MAD R1.z, R1, R1.y, c[9].x;\n"
     2504    "MAD R1.z, R1, R1.y, -c[9].y;\n"
     2505    "MAD R1.y, R1.z, R1, c[9].z;\n"
     2506    "MUL R1.x, R1.y, R1;\n"
     2507    "ADD R0.z, -R0, R0.w;\n"
     2508    "ADD R1.y, -R1.x, c[9].w;\n"
     2509    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2510    "ADD R0.w, -R0.z, c[10].x;\n"
     2511    "CMP R0.x, R0, R0.w, R0.z;\n"
     2512    "CMP R0.x, -R0.y, -R0, R0;\n"
     2513    "ADD R0.x, R0, c[0];\n"
     2514    "MUL R0.x, R0, c[10].y;\n"
    24972515    "FLR R0.y, R0.x;\n"
    24982516    "ADD R0.x, R0, -R0.y;\n"
    24992517    "TEX R0, R0, texture[2], 1D;\n"
    2500     "ADD R2, R0, R1;\n"
    2501     "MAD R2, -R0, R1, R2;\n"
    2502     "MUL R3.xy, R3, c[1];\n"
    2503     "TEX R0, R3, texture[1], 2D;\n"
    2504     "ADD R2, R2, -R1;\n"
    2505     "DP4 R0.x, R0, c[2];\n"
    2506     "MAD result.color, R0.x, R2, R1;\n"
    2507     "END\n"
    2508     ;
    2509 
    2510 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY =
    2511     "!!ARBfp1.0\n"
    2512     "PARAM c[11] = { program.local[0..5],\n"
    2513     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2514     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2515     "           program.local[8],\n"
    2516     "           { 0.15915494, 2 },\n"
    2517     "           program.local[10] };\n"
    2518     "TEMP R0;\n"
    2519     "TEMP R1;\n"
    2520     "TEMP R2;\n"
    2521     "TEMP R3;\n"
    2522     "TEMP R4;\n"
    2523     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2524     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2525     "ADD R0.xyz, R0, c[5];\n"
    2526     "RCP R0.z, R0.z;\n"
    2527     "MUL R0.xy, R0, R0.z;\n"
    2528     "ABS R0.w, R0.x;\n"
    2529     "ABS R0.z, R0.y;\n"
    2530     "ADD R0.z, R0, -R0.w;\n"
    2531     "ADD R0.w, R0.y, c[6].x;\n"
    2532     "ABS R0.z, R0;\n"
    2533     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2534     "ABS R0.z, -R0.y;\n"
    2535     "ADD R0.z, R0, c[6].y;\n"
    2536     "ADD R0.w, R0.x, R0.z;\n"
    2537     "ADD R1.x, R0.z, -R0;\n"
    2538     "RCP R1.y, R0.w;\n"
    2539     "RCP R1.x, R1.x;\n"
    2540     "MUL R0.w, R0, R1.x;\n"
    2541     "ADD R0.z, R0.x, -R0;\n"
    2542     "MUL R0.z, R0, R1.y;\n"
    2543     "CMP R0.z, R0.x, R0.w, R0;\n"
    2544     "MUL R0.w, R0.z, R0.z;\n"
    2545     "MOV R1.x, c[7].y;\n"
    2546     "CMP R0.x, R0, c[7], R1;\n"
    2547     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2548     "MUL R1.xy, fragment.position, c[10];\n"
     2518    "MUL R1.xy, fragment.position, c[5];\n"
    25492519    "TEX R1, R1, texture[0], 2D;\n"
    2550     "ADD R2.w, -R1, c[7];\n"
    2551     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2552     "MAD R0.x, R0.w, R0.z, R0;\n"
    2553     "MAD R0.x, R0, R0.y, c[8];\n"
    2554     "MUL R0.x, R0, c[9];\n"
    2555     "FLR R0.y, R0.x;\n"
    2556     "ADD R0.x, R0, -R0.y;\n"
    2557     "TEX R0, R0, texture[2], 1D;\n"
     2520    "ADD R2.w, -R1, c[10];\n"
    25582521    "ADD R3.xyz, R0.w, -R0;\n"
    25592522    "ADD R2.xyz, R1.w, -R1;\n"
    25602523    "MUL R2.xyz, R2, R3;\n"
    2561     "MUL R2.xyz, R2, c[9].y;\n"
     2524    "MUL R2.xyz, R2, c[10].z;\n"
    25622525    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    25632526    "MUL R4.xyz, R0, R2.w;\n"
    25642527    "MUL R3.xyz, R0, R1;\n"
    25652528    "MAD R0.xyz, R0, R2.w, R2;\n"
    2566     "ADD R2.x, -R0.w, c[7].w;\n"
    2567     "MAD R3.xyz, R3, c[9].y, R4;\n"
     2529    "ADD R2.x, -R0.w, c[10].w;\n"
     2530    "MAD R3.xyz, R3, c[10].z, R4;\n"
    25682531    "MAD R3.xyz, R1, R2.x, R3;\n"
    25692532    "MAD R0.xyz, R1, R2.x, R0;\n"
    2570     "MUL R2.xyz, R1, c[9].y;\n"
     2533    "MUL R2.xyz, R1, c[10].z;\n"
    25712534    "ADD R0.xyz, R0, -R3;\n"
    25722535    "SGE R2.xyz, R2, R1.w;\n"
     
    25742537    "ADD R0.z, R0.w, R1.w;\n"
    25752538    "MAD R2.w, -R0, R1, R0.z;\n"
    2576     "ADD R0.xy, fragment.position, c[0];\n"
    2577     "MUL R0.xy, R0, c[1];\n"
     2539    "ADD R0.xy, fragment.position, c[6];\n"
     2540    "MUL R0.xy, R0, c[4];\n"
    25782541    "TEX R0, R0, texture[1], 2D;\n"
    25792542    "ADD R2, R2, -R1;\n"
    2580     "DP4 R0.x, R0, c[2];\n"
     2543    "DP4 R0.x, R0, c[7];\n"
    25812544    "MAD result.color, R0.x, R2, R1;\n"
    25822545    "END\n"
     
    25852548static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN =
    25862549    "!!ARBfp1.0\n"
    2587     "PARAM c[11] = { program.local[0..5],\n"
    2588     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2589     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2590     "           program.local[8],\n"
    2591     "           { 0.15915494 },\n"
    2592     "           program.local[10] };\n"
    2593     "TEMP R0;\n"
    2594     "TEMP R1;\n"
    2595     "TEMP R2;\n"
    2596     "TEMP R3;\n"
    2597     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2598     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2599     "ADD R0.xyz, R0, c[5];\n"
    2600     "RCP R0.z, R0.z;\n"
    2601     "MUL R0.xy, R0, R0.z;\n"
    2602     "ABS R0.w, R0.x;\n"
    2603     "ABS R0.z, R0.y;\n"
    2604     "ADD R0.z, R0, -R0.w;\n"
    2605     "ADD R0.w, R0.y, c[6].x;\n"
    2606     "ABS R0.z, R0;\n"
    2607     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2608     "ABS R0.z, -R0.y;\n"
    2609     "ADD R0.z, R0, c[6].y;\n"
    2610     "ADD R0.w, R0.x, R0.z;\n"
    2611     "ADD R1.x, R0.z, -R0;\n"
    2612     "RCP R1.y, R0.w;\n"
    2613     "RCP R1.x, R1.x;\n"
    2614     "MUL R0.w, R0, R1.x;\n"
    2615     "ADD R0.z, R0.x, -R0;\n"
    2616     "MUL R0.z, R0, R1.y;\n"
    2617     "CMP R0.z, R0.x, R0.w, R0;\n"
    2618     "MUL R0.w, R0.z, R0.z;\n"
    2619     "MOV R1.x, c[7].y;\n"
    2620     "CMP R0.x, R0, c[7], R1;\n"
    2621     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2622     "MUL R1.xy, fragment.position, c[10];\n"
    2623     "TEX R1, R1, texture[0], 2D;\n"
    2624     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2625     "MAD R0.x, R0.w, R0.z, R0;\n"
    2626     "MAD R0.x, R0, R0.y, c[8];\n"
    2627     "MUL R0.x, R0, c[9];\n"
     2550    "PARAM c[11] = { program.local[0..7],\n"
     2551    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     2552    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     2553    "           { 0.33299461, 0.99999559, 1 } };\n"
     2554    "TEMP R0;\n"
     2555    "TEMP R1;\n"
     2556    "TEMP R2;\n"
     2557    "TEMP R3;\n"
     2558    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2559    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2560    "ADD R0.xyz, R0, c[3];\n"
     2561    "RCP R0.z, R0.z;\n"
     2562    "MUL R0.xy, R0, R0.z;\n"
     2563    "ABS R0.z, R0.x;\n"
     2564    "ABS R0.w, R0.y;\n"
     2565    "ADD R0.w, R0, -R0.z;\n"
     2566    "ADD R1.x, R0.y, c[8].y;\n"
     2567    "ABS R0.w, R0;\n"
     2568    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2569    "ABS R0.w, -R0.y;\n"
     2570    "MAX R1.x, R0.z, R0.w;\n"
     2571    "RCP R1.y, R1.x;\n"
     2572    "MIN R1.x, R0.z, R0.w;\n"
     2573    "MUL R1.x, R1, R1.y;\n"
     2574    "MUL R1.y, R1.x, R1.x;\n"
     2575    "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
     2576    "MAD R1.z, R1, R1.y, -c[9];\n"
     2577    "MAD R1.z, R1, R1.y, c[9].w;\n"
     2578    "MAD R1.z, R1, R1.y, -c[10].x;\n"
     2579    "MAD R1.y, R1.z, R1, c[10];\n"
     2580    "MUL R1.x, R1.y, R1;\n"
     2581    "ADD R1.y, -R1.x, c[8].w;\n"
     2582    "ADD R0.z, -R0, R0.w;\n"
     2583    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2584    "ADD R0.w, -R0.z, c[8].z;\n"
     2585    "CMP R0.x, R0, R0.w, R0.z;\n"
     2586    "CMP R0.x, -R0.y, -R0, R0;\n"
     2587    "ADD R0.x, R0, c[0];\n"
     2588    "MUL R0.z, R0.x, c[8].x;\n"
     2589    "FLR R0.w, R0.z;\n"
     2590    "ADD R1.x, R0.z, -R0.w;\n"
     2591    "MUL R0.xy, fragment.position, c[5];\n"
     2592    "TEX R0, R0, texture[0], 2D;\n"
     2593    "TEX R1, R1, texture[2], 1D;\n"
     2594    "MUL R3.xyz, R1.w, R0;\n"
     2595    "MUL R2.xyz, R1, R0.w;\n"
     2596    "MIN R2.xyz, R2, R3;\n"
     2597    "ADD R2.w, -R0, c[10].z;\n"
     2598    "MAD R1.xyz, R1, R2.w, R2;\n"
     2599    "ADD R2.x, -R1.w, c[10].z;\n"
     2600    "MAD R2.xyz, R0, R2.x, R1;\n"
     2601    "ADD R1.z, R1.w, R0.w;\n"
     2602    "MAD R2.w, -R1, R0, R1.z;\n"
     2603    "ADD R1.xy, fragment.position, c[6];\n"
     2604    "MUL R1.xy, R1, c[4];\n"
     2605    "TEX R1, R1, texture[1], 2D;\n"
     2606    "ADD R2, R2, -R0;\n"
     2607    "DP4 R1.x, R1, c[7];\n"
     2608    "MAD result.color, R1.x, R2, R0;\n"
     2609    "END\n"
     2610    ;
     2611
     2612static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN =
     2613    "!!ARBfp1.0\n"
     2614    "PARAM c[11] = { program.local[0..7],\n"
     2615    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     2616    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     2617    "           { 0.33299461, 0.99999559, 1 } };\n"
     2618    "TEMP R0;\n"
     2619    "TEMP R1;\n"
     2620    "TEMP R2;\n"
     2621    "TEMP R3;\n"
     2622    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2623    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2624    "ADD R0.xyz, R0, c[3];\n"
     2625    "RCP R0.z, R0.z;\n"
     2626    "MUL R0.xy, R0, R0.z;\n"
     2627    "ABS R0.z, R0.x;\n"
     2628    "ABS R0.w, R0.y;\n"
     2629    "ADD R0.w, R0, -R0.z;\n"
     2630    "ADD R1.x, R0.y, c[8].y;\n"
     2631    "ABS R0.w, R0;\n"
     2632    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2633    "ABS R0.w, -R0.y;\n"
     2634    "MAX R1.x, R0.z, R0.w;\n"
     2635    "RCP R1.y, R1.x;\n"
     2636    "MIN R1.x, R0.z, R0.w;\n"
     2637    "MUL R1.x, R1, R1.y;\n"
     2638    "MUL R1.y, R1.x, R1.x;\n"
     2639    "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
     2640    "MAD R1.z, R1, R1.y, -c[9];\n"
     2641    "MAD R1.z, R1, R1.y, c[9].w;\n"
     2642    "MAD R1.z, R1, R1.y, -c[10].x;\n"
     2643    "MAD R1.y, R1.z, R1, c[10];\n"
     2644    "MUL R1.x, R1.y, R1;\n"
     2645    "ADD R1.y, -R1.x, c[8].w;\n"
     2646    "ADD R0.z, -R0, R0.w;\n"
     2647    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2648    "ADD R0.w, -R0.z, c[8].z;\n"
     2649    "CMP R0.x, R0, R0.w, R0.z;\n"
     2650    "CMP R0.x, -R0.y, -R0, R0;\n"
     2651    "ADD R0.x, R0, c[0];\n"
     2652    "MUL R0.z, R0.x, c[8].x;\n"
     2653    "FLR R0.w, R0.z;\n"
     2654    "ADD R1.x, R0.z, -R0.w;\n"
     2655    "MUL R0.xy, fragment.position, c[5];\n"
     2656    "TEX R0, R0, texture[0], 2D;\n"
     2657    "TEX R1, R1, texture[2], 1D;\n"
     2658    "MUL R3.xyz, R1.w, R0;\n"
     2659    "MUL R2.xyz, R1, R0.w;\n"
     2660    "MAX R2.xyz, R2, R3;\n"
     2661    "ADD R2.w, -R0, c[10].z;\n"
     2662    "MAD R1.xyz, R1, R2.w, R2;\n"
     2663    "ADD R2.x, -R1.w, c[10].z;\n"
     2664    "MAD R2.xyz, R0, R2.x, R1;\n"
     2665    "ADD R1.z, R1.w, R0.w;\n"
     2666    "MAD R2.w, -R1, R0, R1.z;\n"
     2667    "ADD R1.xy, fragment.position, c[6];\n"
     2668    "MUL R1.xy, R1, c[4];\n"
     2669    "TEX R1, R1, texture[1], 2D;\n"
     2670    "ADD R2, R2, -R0;\n"
     2671    "DP4 R1.x, R1, c[7];\n"
     2672    "MAD result.color, R1.x, R2, R0;\n"
     2673    "END\n"
     2674    ;
     2675
     2676static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE =
     2677    "!!ARBfp1.0\n"
     2678    "PARAM c[11] = { program.local[0..7],\n"
     2679    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     2680    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     2681    "           { 3.141593, 0.15915494, 1, 1e-006 } };\n"
     2682    "TEMP R0;\n"
     2683    "TEMP R1;\n"
     2684    "TEMP R2;\n"
     2685    "TEMP R3;\n"
     2686    "TEMP R4;\n"
     2687    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2688    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2689    "ADD R0.xyz, R0, c[3];\n"
     2690    "RCP R0.z, R0.z;\n"
     2691    "MUL R0.xy, R0, R0.z;\n"
     2692    "ABS R0.z, R0.x;\n"
     2693    "ABS R0.w, R0.y;\n"
     2694    "ADD R0.w, R0, -R0.z;\n"
     2695    "ADD R1.x, R0.y, c[8];\n"
     2696    "ABS R0.w, R0;\n"
     2697    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2698    "ABS R0.w, -R0.y;\n"
     2699    "MAX R1.x, R0.z, R0.w;\n"
     2700    "RCP R1.y, R1.x;\n"
     2701    "MIN R1.x, R0.z, R0.w;\n"
     2702    "MUL R1.x, R1, R1.y;\n"
     2703    "MUL R1.y, R1.x, R1.x;\n"
     2704    "MAD R1.z, R1.y, c[8].y, c[8];\n"
     2705    "MAD R1.z, R1, R1.y, -c[8].w;\n"
     2706    "MAD R1.z, R1, R1.y, c[9].x;\n"
     2707    "MAD R1.z, R1, R1.y, -c[9].y;\n"
     2708    "MAD R1.y, R1.z, R1, c[9].z;\n"
     2709    "MUL R1.x, R1.y, R1;\n"
     2710    "ADD R1.y, -R1.x, c[9].w;\n"
     2711    "ADD R0.z, -R0, R0.w;\n"
     2712    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2713    "ADD R0.w, -R0.z, c[10].x;\n"
     2714    "CMP R0.x, R0, R0.w, R0.z;\n"
     2715    "CMP R0.x, -R0.y, -R0, R0;\n"
     2716    "ADD R0.x, R0, c[0];\n"
     2717    "MUL R0.x, R0, c[10].y;\n"
    26282718    "FLR R0.y, R0.x;\n"
    26292719    "ADD R0.x, R0, -R0.y;\n"
    26302720    "TEX R0, R0, texture[2], 1D;\n"
    2631     "MUL R3.xyz, R1, R0.w;\n"
    2632     "MUL R2.xyz, R0, R1.w;\n"
    2633     "MIN R2.xyz, R2, R3;\n"
    2634     "ADD R2.w, -R1, c[7];\n"
    2635     "MAD R0.xyz, R0, R2.w, R2;\n"
    2636     "ADD R2.x, -R0.w, c[7].w;\n"
    2637     "MAD R2.xyz, R1, R2.x, R0;\n"
    2638     "ADD R0.z, R0.w, R1.w;\n"
    2639     "MAD R2.w, -R0, R1, R0.z;\n"
    2640     "ADD R0.xy, fragment.position, c[0];\n"
    2641     "MUL R0.xy, R0, c[1];\n"
    2642     "TEX R0, R0, texture[1], 2D;\n"
    2643     "ADD R2, R2, -R1;\n"
    2644     "DP4 R0.x, R0, c[2];\n"
    2645     "MAD result.color, R0.x, R2, R1;\n"
    2646     "END\n"
    2647     ;
    2648 
    2649 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN =
    2650     "!!ARBfp1.0\n"
    2651     "PARAM c[11] = { program.local[0..5],\n"
    2652     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2653     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2654     "           program.local[8],\n"
    2655     "           { 0.15915494 },\n"
    2656     "           program.local[10] };\n"
    2657     "TEMP R0;\n"
    2658     "TEMP R1;\n"
    2659     "TEMP R2;\n"
    2660     "TEMP R3;\n"
    2661     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2662     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2663     "ADD R0.xyz, R0, c[5];\n"
    2664     "RCP R0.z, R0.z;\n"
    2665     "MUL R0.xy, R0, R0.z;\n"
    2666     "ABS R0.w, R0.x;\n"
    2667     "ABS R0.z, R0.y;\n"
    2668     "ADD R0.z, R0, -R0.w;\n"
    2669     "ADD R0.w, R0.y, c[6].x;\n"
    2670     "ABS R0.z, R0;\n"
    2671     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2672     "ABS R0.z, -R0.y;\n"
    2673     "ADD R0.z, R0, c[6].y;\n"
    2674     "ADD R0.w, R0.x, R0.z;\n"
    2675     "ADD R1.x, R0.z, -R0;\n"
    2676     "RCP R1.y, R0.w;\n"
     2721    "MAX R1.x, R0.w, c[10].w;\n"
    26772722    "RCP R1.x, R1.x;\n"
    2678     "MUL R0.w, R0, R1.x;\n"
    2679     "ADD R0.z, R0.x, -R0;\n"
    2680     "MUL R0.z, R0, R1.y;\n"
    2681     "CMP R0.z, R0.x, R0.w, R0;\n"
    2682     "MUL R0.w, R0.z, R0.z;\n"
    2683     "MOV R1.x, c[7].y;\n"
    2684     "CMP R0.x, R0, c[7], R1;\n"
    2685     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2686     "MUL R1.xy, fragment.position, c[10];\n"
     2723    "MAD R1.xyz, -R0, R1.x, c[10].z;\n"
     2724    "MAX R2.xyz, R1, c[10].w;\n"
     2725    "MUL R1.xy, fragment.position, c[5];\n"
    26872726    "TEX R1, R1, texture[0], 2D;\n"
    2688     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2689     "MAD R0.x, R0.w, R0.z, R0;\n"
    2690     "MAD R0.x, R0, R0.y, c[8];\n"
    2691     "MUL R0.x, R0, c[9];\n"
    2692     "FLR R0.y, R0.x;\n"
    2693     "ADD R0.x, R0, -R0.y;\n"
    2694     "TEX R0, R0, texture[2], 1D;\n"
    2695     "MUL R3.xyz, R1, R0.w;\n"
    2696     "MUL R2.xyz, R0, R1.w;\n"
    2697     "MAX R2.xyz, R2, R3;\n"
    2698     "ADD R2.w, -R1, c[7];\n"
    2699     "MAD R0.xyz, R0, R2.w, R2;\n"
    2700     "ADD R2.x, -R0.w, c[7].w;\n"
    2701     "MAD R2.xyz, R1, R2.x, R0;\n"
    2702     "ADD R0.z, R0.w, R1.w;\n"
    2703     "MAD R2.w, -R0, R1, R0.z;\n"
    2704     "ADD R0.xy, fragment.position, c[0];\n"
    2705     "MUL R0.xy, R0, c[1];\n"
    2706     "TEX R0, R0, texture[1], 2D;\n"
    2707     "ADD R2, R2, -R1;\n"
    2708     "DP4 R0.x, R0, c[2];\n"
    2709     "MAD result.color, R0.x, R2, R1;\n"
    2710     "END\n"
    2711     ;
    2712 
    2713 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE =
    2714     "!!ARBfp1.0\n"
    2715     "PARAM c[11] = { program.local[0..5],\n"
    2716     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2717     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2718     "           program.local[8],\n"
    2719     "           { 0.15915494, 1e-06 },\n"
    2720     "           program.local[10] };\n"
    2721     "TEMP R0;\n"
    2722     "TEMP R1;\n"
    2723     "TEMP R2;\n"
    2724     "TEMP R3;\n"
    2725     "TEMP R4;\n"
    2726     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2727     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2728     "ADD R0.xyz, R0, c[5];\n"
    2729     "RCP R0.z, R0.z;\n"
    2730     "MUL R0.xy, R0, R0.z;\n"
    2731     "ABS R0.w, R0.x;\n"
    2732     "ABS R0.z, R0.y;\n"
    2733     "ADD R0.z, R0, -R0.w;\n"
    2734     "ADD R0.w, R0.y, c[6].x;\n"
    2735     "ABS R0.z, R0;\n"
    2736     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2737     "ABS R0.z, -R0.y;\n"
    2738     "ADD R0.z, R0, c[6].y;\n"
    2739     "ADD R0.w, R0.x, R0.z;\n"
    2740     "ADD R1.x, R0.z, -R0;\n"
    2741     "RCP R1.y, R0.w;\n"
    2742     "RCP R1.x, R1.x;\n"
    2743     "MUL R0.w, R0, R1.x;\n"
    2744     "ADD R0.z, R0.x, -R0;\n"
    2745     "MUL R0.z, R0, R1.y;\n"
    2746     "CMP R0.z, R0.x, R0.w, R0;\n"
    2747     "MUL R0.w, R0.z, R0.z;\n"
    2748     "MOV R1.x, c[7].y;\n"
    2749     "CMP R0.x, R0, c[7], R1;\n"
    2750     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2751     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2752     "MAD R0.x, R0.w, R0.z, R0;\n"
    2753     "MAD R0.x, R0, R0.y, c[8];\n"
    2754     "MUL R0.x, R0, c[9];\n"
    2755     "FLR R0.y, R0.x;\n"
    2756     "ADD R0.x, R0, -R0.y;\n"
    2757     "TEX R0, R0, texture[2], 1D;\n"
    2758     "MAX R1.x, R0.w, c[9].y;\n"
    2759     "RCP R1.x, R1.x;\n"
    2760     "MAD R1.xyz, -R0, R1.x, c[7].w;\n"
    2761     "MAX R2.xyz, R1, c[9].y;\n"
    2762     "MUL R1.xy, fragment.position, c[10];\n"
    2763     "TEX R1, R1, texture[0], 2D;\n"
    2764     "ADD R2.w, -R0, c[7];\n"
     2727    "ADD R2.w, -R0, c[10].z;\n"
    27652728    "MUL R3.xyz, R1, R2.w;\n"
    2766     "ADD R2.w, -R1, c[7];\n"
     2729    "ADD R2.w, -R1, c[10].z;\n"
    27672730    "MAD R4.xyz, R0, R2.w, R3;\n"
    2768     "MUL R3.xyz, R1, R0.w;\n"
     2731    "MUL R3.xyz, R0.w, R1;\n"
    27692732    "MUL R2.w, R0, R1;\n"
    27702733    "MAD R0.xyz, R0, R1.w, R3;\n"
     
    27792742    "ADD R0.z, R0.w, R1.w;\n"
    27802743    "MAD R2.w, -R0, R1, R0.z;\n"
    2781     "ADD R0.xy, fragment.position, c[0];\n"
    2782     "MUL R0.xy, R0, c[1];\n"
     2744    "ADD R0.xy, fragment.position, c[6];\n"
     2745    "MUL R0.xy, R0, c[4];\n"
    27832746    "TEX R0, R0, texture[1], 2D;\n"
    27842747    "ADD R2, R2, -R1;\n"
    2785     "DP4 R0.x, R0, c[2];\n"
     2748    "DP4 R0.x, R0, c[7];\n"
    27862749    "MAD result.color, R0.x, R2, R1;\n"
    27872750    "END\n"
     
    27902753static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN =
    27912754    "!!ARBfp1.0\n"
    2792     "PARAM c[11] = { program.local[0..5],\n"
    2793     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2794     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2795     "           program.local[8],\n"
    2796     "           { 0.15915494, 9.9999997e-06 },\n"
    2797     "           program.local[10] };\n"
     2755    "PARAM c[11] = { program.local[0..7],\n"
     2756    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     2757    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     2758    "           { 3.141593, 0.15915494, 1, 9.9999997e-006 } };\n"
    27982759    "TEMP R0;\n"
    27992760    "TEMP R1;\n"
     
    28022763    "TEMP R4;\n"
    28032764    "TEMP R5;\n"
    2804     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2805     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2806     "ADD R0.xyz, R0, c[5];\n"
     2765    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2766    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2767    "ADD R0.xyz, R0, c[3];\n"
    28072768    "RCP R0.z, R0.z;\n"
    28082769    "MUL R0.xy, R0, R0.z;\n"
     
    28102771    "ABS R0.z, R0.y;\n"
    28112772    "ADD R0.z, R0, -R0.w;\n"
    2812     "ADD R0.w, R0.y, c[6].x;\n"
     2773    "ADD R1.x, R0.y, c[8];\n"
    28132774    "ABS R0.z, R0;\n"
    2814     "CMP R0.y, -R0.z, R0, R0.w;\n"
     2775    "CMP R0.y, -R0.z, R0, R1.x;\n"
    28152776    "ABS R0.z, -R0.y;\n"
    2816     "ADD R0.z, R0, c[6].y;\n"
    2817     "ADD R0.w, R0.x, R0.z;\n"
    2818     "ADD R1.x, R0.z, -R0;\n"
    2819     "RCP R1.y, R0.w;\n"
    2820     "RCP R1.x, R1.x;\n"
    2821     "MUL R0.w, R0, R1.x;\n"
    2822     "ADD R0.z, R0.x, -R0;\n"
    2823     "MUL R0.z, R0, R1.y;\n"
    2824     "CMP R0.z, R0.x, R0.w, R0;\n"
    2825     "MUL R0.w, R0.z, R0.z;\n"
    2826     "MOV R1.x, c[7].y;\n"
    2827     "CMP R0.x, R0, c[7], R1;\n"
    2828     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2829     "MUL R1.xy, fragment.position, c[10];\n"
    2830     "TEX R1, R1, texture[0], 2D;\n"
    2831     "ADD R2.w, -R1, c[7];\n"
    2832     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2833     "MAD R0.x, R0.w, R0.z, R0;\n"
    2834     "MAD R0.x, R0, R0.y, c[8];\n"
    2835     "MUL R0.x, R0, c[9];\n"
     2777    "MAX R1.x, R0.w, R0.z;\n"
     2778    "RCP R1.y, R1.x;\n"
     2779    "MIN R1.x, R0.w, R0.z;\n"
     2780    "MUL R1.x, R1, R1.y;\n"
     2781    "MUL R1.y, R1.x, R1.x;\n"
     2782    "MAD R1.z, R1.y, c[8].y, c[8];\n"
     2783    "MAD R1.z, R1, R1.y, -c[8].w;\n"
     2784    "MAD R1.z, R1, R1.y, c[9].x;\n"
     2785    "MAD R1.z, R1, R1.y, -c[9].y;\n"
     2786    "MAD R1.y, R1.z, R1, c[9].z;\n"
     2787    "MUL R1.x, R1.y, R1;\n"
     2788    "ADD R1.y, -R1.x, c[9].w;\n"
     2789    "ADD R0.z, -R0.w, R0;\n"
     2790    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2791    "ADD R0.w, -R0.z, c[10].x;\n"
     2792    "CMP R0.x, R0, R0.w, R0.z;\n"
     2793    "CMP R0.x, -R0.y, -R0, R0;\n"
     2794    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     2795    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     2796    "ADD R0.x, R0, c[0];\n"
     2797    "MUL R0.x, R0, c[10].y;\n"
    28362798    "FLR R0.y, R0.x;\n"
    28372799    "ADD R0.x, R0, -R0.y;\n"
    28382800    "TEX R0, R0, texture[2], 1D;\n"
    2839     "MUL R2.xyz, R1, R0.w;\n"
     2801    "MUL R2.xyz, R0.w, R1;\n"
    28402802    "MAD R3.xyz, R0, R1.w, R2;\n"
    28412803    "MAD R2.xyz, -R0.w, R1.w, R3;\n"
    28422804    "MUL R4.xyz, R0.w, R2;\n"
    2843     "MAX R2.xyz, R0, c[9].y;\n"
    2844     "ADD R3.w, -R0, c[7];\n"
     2805    "MAX R2.xyz, R0, c[10].w;\n"
     2806    "ADD R2.w, -R1, c[10].z;\n"
     2807    "ADD R3.w, -R0, c[10].z;\n"
    28452808    "MUL R5.xyz, R0, R2.w;\n"
    28462809    "RCP R2.x, R2.x;\n"
     
    28572820    "ADD R0.z, R0.w, R1.w;\n"
    28582821    "MAD R2.w, -R0, R1, R0.z;\n"
    2859     "ADD R0.xy, fragment.position, c[0];\n"
    2860     "MUL R0.xy, R0, c[1];\n"
     2822    "ADD R0.xy, fragment.position, c[6];\n"
     2823    "MUL R0.xy, R0, c[4];\n"
    28612824    "TEX R0, R0, texture[1], 2D;\n"
    28622825    "ADD R2, R2, -R1;\n"
    2863     "DP4 R0.x, R0, c[2];\n"
     2826    "DP4 R0.x, R0, c[7];\n"
    28642827    "MAD result.color, R0.x, R2, R1;\n"
    28652828    "END\n"
     
    28682831static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT =
    28692832    "!!ARBfp1.0\n"
    2870     "PARAM c[11] = { program.local[0..5],\n"
    2871     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2872     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2873     "           program.local[8],\n"
    2874     "           { 0.15915494, 2 },\n"
    2875     "           program.local[10] };\n"
     2833    "PARAM c[11] = { program.local[0..7],\n"
     2834    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     2835    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     2836    "           { 3.141593, 0.15915494, 2, 1 } };\n"
    28762837    "TEMP R0;\n"
    28772838    "TEMP R1;\n"
     
    28792840    "TEMP R3;\n"
    28802841    "TEMP R4;\n"
    2881     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2882     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2883     "ADD R0.xyz, R0, c[5];\n"
    2884     "RCP R0.z, R0.z;\n"
    2885     "MUL R0.xy, R0, R0.z;\n"
    2886     "ABS R0.w, R0.x;\n"
    2887     "ABS R0.z, R0.y;\n"
    2888     "ADD R0.z, R0, -R0.w;\n"
    2889     "ADD R0.w, R0.y, c[6].x;\n"
    2890     "ABS R0.z, R0;\n"
    2891     "CMP R0.y, -R0.z, R0, R0.w;\n"
    2892     "ABS R0.z, -R0.y;\n"
    2893     "ADD R0.z, R0, c[6].y;\n"
    2894     "ADD R0.w, R0.x, R0.z;\n"
    2895     "ADD R1.x, R0.z, -R0;\n"
    2896     "RCP R1.y, R0.w;\n"
    2897     "RCP R1.x, R1.x;\n"
    2898     "MUL R0.w, R0, R1.x;\n"
    2899     "ADD R0.z, R0.x, -R0;\n"
    2900     "MUL R0.z, R0, R1.y;\n"
    2901     "CMP R0.z, R0.x, R0.w, R0;\n"
    2902     "MUL R0.w, R0.z, R0.z;\n"
    2903     "MOV R1.x, c[7].y;\n"
    2904     "CMP R0.x, R0, c[7], R1;\n"
    2905     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2906     "MUL R1.xy, fragment.position, c[10];\n"
    2907     "TEX R1, R1, texture[0], 2D;\n"
    2908     "ADD R2.w, -R1, c[7];\n"
    2909     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2910     "MAD R0.x, R0.w, R0.z, R0;\n"
    2911     "MAD R0.x, R0, R0.y, c[8];\n"
    2912     "MUL R0.x, R0, c[9];\n"
     2842    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2843    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2844    "ADD R0.xyz, R0, c[3];\n"
     2845    "RCP R0.z, R0.z;\n"
     2846    "MUL R0.xy, R0, R0.z;\n"
     2847    "ABS R0.z, R0.x;\n"
     2848    "ABS R0.w, R0.y;\n"
     2849    "ADD R0.w, R0, -R0.z;\n"
     2850    "ADD R1.x, R0.y, c[8];\n"
     2851    "ABS R0.w, R0;\n"
     2852    "CMP R0.y, -R0.w, R0, R1.x;\n"
     2853    "ABS R0.w, -R0.y;\n"
     2854    "MAX R1.x, R0.z, R0.w;\n"
     2855    "RCP R1.y, R1.x;\n"
     2856    "MIN R1.x, R0.z, R0.w;\n"
     2857    "MUL R1.x, R1, R1.y;\n"
     2858    "MUL R1.y, R1.x, R1.x;\n"
     2859    "MAD R1.z, R1.y, c[8].y, c[8];\n"
     2860    "MAD R1.z, R1, R1.y, -c[8].w;\n"
     2861    "MAD R1.z, R1, R1.y, c[9].x;\n"
     2862    "MAD R1.z, R1, R1.y, -c[9].y;\n"
     2863    "MAD R1.y, R1.z, R1, c[9].z;\n"
     2864    "MUL R1.x, R1.y, R1;\n"
     2865    "ADD R0.z, -R0, R0.w;\n"
     2866    "ADD R1.y, -R1.x, c[9].w;\n"
     2867    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2868    "ADD R0.w, -R0.z, c[10].x;\n"
     2869    "CMP R0.x, R0, R0.w, R0.z;\n"
     2870    "CMP R0.x, -R0.y, -R0, R0;\n"
     2871    "ADD R0.x, R0, c[0];\n"
     2872    "MUL R0.x, R0, c[10].y;\n"
    29132873    "FLR R0.y, R0.x;\n"
    29142874    "ADD R0.x, R0, -R0.y;\n"
    29152875    "TEX R0, R0, texture[2], 1D;\n"
     2876    "MUL R1.xy, fragment.position, c[5];\n"
     2877    "TEX R1, R1, texture[0], 2D;\n"
     2878    "ADD R2.w, -R1, c[10];\n"
    29162879    "ADD R3.xyz, R0.w, -R0;\n"
    29172880    "ADD R2.xyz, R1.w, -R1;\n"
    29182881    "MUL R2.xyz, R2, R3;\n"
    2919     "MUL R2.xyz, R2, c[9].y;\n"
     2882    "MUL R2.xyz, R2, c[10].z;\n"
    29202883    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    29212884    "MUL R4.xyz, R0, R2.w;\n"
    29222885    "MAD R2.xyz, R0, R2.w, R2;\n"
    29232886    "MUL R3.xyz, R0, R1;\n"
    2924     "ADD R2.w, -R0, c[7];\n"
    2925     "MAD R3.xyz, R3, c[9].y, R4;\n"
    2926     "MUL R0.xyz, R0, c[9].y;\n"
     2887    "ADD R2.w, -R0, c[10];\n"
     2888    "MAD R3.xyz, R3, c[10].z, R4;\n"
     2889    "MUL R0.xyz, R0, c[10].z;\n"
    29272890    "SGE R0.xyz, R0, R0.w;\n"
    29282891    "MAD R3.xyz, R1, R2.w, R3;\n"
     
    29322895    "ADD R0.z, R0.w, R1.w;\n"
    29332896    "MAD R2.w, -R0, R1, R0.z;\n"
    2934     "ADD R0.xy, fragment.position, c[0];\n"
    2935     "MUL R0.xy, R0, c[1];\n"
     2897    "ADD R0.xy, fragment.position, c[6];\n"
     2898    "MUL R0.xy, R0, c[4];\n"
    29362899    "TEX R0, R0, texture[1], 2D;\n"
    29372900    "ADD R2, R2, -R1;\n"
    2938     "DP4 R0.x, R0, c[2];\n"
     2901    "DP4 R0.x, R0, c[7];\n"
    29392902    "MAD result.color, R0.x, R2, R1;\n"
    29402903    "END\n"
     
    29432906static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT =
    29442907    "!!ARBfp1.0\n"
    2945     "PARAM c[12] = { program.local[0..5],\n"
    2946     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    2947     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    2948     "           program.local[8],\n"
    2949     "           { 0.15915494, 9.9999997e-06, 2, 8 },\n"
    2950     "           program.local[10],\n"
     2908    "PARAM c[13] = { program.local[0..7],\n"
     2909    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     2910    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     2911    "           { 3.141593, 0.15915494, 1, 2 },\n"
     2912    "           { 9.9999997e-006, 4, 16, 12 },\n"
    29512913    "           { 3 } };\n"
    29522914    "TEMP R0;\n"
     
    29572919    "TEMP R5;\n"
    29582920    "TEMP R6;\n"
    2959     "MUL R0.xyz, fragment.position.y, c[4];\n"
    2960     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    2961     "ADD R0.xyz, R0, c[5];\n"
     2921    "MUL R0.xyz, fragment.position.y, c[2];\n"
     2922    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     2923    "ADD R0.xyz, R0, c[3];\n"
    29622924    "RCP R0.z, R0.z;\n"
    29632925    "MUL R0.xy, R0, R0.z;\n"
     
    29652927    "ABS R0.z, R0.y;\n"
    29662928    "ADD R0.z, R0, -R0.w;\n"
    2967     "ADD R0.w, R0.y, c[6].x;\n"
     2929    "ADD R1.x, R0.y, c[8];\n"
    29682930    "ABS R0.z, R0;\n"
    2969     "CMP R0.y, -R0.z, R0, R0.w;\n"
     2931    "CMP R0.y, -R0.z, R0, R1.x;\n"
    29702932    "ABS R0.z, -R0.y;\n"
    2971     "ADD R0.z, R0, c[6].y;\n"
    2972     "ADD R0.w, R0.x, R0.z;\n"
    2973     "ADD R1.x, R0.z, -R0;\n"
    2974     "RCP R1.y, R0.w;\n"
    2975     "RCP R1.x, R1.x;\n"
    2976     "MUL R0.w, R0, R1.x;\n"
    2977     "ADD R0.z, R0.x, -R0;\n"
    2978     "MUL R0.z, R0, R1.y;\n"
    2979     "CMP R0.z, R0.x, R0.w, R0;\n"
    2980     "MOV R1.x, c[7].y;\n"
    2981     "MUL R0.w, R0.z, R0.z;\n"
    2982     "CMP R0.x, R0, c[7], R1;\n"
    2983     "MAD R0.w, R0, c[6].z, -c[6];\n"
    2984     "MAD R0.x, R0.w, R0.z, R0;\n"
    2985     "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
     2933    "MAX R1.x, R0.w, R0.z;\n"
     2934    "RCP R1.y, R1.x;\n"
     2935    "MIN R1.x, R0.w, R0.z;\n"
     2936    "MUL R1.x, R1, R1.y;\n"
     2937    "MUL R1.y, R1.x, R1.x;\n"
     2938    "MAD R1.z, R1.y, c[8].y, c[8];\n"
     2939    "MAD R1.z, R1, R1.y, -c[8].w;\n"
     2940    "MAD R1.z, R1, R1.y, c[9].x;\n"
     2941    "MAD R1.z, R1, R1.y, -c[9].y;\n"
     2942    "MAD R1.y, R1.z, R1, c[9].z;\n"
     2943    "MUL R1.x, R1.y, R1;\n"
     2944    "ADD R1.y, -R1.x, c[9].w;\n"
     2945    "ADD R0.z, -R0.w, R0;\n"
     2946    "CMP R0.z, -R0, R1.y, R1.x;\n"
     2947    "ADD R0.w, -R0.z, c[10].x;\n"
     2948    "CMP R0.x, R0, R0.w, R0.z;\n"
     2949    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
    29862950    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    2987     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    2988     "MAD R0.x, R0, R0.y, c[8];\n"
    2989     "MUL R0.x, R0, c[9];\n"
    2990     "FLR R0.y, R0.x;\n"
    2991     "MAX R0.z, R1.w, c[9].y;\n"
    2992     "RCP R2.w, R0.z;\n"
    2993     "MUL R2.xyz, R1, R2.w;\n"
    2994     "RSQ R3.w, R2.x;\n"
    2995     "RSQ R4.y, R2.z;\n"
    2996     "RCP R4.x, R3.w;\n"
    2997     "ADD R0.x, R0, -R0.y;\n"
    2998     "TEX R0, R0, texture[2], 1D;\n"
    2999     "MAD R3.xyz, R0, c[9].z, -R0.w;\n"
    3000     "RSQ R3.w, R2.y;\n"
    3001     "RCP R4.z, R4.y;\n"
    3002     "RCP R4.y, R3.w;\n"
    3003     "MAD R4.xyz, R4, R1.w, -R1;\n"
    3004     "MUL R6.xyz, R4, R3;\n"
    3005     "MUL R4.xyz, -R2, c[9].w;\n"
    3006     "MAD R2.xyz, -R1, R2.w, c[7].w;\n"
    3007     "ADD R5.xyz, R4, c[11].x;\n"
    3008     "MUL R4.xyz, R2, R3;\n"
    3009     "MAD R4.xyz, -R4, R5, R0.w;\n"
    3010     "MAD R2.xyz, -R2, R3, R0.w;\n"
    3011     "MAD R5.xyz, R1, R0.w, R6;\n"
    3012     "MUL R4.xyz, R1, R4;\n"
    3013     "MUL R6.xyz, R1, c[9].w;\n"
    3014     "ADD R5.xyz, R5, -R4;\n"
    3015     "SGE R6.xyz, R6, R1.w;\n"
    3016     "MUL R5.xyz, R6, R5;\n"
    3017     "ADD R3.xyz, R4, R5;\n"
    3018     "MUL R2.xyz, R1, R2;\n"
    3019     "MUL R4.xyz, R0, c[9].z;\n"
    3020     "ADD R3.xyz, R3, -R2;\n"
    3021     "SGE R4.xyz, R4, R0.w;\n"
    3022     "MUL R3.xyz, R4, R3;\n"
    3023     "ADD R2.xyz, R2, R3;\n"
    3024     "ADD R2.w, -R1, c[7];\n"
    3025     "MAD R0.xyz, R0, R2.w, R2;\n"
    3026     "ADD R2.x, -R0.w, c[7].w;\n"
    3027     "MAD R2.xyz, R1, R2.x, R0;\n"
    3028     "ADD R0.z, R0.w, R1.w;\n"
    3029     "MAD R2.w, -R0, R1, R0.z;\n"
    3030     "ADD R0.xy, fragment.position, c[0];\n"
    3031     "MUL R0.xy, R0, c[1];\n"
    3032     "TEX R0, R0, texture[1], 2D;\n"
    3033     "ADD R2, R2, -R1;\n"
    3034     "DP4 R0.x, R0, c[2];\n"
    3035     "MAD result.color, R0.x, R2, R1;\n"
    3036     "END\n"
    3037     ;
    3038 
    3039 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE =
    3040     "!!ARBfp1.0\n"
    3041     "PARAM c[11] = { program.local[0..5],\n"
    3042     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3043     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3044     "           program.local[8],\n"
    3045     "           { 0.15915494, 2 },\n"
    3046     "           program.local[10] };\n"
    3047     "TEMP R0;\n"
    3048     "TEMP R1;\n"
    3049     "TEMP R2;\n"
    3050     "TEMP R3;\n"
    3051     "MUL R0.xyz, fragment.position.y, c[4];\n"
    3052     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    3053     "ADD R0.xyz, R0, c[5];\n"
    3054     "RCP R0.z, R0.z;\n"
    3055     "MUL R0.xy, R0, R0.z;\n"
    3056     "ABS R0.w, R0.x;\n"
    3057     "ABS R0.z, R0.y;\n"
    3058     "ADD R0.z, R0, -R0.w;\n"
    3059     "ADD R0.w, R0.y, c[6].x;\n"
    3060     "ABS R0.z, R0;\n"
    3061     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3062     "ABS R0.z, -R0.y;\n"
    3063     "ADD R0.z, R0, c[6].y;\n"
    3064     "ADD R0.w, R0.x, R0.z;\n"
    3065     "ADD R1.x, R0.z, -R0;\n"
    3066     "RCP R1.y, R0.w;\n"
    3067     "RCP R1.x, R1.x;\n"
    3068     "MUL R0.w, R0, R1.x;\n"
    3069     "ADD R0.z, R0.x, -R0;\n"
    3070     "MUL R0.z, R0, R1.y;\n"
    3071     "CMP R0.z, R0.x, R0.w, R0;\n"
    3072     "MUL R0.w, R0.z, R0.z;\n"
    3073     "MOV R1.x, c[7].y;\n"
    3074     "CMP R0.x, R0, c[7], R1;\n"
    3075     "MAD R0.w, R0, c[6].z, -c[6];\n"
    3076     "MAD R0.x, R0.w, R0.z, R0;\n"
    3077     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    3078     "MAD R0.x, R0, R0.y, c[8];\n"
    3079     "MUL R0.x, R0, c[9];\n"
    3080     "FLR R0.y, R0.x;\n"
    3081     "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
    3082     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    3083     "ADD R0.x, R0, -R0.y;\n"
    3084     "TEX R0, R0, texture[2], 1D;\n"
    3085     "ADD R3.xyz, R0, R1;\n"
    3086     "MUL R2.xyz, R1, R0.w;\n"
    3087     "MUL R0.xyz, R0, R1.w;\n"
    3088     "MIN R0.xyz, R0, R2;\n"
    3089     "MAD R2.xyz, -R0, c[9].y, R3;\n"
    3090     "ADD R0.z, R0.w, R1.w;\n"
    3091     "MAD R2.w, -R0, R1, R0.z;\n"
    3092     "ADD R0.xy, fragment.position, c[0];\n"
    3093     "MUL R0.xy, R0, c[1];\n"
    3094     "TEX R0, R0, texture[1], 2D;\n"
    3095     "ADD R2, R2, -R1;\n"
    3096     "DP4 R0.x, R0, c[2];\n"
    3097     "MAD result.color, R0.x, R2, R1;\n"
    3098     "END\n"
    3099     ;
    3100 
    3101 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION =
    3102     "!!ARBfp1.0\n"
    3103     "PARAM c[11] = { program.local[0..5],\n"
    3104     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3105     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3106     "           program.local[8],\n"
    3107     "           { 0.15915494, 2 },\n"
    3108     "           program.local[10] };\n"
    3109     "TEMP R0;\n"
    3110     "TEMP R1;\n"
    3111     "TEMP R2;\n"
    3112     "TEMP R3;\n"
    3113     "MUL R0.xyz, fragment.position.y, c[4];\n"
    3114     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    3115     "ADD R0.xyz, R0, c[5];\n"
    3116     "RCP R0.z, R0.z;\n"
    3117     "MUL R0.xy, R0, R0.z;\n"
    3118     "ABS R0.w, R0.x;\n"
    3119     "ABS R0.z, R0.y;\n"
    3120     "ADD R0.z, R0, -R0.w;\n"
    3121     "ADD R0.w, R0.y, c[6].x;\n"
    3122     "ABS R0.z, R0;\n"
    3123     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3124     "ABS R0.z, -R0.y;\n"
    3125     "ADD R0.z, R0, c[6].y;\n"
    3126     "ADD R0.w, R0.x, R0.z;\n"
    3127     "ADD R1.x, R0.z, -R0;\n"
    3128     "RCP R1.y, R0.w;\n"
    3129     "RCP R1.x, R1.x;\n"
    3130     "MUL R0.w, R0, R1.x;\n"
    3131     "ADD R0.z, R0.x, -R0;\n"
    3132     "MUL R0.z, R0, R1.y;\n"
    3133     "CMP R0.z, R0.x, R0.w, R0;\n"
    3134     "MUL R0.w, R0.z, R0.z;\n"
    3135     "MOV R1.x, c[7].y;\n"
    3136     "CMP R0.x, R0, c[7], R1;\n"
    3137     "MAD R0.w, R0, c[6].z, -c[6];\n"
    3138     "MUL R1.xy, fragment.position, c[10];\n"
    3139     "TEX R1, R1, texture[0], 2D;\n"
    3140     "CMP R0.y, -R0, c[7].z, c[7].w;\n"
    3141     "MAD R0.x, R0.w, R0.z, R0;\n"
    3142     "MAD R0.x, R0, R0.y, c[8];\n"
    3143     "MUL R0.x, R0, c[9];\n"
     2951    "CMP R0.x, -R0.y, -R0, R0;\n"
     2952    "MAX R0.z, R1.w, c[11].x;\n"
     2953    "RCP R2.x, R0.z;\n"
     2954    "MUL R3.xyz, R1, R2.x;\n"
     2955    "MAD R4.xyz, R3, c[11].z, -c[11].w;\n"
     2956    "ADD R0.x, R0, c[0];\n"
     2957    "MUL R0.x, R0, c[10].y;\n"
    31442958    "FLR R0.y, R0.x;\n"
    31452959    "ADD R0.x, R0, -R0.y;\n"
    31462960    "TEX R0, R0, texture[2], 1D;\n"
    3147     "MUL R2.xyz, R1, R0.w;\n"
    3148     "MAD R3.xyz, R0, R1.w, R2;\n"
    3149     "MUL R2.xyz, R0, R1;\n"
    3150     "MAD R2.xyz, -R2, c[9].y, R3;\n"
    3151     "ADD R2.w, -R1, c[7];\n"
    3152     "MAD R0.xyz, R0, R2.w, R2;\n"
    3153     "ADD R2.x, -R0.w, c[7].w;\n"
    3154     "MAD R2.xyz, R1, R2.x, R0;\n"
     2961    "MAD R2.xyz, R0, c[10].w, -R0.w;\n"
     2962    "MAD R4.xyz, R3, R4, c[12].x;\n"
     2963    "MUL R5.xyz, R1.w, R2;\n"
     2964    "MUL R6.xyz, R5, R4;\n"
     2965    "RSQ R2.w, R3.x;\n"
     2966    "RCP R4.x, R2.w;\n"
     2967    "RSQ R2.w, R3.y;\n"
     2968    "RSQ R3.w, R3.z;\n"
     2969    "RCP R4.y, R2.w;\n"
     2970    "RCP R4.z, R3.w;\n"
     2971    "ADD R4.xyz, -R3, R4;\n"
     2972    "MUL R6.xyz, R3, R6;\n"
     2973    "MUL R4.xyz, R5, R4;\n"
     2974    "ADD R3.xyz, -R3, c[10].z;\n"
     2975    "MAD R2.xyz, R2, R3, R0.w;\n"
     2976    "MUL R3.xyz, R0, c[10].w;\n"
     2977    "MAD R5.xyz, R0.w, R1, R6;\n"
     2978    "MAD R4.xyz, R0.w, R1, R4;\n"
     2979    "ADD R6.xyz, R4, -R5;\n"
     2980    "MUL R4.xyz, R1, c[11].y;\n"
     2981    "SGE R4.xyz, R4, R1.w;\n"
     2982    "MAD R4.xyz, R4, R6, R5;\n"
     2983    "MAD R4.xyz, -R1, R2, R4;\n"
     2984    "SGE R3.xyz, R3, R0.w;\n"
     2985    "MUL R2.xyz, R1, R2;\n"
     2986    "ADD R2.w, -R1, c[10].z;\n"
     2987    "MAD R2.xyz, R3, R4, R2;\n"
     2988    "MAD R2.xyz, R0, R2.w, R2;\n"
     2989    "ADD R0.x, -R0.w, c[10].z;\n"
     2990    "MAD R2.xyz, R1, R0.x, R2;\n"
    31552991    "ADD R0.z, R0.w, R1.w;\n"
    31562992    "MAD R2.w, -R0, R1, R0.z;\n"
    3157     "ADD R0.xy, fragment.position, c[0];\n"
    3158     "MUL R0.xy, R0, c[1];\n"
     2993    "ADD R0.xy, fragment.position, c[6];\n"
     2994    "MUL R0.xy, R0, c[4];\n"
    31592995    "TEX R0, R0, texture[1], 2D;\n"
    31602996    "ADD R2, R2, -R1;\n"
    3161     "DP4 R0.x, R0, c[2];\n"
     2997    "DP4 R0.x, R0, c[7];\n"
    31622998    "MAD result.color, R0.x, R2, R1;\n"
    31632999    "END\n"
    31643000    ;
    31653001
     3002static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE =
     3003    "!!ARBfp1.0\n"
     3004    "PARAM c[11] = { program.local[0..7],\n"
     3005    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3006    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3007    "           { 0.33299461, 0.99999559, 2 } };\n"
     3008    "TEMP R0;\n"
     3009    "TEMP R1;\n"
     3010    "TEMP R2;\n"
     3011    "TEMP R3;\n"
     3012    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3013    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3014    "ADD R0.xyz, R0, c[3];\n"
     3015    "RCP R0.z, R0.z;\n"
     3016    "MUL R0.xy, R0, R0.z;\n"
     3017    "ABS R0.z, R0.x;\n"
     3018    "ABS R0.w, R0.y;\n"
     3019    "ADD R0.w, R0, -R0.z;\n"
     3020    "ADD R1.x, R0.y, c[8].y;\n"
     3021    "ABS R0.w, R0;\n"
     3022    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3023    "ABS R0.w, -R0.y;\n"
     3024    "MAX R1.x, R0.z, R0.w;\n"
     3025    "RCP R1.y, R1.x;\n"
     3026    "MIN R1.x, R0.z, R0.w;\n"
     3027    "MUL R1.x, R1, R1.y;\n"
     3028    "MUL R1.y, R1.x, R1.x;\n"
     3029    "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
     3030    "MAD R1.z, R1, R1.y, -c[9];\n"
     3031    "MAD R1.z, R1, R1.y, c[9].w;\n"
     3032    "MAD R1.z, R1, R1.y, -c[10].x;\n"
     3033    "MAD R1.y, R1.z, R1, c[10];\n"
     3034    "MUL R1.x, R1.y, R1;\n"
     3035    "ADD R1.y, -R1.x, c[8].w;\n"
     3036    "ADD R0.z, -R0, R0.w;\n"
     3037    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3038    "ADD R0.w, -R0.z, c[8].z;\n"
     3039    "CMP R0.x, R0, R0.w, R0.z;\n"
     3040    "CMP R0.x, -R0.y, -R0, R0;\n"
     3041    "ADD R0.x, R0, c[0];\n"
     3042    "MUL R0.z, R0.x, c[8].x;\n"
     3043    "FLR R0.w, R0.z;\n"
     3044    "ADD R1.x, R0.z, -R0.w;\n"
     3045    "MUL R0.xy, fragment.position, c[5];\n"
     3046    "TEX R0, R0, texture[0], 2D;\n"
     3047    "TEX R1, R1, texture[2], 1D;\n"
     3048    "ADD R2.xyz, R1, R0;\n"
     3049    "MUL R3.xyz, R1.w, R0;\n"
     3050    "MUL R1.xyz, R1, R0.w;\n"
     3051    "MIN R1.xyz, R1, R3;\n"
     3052    "MAD R2.xyz, -R1, c[10].z, R2;\n"
     3053    "ADD R1.z, R1.w, R0.w;\n"
     3054    "MAD R2.w, -R1, R0, R1.z;\n"
     3055    "ADD R1.xy, fragment.position, c[6];\n"
     3056    "MUL R1.xy, R1, c[4];\n"
     3057    "TEX R1, R1, texture[1], 2D;\n"
     3058    "ADD R2, R2, -R0;\n"
     3059    "DP4 R1.x, R1, c[7];\n"
     3060    "MAD result.color, R1.x, R2, R0;\n"
     3061    "END\n"
     3062    ;
     3063
     3064static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION =
     3065    "!!ARBfp1.0\n"
     3066    "PARAM c[11] = { program.local[0..7],\n"
     3067    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3068    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3069    "           { 0.33299461, 0.99999559, 2, 1 } };\n"
     3070    "TEMP R0;\n"
     3071    "TEMP R1;\n"
     3072    "TEMP R2;\n"
     3073    "TEMP R3;\n"
     3074    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3075    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3076    "ADD R0.xyz, R0, c[3];\n"
     3077    "RCP R0.z, R0.z;\n"
     3078    "MUL R0.xy, R0, R0.z;\n"
     3079    "ABS R0.z, R0.x;\n"
     3080    "ABS R0.w, R0.y;\n"
     3081    "ADD R0.w, R0, -R0.z;\n"
     3082    "ADD R1.x, R0.y, c[8].y;\n"
     3083    "ABS R0.w, R0;\n"
     3084    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3085    "ABS R0.w, -R0.y;\n"
     3086    "MAX R1.x, R0.z, R0.w;\n"
     3087    "RCP R1.y, R1.x;\n"
     3088    "MIN R1.x, R0.z, R0.w;\n"
     3089    "MUL R1.x, R1, R1.y;\n"
     3090    "MUL R1.y, R1.x, R1.x;\n"
     3091    "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
     3092    "MAD R1.z, R1, R1.y, -c[9];\n"
     3093    "MAD R1.z, R1, R1.y, c[9].w;\n"
     3094    "MAD R1.z, R1, R1.y, -c[10].x;\n"
     3095    "MAD R1.y, R1.z, R1, c[10];\n"
     3096    "MUL R1.x, R1.y, R1;\n"
     3097    "ADD R1.y, -R1.x, c[8].w;\n"
     3098    "ADD R0.z, -R0, R0.w;\n"
     3099    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3100    "ADD R0.w, -R0.z, c[8].z;\n"
     3101    "CMP R0.x, R0, R0.w, R0.z;\n"
     3102    "CMP R0.x, -R0.y, -R0, R0;\n"
     3103    "ADD R0.x, R0, c[0];\n"
     3104    "MUL R0.z, R0.x, c[8].x;\n"
     3105    "FLR R0.w, R0.z;\n"
     3106    "ADD R1.x, R0.z, -R0.w;\n"
     3107    "MUL R0.xy, fragment.position, c[5];\n"
     3108    "TEX R0, R0, texture[0], 2D;\n"
     3109    "TEX R1, R1, texture[2], 1D;\n"
     3110    "MUL R2.xyz, R1.w, R0;\n"
     3111    "MAD R3.xyz, R1, R0.w, R2;\n"
     3112    "MUL R2.xyz, R1, R0;\n"
     3113    "MAD R2.xyz, -R2, c[10].z, R3;\n"
     3114    "ADD R2.w, -R0, c[10];\n"
     3115    "MAD R1.xyz, R1, R2.w, R2;\n"
     3116    "ADD R2.x, -R1.w, c[10].w;\n"
     3117    "MAD R2.xyz, R0, R2.x, R1;\n"
     3118    "ADD R1.z, R1.w, R0.w;\n"
     3119    "MAD R2.w, -R1, R0, R1.z;\n"
     3120    "ADD R1.xy, fragment.position, c[6];\n"
     3121    "MUL R1.xy, R1, c[4];\n"
     3122    "TEX R1, R1, texture[1], 2D;\n"
     3123    "ADD R2, R2, -R0;\n"
     3124    "DP4 R1.x, R1, c[7];\n"
     3125    "MAD result.color, R1.x, R2, R0;\n"
     3126    "END\n"
     3127    ;
     3128
    31663129static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
    31673130    "!!ARBfp1.0\n"
    3168     "PARAM c[10] = { program.local[0..2],\n"
    3169     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3170     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3171     "           program.local[5],\n"
    3172     "           { 0.15915494 },\n"
    3173     "           program.local[7..9] };\n"
    3174     "TEMP R0;\n"
    3175     "TEMP R1;\n"
    3176     "TEMP R2;\n"
    3177     "TEMP R3;\n"
    3178     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3179     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3180     "ADD R0.xyz, R0, c[2];\n"
    3181     "RCP R0.z, R0.z;\n"
    3182     "MUL R0.xy, R0, R0.z;\n"
    3183     "ABS R0.w, R0.x;\n"
    3184     "ABS R0.z, R0.y;\n"
    3185     "ADD R0.z, R0, -R0.w;\n"
    3186     "ADD R0.w, R0.y, c[3].x;\n"
    3187     "ABS R0.z, R0;\n"
    3188     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3189     "ABS R0.z, -R0.y;\n"
    3190     "ADD R0.z, R0, c[3].y;\n"
    3191     "ADD R0.w, R0.x, R0.z;\n"
    3192     "ADD R1.x, R0.z, -R0;\n"
    3193     "RCP R1.y, R0.w;\n"
    3194     "RCP R1.x, R1.x;\n"
    3195     "MUL R0.w, R0, R1.x;\n"
    3196     "ADD R0.z, R0.x, -R0;\n"
    3197     "MUL R0.z, R0, R1.y;\n"
    3198     "CMP R0.z, R0.x, R0.w, R0;\n"
    3199     "MUL R0.w, R0.z, R0.z;\n"
    3200     "MOV R1.x, c[4].y;\n"
    3201     "CMP R0.x, R0, c[4], R1;\n"
    3202     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3203     "MAD R0.x, R0.w, R0.z, R0;\n"
    3204     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3205     "MAD R0.x, R0, R0.y, c[5];\n"
    3206     "MUL R0.x, R0, c[6];\n"
     3131    "PARAM c[10] = { program.local[0..6],\n"
     3132    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3133    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3134    "           { 0.33299461, 0.99999559, 1 } };\n"
     3135    "TEMP R0;\n"
     3136    "TEMP R1;\n"
     3137    "TEMP R2;\n"
     3138    "TEMP R3;\n"
     3139    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3140    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3141    "ADD R0.xyz, R0, c[3];\n"
     3142    "RCP R0.z, R0.z;\n"
     3143    "MUL R0.xy, R0, R0.z;\n"
     3144    "ABS R0.z, R0.x;\n"
     3145    "ABS R0.w, R0.y;\n"
     3146    "ADD R0.w, R0, -R0.z;\n"
     3147    "ADD R1.x, R0.y, c[7].y;\n"
     3148    "ABS R0.w, R0;\n"
     3149    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3150    "ABS R0.w, -R0.y;\n"
     3151    "MAX R1.x, R0.z, R0.w;\n"
     3152    "RCP R1.y, R1.x;\n"
     3153    "MIN R1.x, R0.z, R0.w;\n"
     3154    "MUL R1.x, R1, R1.y;\n"
     3155    "MUL R1.y, R1.x, R1.x;\n"
     3156    "MAD R1.z, R1.y, c[8].x, c[8].y;\n"
     3157    "MAD R1.z, R1, R1.y, -c[8];\n"
     3158    "MAD R1.z, R1, R1.y, c[8].w;\n"
     3159    "MAD R1.z, R1, R1.y, -c[9].x;\n"
     3160    "MAD R1.y, R1.z, R1, c[9];\n"
     3161    "MUL R1.x, R1.y, R1;\n"
     3162    "ADD R0.z, -R0, R0.w;\n"
     3163    "ADD R1.y, -R1.x, c[7].w;\n"
     3164    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3165    "ADD R0.w, -R0.z, c[7].z;\n"
     3166    "CMP R0.x, R0, R0.w, R0.z;\n"
     3167    "CMP R0.x, -R0.y, -R0, R0;\n"
     3168    "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     3169    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3170    "MUL R2.xyz, R1, c[4].y;\n"
     3171    "ADD R0.x, R0, c[0];\n"
     3172    "MUL R0.x, R0, c[7];\n"
    32073173    "FLR R0.y, R0.x;\n"
    3208     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    3209     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    3210     "MUL R2.xyz, R1, c[9].y;\n"
    32113174    "ADD R0.x, R0, -R0.y;\n"
    32123175    "TEX R0, R0, texture[1], 1D;\n"
    3213     "MUL R3.xyz, R2, R0.w;\n"
    3214     "MUL R2.xyz, R0, c[9].x;\n"
    3215     "MAD R2.xyz, R2, R1.w, R3;\n"
    3216     "ADD R2.w, -R1, c[4];\n"
    3217     "MUL R0.xyz, R0, c[8].y;\n"
    3218     "MAD R0.xyz, R0, R2.w, R2;\n"
    3219     "ADD R2.x, -R0.w, c[4].w;\n"
    3220     "MUL R1.xyz, R1, c[8].z;\n"
    3221     "MAD result.color.xyz, R1, R2.x, R0;\n"
     3176    "MUL R3.xyz, R0.w, R2;\n"
     3177    "MUL R2.xyz, R0, c[4].x;\n"
     3178    "MAD R2.xyz, R1.w, R2, R3;\n"
     3179    "ADD R2.w, -R1, c[9].z;\n"
     3180    "MUL R0.xyz, R0, c[5].y;\n"
     3181    "MAD R0.xyz, R2.w, R0, R2;\n"
     3182    "ADD R2.x, -R0.w, c[9].z;\n"
     3183    "MUL R1.xyz, R1, c[5].z;\n"
     3184    "MAD result.color.xyz, R2.x, R1, R0;\n"
    32223185    "MUL R0.x, R0.w, R1.w;\n"
    32233186    "MUL R0.z, R1.w, R2.x;\n"
    32243187    "MUL R0.y, R0.w, R2.w;\n"
    3225     "DP3 result.color.w, R0, c[8];\n"
     3188    "DP3 result.color.w, R0, c[5];\n"
    32263189    "END\n"
    32273190    ;
     
    32293192static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
    32303193    "!!ARBfp1.0\n"
    3231     "PARAM c[8] = { program.local[0..2],\n"
    3232     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3233     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3234     "           program.local[5],\n"
    3235     "           { 0.15915494 },\n"
    3236     "           program.local[7] };\n"
    3237     "TEMP R0;\n"
    3238     "TEMP R1;\n"
    3239     "TEMP R2;\n"
    3240     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3241     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3242     "ADD R0.xyz, R0, c[2];\n"
    3243     "RCP R0.z, R0.z;\n"
    3244     "MUL R0.xy, R0, R0.z;\n"
    3245     "ABS R0.w, R0.x;\n"
    3246     "ABS R0.z, R0.y;\n"
    3247     "ADD R0.z, R0, -R0.w;\n"
    3248     "ADD R0.w, R0.y, c[3].x;\n"
    3249     "ABS R0.z, R0;\n"
    3250     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3251     "ABS R0.z, -R0.y;\n"
    3252     "ADD R0.z, R0, c[3].y;\n"
    3253     "ADD R0.w, R0.x, R0.z;\n"
    3254     "ADD R1.x, R0.z, -R0;\n"
    3255     "RCP R1.y, R0.w;\n"
    3256     "RCP R1.x, R1.x;\n"
    3257     "MUL R0.w, R0, R1.x;\n"
    3258     "ADD R0.z, R0.x, -R0;\n"
    3259     "MUL R0.z, R0, R1.y;\n"
    3260     "CMP R0.z, R0.x, R0.w, R0;\n"
    3261     "MUL R0.w, R0.z, R0.z;\n"
    3262     "MOV R1.x, c[4].y;\n"
    3263     "CMP R0.x, R0, c[4], R1;\n"
    3264     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3265     "MAD R0.x, R0.w, R0.z, R0;\n"
    3266     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3267     "MAD R0.x, R0, R0.y, c[5];\n"
    3268     "MUL R0.x, R0, c[6];\n"
     3194    "PARAM c[8] = { program.local[0..4],\n"
     3195    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3196    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3197    "           { 0.33299461, 0.99999559, 1 } };\n"
     3198    "TEMP R0;\n"
     3199    "TEMP R1;\n"
     3200    "TEMP R2;\n"
     3201    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3202    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3203    "ADD R0.xyz, R0, c[3];\n"
     3204    "RCP R0.z, R0.z;\n"
     3205    "MUL R0.xy, R0, R0.z;\n"
     3206    "ABS R0.z, R0.x;\n"
     3207    "ABS R0.w, R0.y;\n"
     3208    "ADD R0.w, R0, -R0.z;\n"
     3209    "ADD R1.x, R0.y, c[5].y;\n"
     3210    "ABS R0.w, R0;\n"
     3211    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3212    "ABS R0.w, -R0.y;\n"
     3213    "MAX R1.x, R0.z, R0.w;\n"
     3214    "RCP R1.y, R1.x;\n"
     3215    "MIN R1.x, R0.z, R0.w;\n"
     3216    "MUL R1.x, R1, R1.y;\n"
     3217    "MUL R1.y, R1.x, R1.x;\n"
     3218    "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
     3219    "MAD R1.z, R1, R1.y, -c[6];\n"
     3220    "MAD R1.z, R1, R1.y, c[6].w;\n"
     3221    "MAD R1.z, R1, R1.y, -c[7].x;\n"
     3222    "MAD R1.y, R1.z, R1, c[7];\n"
     3223    "MUL R1.x, R1.y, R1;\n"
     3224    "ADD R0.z, -R0, R0.w;\n"
     3225    "ADD R1.y, -R1.x, c[5].w;\n"
     3226    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3227    "ADD R0.w, -R0.z, c[5].z;\n"
     3228    "CMP R0.x, R0, R0.w, R0.z;\n"
     3229    "CMP R0.x, -R0.y, -R0, R0;\n"
     3230    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3231    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3232    "ADD R0.x, R0, c[0];\n"
     3233    "MUL R0.x, R0, c[5];\n"
    32693234    "FLR R0.y, R0.x;\n"
    3270     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    3271     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    32723235    "ADD R0.x, R0, -R0.y;\n"
    32733236    "TEX R0, R0, texture[1], 1D;\n"
    3274     "ADD R2.x, -R1.w, c[4].w;\n"
     3237    "ADD R2.x, -R1.w, c[7].z;\n"
    32753238    "MUL R2.xyz, R0, R2.x;\n"
    32763239    "MAD R0.xyz, R0, R1, R2;\n"
    32773240    "ADD R2.x, R0.w, R1.w;\n"
    3278     "ADD R2.y, -R0.w, c[4].w;\n"
     3241    "ADD R2.y, -R0.w, c[7].z;\n"
    32793242    "MAD result.color.xyz, R1, R2.y, R0;\n"
    32803243    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    32843247static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK =
    32853248    "!!ARBfp1.0\n"
    3286     "PARAM c[8] = { program.local[0..2],\n"
    3287     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3288     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3289     "           program.local[5],\n"
    3290     "           { 0.15915494 },\n"
    3291     "           program.local[7] };\n"
    3292     "TEMP R0;\n"
    3293     "TEMP R1;\n"
    3294     "TEMP R2;\n"
    3295     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3296     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3297     "ADD R0.xyz, R0, c[2];\n"
    3298     "RCP R0.z, R0.z;\n"
    3299     "MUL R0.xy, R0, R0.z;\n"
    3300     "ABS R0.w, R0.x;\n"
    3301     "ABS R0.z, R0.y;\n"
    3302     "ADD R0.z, R0, -R0.w;\n"
    3303     "ADD R0.w, R0.y, c[3].x;\n"
    3304     "ABS R0.z, R0;\n"
    3305     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3306     "ABS R0.z, -R0.y;\n"
    3307     "ADD R0.z, R0, c[3].y;\n"
    3308     "ADD R0.w, R0.x, R0.z;\n"
    3309     "ADD R1.x, R0.z, -R0;\n"
    3310     "RCP R1.y, R0.w;\n"
    3311     "RCP R1.x, R1.x;\n"
    3312     "MUL R0.w, R0, R1.x;\n"
    3313     "ADD R0.z, R0.x, -R0;\n"
    3314     "MUL R0.z, R0, R1.y;\n"
    3315     "CMP R0.z, R0.x, R0.w, R0;\n"
    3316     "MUL R0.w, R0.z, R0.z;\n"
    3317     "MOV R1.x, c[4].y;\n"
    3318     "CMP R0.x, R0, c[4], R1;\n"
    3319     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3320     "MAD R0.x, R0.w, R0.z, R0;\n"
    3321     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3322     "MAD R0.x, R0, R0.y, c[5];\n"
    3323     "MUL R0.x, R0, c[6];\n"
     3249    "PARAM c[8] = { program.local[0..4],\n"
     3250    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3251    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3252    "           { 0.33299461, 0.99999559 } };\n"
     3253    "TEMP R0;\n"
     3254    "TEMP R1;\n"
     3255    "TEMP R2;\n"
     3256    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3257    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3258    "ADD R0.xyz, R0, c[3];\n"
     3259    "RCP R0.z, R0.z;\n"
     3260    "MUL R0.xy, R0, R0.z;\n"
     3261    "ABS R0.z, R0.x;\n"
     3262    "ABS R0.w, R0.y;\n"
     3263    "ADD R0.w, R0, -R0.z;\n"
     3264    "ADD R1.x, R0.y, c[5].y;\n"
     3265    "ABS R0.w, R0;\n"
     3266    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3267    "ABS R0.w, -R0.y;\n"
     3268    "MAX R1.x, R0.z, R0.w;\n"
     3269    "RCP R1.y, R1.x;\n"
     3270    "MIN R1.x, R0.z, R0.w;\n"
     3271    "MUL R1.x, R1, R1.y;\n"
     3272    "MUL R1.y, R1.x, R1.x;\n"
     3273    "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
     3274    "MAD R1.z, R1, R1.y, -c[6];\n"
     3275    "MAD R1.z, R1, R1.y, c[6].w;\n"
     3276    "MAD R1.z, R1, R1.y, -c[7].x;\n"
     3277    "MAD R1.y, R1.z, R1, c[7];\n"
     3278    "MUL R1.x, R1.y, R1;\n"
     3279    "ADD R0.z, -R0, R0.w;\n"
     3280    "ADD R1.y, -R1.x, c[5].w;\n"
     3281    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3282    "ADD R0.w, -R0.z, c[5].z;\n"
     3283    "CMP R0.x, R0, R0.w, R0.z;\n"
     3284    "CMP R0.x, -R0.y, -R0, R0;\n"
     3285    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3286    "ADD R0.x, R0, c[0];\n"
     3287    "MUL R0.x, R0, c[5];\n"
    33243288    "FLR R0.y, R0.x;\n"
    3325     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    33263289    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    33273290    "ADD R0.x, R0, -R0.y;\n"
     
    33343297static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK =
    33353298    "!!ARBfp1.0\n"
    3336     "PARAM c[8] = { program.local[0..2],\n"
    3337     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3338     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3339     "           program.local[5],\n"
    3340     "           { 0.15915494, 2 },\n"
    3341     "           program.local[7] };\n"
    3342     "TEMP R0;\n"
    3343     "TEMP R1;\n"
    3344     "TEMP R2;\n"
    3345     "TEMP R3;\n"
    3346     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3347     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3348     "ADD R0.xyz, R0, c[2];\n"
    3349     "RCP R0.z, R0.z;\n"
    3350     "MUL R0.xy, R0, R0.z;\n"
    3351     "ABS R0.w, R0.x;\n"
    3352     "ABS R0.z, R0.y;\n"
    3353     "ADD R0.z, R0, -R0.w;\n"
    3354     "ADD R0.w, R0.y, c[3].x;\n"
    3355     "ABS R0.z, R0;\n"
    3356     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3357     "ABS R0.z, -R0.y;\n"
    3358     "ADD R0.z, R0, c[3].y;\n"
    3359     "ADD R0.w, R0.x, R0.z;\n"
    3360     "ADD R1.x, R0.z, -R0;\n"
    3361     "RCP R1.y, R0.w;\n"
    3362     "RCP R1.x, R1.x;\n"
    3363     "MUL R0.w, R0, R1.x;\n"
    3364     "ADD R0.z, R0.x, -R0;\n"
    3365     "MUL R0.z, R0, R1.y;\n"
    3366     "CMP R0.z, R0.x, R0.w, R0;\n"
    3367     "MUL R0.w, R0.z, R0.z;\n"
    3368     "MOV R1.x, c[4].y;\n"
    3369     "CMP R0.x, R0, c[4], R1;\n"
    3370     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3371     "MUL R1.xy, fragment.position, c[7];\n"
    3372     "TEX R1, R1, texture[0], 2D;\n"
    3373     "ADD R2.w, -R1, c[4];\n"
    3374     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3375     "MAD R0.x, R0.w, R0.z, R0;\n"
    3376     "MAD R0.x, R0, R0.y, c[5];\n"
    3377     "MUL R0.x, R0, c[6];\n"
     3299    "PARAM c[8] = { program.local[0..4],\n"
     3300    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     3301    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     3302    "           { 3.141593, 0.15915494, 2, 1 } };\n"
     3303    "TEMP R0;\n"
     3304    "TEMP R1;\n"
     3305    "TEMP R2;\n"
     3306    "TEMP R3;\n"
     3307    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3308    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3309    "ADD R0.xyz, R0, c[3];\n"
     3310    "RCP R0.z, R0.z;\n"
     3311    "MUL R0.xy, R0, R0.z;\n"
     3312    "ABS R0.z, R0.x;\n"
     3313    "ABS R0.w, R0.y;\n"
     3314    "ADD R0.w, R0, -R0.z;\n"
     3315    "ADD R1.x, R0.y, c[5];\n"
     3316    "ABS R0.w, R0;\n"
     3317    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3318    "ABS R0.w, -R0.y;\n"
     3319    "MAX R1.x, R0.z, R0.w;\n"
     3320    "RCP R1.y, R1.x;\n"
     3321    "MIN R1.x, R0.z, R0.w;\n"
     3322    "MUL R1.x, R1, R1.y;\n"
     3323    "MUL R1.y, R1.x, R1.x;\n"
     3324    "MAD R1.z, R1.y, c[5].y, c[5];\n"
     3325    "MAD R1.z, R1, R1.y, -c[5].w;\n"
     3326    "MAD R1.z, R1, R1.y, c[6].x;\n"
     3327    "MAD R1.z, R1, R1.y, -c[6].y;\n"
     3328    "MAD R1.y, R1.z, R1, c[6].z;\n"
     3329    "MUL R1.x, R1.y, R1;\n"
     3330    "ADD R0.z, -R0, R0.w;\n"
     3331    "ADD R1.y, -R1.x, c[6].w;\n"
     3332    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3333    "ADD R0.w, -R0.z, c[7].x;\n"
     3334    "CMP R0.x, R0, R0.w, R0.z;\n"
     3335    "CMP R0.x, -R0.y, -R0, R0;\n"
     3336    "ADD R0.x, R0, c[0];\n"
     3337    "MUL R0.x, R0, c[7].y;\n"
    33783338    "FLR R0.y, R0.x;\n"
    33793339    "ADD R0.x, R0, -R0.y;\n"
    33803340    "TEX R0, R0, texture[1], 1D;\n"
     3341    "MUL R1.xy, fragment.position, c[4];\n"
     3342    "TEX R1, R1, texture[0], 2D;\n"
    33813343    "ADD R3.xyz, R0.w, -R0;\n"
    33823344    "ADD R2.xyz, R1.w, -R1;\n"
    33833345    "MUL R2.xyz, R2, R3;\n"
    3384     "MUL R2.xyz, R2, c[6].y;\n"
     3346    "ADD R2.w, -R1, c[7];\n"
     3347    "MUL R2.xyz, R2, c[7].z;\n"
    33853348    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    33863349    "MAD R2.xyz, R0, R2.w, R2;\n"
    33873350    "MUL R3.xyz, R0, R2.w;\n"
    33883351    "MUL R0.xyz, R0, R1;\n"
    3389     "ADD R2.w, -R0, c[4];\n"
    3390     "MAD R0.xyz, R0, c[6].y, R3;\n"
     3352    "ADD R2.w, -R0, c[7];\n"
     3353    "MAD R0.xyz, R0, c[7].z, R3;\n"
    33913354    "MAD R0.xyz, R1, R2.w, R0;\n"
    33923355    "MAD R2.xyz, R1, R2.w, R2;\n"
    3393     "MUL R1.xyz, R1, c[6].y;\n"
     3356    "MUL R1.xyz, R1, c[7].z;\n"
    33943357    "ADD R2.w, R0, R1;\n"
    33953358    "ADD R2.xyz, R2, -R0;\n"
     
    34023365static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK =
    34033366    "!!ARBfp1.0\n"
    3404     "PARAM c[8] = { program.local[0..2],\n"
    3405     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3406     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3407     "           program.local[5],\n"
    3408     "           { 0.15915494 },\n"
    3409     "           program.local[7] };\n"
    3410     "TEMP R0;\n"
    3411     "TEMP R1;\n"
    3412     "TEMP R2;\n"
    3413     "TEMP R3;\n"
    3414     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3415     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3416     "ADD R0.xyz, R0, c[2];\n"
    3417     "RCP R0.z, R0.z;\n"
    3418     "MUL R0.xy, R0, R0.z;\n"
    3419     "ABS R0.w, R0.x;\n"
    3420     "ABS R0.z, R0.y;\n"
    3421     "ADD R0.z, R0, -R0.w;\n"
    3422     "ADD R0.w, R0.y, c[3].x;\n"
    3423     "ABS R0.z, R0;\n"
    3424     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3425     "ABS R0.z, -R0.y;\n"
    3426     "ADD R0.z, R0, c[3].y;\n"
    3427     "ADD R0.w, R0.x, R0.z;\n"
    3428     "ADD R1.x, R0.z, -R0;\n"
    3429     "RCP R1.y, R0.w;\n"
    3430     "RCP R1.x, R1.x;\n"
    3431     "MUL R0.w, R0, R1.x;\n"
    3432     "ADD R0.z, R0.x, -R0;\n"
    3433     "MUL R0.z, R0, R1.y;\n"
    3434     "CMP R0.z, R0.x, R0.w, R0;\n"
    3435     "MUL R0.w, R0.z, R0.z;\n"
    3436     "MOV R1.x, c[4].y;\n"
    3437     "CMP R0.x, R0, c[4], R1;\n"
    3438     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3439     "MUL R1.xy, fragment.position, c[7];\n"
    3440     "TEX R1, R1, texture[0], 2D;\n"
    3441     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3442     "MAD R0.x, R0.w, R0.z, R0;\n"
    3443     "MAD R0.x, R0, R0.y, c[5];\n"
    3444     "MUL R0.x, R0, c[6];\n"
     3367    "PARAM c[8] = { program.local[0..4],\n"
     3368    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3369    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3370    "           { 0.33299461, 0.99999559, 1 } };\n"
     3371    "TEMP R0;\n"
     3372    "TEMP R1;\n"
     3373    "TEMP R2;\n"
     3374    "TEMP R3;\n"
     3375    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3376    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3377    "ADD R0.xyz, R0, c[3];\n"
     3378    "RCP R0.z, R0.z;\n"
     3379    "MUL R0.xy, R0, R0.z;\n"
     3380    "ABS R0.z, R0.x;\n"
     3381    "ABS R0.w, R0.y;\n"
     3382    "ADD R0.w, R0, -R0.z;\n"
     3383    "ADD R1.x, R0.y, c[5].y;\n"
     3384    "ABS R0.w, R0;\n"
     3385    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3386    "ABS R0.w, -R0.y;\n"
     3387    "MAX R1.x, R0.z, R0.w;\n"
     3388    "RCP R1.y, R1.x;\n"
     3389    "MIN R1.x, R0.z, R0.w;\n"
     3390    "MUL R1.x, R1, R1.y;\n"
     3391    "MUL R1.y, R1.x, R1.x;\n"
     3392    "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
     3393    "MAD R1.z, R1, R1.y, -c[6];\n"
     3394    "MAD R1.z, R1, R1.y, c[6].w;\n"
     3395    "MAD R1.z, R1, R1.y, -c[7].x;\n"
     3396    "MAD R1.y, R1.z, R1, c[7];\n"
     3397    "MUL R1.x, R1.y, R1;\n"
     3398    "ADD R0.z, -R0, R0.w;\n"
     3399    "ADD R1.y, -R1.x, c[5].w;\n"
     3400    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3401    "ADD R0.w, -R0.z, c[5].z;\n"
     3402    "CMP R0.x, R0, R0.w, R0.z;\n"
     3403    "CMP R0.x, -R0.y, -R0, R0;\n"
     3404    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3405    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3406    "ADD R0.x, R0, c[0];\n"
     3407    "MUL R0.x, R0, c[5];\n"
    34453408    "FLR R0.y, R0.x;\n"
    34463409    "ADD R0.x, R0, -R0.y;\n"
    34473410    "TEX R0, R0, texture[1], 1D;\n"
    34483411    "MUL R2.xyz, R0, R1.w;\n"
    3449     "MUL R3.xyz, R1, R0.w;\n"
     3412    "MUL R3.xyz, R0.w, R1;\n"
    34503413    "MIN R2.xyz, R2, R3;\n"
    3451     "ADD R2.w, -R1, c[4];\n"
     3414    "ADD R2.w, -R1, c[7].z;\n"
    34523415    "MAD R0.xyz, R0, R2.w, R2;\n"
    34533416    "ADD R2.x, R0.w, R1.w;\n"
    3454     "ADD R2.y, -R0.w, c[4].w;\n"
     3417    "ADD R2.y, -R0.w, c[7].z;\n"
    34553418    "MAD result.color.xyz, R1, R2.y, R0;\n"
    34563419    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    34603423static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
    34613424    "!!ARBfp1.0\n"
    3462     "PARAM c[8] = { program.local[0..2],\n"
    3463     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3464     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3465     "           program.local[5],\n"
    3466     "           { 0.15915494 },\n"
    3467     "           program.local[7] };\n"
    3468     "TEMP R0;\n"
    3469     "TEMP R1;\n"
    3470     "TEMP R2;\n"
    3471     "TEMP R3;\n"
    3472     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3473     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3474     "ADD R0.xyz, R0, c[2];\n"
    3475     "RCP R0.z, R0.z;\n"
    3476     "MUL R0.xy, R0, R0.z;\n"
    3477     "ABS R0.w, R0.x;\n"
    3478     "ABS R0.z, R0.y;\n"
    3479     "ADD R0.z, R0, -R0.w;\n"
    3480     "ADD R0.w, R0.y, c[3].x;\n"
    3481     "ABS R0.z, R0;\n"
    3482     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3483     "ABS R0.z, -R0.y;\n"
    3484     "ADD R0.z, R0, c[3].y;\n"
    3485     "ADD R0.w, R0.x, R0.z;\n"
    3486     "ADD R1.x, R0.z, -R0;\n"
    3487     "RCP R1.y, R0.w;\n"
    3488     "RCP R1.x, R1.x;\n"
    3489     "MUL R0.w, R0, R1.x;\n"
    3490     "ADD R0.z, R0.x, -R0;\n"
    3491     "MUL R0.z, R0, R1.y;\n"
    3492     "CMP R0.z, R0.x, R0.w, R0;\n"
    3493     "MUL R0.w, R0.z, R0.z;\n"
    3494     "MOV R1.x, c[4].y;\n"
    3495     "CMP R0.x, R0, c[4], R1;\n"
    3496     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3497     "MUL R1.xy, fragment.position, c[7];\n"
    3498     "TEX R1, R1, texture[0], 2D;\n"
    3499     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3500     "MAD R0.x, R0.w, R0.z, R0;\n"
    3501     "MAD R0.x, R0, R0.y, c[5];\n"
    3502     "MUL R0.x, R0, c[6];\n"
     3425    "PARAM c[8] = { program.local[0..4],\n"
     3426    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3427    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3428    "           { 0.33299461, 0.99999559, 1 } };\n"
     3429    "TEMP R0;\n"
     3430    "TEMP R1;\n"
     3431    "TEMP R2;\n"
     3432    "TEMP R3;\n"
     3433    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3434    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3435    "ADD R0.xyz, R0, c[3];\n"
     3436    "RCP R0.z, R0.z;\n"
     3437    "MUL R0.xy, R0, R0.z;\n"
     3438    "ABS R0.z, R0.x;\n"
     3439    "ABS R0.w, R0.y;\n"
     3440    "ADD R0.w, R0, -R0.z;\n"
     3441    "ADD R1.x, R0.y, c[5].y;\n"
     3442    "ABS R0.w, R0;\n"
     3443    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3444    "ABS R0.w, -R0.y;\n"
     3445    "MAX R1.x, R0.z, R0.w;\n"
     3446    "RCP R1.y, R1.x;\n"
     3447    "MIN R1.x, R0.z, R0.w;\n"
     3448    "MUL R1.x, R1, R1.y;\n"
     3449    "MUL R1.y, R1.x, R1.x;\n"
     3450    "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
     3451    "MAD R1.z, R1, R1.y, -c[6];\n"
     3452    "MAD R1.z, R1, R1.y, c[6].w;\n"
     3453    "MAD R1.z, R1, R1.y, -c[7].x;\n"
     3454    "MAD R1.y, R1.z, R1, c[7];\n"
     3455    "MUL R1.x, R1.y, R1;\n"
     3456    "ADD R0.z, -R0, R0.w;\n"
     3457    "ADD R1.y, -R1.x, c[5].w;\n"
     3458    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3459    "ADD R0.w, -R0.z, c[5].z;\n"
     3460    "CMP R0.x, R0, R0.w, R0.z;\n"
     3461    "CMP R0.x, -R0.y, -R0, R0;\n"
     3462    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3463    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3464    "ADD R0.x, R0, c[0];\n"
     3465    "MUL R0.x, R0, c[5];\n"
    35033466    "FLR R0.y, R0.x;\n"
    35043467    "ADD R0.x, R0, -R0.y;\n"
    35053468    "TEX R0, R0, texture[1], 1D;\n"
    35063469    "MUL R2.xyz, R0, R1.w;\n"
    3507     "MUL R3.xyz, R1, R0.w;\n"
     3470    "MUL R3.xyz, R0.w, R1;\n"
    35083471    "MAX R2.xyz, R2, R3;\n"
    3509     "ADD R2.w, -R1, c[4];\n"
     3472    "ADD R2.w, -R1, c[7].z;\n"
    35103473    "MAD R0.xyz, R0, R2.w, R2;\n"
    35113474    "ADD R2.x, R0.w, R1.w;\n"
    3512     "ADD R2.y, -R0.w, c[4].w;\n"
     3475    "ADD R2.y, -R0.w, c[7].z;\n"
    35133476    "MAD result.color.xyz, R1, R2.y, R0;\n"
    35143477    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    35183481static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
    35193482    "!!ARBfp1.0\n"
    3520     "PARAM c[8] = { program.local[0..2],\n"
    3521     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3522     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3523     "           program.local[5],\n"
    3524     "           { 0.15915494, 1e-06 },\n"
    3525     "           program.local[7] };\n"
    3526     "TEMP R0;\n"
    3527     "TEMP R1;\n"
    3528     "TEMP R2;\n"
    3529     "TEMP R3;\n"
    3530     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3531     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3532     "ADD R0.xyz, R0, c[2];\n"
    3533     "RCP R0.z, R0.z;\n"
    3534     "MUL R0.xy, R0, R0.z;\n"
    3535     "ABS R0.w, R0.x;\n"
    3536     "ABS R0.z, R0.y;\n"
    3537     "ADD R0.z, R0, -R0.w;\n"
    3538     "ADD R0.w, R0.y, c[3].x;\n"
    3539     "ABS R0.z, R0;\n"
    3540     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3541     "ABS R0.z, -R0.y;\n"
    3542     "ADD R0.z, R0, c[3].y;\n"
    3543     "ADD R0.w, R0.x, R0.z;\n"
    3544     "ADD R1.x, R0.z, -R0;\n"
    3545     "RCP R1.y, R0.w;\n"
    3546     "RCP R1.x, R1.x;\n"
    3547     "MUL R0.w, R0, R1.x;\n"
    3548     "ADD R0.z, R0.x, -R0;\n"
    3549     "MUL R0.z, R0, R1.y;\n"
    3550     "CMP R0.z, R0.x, R0.w, R0;\n"
    3551     "MUL R0.w, R0.z, R0.z;\n"
    3552     "MOV R1.x, c[4].y;\n"
    3553     "CMP R0.x, R0, c[4], R1;\n"
    3554     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3555     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3556     "MAD R0.x, R0.w, R0.z, R0;\n"
    3557     "MAD R0.x, R0, R0.y, c[5];\n"
    3558     "MUL R0.x, R0, c[6];\n"
     3483    "PARAM c[8] = { program.local[0..4],\n"
     3484    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     3485    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     3486    "           { 3.141593, 0.15915494, 1, 1e-006 } };\n"
     3487    "TEMP R0;\n"
     3488    "TEMP R1;\n"
     3489    "TEMP R2;\n"
     3490    "TEMP R3;\n"
     3491    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3492    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3493    "ADD R0.xyz, R0, c[3];\n"
     3494    "RCP R0.z, R0.z;\n"
     3495    "MUL R0.xy, R0, R0.z;\n"
     3496    "ABS R0.z, R0.x;\n"
     3497    "ABS R0.w, R0.y;\n"
     3498    "ADD R0.w, R0, -R0.z;\n"
     3499    "ADD R1.x, R0.y, c[5];\n"
     3500    "ABS R0.w, R0;\n"
     3501    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3502    "ABS R0.w, -R0.y;\n"
     3503    "MAX R1.x, R0.z, R0.w;\n"
     3504    "RCP R1.y, R1.x;\n"
     3505    "MIN R1.x, R0.z, R0.w;\n"
     3506    "MUL R1.x, R1, R1.y;\n"
     3507    "MUL R1.y, R1.x, R1.x;\n"
     3508    "MAD R1.z, R1.y, c[5].y, c[5];\n"
     3509    "MAD R1.z, R1, R1.y, -c[5].w;\n"
     3510    "MAD R1.z, R1, R1.y, c[6].x;\n"
     3511    "MAD R1.z, R1, R1.y, -c[6].y;\n"
     3512    "MAD R1.y, R1.z, R1, c[6].z;\n"
     3513    "MUL R1.x, R1.y, R1;\n"
     3514    "ADD R1.y, -R1.x, c[6].w;\n"
     3515    "ADD R0.z, -R0, R0.w;\n"
     3516    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3517    "ADD R0.w, -R0.z, c[7].x;\n"
     3518    "CMP R0.x, R0, R0.w, R0.z;\n"
     3519    "CMP R0.x, -R0.y, -R0, R0;\n"
     3520    "ADD R0.x, R0, c[0];\n"
     3521    "MUL R0.x, R0, c[7].y;\n"
    35593522    "FLR R0.y, R0.x;\n"
    35603523    "ADD R0.x, R0, -R0.y;\n"
    35613524    "TEX R0, R0, texture[1], 1D;\n"
    3562     "MAX R1.x, R0.w, c[6].y;\n"
     3525    "MAX R1.x, R0.w, c[7].w;\n"
    35633526    "RCP R1.x, R1.x;\n"
    3564     "MAD R1.xyz, -R0, R1.x, c[4].w;\n"
    3565     "MAX R2.xyz, R1, c[6].y;\n"
    3566     "MUL R1.xy, fragment.position, c[7];\n"
     3527    "MAD R1.xyz, -R0, R1.x, c[7].z;\n"
     3528    "MAX R2.xyz, R1, c[7].w;\n"
     3529    "MUL R1.xy, fragment.position, c[4];\n"
    35673530    "TEX R1, R1, texture[0], 2D;\n"
    3568     "ADD R2.w, -R0, c[4];\n"
     3531    "ADD R2.w, -R0, c[7].z;\n"
    35693532    "MUL R3.xyz, R1, R2.w;\n"
    3570     "ADD R2.w, -R1, c[4];\n"
     3533    "ADD R2.w, -R1, c[7].z;\n"
    35713534    "MAD R3.xyz, R0, R2.w, R3;\n"
    3572     "MUL R1.xyz, R1, R0.w;\n"
     3535    "MUL R1.xyz, R0.w, R1;\n"
    35733536    "MAD R0.xyz, R0, R1.w, R1;\n"
    35743537    "MUL R2.w, R0, R1;\n"
     
    35883551static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK =
    35893552    "!!ARBfp1.0\n"
    3590     "PARAM c[8] = { program.local[0..2],\n"
    3591     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3592     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3593     "           program.local[5],\n"
    3594     "           { 0.15915494, 9.9999997e-06 },\n"
    3595     "           program.local[7] };\n"
     3553    "PARAM c[8] = { program.local[0..4],\n"
     3554    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     3555    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     3556    "           { 3.141593, 0.15915494, 1, 9.9999997e-006 } };\n"
    35963557    "TEMP R0;\n"
    35973558    "TEMP R1;\n"
     
    36003561    "TEMP R4;\n"
    36013562    "TEMP R5;\n"
    3602     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3603     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3604     "ADD R0.xyz, R0, c[2];\n"
     3563    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3564    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3565    "ADD R0.xyz, R0, c[3];\n"
    36053566    "RCP R0.z, R0.z;\n"
    36063567    "MUL R0.xy, R0, R0.z;\n"
     
    36083569    "ABS R0.z, R0.y;\n"
    36093570    "ADD R0.z, R0, -R0.w;\n"
    3610     "ADD R0.w, R0.y, c[3].x;\n"
     3571    "ADD R1.x, R0.y, c[5];\n"
    36113572    "ABS R0.z, R0;\n"
    3612     "CMP R0.y, -R0.z, R0, R0.w;\n"
     3573    "CMP R0.y, -R0.z, R0, R1.x;\n"
    36133574    "ABS R0.z, -R0.y;\n"
    3614     "ADD R0.z, R0, c[3].y;\n"
    3615     "ADD R0.w, R0.x, R0.z;\n"
    3616     "ADD R1.x, R0.z, -R0;\n"
    3617     "RCP R1.y, R0.w;\n"
    3618     "RCP R1.x, R1.x;\n"
    3619     "MUL R0.w, R0, R1.x;\n"
    3620     "ADD R0.z, R0.x, -R0;\n"
    3621     "MUL R0.z, R0, R1.y;\n"
    3622     "CMP R0.z, R0.x, R0.w, R0;\n"
    3623     "MUL R0.w, R0.z, R0.z;\n"
    3624     "MOV R1.x, c[4].y;\n"
    3625     "CMP R0.x, R0, c[4], R1;\n"
    3626     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3627     "MUL R1.xy, fragment.position, c[7];\n"
    3628     "TEX R1, R1, texture[0], 2D;\n"
    3629     "ADD R2.w, -R1, c[4];\n"
    3630     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3631     "MAD R0.x, R0.w, R0.z, R0;\n"
    3632     "MAD R0.x, R0, R0.y, c[5];\n"
    3633     "MUL R0.x, R0, c[6];\n"
     3575    "MAX R1.x, R0.w, R0.z;\n"
     3576    "RCP R1.y, R1.x;\n"
     3577    "MIN R1.x, R0.w, R0.z;\n"
     3578    "MUL R1.x, R1, R1.y;\n"
     3579    "MUL R1.y, R1.x, R1.x;\n"
     3580    "MAD R1.z, R1.y, c[5].y, c[5];\n"
     3581    "MAD R1.z, R1, R1.y, -c[5].w;\n"
     3582    "MAD R1.z, R1, R1.y, c[6].x;\n"
     3583    "MAD R1.z, R1, R1.y, -c[6].y;\n"
     3584    "MAD R1.y, R1.z, R1, c[6].z;\n"
     3585    "MUL R1.x, R1.y, R1;\n"
     3586    "ADD R1.y, -R1.x, c[6].w;\n"
     3587    "ADD R0.z, -R0.w, R0;\n"
     3588    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3589    "ADD R0.w, -R0.z, c[7].x;\n"
     3590    "CMP R0.x, R0, R0.w, R0.z;\n"
     3591    "CMP R0.x, -R0.y, -R0, R0;\n"
     3592    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3593    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3594    "ADD R0.x, R0, c[0];\n"
     3595    "MUL R0.x, R0, c[7].y;\n"
    36343596    "FLR R0.y, R0.x;\n"
    36353597    "ADD R0.x, R0, -R0.y;\n"
    36363598    "TEX R0, R0, texture[1], 1D;\n"
    3637     "MUL R2.xyz, R1, R0.w;\n"
     3599    "MUL R2.xyz, R0.w, R1;\n"
    36383600    "MAD R3.xyz, R0, R1.w, R2;\n"
     3601    "ADD R2.w, -R1, c[7].z;\n"
    36393602    "MAD R2.xyz, -R0.w, R1.w, R3;\n"
    36403603    "MUL R4.xyz, R0.w, R2;\n"
    3641     "MAX R2.xyz, R0, c[6].y;\n"
     3604    "MAX R2.xyz, R0, c[7].w;\n"
    36423605    "MUL R5.xyz, R0, R2.w;\n"
    3643     "ADD R3.w, -R0, c[4];\n"
     3606    "ADD R3.w, -R0, c[7].z;\n"
    36443607    "RCP R2.x, R2.x;\n"
    36453608    "RCP R2.y, R2.y;\n"
     
    36603623static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
    36613624    "!!ARBfp1.0\n"
    3662     "PARAM c[8] = { program.local[0..2],\n"
    3663     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3664     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3665     "           program.local[5],\n"
    3666     "           { 0.15915494, 2 },\n"
    3667     "           program.local[7] };\n"
     3625    "PARAM c[8] = { program.local[0..4],\n"
     3626    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     3627    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     3628    "           { 3.141593, 0.15915494, 2, 1 } };\n"
    36683629    "TEMP R0;\n"
    36693630    "TEMP R1;\n"
     
    36713632    "TEMP R3;\n"
    36723633    "TEMP R4;\n"
    3673     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3674     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3675     "ADD R0.xyz, R0, c[2];\n"
    3676     "RCP R0.z, R0.z;\n"
    3677     "MUL R0.xy, R0, R0.z;\n"
    3678     "ABS R0.w, R0.x;\n"
    3679     "ABS R0.z, R0.y;\n"
    3680     "ADD R0.z, R0, -R0.w;\n"
    3681     "ADD R0.w, R0.y, c[3].x;\n"
    3682     "ABS R0.z, R0;\n"
    3683     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3684     "ABS R0.z, -R0.y;\n"
    3685     "ADD R0.z, R0, c[3].y;\n"
    3686     "ADD R0.w, R0.x, R0.z;\n"
    3687     "ADD R1.x, R0.z, -R0;\n"
    3688     "RCP R1.y, R0.w;\n"
    3689     "RCP R1.x, R1.x;\n"
    3690     "MUL R0.w, R0, R1.x;\n"
    3691     "ADD R0.z, R0.x, -R0;\n"
    3692     "MUL R0.z, R0, R1.y;\n"
    3693     "CMP R0.z, R0.x, R0.w, R0;\n"
    3694     "MUL R0.w, R0.z, R0.z;\n"
    3695     "MOV R1.x, c[4].y;\n"
    3696     "CMP R0.x, R0, c[4], R1;\n"
    3697     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3698     "MUL R1.xy, fragment.position, c[7];\n"
    3699     "TEX R1, R1, texture[0], 2D;\n"
    3700     "ADD R2.w, -R1, c[4];\n"
    3701     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3702     "MAD R0.x, R0.w, R0.z, R0;\n"
    3703     "MAD R0.x, R0, R0.y, c[5];\n"
    3704     "MUL R0.x, R0, c[6];\n"
     3634    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3635    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3636    "ADD R0.xyz, R0, c[3];\n"
     3637    "RCP R0.z, R0.z;\n"
     3638    "MUL R0.xy, R0, R0.z;\n"
     3639    "ABS R0.z, R0.x;\n"
     3640    "ABS R0.w, R0.y;\n"
     3641    "ADD R0.w, R0, -R0.z;\n"
     3642    "ADD R1.x, R0.y, c[5];\n"
     3643    "ABS R0.w, R0;\n"
     3644    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3645    "ABS R0.w, -R0.y;\n"
     3646    "MAX R1.x, R0.z, R0.w;\n"
     3647    "RCP R1.y, R1.x;\n"
     3648    "MIN R1.x, R0.z, R0.w;\n"
     3649    "MUL R1.x, R1, R1.y;\n"
     3650    "MUL R1.y, R1.x, R1.x;\n"
     3651    "MAD R1.z, R1.y, c[5].y, c[5];\n"
     3652    "MAD R1.z, R1, R1.y, -c[5].w;\n"
     3653    "MAD R1.z, R1, R1.y, c[6].x;\n"
     3654    "MAD R1.z, R1, R1.y, -c[6].y;\n"
     3655    "MAD R1.y, R1.z, R1, c[6].z;\n"
     3656    "MUL R1.x, R1.y, R1;\n"
     3657    "ADD R0.z, -R0, R0.w;\n"
     3658    "ADD R1.y, -R1.x, c[6].w;\n"
     3659    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3660    "ADD R0.w, -R0.z, c[7].x;\n"
     3661    "CMP R0.x, R0, R0.w, R0.z;\n"
     3662    "CMP R0.x, -R0.y, -R0, R0;\n"
     3663    "ADD R0.x, R0, c[0];\n"
     3664    "MUL R0.x, R0, c[7].y;\n"
    37053665    "FLR R0.y, R0.x;\n"
    37063666    "ADD R0.x, R0, -R0.y;\n"
    37073667    "TEX R0, R0, texture[1], 1D;\n"
     3668    "MUL R1.xy, fragment.position, c[4];\n"
     3669    "TEX R1, R1, texture[0], 2D;\n"
     3670    "ADD R2.w, -R1, c[7];\n"
    37083671    "ADD R3.xyz, R0.w, -R0;\n"
    37093672    "ADD R2.xyz, R1.w, -R1;\n"
    37103673    "MUL R2.xyz, R2, R3;\n"
    3711     "MUL R2.xyz, R2, c[6].y;\n"
     3674    "MUL R2.xyz, R2, c[7].z;\n"
    37123675    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
    37133676    "MUL R4.xyz, R0, R2.w;\n"
    37143677    "MUL R3.xyz, R0, R1;\n"
    37153678    "MAD R2.xyz, R0, R2.w, R2;\n"
    3716     "ADD R2.w, -R0, c[4];\n"
    3717     "MUL R0.xyz, R0, c[6].y;\n"
     3679    "ADD R2.w, -R0, c[7];\n"
     3680    "MUL R0.xyz, R0, c[7].z;\n"
    37183681    "MAD R2.xyz, R1, R2.w, R2;\n"
    3719     "MAD R3.xyz, R3, c[6].y, R4;\n"
     3682    "MAD R3.xyz, R3, c[7].z, R4;\n"
    37203683    "MAD R1.xyz, R1, R2.w, R3;\n"
    37213684    "ADD R2.w, R0, R1;\n"
     
    37293692static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
    37303693    "!!ARBfp1.0\n"
    3731     "PARAM c[9] = { program.local[0..2],\n"
    3732     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3733     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3734     "           program.local[5],\n"
    3735     "           { 0.15915494, 9.9999997e-06, 2, 8 },\n"
    3736     "           program.local[7],\n"
     3694    "PARAM c[10] = { program.local[0..4],\n"
     3695    "           { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
     3696    "           { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
     3697    "           { 3.141593, 0.15915494, 1, 2 },\n"
     3698    "           { 9.9999997e-006, 4, 16, 12 },\n"
    37373699    "           { 3 } };\n"
    37383700    "TEMP R0;\n"
     
    37433705    "TEMP R5;\n"
    37443706    "TEMP R6;\n"
    3745     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3746     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3747     "ADD R0.xyz, R0, c[2];\n"
     3707    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3708    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3709    "ADD R0.xyz, R0, c[3];\n"
    37483710    "RCP R0.z, R0.z;\n"
    37493711    "MUL R0.xy, R0, R0.z;\n"
     
    37513713    "ABS R0.z, R0.y;\n"
    37523714    "ADD R0.z, R0, -R0.w;\n"
    3753     "ADD R0.w, R0.y, c[3].x;\n"
     3715    "ADD R1.x, R0.y, c[5];\n"
    37543716    "ABS R0.z, R0;\n"
    3755     "CMP R0.y, -R0.z, R0, R0.w;\n"
     3717    "CMP R0.y, -R0.z, R0, R1.x;\n"
    37563718    "ABS R0.z, -R0.y;\n"
    3757     "ADD R0.z, R0, c[3].y;\n"
    3758     "ADD R0.w, R0.x, R0.z;\n"
    3759     "ADD R1.x, R0.z, -R0;\n"
    3760     "RCP R1.y, R0.w;\n"
    3761     "RCP R1.x, R1.x;\n"
    3762     "MUL R0.w, R0, R1.x;\n"
    3763     "ADD R0.z, R0.x, -R0;\n"
    3764     "MUL R0.z, R0, R1.y;\n"
    3765     "CMP R0.z, R0.x, R0.w, R0;\n"
    3766     "MOV R1.x, c[4].y;\n"
    3767     "MUL R0.w, R0.z, R0.z;\n"
    3768     "CMP R0.x, R0, c[4], R1;\n"
    3769     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3770     "MAD R0.x, R0.w, R0.z, R0;\n"
    3771     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
     3719    "MAX R1.x, R0.w, R0.z;\n"
     3720    "RCP R1.y, R1.x;\n"
     3721    "MIN R1.x, R0.w, R0.z;\n"
     3722    "MUL R1.x, R1, R1.y;\n"
     3723    "MUL R1.y, R1.x, R1.x;\n"
     3724    "MAD R1.z, R1.y, c[5].y, c[5];\n"
     3725    "MAD R1.z, R1, R1.y, -c[5].w;\n"
     3726    "MAD R1.z, R1, R1.y, c[6].x;\n"
     3727    "MAD R1.z, R1, R1.y, -c[6].y;\n"
     3728    "MAD R1.y, R1.z, R1, c[6].z;\n"
     3729    "MUL R1.x, R1.y, R1;\n"
     3730    "ADD R1.y, -R1.x, c[6].w;\n"
     3731    "ADD R0.z, -R0.w, R0;\n"
     3732    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3733    "ADD R0.w, -R0.z, c[7].x;\n"
     3734    "CMP R0.x, R0, R0.w, R0.z;\n"
     3735    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    37723736    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    3773     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3774     "MAD R0.x, R0, R0.y, c[5];\n"
    3775     "MUL R0.x, R0, c[6];\n"
    3776     "FLR R0.y, R0.x;\n"
    3777     "MAX R0.z, R1.w, c[6].y;\n"
    3778     "RCP R2.w, R0.z;\n"
    3779     "MUL R2.xyz, R1, R2.w;\n"
    3780     "RSQ R3.w, R2.x;\n"
    3781     "RSQ R4.y, R2.z;\n"
    3782     "RCP R4.x, R3.w;\n"
    3783     "ADD R0.x, R0, -R0.y;\n"
    3784     "TEX R0, R0, texture[1], 1D;\n"
    3785     "MAD R3.xyz, R0, c[6].z, -R0.w;\n"
    3786     "RSQ R3.w, R2.y;\n"
    3787     "RCP R4.z, R4.y;\n"
    3788     "RCP R4.y, R3.w;\n"
    3789     "MAD R4.xyz, R4, R1.w, -R1;\n"
    3790     "MUL R6.xyz, R4, R3;\n"
    3791     "MUL R4.xyz, -R2, c[6].w;\n"
    3792     "MAD R2.xyz, -R1, R2.w, c[4].w;\n"
    3793     "ADD R5.xyz, R4, c[8].x;\n"
    3794     "MUL R4.xyz, R2, R3;\n"
    3795     "MAD R4.xyz, -R4, R5, R0.w;\n"
    3796     "MAD R2.xyz, -R2, R3, R0.w;\n"
    3797     "MAD R5.xyz, R1, R0.w, R6;\n"
    3798     "MUL R4.xyz, R1, R4;\n"
    3799     "MUL R6.xyz, R1, c[6].w;\n"
    3800     "ADD R5.xyz, R5, -R4;\n"
    3801     "SGE R6.xyz, R6, R1.w;\n"
    3802     "MUL R5.xyz, R6, R5;\n"
    3803     "ADD R3.xyz, R4, R5;\n"
    3804     "MUL R2.xyz, R1, R2;\n"
    3805     "MUL R4.xyz, R0, c[6].z;\n"
    3806     "ADD R3.xyz, R3, -R2;\n"
    3807     "SGE R4.xyz, R4, R0.w;\n"
    3808     "MUL R3.xyz, R4, R3;\n"
    3809     "ADD R2.xyz, R2, R3;\n"
    3810     "ADD R2.w, -R1, c[4];\n"
    3811     "MAD R0.xyz, R0, R2.w, R2;\n"
    3812     "ADD R2.x, R0.w, R1.w;\n"
    3813     "ADD R2.y, -R0.w, c[4].w;\n"
    3814     "MAD result.color.xyz, R1, R2.y, R0;\n"
    3815     "MAD result.color.w, -R0, R1, R2.x;\n"
    3816     "END\n"
    3817     ;
    3818 
    3819 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
    3820     "!!ARBfp1.0\n"
    3821     "PARAM c[8] = { program.local[0..2],\n"
    3822     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3823     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3824     "           program.local[5],\n"
    3825     "           { 0.15915494, 2 },\n"
    3826     "           program.local[7] };\n"
    3827     "TEMP R0;\n"
    3828     "TEMP R1;\n"
    3829     "TEMP R2;\n"
    3830     "TEMP R3;\n"
    3831     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3832     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3833     "ADD R0.xyz, R0, c[2];\n"
    3834     "RCP R0.z, R0.z;\n"
    3835     "MUL R0.xy, R0, R0.z;\n"
    3836     "ABS R0.w, R0.x;\n"
    3837     "ABS R0.z, R0.y;\n"
    3838     "ADD R0.z, R0, -R0.w;\n"
    3839     "ADD R0.w, R0.y, c[3].x;\n"
    3840     "ABS R0.z, R0;\n"
    3841     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3842     "ABS R0.z, -R0.y;\n"
    3843     "ADD R0.z, R0, c[3].y;\n"
    3844     "ADD R0.w, R0.x, R0.z;\n"
    3845     "ADD R1.x, R0.z, -R0;\n"
    3846     "RCP R1.y, R0.w;\n"
    3847     "RCP R1.x, R1.x;\n"
    3848     "MUL R0.w, R0, R1.x;\n"
    3849     "ADD R0.z, R0.x, -R0;\n"
    3850     "MUL R0.z, R0, R1.y;\n"
    3851     "CMP R0.z, R0.x, R0.w, R0;\n"
    3852     "MUL R0.w, R0.z, R0.z;\n"
    3853     "MOV R1.x, c[4].y;\n"
    3854     "CMP R0.x, R0, c[4], R1;\n"
    3855     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3856     "MUL R1.xy, fragment.position, c[7];\n"
    3857     "TEX R1, R1, texture[0], 2D;\n"
    3858     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3859     "MAD R0.x, R0.w, R0.z, R0;\n"
    3860     "MAD R0.x, R0, R0.y, c[5];\n"
    3861     "MUL R0.x, R0, c[6];\n"
     3737    "CMP R0.x, -R0.y, -R0, R0;\n"
     3738    "MAX R0.z, R1.w, c[8].x;\n"
     3739    "RCP R2.x, R0.z;\n"
     3740    "MUL R3.xyz, R1, R2.x;\n"
     3741    "MAD R4.xyz, R3, c[8].z, -c[8].w;\n"
     3742    "ADD R0.x, R0, c[0];\n"
     3743    "MUL R0.x, R0, c[7].y;\n"
    38623744    "FLR R0.y, R0.x;\n"
    38633745    "ADD R0.x, R0, -R0.y;\n"
    38643746    "TEX R0, R0, texture[1], 1D;\n"
     3747    "MAD R2.xyz, R0, c[7].w, -R0.w;\n"
     3748    "MAD R4.xyz, R3, R4, c[9].x;\n"
     3749    "MUL R5.xyz, R1.w, R2;\n"
     3750    "MUL R6.xyz, R5, R4;\n"
     3751    "RSQ R2.w, R3.x;\n"
     3752    "RCP R4.x, R2.w;\n"
     3753    "RSQ R2.w, R3.y;\n"
     3754    "RSQ R3.w, R3.z;\n"
     3755    "RCP R4.y, R2.w;\n"
     3756    "RCP R4.z, R3.w;\n"
     3757    "ADD R4.xyz, -R3, R4;\n"
     3758    "MUL R6.xyz, R3, R6;\n"
     3759    "MUL R4.xyz, R5, R4;\n"
     3760    "ADD R3.xyz, -R3, c[7].z;\n"
     3761    "MAD R2.xyz, R2, R3, R0.w;\n"
     3762    "MUL R3.xyz, R0, c[7].w;\n"
     3763    "MAD R5.xyz, R0.w, R1, R6;\n"
     3764    "MAD R4.xyz, R0.w, R1, R4;\n"
     3765    "ADD R6.xyz, R4, -R5;\n"
     3766    "MUL R4.xyz, R1, c[8].y;\n"
     3767    "SGE R4.xyz, R4, R1.w;\n"
     3768    "MAD R4.xyz, R4, R6, R5;\n"
     3769    "MAD R4.xyz, -R1, R2, R4;\n"
     3770    "MUL R2.xyz, R1, R2;\n"
     3771    "SGE R3.xyz, R3, R0.w;\n"
     3772    "MAD R2.xyz, R3, R4, R2;\n"
     3773    "ADD R2.w, -R1, c[7].z;\n"
     3774    "MAD R2.xyz, R0, R2.w, R2;\n"
     3775    "ADD R0.x, R0.w, R1.w;\n"
     3776    "ADD R0.y, -R0.w, c[7].z;\n"
     3777    "MAD result.color.xyz, R1, R0.y, R2;\n"
     3778    "MAD result.color.w, -R0, R1, R0.x;\n"
     3779    "END\n"
     3780    ;
     3781
     3782static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
     3783    "!!ARBfp1.0\n"
     3784    "PARAM c[8] = { program.local[0..4],\n"
     3785    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3786    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3787    "           { 0.33299461, 0.99999559, 2 } };\n"
     3788    "TEMP R0;\n"
     3789    "TEMP R1;\n"
     3790    "TEMP R2;\n"
     3791    "TEMP R3;\n"
     3792    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3793    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3794    "ADD R0.xyz, R0, c[3];\n"
     3795    "RCP R0.z, R0.z;\n"
     3796    "MUL R0.xy, R0, R0.z;\n"
     3797    "ABS R0.z, R0.x;\n"
     3798    "ABS R0.w, R0.y;\n"
     3799    "ADD R0.w, R0, -R0.z;\n"
     3800    "ADD R1.x, R0.y, c[5].y;\n"
     3801    "ABS R0.w, R0;\n"
     3802    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3803    "ABS R0.w, -R0.y;\n"
     3804    "MAX R1.x, R0.z, R0.w;\n"
     3805    "RCP R1.y, R1.x;\n"
     3806    "MIN R1.x, R0.z, R0.w;\n"
     3807    "MUL R1.x, R1, R1.y;\n"
     3808    "MUL R1.y, R1.x, R1.x;\n"
     3809    "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
     3810    "MAD R1.z, R1, R1.y, -c[6];\n"
     3811    "MAD R1.z, R1, R1.y, c[6].w;\n"
     3812    "MAD R1.z, R1, R1.y, -c[7].x;\n"
     3813    "MAD R1.y, R1.z, R1, c[7];\n"
     3814    "MUL R1.x, R1.y, R1;\n"
     3815    "ADD R0.z, -R0, R0.w;\n"
     3816    "ADD R1.y, -R1.x, c[5].w;\n"
     3817    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3818    "ADD R0.w, -R0.z, c[5].z;\n"
     3819    "CMP R0.x, R0, R0.w, R0.z;\n"
     3820    "CMP R0.x, -R0.y, -R0, R0;\n"
     3821    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3822    "ADD R0.x, R0, c[0];\n"
     3823    "MUL R0.x, R0, c[5];\n"
     3824    "FLR R0.y, R0.x;\n"
     3825    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3826    "ADD R0.x, R0, -R0.y;\n"
     3827    "TEX R0, R0, texture[1], 1D;\n"
    38653828    "MUL R2.xyz, R0, R1.w;\n"
    3866     "MUL R3.xyz, R1, R0.w;\n"
     3829    "MUL R3.xyz, R0.w, R1;\n"
    38673830    "ADD R0.xyz, R0, R1;\n"
    38683831    "MIN R2.xyz, R2, R3;\n"
    38693832    "ADD R1.x, R0.w, R1.w;\n"
    3870     "MAD result.color.xyz, -R2, c[6].y, R0;\n"
     3833    "MAD result.color.xyz, -R2, c[7].z, R0;\n"
    38713834    "MAD result.color.w, -R0, R1, R1.x;\n"
    38723835    "END\n"
     
    38753838static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
    38763839    "!!ARBfp1.0\n"
    3877     "PARAM c[8] = { program.local[0..2],\n"
    3878     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3879     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3880     "           program.local[5],\n"
    3881     "           { 0.15915494, 2 },\n"
    3882     "           program.local[7] };\n"
    3883     "TEMP R0;\n"
    3884     "TEMP R1;\n"
    3885     "TEMP R2;\n"
    3886     "TEMP R3;\n"
    3887     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3888     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3889     "ADD R0.xyz, R0, c[2];\n"
    3890     "RCP R0.z, R0.z;\n"
    3891     "MUL R0.xy, R0, R0.z;\n"
    3892     "ABS R0.w, R0.x;\n"
    3893     "ABS R0.z, R0.y;\n"
    3894     "ADD R0.z, R0, -R0.w;\n"
    3895     "ADD R0.w, R0.y, c[3].x;\n"
    3896     "ABS R0.z, R0;\n"
    3897     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3898     "ABS R0.z, -R0.y;\n"
    3899     "ADD R0.z, R0, c[3].y;\n"
    3900     "ADD R0.w, R0.x, R0.z;\n"
    3901     "ADD R1.x, R0.z, -R0;\n"
    3902     "RCP R1.y, R0.w;\n"
    3903     "RCP R1.x, R1.x;\n"
    3904     "MUL R0.w, R0, R1.x;\n"
    3905     "ADD R0.z, R0.x, -R0;\n"
    3906     "MUL R0.z, R0, R1.y;\n"
    3907     "CMP R0.z, R0.x, R0.w, R0;\n"
    3908     "MUL R0.w, R0.z, R0.z;\n"
    3909     "MOV R1.x, c[4].y;\n"
    3910     "CMP R0.x, R0, c[4], R1;\n"
    3911     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3912     "MUL R1.xy, fragment.position, c[7];\n"
    3913     "TEX R1, R1, texture[0], 2D;\n"
    3914     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3915     "MAD R0.x, R0.w, R0.z, R0;\n"
    3916     "MAD R0.x, R0, R0.y, c[5];\n"
    3917     "MUL R0.x, R0, c[6];\n"
     3840    "PARAM c[8] = { program.local[0..4],\n"
     3841    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3842    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3843    "           { 0.33299461, 0.99999559, 2, 1 } };\n"
     3844    "TEMP R0;\n"
     3845    "TEMP R1;\n"
     3846    "TEMP R2;\n"
     3847    "TEMP R3;\n"
     3848    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3849    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3850    "ADD R0.xyz, R0, c[3];\n"
     3851    "RCP R0.z, R0.z;\n"
     3852    "MUL R0.xy, R0, R0.z;\n"
     3853    "ABS R0.z, R0.x;\n"
     3854    "ABS R0.w, R0.y;\n"
     3855    "ADD R0.w, R0, -R0.z;\n"
     3856    "ADD R1.x, R0.y, c[5].y;\n"
     3857    "ABS R0.w, R0;\n"
     3858    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3859    "ABS R0.w, -R0.y;\n"
     3860    "MAX R1.x, R0.z, R0.w;\n"
     3861    "RCP R1.y, R1.x;\n"
     3862    "MIN R1.x, R0.z, R0.w;\n"
     3863    "MUL R1.x, R1, R1.y;\n"
     3864    "MUL R1.y, R1.x, R1.x;\n"
     3865    "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
     3866    "MAD R1.z, R1, R1.y, -c[6];\n"
     3867    "MAD R1.z, R1, R1.y, c[6].w;\n"
     3868    "MAD R1.z, R1, R1.y, -c[7].x;\n"
     3869    "MAD R1.y, R1.z, R1, c[7];\n"
     3870    "MUL R1.x, R1.y, R1;\n"
     3871    "ADD R0.z, -R0, R0.w;\n"
     3872    "ADD R1.y, -R1.x, c[5].w;\n"
     3873    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3874    "ADD R0.w, -R0.z, c[5].z;\n"
     3875    "CMP R0.x, R0, R0.w, R0.z;\n"
     3876    "CMP R0.x, -R0.y, -R0, R0;\n"
     3877    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     3878    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     3879    "ADD R0.x, R0, c[0];\n"
     3880    "MUL R0.x, R0, c[5];\n"
    39183881    "FLR R0.y, R0.x;\n"
    39193882    "ADD R0.x, R0, -R0.y;\n"
    39203883    "TEX R0, R0, texture[1], 1D;\n"
    3921     "MUL R2.xyz, R1, R0.w;\n"
     3884    "MUL R2.xyz, R0.w, R1;\n"
    39223885    "MAD R3.xyz, R0, R1.w, R2;\n"
    39233886    "MUL R2.xyz, R0, R1;\n"
    3924     "MAD R2.xyz, -R2, c[6].y, R3;\n"
    3925     "ADD R2.w, -R1, c[4];\n"
     3887    "MAD R2.xyz, -R2, c[7].z, R3;\n"
     3888    "ADD R2.w, -R1, c[7];\n"
    39263889    "MAD R0.xyz, R0, R2.w, R2;\n"
    39273890    "ADD R2.x, R0.w, R1.w;\n"
    3928     "ADD R2.y, -R0.w, c[4].w;\n"
     3891    "ADD R2.y, -R0.w, c[7].w;\n"
    39293892    "MAD result.color.xyz, R1, R2.y, R0;\n"
    39303893    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    39343897static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK =
    39353898    "!!ARBfp1.0\n"
    3936     "PARAM c[10] = { program.local[0..2],\n"
    3937     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3938     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3939     "           program.local[5],\n"
    3940     "           { 0.15915494 },\n"
    3941     "           program.local[7..9] };\n"
    3942     "TEMP R0;\n"
    3943     "TEMP R1;\n"
    3944     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3945     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3946     "ADD R0.xyz, R0, c[2];\n"
    3947     "RCP R0.z, R0.z;\n"
    3948     "MUL R0.xy, R0, R0.z;\n"
    3949     "ABS R0.w, R0.x;\n"
    3950     "ABS R0.z, R0.y;\n"
    3951     "ADD R0.z, R0, -R0.w;\n"
    3952     "ADD R0.w, R0.y, c[3].x;\n"
    3953     "ABS R0.z, R0;\n"
    3954     "CMP R0.y, -R0.z, R0, R0.w;\n"
    3955     "ABS R0.z, -R0.y;\n"
    3956     "ADD R0.z, R0, c[3].y;\n"
    3957     "ADD R0.w, R0.x, R0.z;\n"
    3958     "ADD R1.x, R0.z, -R0;\n"
    3959     "RCP R1.y, R0.w;\n"
    3960     "RCP R1.x, R1.x;\n"
    3961     "MUL R0.w, R0, R1.x;\n"
    3962     "ADD R0.z, R0.x, -R0;\n"
    3963     "MUL R0.z, R0, R1.y;\n"
    3964     "CMP R0.z, R0.x, R0.w, R0;\n"
    3965     "MUL R0.w, R0.z, R0.z;\n"
    3966     "MOV R1.x, c[4].y;\n"
    3967     "CMP R0.x, R0, c[4], R1;\n"
    3968     "MAD R0.w, R0, c[3].z, -c[3];\n"
    3969     "MAD R0.x, R0.w, R0.z, R0;\n"
    3970     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    3971     "MAD R0.z, R0.x, R0.y, c[5].x;\n"
    3972     "MUL R1.x, R0.z, c[6];\n"
     3899    "PARAM c[10] = { program.local[0..6],\n"
     3900    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3901    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3902    "           { 0.33299461, 0.99999559 } };\n"
     3903    "TEMP R0;\n"
     3904    "TEMP R1;\n"
     3905    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3906    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3907    "ADD R0.xyz, R0, c[3];\n"
     3908    "RCP R0.z, R0.z;\n"
     3909    "MUL R0.xy, R0, R0.z;\n"
     3910    "ABS R0.z, R0.x;\n"
     3911    "ABS R0.w, R0.y;\n"
     3912    "ADD R0.w, R0, -R0.z;\n"
     3913    "ADD R1.x, R0.y, c[7].y;\n"
     3914    "ABS R0.w, R0;\n"
     3915    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3916    "ABS R0.w, -R0.y;\n"
     3917    "MAX R1.x, R0.z, R0.w;\n"
     3918    "RCP R1.y, R1.x;\n"
     3919    "MIN R1.x, R0.z, R0.w;\n"
     3920    "MUL R1.x, R1, R1.y;\n"
     3921    "MUL R1.y, R1.x, R1.x;\n"
     3922    "MAD R1.z, R1.y, c[8].x, c[8].y;\n"
     3923    "MAD R1.z, R1, R1.y, -c[8];\n"
     3924    "MAD R1.z, R1, R1.y, c[8].w;\n"
     3925    "MAD R1.z, R1, R1.y, -c[9].x;\n"
     3926    "MAD R1.y, R1.z, R1, c[9];\n"
     3927    "MUL R1.x, R1.y, R1;\n"
     3928    "ADD R1.y, -R1.x, c[7].w;\n"
     3929    "ADD R0.z, -R0, R0.w;\n"
     3930    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3931    "ADD R0.w, -R0.z, c[7].z;\n"
     3932    "CMP R0.x, R0, R0.w, R0.z;\n"
     3933    "CMP R0.x, -R0.y, -R0, R0;\n"
     3934    "ADD R0.x, R0, c[0];\n"
     3935    "MUL R1.x, R0, c[7];\n"
    39733936    "FLR R1.y, R1.x;\n"
    3974     "ADD R0.xy, fragment.position, c[7];\n"
    3975     "MUL R0.xy, R0, c[8];\n"
     3937    "ADD R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     3938    "MUL R0.xy, R0.zwzw, c[4];\n"
    39763939    "TEX R0, R0, texture[0], 2D;\n"
    39773940    "ADD R1.x, R1, -R1.y;\n"
    3978     "DP4 R1.y, R0, c[9];\n"
     3941    "DP4 R1.y, R0, c[6];\n"
    39793942    "TEX R0, R1, texture[1], 1D;\n"
    39803943    "MUL result.color, R0, R1.y;\n"
     
    39843947static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
    39853948    "!!ARBfp1.0\n"
    3986     "PARAM c[7] = { program.local[0..2],\n"
    3987     "           { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
    3988     "           { 2.3561945, 0.78539819, -1, 1 },\n"
    3989     "           program.local[5],\n"
    3990     "           { 0.15915494 } };\n"
    3991     "TEMP R0;\n"
    3992     "TEMP R1;\n"
    3993     "MUL R0.xyz, fragment.position.y, c[1];\n"
    3994     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    3995     "ADD R0.xyz, R0, c[2];\n"
    3996     "RCP R0.z, R0.z;\n"
    3997     "MUL R0.xy, R0, R0.z;\n"
    3998     "ABS R0.w, R0.x;\n"
    3999     "ABS R0.z, R0.y;\n"
    4000     "ADD R0.z, R0, -R0.w;\n"
    4001     "ADD R0.w, R0.y, c[3].x;\n"
    4002     "ABS R0.z, R0;\n"
    4003     "CMP R0.y, -R0.z, R0, R0.w;\n"
    4004     "ABS R0.z, -R0.y;\n"
    4005     "ADD R0.z, R0, c[3].y;\n"
    4006     "ADD R0.w, R0.x, R0.z;\n"
    4007     "ADD R1.x, R0.z, -R0;\n"
    4008     "RCP R1.x, R1.x;\n"
    4009     "RCP R1.y, R0.w;\n"
    4010     "MUL R0.w, R0, R1.x;\n"
    4011     "ADD R0.z, R0.x, -R0;\n"
    4012     "MUL R0.z, R0, R1.y;\n"
    4013     "CMP R0.z, R0.x, R0.w, R0;\n"
    4014     "MUL R0.w, R0.z, R0.z;\n"
    4015     "MOV R1.x, c[4].y;\n"
    4016     "CMP R0.y, -R0, c[4].z, c[4].w;\n"
    4017     "MAD R0.w, R0, c[3].z, -c[3];\n"
    4018     "CMP R0.x, R0, c[4], R1;\n"
    4019     "MAD R0.x, R0.w, R0.z, R0;\n"
    4020     "MAD R0.x, R0, R0.y, c[5];\n"
    4021     "MUL R0.x, R0, c[6];\n"
     3949    "PARAM c[7] = { program.local[0..3],\n"
     3950    "           { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
     3951    "           { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
     3952    "           { 0.33299461, 0.99999559 } };\n"
     3953    "TEMP R0;\n"
     3954    "TEMP R1;\n"
     3955    "MUL R0.xyz, fragment.position.y, c[2];\n"
     3956    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     3957    "ADD R0.xyz, R0, c[3];\n"
     3958    "RCP R0.z, R0.z;\n"
     3959    "MUL R0.xy, R0, R0.z;\n"
     3960    "ABS R0.z, R0.x;\n"
     3961    "ABS R0.w, R0.y;\n"
     3962    "ADD R0.w, R0, -R0.z;\n"
     3963    "ADD R1.x, R0.y, c[4].y;\n"
     3964    "ABS R0.w, R0;\n"
     3965    "CMP R0.y, -R0.w, R0, R1.x;\n"
     3966    "ABS R0.w, -R0.y;\n"
     3967    "MAX R1.x, R0.z, R0.w;\n"
     3968    "RCP R1.y, R1.x;\n"
     3969    "MIN R1.x, R0.z, R0.w;\n"
     3970    "MUL R1.x, R1, R1.y;\n"
     3971    "MUL R1.y, R1.x, R1.x;\n"
     3972    "MAD R1.z, R1.y, c[5].x, c[5].y;\n"
     3973    "MAD R1.z, R1, R1.y, -c[5];\n"
     3974    "MAD R1.z, R1, R1.y, c[5].w;\n"
     3975    "MAD R1.z, R1, R1.y, -c[6].x;\n"
     3976    "MAD R1.y, R1.z, R1, c[6];\n"
     3977    "MUL R1.x, R1.y, R1;\n"
     3978    "ADD R0.z, -R0, R0.w;\n"
     3979    "ADD R1.y, -R1.x, c[4].w;\n"
     3980    "CMP R0.z, -R0, R1.y, R1.x;\n"
     3981    "ADD R0.w, -R0.z, c[4].z;\n"
     3982    "CMP R0.x, R0, R0.w, R0.z;\n"
     3983    "CMP R0.x, -R0.y, -R0, R0;\n"
     3984    "ADD R0.x, R0, c[0];\n"
     3985    "MUL R0.x, R0, c[4];\n"
    40223986    "FLR R0.y, R0.x;\n"
    40233987    "ADD R0.x, R0, -R0.y;\n"
     
    40283992static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
    40293993    "!!ARBfp1.0\n"
    4030     "PARAM c[11] = { program.local[0..7],\n"
    4031     "           { 1 },\n"
    4032     "           program.local[9..10] };\n"
    4033     "TEMP R0;\n"
    4034     "TEMP R1;\n"
    4035     "TEMP R2;\n"
    4036     "TEMP R3;\n"
    4037     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4038     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4039     "ADD R0.xyz, R0, c[5];\n"
    4040     "RCP R0.z, R0.z;\n"
    4041     "MUL R0.xy, R0, R0.z;\n"
    4042     "MUL R0.xy, R0, c[6];\n"
    4043     "ADD R0.x, R0, R0.y;\n"
    4044     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    4045     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    4046     "MUL R0.x, R0, c[6].z;\n"
    4047     "TEX R0, R0, texture[2], 1D;\n"
    4048     "MUL R2.xyz, R1, c[10].y;\n"
    4049     "MUL R3.xyz, R2, R0.w;\n"
    4050     "MUL R2.xyz, R0, c[10].x;\n"
    4051     "MAD R2.xyz, R2, R1.w, R3;\n"
    4052     "ADD R3.xy, fragment.position, c[0];\n"
    4053     "MUL R0.xyz, R0, c[9].y;\n"
    4054     "ADD R2.w, -R1, c[8].x;\n"
    4055     "MAD R2.xyz, R0, R2.w, R2;\n"
    4056     "MUL R0.xyz, R1, c[9].z;\n"
    4057     "ADD R2.w, -R0, c[8].x;\n"
    4058     "MAD R2.xyz, R0, R2.w, R2;\n"
    4059     "ADD R0.y, -R1.w, c[8].x;\n"
    4060     "MUL R0.z, R1.w, R2.w;\n"
    4061     "MUL R0.x, R0.w, R1.w;\n"
    4062     "MUL R0.y, R0.w, R0;\n"
    4063     "DP3 R2.w, R0, c[9];\n"
    4064     "MUL R3.xy, R3, c[1];\n"
    4065     "TEX R0, R3, texture[1], 2D;\n"
    4066     "ADD R2, R2, -R1;\n"
    4067     "DP4 R0.x, R0, c[2];\n"
    4068     "MAD result.color, R0.x, R2, R1;\n"
     3994    "PARAM c[11] = { program.local[0..9],\n"
     3995    "           { 1 } };\n"
     3996    "TEMP R0;\n"
     3997    "TEMP R1;\n"
     3998    "TEMP R2;\n"
     3999    "TEMP R3;\n"
     4000    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4001    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4002    "ADD R0.xyz, R0, c[3];\n"
     4003    "RCP R0.z, R0.z;\n"
     4004    "MUL R0.xy, R0, R0.z;\n"
     4005    "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
     4006    "ADD R1.x, R0.z, R0.w;\n"
     4007    "MUL R0.xy, fragment.position, c[7];\n"
     4008    "TEX R0, R0, texture[0], 2D;\n"
     4009    "MUL R1.x, R1, c[0].z;\n"
     4010    "TEX R1, R1, texture[2], 1D;\n"
     4011    "MUL R2.xyz, R0, c[4].y;\n"
     4012    "MUL R3.xyz, R1.w, R2;\n"
     4013    "MUL R2.xyz, R1, c[4].x;\n"
     4014    "MAD R2.xyz, R0.w, R2, R3;\n"
     4015    "ADD R3.xy, fragment.position, c[8];\n"
     4016    "ADD R2.w, -R0, c[10].x;\n"
     4017    "MUL R1.xyz, R1, c[5].y;\n"
     4018    "MAD R2.xyz, R2.w, R1, R2;\n"
     4019    "MUL R1.xyz, R0, c[5].z;\n"
     4020    "ADD R3.z, -R1.w, c[10].x;\n"
     4021    "MAD R2.xyz, R3.z, R1, R2;\n"
     4022    "MUL R1.y, R1.w, R2.w;\n"
     4023    "MUL R1.x, R1.w, R0.w;\n"
     4024    "MUL R1.z, R0.w, R3;\n"
     4025    "DP3 R2.w, R1, c[5];\n"
     4026    "MUL R3.xy, R3, c[6];\n"
     4027    "TEX R1, R3, texture[1], 2D;\n"
     4028    "ADD R2, R2, -R0;\n"
     4029    "DP4 R1.x, R1, c[9];\n"
     4030    "MAD result.color, R1.x, R2, R0;\n"
    40694031    "END\n"
    40704032    ;
     
    40774039    "TEMP R1;\n"
    40784040    "TEMP R2;\n"
    4079     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4080     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4081     "ADD R0.xyz, R0, c[5];\n"
    4082     "RCP R0.z, R0.z;\n"
    4083     "MUL R0.xy, R0, R0.z;\n"
    4084     "MUL R0.xy, R0, c[6];\n"
     4041    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4042    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4043    "ADD R0.xyz, R0, c[3];\n"
     4044    "RCP R0.z, R0.z;\n"
     4045    "MUL R0.xy, R0, R0.z;\n"
     4046    "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
     4047    "ADD R1.x, R0.z, R0.w;\n"
     4048    "MUL R0.xy, fragment.position, c[5];\n"
     4049    "TEX R0, R0, texture[0], 2D;\n"
     4050    "MUL R1.x, R1, c[0].z;\n"
     4051    "TEX R1, R1, texture[2], 1D;\n"
     4052    "ADD R2.x, -R0.w, c[8];\n"
     4053    "MUL R2.xyz, R1, R2.x;\n"
     4054    "MAD R1.xyz, R1, R0, R2;\n"
     4055    "ADD R2.x, -R1.w, c[8];\n"
     4056    "MAD R2.xyz, R0, R2.x, R1;\n"
     4057    "ADD R1.z, R1.w, R0.w;\n"
     4058    "MAD R2.w, -R1, R0, R1.z;\n"
     4059    "ADD R1.xy, fragment.position, c[6];\n"
     4060    "MUL R1.xy, R1, c[4];\n"
     4061    "TEX R1, R1, texture[1], 2D;\n"
     4062    "ADD R2, R2, -R0;\n"
     4063    "DP4 R1.x, R1, c[7];\n"
     4064    "MAD result.color, R1.x, R2, R0;\n"
     4065    "END\n"
     4066    ;
     4067
     4068static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN =
     4069    "!!ARBfp1.0\n"
     4070    "PARAM c[8] = { program.local[0..7] };\n"
     4071    "TEMP R0;\n"
     4072    "TEMP R1;\n"
     4073    "TEMP R2;\n"
     4074    "TEMP R3;\n"
     4075    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4076    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4077    "ADD R0.xyz, R0, c[3];\n"
     4078    "RCP R0.z, R0.z;\n"
     4079    "MUL R0.xy, R0, R0.z;\n"
     4080    "MUL R0.xy, R0, c[0];\n"
    40854081    "ADD R0.x, R0, R0.y;\n"
    4086     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    4087     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    4088     "MUL R0.x, R0, c[6].z;\n"
    4089     "TEX R0, R0, texture[2], 1D;\n"
    4090     "ADD R2.x, -R1.w, c[8];\n"
    4091     "MUL R2.xyz, R0, R2.x;\n"
    4092     "MAD R0.xyz, R0, R1, R2;\n"
    4093     "ADD R2.x, -R0.w, c[8];\n"
    4094     "MAD R2.xyz, R1, R2.x, R0;\n"
    4095     "ADD R0.z, R0.w, R1.w;\n"
    4096     "MAD R2.w, -R0, R1, R0.z;\n"
    4097     "ADD R0.xy, fragment.position, c[0];\n"
    4098     "MUL R0.xy, R0, c[1];\n"
    4099     "TEX R0, R0, texture[1], 2D;\n"
    4100     "ADD R2, R2, -R1;\n"
    4101     "DP4 R0.x, R0, c[2];\n"
    4102     "MAD result.color, R0.x, R2, R1;\n"
    4103     "END\n"
    4104     ;
    4105 
    4106 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN =
    4107     "!!ARBfp1.0\n"
    4108     "PARAM c[8] = { program.local[0..7] };\n"
    4109     "TEMP R0;\n"
    4110     "TEMP R1;\n"
    4111     "TEMP R2;\n"
    4112     "TEMP R3;\n"
    4113     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4114     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4115     "ADD R0.xyz, R0, c[5];\n"
    4116     "RCP R0.z, R0.z;\n"
    4117     "MUL R0.xy, R0, R0.z;\n"
    4118     "MUL R0.xy, R0, c[6];\n"
    4119     "ADD R0.x, R0, R0.y;\n"
    4120     "MUL R0.x, R0, c[6].z;\n"
    4121     "MUL R1.xy, fragment.position, c[7];\n"
    4122     "ADD R3.xy, fragment.position, c[0];\n"
    4123     "TEX R1, R1, texture[0], 2D;\n"
    4124     "TEX R0, R0, texture[2], 1D;\n"
    4125     "ADD R2, R0, R1;\n"
    4126     "MAD R2, -R0, R1, R2;\n"
    4127     "MUL R3.xy, R3, c[1];\n"
    4128     "TEX R0, R3, texture[1], 2D;\n"
    4129     "ADD R2, R2, -R1;\n"
    4130     "DP4 R0.x, R0, c[2];\n"
    4131     "MAD result.color, R0.x, R2, R1;\n"
     4082    "MUL R0.z, R0.x, c[0];\n"
     4083    "ADD R3.xy, fragment.position, c[6];\n"
     4084    "TEX R1, R0.z, texture[2], 1D;\n"
     4085    "MUL R0.xy, fragment.position, c[5];\n"
     4086    "TEX R0, R0, texture[0], 2D;\n"
     4087    "ADD R2, R1, R0;\n"
     4088    "MAD R2, -R1, R0, R2;\n"
     4089    "MUL R3.xy, R3, c[4];\n"
     4090    "TEX R1, R3, texture[1], 2D;\n"
     4091    "ADD R2, R2, -R0;\n"
     4092    "DP4 R1.x, R1, c[7];\n"
     4093    "MAD result.color, R1.x, R2, R0;\n"
    41324094    "END\n"
    41334095    ;
     
    41424104    "TEMP R3;\n"
    41434105    "TEMP R4;\n"
    4144     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4145     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4146     "ADD R0.xyz, R0, c[5];\n"
    4147     "RCP R0.z, R0.z;\n"
    4148     "MUL R0.xy, R0, R0.z;\n"
    4149     "MUL R0.xy, R0, c[6];\n"
     4106    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4107    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4108    "ADD R0.xyz, R0, c[3];\n"
     4109    "RCP R0.z, R0.z;\n"
     4110    "MUL R0.xy, R0, R0.z;\n"
     4111    "MUL R0.xy, R0, c[0];\n"
    41504112    "ADD R0.x, R0, R0.y;\n"
    4151     "MUL R0.x, R0, c[6].z;\n"
     4113    "MUL R0.x, R0, c[0].z;\n"
    41524114    "TEX R0, R0, texture[2], 1D;\n"
    4153     "MUL R1.xy, fragment.position, c[7];\n"
     4115    "MUL R1.xy, fragment.position, c[5];\n"
    41544116    "TEX R1, R1, texture[0], 2D;\n"
    41554117    "ADD R2.w, -R1, c[8].y;\n"
     
    41724134    "ADD R0.z, R0.w, R1.w;\n"
    41734135    "MAD R2.w, -R0, R1, R0.z;\n"
    4174     "ADD R0.xy, fragment.position, c[0];\n"
    4175     "MUL R0.xy, R0, c[1];\n"
     4136    "ADD R0.xy, fragment.position, c[6];\n"
     4137    "MUL R0.xy, R0, c[4];\n"
    41764138    "TEX R0, R0, texture[1], 2D;\n"
    41774139    "ADD R2, R2, -R1;\n"
    4178     "DP4 R0.x, R0, c[2];\n"
     4140    "DP4 R0.x, R0, c[7];\n"
    41794141    "MAD result.color, R0.x, R2, R1;\n"
    41804142    "END\n"
     
    41894151    "TEMP R2;\n"
    41904152    "TEMP R3;\n"
    4191     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4192     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4193     "ADD R0.xyz, R0, c[5];\n"
    4194     "RCP R0.z, R0.z;\n"
    4195     "MUL R0.xy, R0, R0.z;\n"
    4196     "MUL R0.xy, R0, c[6];\n"
    4197     "ADD R0.x, R0, R0.y;\n"
    4198     "MUL R0.x, R0, c[6].z;\n"
    4199     "MUL R1.xy, fragment.position, c[7];\n"
    4200     "TEX R1, R1, texture[0], 2D;\n"
    4201     "TEX R0, R0, texture[2], 1D;\n"
    4202     "MUL R3.xyz, R1, R0.w;\n"
    4203     "MUL R2.xyz, R0, R1.w;\n"
     4153    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4154    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4155    "ADD R0.xyz, R0, c[3];\n"
     4156    "RCP R0.z, R0.z;\n"
     4157    "MUL R0.xy, R0, R0.z;\n"
     4158    "MUL R0.xy, R0, c[0];\n"
     4159    "ADD R0.z, R0.x, R0.y;\n"
     4160    "MUL R1.x, R0.z, c[0].z;\n"
     4161    "MUL R0.xy, fragment.position, c[5];\n"
     4162    "TEX R0, R0, texture[0], 2D;\n"
     4163    "TEX R1, R1, texture[2], 1D;\n"
     4164    "MUL R3.xyz, R1.w, R0;\n"
     4165    "MUL R2.xyz, R1, R0.w;\n"
    42044166    "MIN R2.xyz, R2, R3;\n"
    4205     "ADD R2.w, -R1, c[8].x;\n"
    4206     "MAD R0.xyz, R0, R2.w, R2;\n"
    4207     "ADD R2.x, -R0.w, c[8];\n"
    4208     "MAD R2.xyz, R1, R2.x, R0;\n"
    4209     "ADD R0.z, R0.w, R1.w;\n"
    4210     "MAD R2.w, -R0, R1, R0.z;\n"
    4211     "ADD R0.xy, fragment.position, c[0];\n"
    4212     "MUL R0.xy, R0, c[1];\n"
    4213     "TEX R0, R0, texture[1], 2D;\n"
    4214     "ADD R2, R2, -R1;\n"
    4215     "DP4 R0.x, R0, c[2];\n"
    4216     "MAD result.color, R0.x, R2, R1;\n"
     4167    "ADD R2.w, -R0, c[8].x;\n"
     4168    "MAD R1.xyz, R1, R2.w, R2;\n"
     4169    "ADD R2.x, -R1.w, c[8];\n"
     4170    "MAD R2.xyz, R0, R2.x, R1;\n"
     4171    "ADD R1.z, R1.w, R0.w;\n"
     4172    "MAD R2.w, -R1, R0, R1.z;\n"
     4173    "ADD R1.xy, fragment.position, c[6];\n"
     4174    "MUL R1.xy, R1, c[4];\n"
     4175    "TEX R1, R1, texture[1], 2D;\n"
     4176    "ADD R2, R2, -R0;\n"
     4177    "DP4 R1.x, R1, c[7];\n"
     4178    "MAD result.color, R1.x, R2, R0;\n"
    42174179    "END\n"
    42184180    ;
     
    42264188    "TEMP R2;\n"
    42274189    "TEMP R3;\n"
    4228     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4229     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4230     "ADD R0.xyz, R0, c[5];\n"
    4231     "RCP R0.z, R0.z;\n"
    4232     "MUL R0.xy, R0, R0.z;\n"
    4233     "MUL R0.xy, R0, c[6];\n"
     4190    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4191    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4192    "ADD R0.xyz, R0, c[3];\n"
     4193    "RCP R0.z, R0.z;\n"
     4194    "MUL R0.xy, R0, R0.z;\n"
     4195    "MUL R0.xy, R0, c[0];\n"
     4196    "ADD R0.z, R0.x, R0.y;\n"
     4197    "MUL R1.x, R0.z, c[0].z;\n"
     4198    "MUL R0.xy, fragment.position, c[5];\n"
     4199    "TEX R0, R0, texture[0], 2D;\n"
     4200    "TEX R1, R1, texture[2], 1D;\n"
     4201    "MUL R3.xyz, R1.w, R0;\n"
     4202    "MUL R2.xyz, R1, R0.w;\n"
     4203    "MAX R2.xyz, R2, R3;\n"
     4204    "ADD R2.w, -R0, c[8].x;\n"
     4205    "MAD R1.xyz, R1, R2.w, R2;\n"
     4206    "ADD R2.x, -R1.w, c[8];\n"
     4207    "MAD R2.xyz, R0, R2.x, R1;\n"
     4208    "ADD R1.z, R1.w, R0.w;\n"
     4209    "MAD R2.w, -R1, R0, R1.z;\n"
     4210    "ADD R1.xy, fragment.position, c[6];\n"
     4211    "MUL R1.xy, R1, c[4];\n"
     4212    "TEX R1, R1, texture[1], 2D;\n"
     4213    "ADD R2, R2, -R0;\n"
     4214    "DP4 R1.x, R1, c[7];\n"
     4215    "MAD result.color, R1.x, R2, R0;\n"
     4216    "END\n"
     4217    ;
     4218
     4219static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE =
     4220    "!!ARBfp1.0\n"
     4221    "PARAM c[9] = { program.local[0..7],\n"
     4222    "           { 1, 1e-006 } };\n"
     4223    "TEMP R0;\n"
     4224    "TEMP R1;\n"
     4225    "TEMP R2;\n"
     4226    "TEMP R3;\n"
     4227    "TEMP R4;\n"
     4228    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4229    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4230    "ADD R0.xyz, R0, c[3];\n"
     4231    "RCP R0.z, R0.z;\n"
     4232    "MUL R0.xy, R0, R0.z;\n"
     4233    "MUL R0.xy, R0, c[0];\n"
    42344234    "ADD R0.x, R0, R0.y;\n"
    4235     "MUL R0.x, R0, c[6].z;\n"
    4236     "MUL R1.xy, fragment.position, c[7];\n"
    4237     "TEX R1, R1, texture[0], 2D;\n"
    4238     "TEX R0, R0, texture[2], 1D;\n"
    4239     "MUL R3.xyz, R1, R0.w;\n"
    4240     "MUL R2.xyz, R0, R1.w;\n"
    4241     "MAX R2.xyz, R2, R3;\n"
    4242     "ADD R2.w, -R1, c[8].x;\n"
    4243     "MAD R0.xyz, R0, R2.w, R2;\n"
    4244     "ADD R2.x, -R0.w, c[8];\n"
    4245     "MAD R2.xyz, R1, R2.x, R0;\n"
    4246     "ADD R0.z, R0.w, R1.w;\n"
    4247     "MAD R2.w, -R0, R1, R0.z;\n"
    4248     "ADD R0.xy, fragment.position, c[0];\n"
    4249     "MUL R0.xy, R0, c[1];\n"
    4250     "TEX R0, R0, texture[1], 2D;\n"
    4251     "ADD R2, R2, -R1;\n"
    4252     "DP4 R0.x, R0, c[2];\n"
    4253     "MAD result.color, R0.x, R2, R1;\n"
    4254     "END\n"
    4255     ;
    4256 
    4257 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE =
    4258     "!!ARBfp1.0\n"
    4259     "PARAM c[9] = { program.local[0..7],\n"
    4260     "           { 1, 1e-06 } };\n"
    4261     "TEMP R0;\n"
    4262     "TEMP R1;\n"
    4263     "TEMP R2;\n"
    4264     "TEMP R3;\n"
    4265     "TEMP R4;\n"
    4266     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4267     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4268     "ADD R0.xyz, R0, c[5];\n"
    4269     "RCP R0.z, R0.z;\n"
    4270     "MUL R0.xy, R0, R0.z;\n"
    4271     "MUL R0.xy, R0, c[6];\n"
    4272     "ADD R0.x, R0, R0.y;\n"
    4273     "MUL R0.x, R0, c[6].z;\n"
     4235    "MUL R0.x, R0, c[0].z;\n"
    42744236    "TEX R0, R0, texture[2], 1D;\n"
    42754237    "MAX R1.x, R0.w, c[8].y;\n"
     
    42774239    "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
    42784240    "MAX R2.xyz, R2, c[8].y;\n"
    4279     "MUL R1.xy, fragment.position, c[7];\n"
     4241    "MUL R1.xy, fragment.position, c[5];\n"
    42804242    "TEX R1, R1, texture[0], 2D;\n"
    42814243    "ADD R2.w, -R0, c[8].x;\n"
     
    42834245    "ADD R2.w, -R1, c[8].x;\n"
    42844246    "MAD R4.xyz, R0, R2.w, R3;\n"
    4285     "MUL R3.xyz, R1, R0.w;\n"
     4247    "MUL R3.xyz, R0.w, R1;\n"
    42864248    "MUL R2.w, R0, R1;\n"
    42874249    "MAD R0.xyz, R0, R1.w, R3;\n"
     
    42964258    "ADD R0.z, R0.w, R1.w;\n"
    42974259    "MAD R2.w, -R0, R1, R0.z;\n"
    4298     "ADD R0.xy, fragment.position, c[0];\n"
    4299     "MUL R0.xy, R0, c[1];\n"
     4260    "ADD R0.xy, fragment.position, c[6];\n"
     4261    "MUL R0.xy, R0, c[4];\n"
    43004262    "TEX R0, R0, texture[1], 2D;\n"
    43014263    "ADD R2, R2, -R1;\n"
    4302     "DP4 R0.x, R0, c[2];\n"
     4264    "DP4 R0.x, R0, c[7];\n"
    43034265    "MAD result.color, R0.x, R2, R1;\n"
    43044266    "END\n"
     
    43084270    "!!ARBfp1.0\n"
    43094271    "PARAM c[9] = { program.local[0..7],\n"
    4310     "           { 1, 9.9999997e-06 } };\n"
     4272    "           { 1, 9.9999997e-006 } };\n"
    43114273    "TEMP R0;\n"
    43124274    "TEMP R1;\n"
     
    43154277    "TEMP R4;\n"
    43164278    "TEMP R5;\n"
    4317     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4318     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4319     "ADD R0.xyz, R0, c[5];\n"
    4320     "RCP R0.z, R0.z;\n"
    4321     "MUL R0.xy, R0, R0.z;\n"
    4322     "MUL R0.xy, R0, c[6];\n"
     4279    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4280    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4281    "ADD R0.xyz, R0, c[3];\n"
     4282    "RCP R0.z, R0.z;\n"
     4283    "MUL R0.xy, R0, R0.z;\n"
     4284    "MUL R0.xy, R0, c[0];\n"
    43234285    "ADD R0.x, R0, R0.y;\n"
    4324     "MUL R0.x, R0, c[6].z;\n"
     4286    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     4287    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     4288    "MUL R0.x, R0, c[0].z;\n"
    43254289    "TEX R0, R0, texture[2], 1D;\n"
    4326     "MUL R1.xy, fragment.position, c[7];\n"
    4327     "TEX R1, R1, texture[0], 2D;\n"
    4328     "MUL R2.xyz, R1, R0.w;\n"
     4290    "MUL R2.xyz, R0.w, R1;\n"
    43294291    "MAD R3.xyz, R0, R1.w, R2;\n"
    43304292    "MAD R2.xyz, -R0.w, R1.w, R3;\n"
     
    43414303    "MAD R0.xyz, R0, R2.w, R4;\n"
    43424304    "MUL R2.w, R0, R1;\n"
    4343     "ADD R3.w, -R0, c[8].x;\n"
    43444305    "MAD R2.xyz, R1, R3.w, R2;\n"
    43454306    "ADD R2.xyz, R2, -R0;\n"
     
    43484309    "ADD R0.z, R0.w, R1.w;\n"
    43494310    "MAD R2.w, -R0, R1, R0.z;\n"
    4350     "ADD R0.xy, fragment.position, c[0];\n"
    4351     "MUL R0.xy, R0, c[1];\n"
     4311    "ADD R0.xy, fragment.position, c[6];\n"
     4312    "MUL R0.xy, R0, c[4];\n"
    43524313    "TEX R0, R0, texture[1], 2D;\n"
    43534314    "ADD R2, R2, -R1;\n"
    4354     "DP4 R0.x, R0, c[2];\n"
     4315    "DP4 R0.x, R0, c[7];\n"
    43554316    "MAD result.color, R0.x, R2, R1;\n"
    43564317    "END\n"
     
    43664327    "TEMP R3;\n"
    43674328    "TEMP R4;\n"
    4368     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4369     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4370     "ADD R0.xyz, R0, c[5];\n"
    4371     "RCP R0.z, R0.z;\n"
    4372     "MUL R0.xy, R0, R0.z;\n"
    4373     "MUL R0.xy, R0, c[6];\n"
     4329    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4330    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4331    "ADD R0.xyz, R0, c[3];\n"
     4332    "RCP R0.z, R0.z;\n"
     4333    "MUL R0.xy, R0, R0.z;\n"
     4334    "MUL R0.xy, R0, c[0];\n"
    43744335    "ADD R0.x, R0, R0.y;\n"
    4375     "MUL R0.x, R0, c[6].z;\n"
     4336    "MUL R0.x, R0, c[0].z;\n"
    43764337    "TEX R0, R0, texture[2], 1D;\n"
    4377     "MUL R1.xy, fragment.position, c[7];\n"
     4338    "MUL R1.xy, fragment.position, c[5];\n"
    43784339    "TEX R1, R1, texture[0], 2D;\n"
    43794340    "ADD R2.w, -R1, c[8].y;\n"
     
    43964357    "ADD R0.z, R0.w, R1.w;\n"
    43974358    "MAD R2.w, -R0, R1, R0.z;\n"
    4398     "ADD R0.xy, fragment.position, c[0];\n"
    4399     "MUL R0.xy, R0, c[1];\n"
     4359    "ADD R0.xy, fragment.position, c[6];\n"
     4360    "MUL R0.xy, R0, c[4];\n"
    44004361    "TEX R0, R0, texture[1], 2D;\n"
    44014362    "ADD R2, R2, -R1;\n"
    4402     "DP4 R0.x, R0, c[2];\n"
     4363    "DP4 R0.x, R0, c[7];\n"
    44034364    "MAD result.color, R0.x, R2, R1;\n"
    44044365    "END\n"
     
    44084369    "!!ARBfp1.0\n"
    44094370    "PARAM c[10] = { program.local[0..7],\n"
    4410     "           { 1, 9.9999997e-06, 2, 8 },\n"
    4411     "           { 3 } };\n"
     4371    "           { 1, 2, 9.9999997e-006, 4 },\n"
     4372    "           { 16, 12, 3 } };\n"
    44124373    "TEMP R0;\n"
    44134374    "TEMP R1;\n"
     
    44174378    "TEMP R5;\n"
    44184379    "TEMP R6;\n"
    4419     "MUL R2.xyz, fragment.position.y, c[4];\n"
    4420     "MAD R3.xyz, fragment.position.x, c[3], R2;\n"
    4421     "MUL R0.xy, fragment.position, c[7];\n"
    4422     "TEX R1, R0, texture[0], 2D;\n"
    4423     "MAX R0.x, R1.w, c[8].y;\n"
    4424     "RCP R2.w, R0.x;\n"
    4425     "MUL R0.xyz, R1, R2.w;\n"
    4426     "RSQ R0.w, R0.x;\n"
    4427     "RSQ R2.y, R0.y;\n"
    4428     "ADD R3.xyz, R3, c[5];\n"
    4429     "RCP R2.x, R0.w;\n"
    4430     "RCP R0.w, R3.z;\n"
    4431     "MUL R3.xy, R3, R0.w;\n"
    4432     "RSQ R0.w, R0.z;\n"
    4433     "RCP R2.z, R0.w;\n"
    4434     "RCP R2.y, R2.y;\n"
    4435     "MAD R6.xyz, R2, R1.w, -R1;\n"
    4436     "MUL R2.xyz, -R0, c[8].w;\n"
    4437     "ADD R5.xyz, R2, c[9].x;\n"
    4438     "MAD R2.xyz, -R1, R2.w, c[8].x;\n"
    4439     "MUL R3.xy, R3, c[6];\n"
    4440     "ADD R0.w, R3.x, R3.y;\n"
    4441     "MUL R0.w, R0, c[6].z;\n"
    4442     "TEX R0, R0.w, texture[2], 1D;\n"
    4443     "MAD R3.xyz, R0, c[8].z, -R0.w;\n"
    4444     "MUL R4.xyz, R2, R3;\n"
    4445     "MAD R4.xyz, -R4, R5, R0.w;\n"
    4446     "MUL R5.xyz, R6, R3;\n"
    4447     "MAD R2.xyz, -R2, R3, R0.w;\n"
    4448     "MAD R6.xyz, R1, R0.w, R5;\n"
    4449     "MUL R4.xyz, R1, R4;\n"
    4450     "MUL R5.xyz, R1, c[8].w;\n"
    4451     "ADD R6.xyz, R6, -R4;\n"
    4452     "SGE R5.xyz, R5, R1.w;\n"
    4453     "MUL R5.xyz, R5, R6;\n"
    4454     "ADD R3.xyz, R4, R5;\n"
     4380    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4381    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4382    "ADD R0.xyz, R0, c[3];\n"
     4383    "RCP R0.z, R0.z;\n"
     4384    "MUL R0.xy, R0, R0.z;\n"
     4385    "MUL R0.xy, R0, c[0];\n"
     4386    "ADD R0.x, R0, R0.y;\n"
     4387    "MUL R1.xy, fragment.position, c[5];\n"
     4388    "TEX R1, R1, texture[0], 2D;\n"
     4389    "MAX R0.z, R1.w, c[8];\n"
     4390    "RCP R0.z, R0.z;\n"
     4391    "MUL R3.xyz, R1, R0.z;\n"
     4392    "MAD R2.xyz, R3, c[9].x, -c[9].y;\n"
     4393    "MUL R0.x, R0, c[0].z;\n"
     4394    "TEX R0, R0, texture[2], 1D;\n"
     4395    "MAD R4.xyz, R3, R2, c[9].z;\n"
     4396    "MAD R2.xyz, R0, c[8].y, -R0.w;\n"
     4397    "MUL R5.xyz, R1.w, R2;\n"
     4398    "MUL R6.xyz, R5, R4;\n"
     4399    "RSQ R2.w, R3.x;\n"
     4400    "RCP R4.x, R2.w;\n"
     4401    "RSQ R2.w, R3.y;\n"
     4402    "RSQ R3.w, R3.z;\n"
     4403    "RCP R4.y, R2.w;\n"
     4404    "RCP R4.z, R3.w;\n"
     4405    "ADD R4.xyz, -R3, R4;\n"
     4406    "MUL R6.xyz, R3, R6;\n"
     4407    "MUL R4.xyz, R5, R4;\n"
     4408    "ADD R3.xyz, -R3, c[8].x;\n"
     4409    "MAD R2.xyz, R2, R3, R0.w;\n"
     4410    "MUL R3.xyz, R0, c[8].y;\n"
     4411    "MAD R5.xyz, R0.w, R1, R6;\n"
     4412    "MAD R4.xyz, R0.w, R1, R4;\n"
     4413    "ADD R6.xyz, R4, -R5;\n"
     4414    "MUL R4.xyz, R1, c[8].w;\n"
     4415    "SGE R4.xyz, R4, R1.w;\n"
     4416    "MAD R4.xyz, R4, R6, R5;\n"
     4417    "MAD R4.xyz, -R1, R2, R4;\n"
     4418    "SGE R3.xyz, R3, R0.w;\n"
    44554419    "MUL R2.xyz, R1, R2;\n"
    4456     "MUL R4.xyz, R0, c[8].z;\n"
    4457     "ADD R3.xyz, R3, -R2;\n"
    4458     "SGE R4.xyz, R4, R0.w;\n"
    4459     "MUL R3.xyz, R4, R3;\n"
    4460     "ADD R2.xyz, R2, R3;\n"
    44614420    "ADD R2.w, -R1, c[8].x;\n"
    4462     "MAD R0.xyz, R0, R2.w, R2;\n"
    4463     "ADD R2.x, -R0.w, c[8];\n"
    4464     "MAD R2.xyz, R1, R2.x, R0;\n"
     4421    "MAD R2.xyz, R3, R4, R2;\n"
     4422    "MAD R2.xyz, R0, R2.w, R2;\n"
     4423    "ADD R0.x, -R0.w, c[8];\n"
     4424    "MAD R2.xyz, R1, R0.x, R2;\n"
    44654425    "ADD R0.z, R0.w, R1.w;\n"
    44664426    "MAD R2.w, -R0, R1, R0.z;\n"
    4467     "ADD R0.xy, fragment.position, c[0];\n"
    4468     "MUL R0.xy, R0, c[1];\n"
     4427    "ADD R0.xy, fragment.position, c[6];\n"
     4428    "MUL R0.xy, R0, c[4];\n"
    44694429    "TEX R0, R0, texture[1], 2D;\n"
    44704430    "ADD R2, R2, -R1;\n"
    4471     "DP4 R0.x, R0, c[2];\n"
     4431    "DP4 R0.x, R0, c[7];\n"
    44724432    "MAD result.color, R0.x, R2, R1;\n"
    44734433    "END\n"
     
    44824442    "TEMP R2;\n"
    44834443    "TEMP R3;\n"
    4484     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4485     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4486     "ADD R0.xyz, R0, c[5];\n"
    4487     "RCP R0.z, R0.z;\n"
    4488     "MUL R0.xy, R0, R0.z;\n"
    4489     "MUL R0.xy, R0, c[6];\n"
     4444    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4445    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4446    "ADD R0.xyz, R0, c[3];\n"
     4447    "RCP R0.z, R0.z;\n"
     4448    "MUL R0.xy, R0, R0.z;\n"
     4449    "MUL R0.xy, R0, c[0];\n"
     4450    "ADD R0.z, R0.x, R0.y;\n"
     4451    "MUL R1.x, R0.z, c[0].z;\n"
     4452    "MUL R0.xy, fragment.position, c[5];\n"
     4453    "TEX R0, R0, texture[0], 2D;\n"
     4454    "TEX R1, R1, texture[2], 1D;\n"
     4455    "ADD R2.xyz, R1, R0;\n"
     4456    "MUL R3.xyz, R1.w, R0;\n"
     4457    "MUL R1.xyz, R1, R0.w;\n"
     4458    "MIN R1.xyz, R1, R3;\n"
     4459    "MAD R2.xyz, -R1, c[8].x, R2;\n"
     4460    "ADD R1.z, R1.w, R0.w;\n"
     4461    "MAD R2.w, -R1, R0, R1.z;\n"
     4462    "ADD R1.xy, fragment.position, c[6];\n"
     4463    "MUL R1.xy, R1, c[4];\n"
     4464    "TEX R1, R1, texture[1], 2D;\n"
     4465    "ADD R2, R2, -R0;\n"
     4466    "DP4 R1.x, R1, c[7];\n"
     4467    "MAD result.color, R1.x, R2, R0;\n"
     4468    "END\n"
     4469    ;
     4470
     4471static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION =
     4472    "!!ARBfp1.0\n"
     4473    "PARAM c[9] = { program.local[0..7],\n"
     4474    "           { 2, 1 } };\n"
     4475    "TEMP R0;\n"
     4476    "TEMP R1;\n"
     4477    "TEMP R2;\n"
     4478    "TEMP R3;\n"
     4479    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4480    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4481    "ADD R0.xyz, R0, c[3];\n"
     4482    "RCP R0.z, R0.z;\n"
     4483    "MUL R0.xy, R0, R0.z;\n"
     4484    "MUL R0.xy, R0, c[0];\n"
     4485    "ADD R0.z, R0.x, R0.y;\n"
     4486    "MUL R1.x, R0.z, c[0].z;\n"
     4487    "MUL R0.xy, fragment.position, c[5];\n"
     4488    "TEX R0, R0, texture[0], 2D;\n"
     4489    "TEX R1, R1, texture[2], 1D;\n"
     4490    "MUL R2.xyz, R1.w, R0;\n"
     4491    "MAD R3.xyz, R1, R0.w, R2;\n"
     4492    "MUL R2.xyz, R1, R0;\n"
     4493    "MAD R2.xyz, -R2, c[8].x, R3;\n"
     4494    "ADD R2.w, -R0, c[8].y;\n"
     4495    "MAD R1.xyz, R1, R2.w, R2;\n"
     4496    "ADD R2.x, -R1.w, c[8].y;\n"
     4497    "MAD R2.xyz, R0, R2.x, R1;\n"
     4498    "ADD R1.z, R1.w, R0.w;\n"
     4499    "MAD R2.w, -R1, R0, R1.z;\n"
     4500    "ADD R1.xy, fragment.position, c[6];\n"
     4501    "MUL R1.xy, R1, c[4];\n"
     4502    "TEX R1, R1, texture[1], 2D;\n"
     4503    "ADD R2, R2, -R0;\n"
     4504    "DP4 R1.x, R1, c[7];\n"
     4505    "MAD result.color, R1.x, R2, R0;\n"
     4506    "END\n"
     4507    ;
     4508
     4509static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
     4510    "!!ARBfp1.0\n"
     4511    "PARAM c[8] = { program.local[0..6],\n"
     4512    "           { 1 } };\n"
     4513    "TEMP R0;\n"
     4514    "TEMP R1;\n"
     4515    "TEMP R2;\n"
     4516    "TEMP R3;\n"
     4517    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4518    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4519    "ADD R0.xyz, R0, c[3];\n"
     4520    "RCP R0.z, R0.z;\n"
     4521    "MUL R0.xy, R0, R0.z;\n"
     4522    "MUL R0.xy, R0, c[0];\n"
    44904523    "ADD R0.x, R0, R0.y;\n"
    4491     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
     4524    "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
    44924525    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    4493     "MUL R0.x, R0, c[6].z;\n"
    4494     "TEX R0, R0, texture[2], 1D;\n"
    4495     "ADD R3.xyz, R0, R1;\n"
    4496     "MUL R2.xyz, R1, R0.w;\n"
    4497     "MUL R0.xyz, R0, R1.w;\n"
    4498     "MIN R0.xyz, R0, R2;\n"
    4499     "MAD R2.xyz, -R0, c[8].x, R3;\n"
    4500     "ADD R0.z, R0.w, R1.w;\n"
    4501     "MAD R2.w, -R0, R1, R0.z;\n"
    4502     "ADD R0.xy, fragment.position, c[0];\n"
    4503     "MUL R0.xy, R0, c[1];\n"
    4504     "TEX R0, R0, texture[1], 2D;\n"
    4505     "ADD R2, R2, -R1;\n"
    4506     "DP4 R0.x, R0, c[2];\n"
    4507     "MAD result.color, R0.x, R2, R1;\n"
    4508     "END\n"
    4509     ;
    4510 
    4511 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION =
    4512     "!!ARBfp1.0\n"
    4513     "PARAM c[9] = { program.local[0..7],\n"
    4514     "           { 1, 2 } };\n"
    4515     "TEMP R0;\n"
    4516     "TEMP R1;\n"
    4517     "TEMP R2;\n"
    4518     "TEMP R3;\n"
    4519     "MUL R0.xyz, fragment.position.y, c[4];\n"
    4520     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    4521     "ADD R0.xyz, R0, c[5];\n"
    4522     "RCP R0.z, R0.z;\n"
    4523     "MUL R0.xy, R0, R0.z;\n"
    4524     "MUL R0.xy, R0, c[6];\n"
    4525     "ADD R0.x, R0, R0.y;\n"
    4526     "MUL R0.x, R0, c[6].z;\n"
    4527     "MUL R1.xy, fragment.position, c[7];\n"
    4528     "TEX R1, R1, texture[0], 2D;\n"
    4529     "TEX R0, R0, texture[2], 1D;\n"
    4530     "MUL R2.xyz, R1, R0.w;\n"
    4531     "MAD R3.xyz, R0, R1.w, R2;\n"
    4532     "MUL R2.xyz, R0, R1;\n"
    4533     "MAD R2.xyz, -R2, c[8].y, R3;\n"
    4534     "ADD R2.w, -R1, c[8].x;\n"
    4535     "MAD R0.xyz, R0, R2.w, R2;\n"
    4536     "ADD R2.x, -R0.w, c[8];\n"
    4537     "MAD R2.xyz, R1, R2.x, R0;\n"
    4538     "ADD R0.z, R0.w, R1.w;\n"
    4539     "MAD R2.w, -R0, R1, R0.z;\n"
    4540     "ADD R0.xy, fragment.position, c[0];\n"
    4541     "MUL R0.xy, R0, c[1];\n"
    4542     "TEX R0, R0, texture[1], 2D;\n"
    4543     "ADD R2, R2, -R1;\n"
    4544     "DP4 R0.x, R0, c[2];\n"
    4545     "MAD result.color, R0.x, R2, R1;\n"
    4546     "END\n"
    4547     ;
    4548 
    4549 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
    4550     "!!ARBfp1.0\n"
    4551     "PARAM c[8] = { program.local[0..4],\n"
    4552     "           { 1 },\n"
    4553     "           program.local[6..7] };\n"
    4554     "TEMP R0;\n"
    4555     "TEMP R1;\n"
    4556     "TEMP R2;\n"
    4557     "TEMP R3;\n"
    4558     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4559     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4560     "ADD R0.xyz, R0, c[2];\n"
    4561     "RCP R0.z, R0.z;\n"
    4562     "MUL R0.xy, R0, R0.z;\n"
    4563     "MUL R0.xy, R0, c[3];\n"
     4526    "MUL R2.xyz, R1, c[4].y;\n"
     4527    "MUL R0.x, R0, c[0].z;\n"
     4528    "TEX R0, R0, texture[1], 1D;\n"
     4529    "MUL R3.xyz, R0.w, R2;\n"
     4530    "MUL R2.xyz, R0, c[4].x;\n"
     4531    "MAD R2.xyz, R1.w, R2, R3;\n"
     4532    "ADD R2.w, -R1, c[7].x;\n"
     4533    "MUL R0.xyz, R0, c[5].y;\n"
     4534    "MAD R0.xyz, R2.w, R0, R2;\n"
     4535    "ADD R2.x, -R0.w, c[7];\n"
     4536    "MUL R1.xyz, R1, c[5].z;\n"
     4537    "MAD result.color.xyz, R2.x, R1, R0;\n"
     4538    "MUL R0.x, R0.w, R1.w;\n"
     4539    "MUL R0.z, R1.w, R2.x;\n"
     4540    "MUL R0.y, R0.w, R2.w;\n"
     4541    "DP3 result.color.w, R0, c[5];\n"
     4542    "END\n"
     4543    ;
     4544
     4545static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK =
     4546    "!!ARBfp1.0\n"
     4547    "PARAM c[6] = { program.local[0..4],\n"
     4548    "           { 1 } };\n"
     4549    "TEMP R0;\n"
     4550    "TEMP R1;\n"
     4551    "TEMP R2;\n"
     4552    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4553    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4554    "ADD R0.xyz, R0, c[3];\n"
     4555    "RCP R0.z, R0.z;\n"
     4556    "MUL R0.xy, R0, R0.z;\n"
     4557    "MUL R0.xy, R0, c[0];\n"
    45644558    "ADD R0.x, R0, R0.y;\n"
    45654559    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    45664560    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    4567     "MUL R2.xyz, R1, c[7].y;\n"
    4568     "MUL R0.x, R0, c[3].z;\n"
    4569     "TEX R0, R0, texture[1], 1D;\n"
    4570     "MUL R3.xyz, R2, R0.w;\n"
    4571     "MUL R2.xyz, R0, c[7].x;\n"
    4572     "MAD R2.xyz, R2, R1.w, R3;\n"
    4573     "MUL R0.xyz, R0, c[6].y;\n"
    4574     "ADD R2.w, -R1, c[5].x;\n"
    4575     "MAD R0.xyz, R0, R2.w, R2;\n"
    4576     "ADD R2.x, -R0.w, c[5];\n"
    4577     "MUL R1.xyz, R1, c[6].z;\n"
    4578     "MAD result.color.xyz, R1, R2.x, R0;\n"
    4579     "ADD R0.y, -R1.w, c[5].x;\n"
    4580     "MUL R0.x, R0.w, R1.w;\n"
    4581     "MUL R0.z, R1.w, R2.x;\n"
    4582     "MUL R0.y, R0.w, R0;\n"
    4583     "DP3 result.color.w, R0, c[6];\n"
    4584     "END\n"
    4585     ;
    4586 
    4587 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK =
    4588     "!!ARBfp1.0\n"
    4589     "PARAM c[6] = { program.local[0..4],\n"
    4590     "           { 1 } };\n"
    4591     "TEMP R0;\n"
    4592     "TEMP R1;\n"
    4593     "TEMP R2;\n"
    4594     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4595     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4596     "ADD R0.xyz, R0, c[2];\n"
    4597     "RCP R0.z, R0.z;\n"
    4598     "MUL R0.xy, R0, R0.z;\n"
    4599     "MUL R0.xy, R0, c[3];\n"
    4600     "ADD R0.x, R0, R0.y;\n"
    4601     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    4602     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    4603     "MUL R0.x, R0, c[3].z;\n"
     4561    "MUL R0.x, R0, c[0].z;\n"
    46044562    "TEX R0, R0, texture[1], 1D;\n"
    46054563    "ADD R2.x, -R1.w, c[5];\n"
     
    46194577    "TEMP R1;\n"
    46204578    "TEMP R2;\n"
    4621     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4622     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4623     "ADD R0.xyz, R0, c[2];\n"
    4624     "RCP R0.z, R0.z;\n"
    4625     "MUL R0.xy, R0, R0.z;\n"
    4626     "MUL R0.xy, R0, c[3];\n"
     4579    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4580    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4581    "ADD R0.xyz, R0, c[3];\n"
     4582    "RCP R0.z, R0.z;\n"
     4583    "MUL R0.xy, R0, R0.z;\n"
     4584    "MUL R0.xy, R0, c[0];\n"
    46274585    "ADD R0.x, R0, R0.y;\n"
    46284586    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    46294587    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    4630     "MUL R0.x, R0, c[3].z;\n"
     4588    "MUL R0.x, R0, c[0].z;\n"
    46314589    "TEX R0, R0, texture[1], 1D;\n"
    46324590    "ADD R2, R0, R1;\n"
     
    46434601    "TEMP R2;\n"
    46444602    "TEMP R3;\n"
    4645     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4646     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4647     "ADD R0.xyz, R0, c[2];\n"
    4648     "RCP R0.z, R0.z;\n"
    4649     "MUL R0.xy, R0, R0.z;\n"
    4650     "MUL R0.xy, R0, c[3];\n"
     4603    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4604    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4605    "ADD R0.xyz, R0, c[3];\n"
     4606    "RCP R0.z, R0.z;\n"
     4607    "MUL R0.xy, R0, R0.z;\n"
     4608    "MUL R0.xy, R0, c[0];\n"
    46514609    "ADD R0.x, R0, R0.y;\n"
    4652     "MUL R0.x, R0, c[3].z;\n"
     4610    "MUL R0.x, R0, c[0].z;\n"
    46534611    "TEX R0, R0, texture[1], 1D;\n"
    46544612    "MUL R1.xy, fragment.position, c[4];\n"
     
    46844642    "TEMP R2;\n"
    46854643    "TEMP R3;\n"
    4686     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4687     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4688     "ADD R0.xyz, R0, c[2];\n"
    4689     "RCP R0.z, R0.z;\n"
    4690     "MUL R0.xy, R0, R0.z;\n"
    4691     "MUL R0.xy, R0, c[3];\n"
     4644    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4645    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4646    "ADD R0.xyz, R0, c[3];\n"
     4647    "RCP R0.z, R0.z;\n"
     4648    "MUL R0.xy, R0, R0.z;\n"
     4649    "MUL R0.xy, R0, c[0];\n"
    46924650    "ADD R0.x, R0, R0.y;\n"
    4693     "MUL R0.x, R0, c[3].z;\n"
    4694     "MUL R1.xy, fragment.position, c[4];\n"
    4695     "TEX R1, R1, texture[0], 2D;\n"
     4651    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     4652    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     4653    "MUL R0.x, R0, c[0].z;\n"
    46964654    "TEX R0, R0, texture[1], 1D;\n"
    46974655    "MUL R2.xyz, R0, R1.w;\n"
    4698     "MUL R3.xyz, R1, R0.w;\n"
     4656    "MUL R3.xyz, R0.w, R1;\n"
    46994657    "MIN R2.xyz, R2, R3;\n"
    47004658    "ADD R2.w, -R1, c[5].x;\n"
     
    47154673    "TEMP R2;\n"
    47164674    "TEMP R3;\n"
    4717     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4718     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4719     "ADD R0.xyz, R0, c[2];\n"
    4720     "RCP R0.z, R0.z;\n"
    4721     "MUL R0.xy, R0, R0.z;\n"
    4722     "MUL R0.xy, R0, c[3];\n"
     4675    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4676    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4677    "ADD R0.xyz, R0, c[3];\n"
     4678    "RCP R0.z, R0.z;\n"
     4679    "MUL R0.xy, R0, R0.z;\n"
     4680    "MUL R0.xy, R0, c[0];\n"
    47234681    "ADD R0.x, R0, R0.y;\n"
    4724     "MUL R0.x, R0, c[3].z;\n"
    4725     "MUL R1.xy, fragment.position, c[4];\n"
    4726     "TEX R1, R1, texture[0], 2D;\n"
     4682    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     4683    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     4684    "MUL R0.x, R0, c[0].z;\n"
    47274685    "TEX R0, R0, texture[1], 1D;\n"
    47284686    "MUL R2.xyz, R0, R1.w;\n"
    4729     "MUL R3.xyz, R1, R0.w;\n"
     4687    "MUL R3.xyz, R0.w, R1;\n"
    47304688    "MAX R2.xyz, R2, R3;\n"
    47314689    "ADD R2.w, -R1, c[5].x;\n"
     
    47414699    "!!ARBfp1.0\n"
    47424700    "PARAM c[6] = { program.local[0..4],\n"
    4743     "           { 1, 1e-06 } };\n"
    4744     "TEMP R0;\n"
    4745     "TEMP R1;\n"
    4746     "TEMP R2;\n"
    4747     "TEMP R3;\n"
    4748     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4749     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4750     "ADD R0.xyz, R0, c[2];\n"
    4751     "RCP R0.z, R0.z;\n"
    4752     "MUL R0.xy, R0, R0.z;\n"
    4753     "MUL R0.xy, R0, c[3];\n"
     4701    "           { 1, 1e-006 } };\n"
     4702    "TEMP R0;\n"
     4703    "TEMP R1;\n"
     4704    "TEMP R2;\n"
     4705    "TEMP R3;\n"
     4706    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4707    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4708    "ADD R0.xyz, R0, c[3];\n"
     4709    "RCP R0.z, R0.z;\n"
     4710    "MUL R0.xy, R0, R0.z;\n"
     4711    "MUL R0.xy, R0, c[0];\n"
    47544712    "ADD R0.x, R0, R0.y;\n"
    4755     "MUL R0.x, R0, c[3].z;\n"
     4713    "MUL R0.x, R0, c[0].z;\n"
    47564714    "TEX R0, R0, texture[1], 1D;\n"
    47574715    "MAX R1.x, R0.w, c[5].y;\n"
     
    47654723    "ADD R2.w, -R1, c[5].x;\n"
    47664724    "MAD R2.xyz, R0, R2.w, R2;\n"
    4767     "MUL R1.xyz, R1, R0.w;\n"
     4725    "MUL R1.xyz, R0.w, R1;\n"
    47684726    "MAD R0.xyz, R0, R1.w, R1;\n"
    47694727    "MUL R2.w, R0, R1;\n"
     
    47844742    "!!ARBfp1.0\n"
    47854743    "PARAM c[6] = { program.local[0..4],\n"
    4786     "           { 1, 9.9999997e-06 } };\n"
     4744    "           { 1, 9.9999997e-006 } };\n"
    47874745    "TEMP R0;\n"
    47884746    "TEMP R1;\n"
     
    47914749    "TEMP R4;\n"
    47924750    "TEMP R5;\n"
    4793     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4794     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4795     "ADD R0.xyz, R0, c[2];\n"
    4796     "RCP R0.z, R0.z;\n"
    4797     "MUL R0.xy, R0, R0.z;\n"
    4798     "MUL R0.xy, R0, c[3];\n"
     4751    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4752    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4753    "ADD R0.xyz, R0, c[3];\n"
     4754    "RCP R0.z, R0.z;\n"
     4755    "MUL R0.xy, R0, R0.z;\n"
     4756    "MUL R0.xy, R0, c[0];\n"
    47994757    "ADD R0.x, R0, R0.y;\n"
    4800     "MUL R0.x, R0, c[3].z;\n"
     4758    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     4759    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     4760    "MUL R0.x, R0, c[0].z;\n"
    48014761    "TEX R0, R0, texture[1], 1D;\n"
    4802     "MUL R1.xy, fragment.position, c[4];\n"
    4803     "TEX R1, R1, texture[0], 2D;\n"
    4804     "MUL R2.xyz, R1, R0.w;\n"
     4762    "MUL R2.xyz, R0.w, R1;\n"
    48054763    "MAD R3.xyz, R0, R1.w, R2;\n"
    48064764    "ADD R2.w, -R1, c[5].x;\n"
     
    48154773    "MAD R2.xyz, R4, R2, R5;\n"
    48164774    "MUL R4.xyz, R1, R3.w;\n"
     4775    "MAD R1.xyz, R1, R3.w, R2;\n"
    48174776    "MAD R0.xyz, R0, R2.w, R4;\n"
    4818     "ADD R3.w, -R0, c[5].x;\n"
    4819     "MAD R1.xyz, R1, R3.w, R2;\n"
    48204777    "MUL R2.x, R0.w, R1.w;\n"
    48214778    "ADD R2.w, R0, R1;\n"
     
    48364793    "TEMP R3;\n"
    48374794    "TEMP R4;\n"
    4838     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4839     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4840     "ADD R0.xyz, R0, c[2];\n"
    4841     "RCP R0.z, R0.z;\n"
    4842     "MUL R0.xy, R0, R0.z;\n"
    4843     "MUL R0.xy, R0, c[3];\n"
     4795    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4796    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4797    "ADD R0.xyz, R0, c[3];\n"
     4798    "RCP R0.z, R0.z;\n"
     4799    "MUL R0.xy, R0, R0.z;\n"
     4800    "MUL R0.xy, R0, c[0];\n"
    48444801    "ADD R0.x, R0, R0.y;\n"
    4845     "MUL R0.x, R0, c[3].z;\n"
     4802    "MUL R0.x, R0, c[0].z;\n"
    48464803    "TEX R0, R0, texture[1], 1D;\n"
    48474804    "MUL R1.xy, fragment.position, c[4];\n"
     
    48724829    "!!ARBfp1.0\n"
    48734830    "PARAM c[7] = { program.local[0..4],\n"
    4874     "           { 1, 9.9999997e-06, 2, 8 },\n"
    4875     "           { 3 } };\n"
     4831    "           { 1, 2, 9.9999997e-006, 4 },\n"
     4832    "           { 16, 12, 3 } };\n"
    48764833    "TEMP R0;\n"
    48774834    "TEMP R1;\n"
     
    48814838    "TEMP R5;\n"
    48824839    "TEMP R6;\n"
    4883     "MUL R2.xyz, fragment.position.y, c[1];\n"
    4884     "MAD R3.xyz, fragment.position.x, c[0], R2;\n"
    4885     "MUL R0.xy, fragment.position, c[4];\n"
    4886     "TEX R1, R0, texture[0], 2D;\n"
    4887     "MAX R0.x, R1.w, c[5].y;\n"
    4888     "RCP R2.w, R0.x;\n"
    4889     "MUL R0.xyz, R1, R2.w;\n"
    4890     "RSQ R0.w, R0.x;\n"
    4891     "RSQ R2.y, R0.y;\n"
    4892     "ADD R3.xyz, R3, c[2];\n"
    4893     "RCP R2.x, R0.w;\n"
    4894     "RCP R0.w, R3.z;\n"
    4895     "MUL R3.xy, R3, R0.w;\n"
    4896     "RSQ R0.w, R0.z;\n"
    4897     "RCP R2.z, R0.w;\n"
    4898     "RCP R2.y, R2.y;\n"
    4899     "MAD R6.xyz, R2, R1.w, -R1;\n"
    4900     "MUL R2.xyz, -R0, c[5].w;\n"
    4901     "ADD R5.xyz, R2, c[6].x;\n"
    4902     "MAD R2.xyz, -R1, R2.w, c[5].x;\n"
    4903     "MUL R3.xy, R3, c[3];\n"
    4904     "ADD R0.w, R3.x, R3.y;\n"
    4905     "MUL R0.w, R0, c[3].z;\n"
    4906     "TEX R0, R0.w, texture[1], 1D;\n"
    4907     "MAD R3.xyz, R0, c[5].z, -R0.w;\n"
    4908     "MUL R4.xyz, R2, R3;\n"
    4909     "MAD R4.xyz, -R4, R5, R0.w;\n"
    4910     "MUL R5.xyz, R6, R3;\n"
    4911     "MAD R2.xyz, -R2, R3, R0.w;\n"
    4912     "MAD R6.xyz, R1, R0.w, R5;\n"
    4913     "MUL R4.xyz, R1, R4;\n"
    4914     "MUL R5.xyz, R1, c[5].w;\n"
    4915     "ADD R6.xyz, R6, -R4;\n"
    4916     "SGE R5.xyz, R5, R1.w;\n"
    4917     "MUL R5.xyz, R5, R6;\n"
    4918     "ADD R3.xyz, R4, R5;\n"
     4840    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4841    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4842    "ADD R0.xyz, R0, c[3];\n"
     4843    "RCP R0.z, R0.z;\n"
     4844    "MUL R0.xy, R0, R0.z;\n"
     4845    "MUL R0.xy, R0, c[0];\n"
     4846    "ADD R0.x, R0, R0.y;\n"
     4847    "MUL R1.xy, fragment.position, c[4];\n"
     4848    "TEX R1, R1, texture[0], 2D;\n"
     4849    "MAX R0.z, R1.w, c[5];\n"
     4850    "RCP R0.z, R0.z;\n"
     4851    "MUL R3.xyz, R1, R0.z;\n"
     4852    "MAD R2.xyz, R3, c[6].x, -c[6].y;\n"
     4853    "MUL R0.x, R0, c[0].z;\n"
     4854    "TEX R0, R0, texture[1], 1D;\n"
     4855    "MAD R4.xyz, R3, R2, c[6].z;\n"
     4856    "MAD R2.xyz, R0, c[5].y, -R0.w;\n"
     4857    "MUL R5.xyz, R1.w, R2;\n"
     4858    "MUL R6.xyz, R5, R4;\n"
     4859    "RSQ R2.w, R3.x;\n"
     4860    "RCP R4.x, R2.w;\n"
     4861    "RSQ R2.w, R3.y;\n"
     4862    "RSQ R3.w, R3.z;\n"
     4863    "RCP R4.y, R2.w;\n"
     4864    "RCP R4.z, R3.w;\n"
     4865    "ADD R4.xyz, -R3, R4;\n"
     4866    "MUL R6.xyz, R3, R6;\n"
     4867    "MUL R4.xyz, R5, R4;\n"
     4868    "ADD R3.xyz, -R3, c[5].x;\n"
     4869    "MAD R2.xyz, R2, R3, R0.w;\n"
     4870    "MUL R3.xyz, R0, c[5].y;\n"
     4871    "MAD R5.xyz, R0.w, R1, R6;\n"
     4872    "MAD R4.xyz, R0.w, R1, R4;\n"
     4873    "ADD R6.xyz, R4, -R5;\n"
     4874    "MUL R4.xyz, R1, c[5].w;\n"
     4875    "SGE R4.xyz, R4, R1.w;\n"
     4876    "MAD R4.xyz, R4, R6, R5;\n"
     4877    "MAD R4.xyz, -R1, R2, R4;\n"
    49194878    "MUL R2.xyz, R1, R2;\n"
    4920     "MUL R4.xyz, R0, c[5].z;\n"
    4921     "ADD R3.xyz, R3, -R2;\n"
    4922     "SGE R4.xyz, R4, R0.w;\n"
    4923     "MUL R3.xyz, R4, R3;\n"
    4924     "ADD R2.xyz, R2, R3;\n"
     4879    "SGE R3.xyz, R3, R0.w;\n"
     4880    "MAD R2.xyz, R3, R4, R2;\n"
    49254881    "ADD R2.w, -R1, c[5].x;\n"
    4926     "MAD R0.xyz, R0, R2.w, R2;\n"
    4927     "ADD R2.x, R0.w, R1.w;\n"
    4928     "ADD R2.y, -R0.w, c[5].x;\n"
    4929     "MAD result.color.xyz, R1, R2.y, R0;\n"
    4930     "MAD result.color.w, -R0, R1, R2.x;\n"
     4882    "MAD R2.xyz, R0, R2.w, R2;\n"
     4883    "ADD R0.x, R0.w, R1.w;\n"
     4884    "ADD R0.y, -R0.w, c[5].x;\n"
     4885    "MAD result.color.xyz, R1, R0.y, R2;\n"
     4886    "MAD result.color.w, -R0, R1, R0.x;\n"
    49314887    "END\n"
    49324888    ;
     
    49404896    "TEMP R2;\n"
    49414897    "TEMP R3;\n"
    4942     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4943     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4944     "ADD R0.xyz, R0, c[2];\n"
    4945     "RCP R0.z, R0.z;\n"
    4946     "MUL R0.xy, R0, R0.z;\n"
    4947     "MUL R0.xy, R0, c[3];\n"
     4898    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4899    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4900    "ADD R0.xyz, R0, c[3];\n"
     4901    "RCP R0.z, R0.z;\n"
     4902    "MUL R0.xy, R0, R0.z;\n"
     4903    "MUL R0.xy, R0, c[0];\n"
    49484904    "ADD R0.x, R0, R0.y;\n"
    4949     "MUL R0.x, R0, c[3].z;\n"
    4950     "MUL R1.xy, fragment.position, c[4];\n"
     4905    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     4906    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     4907    "MUL R0.x, R0, c[0].z;\n"
    49514908    "TEX R0, R0, texture[1], 1D;\n"
    4952     "TEX R1, R1, texture[0], 2D;\n"
    49534909    "MUL R2.xyz, R0, R1.w;\n"
    4954     "MUL R3.xyz, R1, R0.w;\n"
     4910    "MUL R3.xyz, R0.w, R1;\n"
    49554911    "ADD R0.xyz, R0, R1;\n"
    49564912    "MIN R2.xyz, R2, R3;\n"
     
    49644920    "!!ARBfp1.0\n"
    49654921    "PARAM c[6] = { program.local[0..4],\n"
    4966     "           { 1, 2 } };\n"
    4967     "TEMP R0;\n"
    4968     "TEMP R1;\n"
    4969     "TEMP R2;\n"
    4970     "TEMP R3;\n"
    4971     "MUL R0.xyz, fragment.position.y, c[1];\n"
    4972     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    4973     "ADD R0.xyz, R0, c[2];\n"
    4974     "RCP R0.z, R0.z;\n"
    4975     "MUL R0.xy, R0, R0.z;\n"
    4976     "MUL R0.xy, R0, c[3];\n"
     4922    "           { 2, 1 } };\n"
     4923    "TEMP R0;\n"
     4924    "TEMP R1;\n"
     4925    "TEMP R2;\n"
     4926    "TEMP R3;\n"
     4927    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4928    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4929    "ADD R0.xyz, R0, c[3];\n"
     4930    "RCP R0.z, R0.z;\n"
     4931    "MUL R0.xy, R0, R0.z;\n"
     4932    "MUL R0.xy, R0, c[0];\n"
    49774933    "ADD R0.x, R0, R0.y;\n"
    4978     "MUL R0.x, R0, c[3].z;\n"
    4979     "MUL R1.xy, fragment.position, c[4];\n"
    4980     "TEX R1, R1, texture[0], 2D;\n"
     4934    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     4935    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     4936    "MUL R0.x, R0, c[0].z;\n"
    49814937    "TEX R0, R0, texture[1], 1D;\n"
    4982     "MUL R2.xyz, R1, R0.w;\n"
     4938    "MUL R2.xyz, R0.w, R1;\n"
    49834939    "MAD R3.xyz, R0, R1.w, R2;\n"
    49844940    "MUL R2.xyz, R0, R1;\n"
    4985     "MAD R2.xyz, -R2, c[5].y, R3;\n"
    4986     "ADD R2.w, -R1, c[5].x;\n"
     4941    "MAD R2.xyz, -R2, c[5].x, R3;\n"
     4942    "ADD R2.w, -R1, c[5].y;\n"
    49874943    "MAD R0.xyz, R0, R2.w, R2;\n"
    49884944    "ADD R2.x, R0.w, R1.w;\n"
    4989     "ADD R2.y, -R0.w, c[5].x;\n"
     4945    "ADD R2.y, -R0.w, c[5];\n"
    49904946    "MAD result.color.xyz, R1, R2.y, R0;\n"
    49914947    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    49984954    "TEMP R0;\n"
    49994955    "TEMP R1;\n"
    5000     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5001     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5002     "ADD R0.xyz, R0, c[2];\n"
     4956    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4957    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4958    "ADD R0.xyz, R0, c[3];\n"
    50034959    "RCP R0.z, R0.z;\n"
    50044960    "MUL R0.zw, R0.xyxy, R0.z;\n"
    5005     "MUL R0.zw, R0, c[3].xyxy;\n"
     4961    "MUL R0.zw, R0, c[0].xyxy;\n"
    50064962    "ADD R1.x, R0.z, R0.w;\n"
    5007     "ADD R0.xy, fragment.position, c[4];\n"
    5008     "MUL R0.xy, R0, c[5];\n"
     4963    "ADD R0.xy, fragment.position, c[5];\n"
     4964    "MUL R0.xy, R0, c[4];\n"
    50094965    "TEX R0, R0, texture[0], 2D;\n"
    50104966    "DP4 R1.y, R0, c[6];\n"
    5011     "MUL R1.x, R1, c[3].z;\n"
     4967    "MUL R1.x, R1, c[0].z;\n"
    50124968    "TEX R0, R1, texture[1], 1D;\n"
    50134969    "MUL result.color, R0, R1.y;\n"
     
    50194975    "PARAM c[4] = { program.local[0..3] };\n"
    50204976    "TEMP R0;\n"
    5021     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5022     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5023     "ADD R0.xyz, R0, c[2];\n"
    5024     "RCP R0.z, R0.z;\n"
    5025     "MUL R0.xy, R0, R0.z;\n"
    5026     "MUL R0.xy, R0, c[3];\n"
     4977    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4978    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4979    "ADD R0.xyz, R0, c[3];\n"
     4980    "RCP R0.z, R0.z;\n"
     4981    "MUL R0.xy, R0, R0.z;\n"
     4982    "MUL R0.xy, R0, c[0];\n"
    50274983    "ADD R0.x, R0, R0.y;\n"
    5028     "MUL R0.x, R0, c[3].z;\n"
     4984    "MUL R0.x, R0, c[0].z;\n"
    50294985    "TEX result.color, R0, texture[0], 1D;\n"
    50304986    "END\n"
     
    50334989static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
    50344990    "!!ARBfp1.0\n"
    5035     "PARAM c[11] = { program.local[0..7],\n"
    5036     "           { 1 },\n"
    5037     "           program.local[9..10] };\n"
    5038     "TEMP R0;\n"
    5039     "TEMP R1;\n"
    5040     "TEMP R2;\n"
    5041     "TEMP R3;\n"
    5042     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5043     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5044     "ADD R0.xyz, R0, c[5];\n"
    5045     "RCP R0.z, R0.z;\n"
    5046     "MUL R0.xy, R0, R0.z;\n"
    5047     "MUL R0.xy, R0, c[6];\n"
    5048     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    5049     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    5050     "MOV R0.y, -R0;\n"
    5051     "TEX R0, R0, texture[2], 2D;\n"
    5052     "MUL R2.xyz, R1, c[10].y;\n"
    5053     "MUL R3.xyz, R2, R0.w;\n"
    5054     "MUL R2.xyz, R0, c[10].x;\n"
    5055     "MAD R2.xyz, R2, R1.w, R3;\n"
    5056     "ADD R3.xy, fragment.position, c[0];\n"
    5057     "MUL R0.xyz, R0, c[9].y;\n"
    5058     "ADD R2.w, -R1, c[8].x;\n"
    5059     "MAD R2.xyz, R0, R2.w, R2;\n"
    5060     "ADD R2.w, -R0, c[8].x;\n"
    5061     "MUL R0.xyz, R1, c[9].z;\n"
    5062     "MAD R2.xyz, R0, R2.w, R2;\n"
    5063     "ADD R0.y, -R1.w, c[8].x;\n"
    5064     "MUL R0.z, R1.w, R2.w;\n"
    5065     "MUL R0.x, R0.w, R1.w;\n"
    5066     "MUL R0.y, R0.w, R0;\n"
    5067     "DP3 R2.w, R0, c[9];\n"
    5068     "MUL R3.xy, R3, c[1];\n"
    5069     "TEX R0, R3, texture[1], 2D;\n"
    5070     "ADD R2, R2, -R1;\n"
    5071     "DP4 R0.x, R0, c[2];\n"
    5072     "MAD result.color, R0.x, R2, R1;\n"
     4991    "PARAM c[11] = { program.local[0..9],\n"
     4992    "           { 1 } };\n"
     4993    "TEMP R0;\n"
     4994    "TEMP R1;\n"
     4995    "TEMP R2;\n"
     4996    "TEMP R3;\n"
     4997    "MUL R0.xyz, fragment.position.y, c[2];\n"
     4998    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     4999    "ADD R1.xyz, R0, c[3];\n"
     5000    "RCP R0.z, R1.z;\n"
     5001    "MUL R1.xy, R1, R0.z;\n"
     5002    "MUL R0.xy, fragment.position, c[7];\n"
     5003    "TEX R0, R0, texture[0], 2D;\n"
     5004    "MUL R1.xy, R1, c[0];\n"
     5005    "TEX R1, R1, texture[2], 2D;\n"
     5006    "MUL R2.xyz, R0, c[4].y;\n"
     5007    "MUL R3.xyz, R1.w, R2;\n"
     5008    "MUL R2.xyz, R1, c[4].x;\n"
     5009    "MAD R2.xyz, R0.w, R2, R3;\n"
     5010    "ADD R3.xy, fragment.position, c[8];\n"
     5011    "ADD R2.w, -R0, c[10].x;\n"
     5012    "MUL R1.xyz, R1, c[5].y;\n"
     5013    "MAD R2.xyz, R2.w, R1, R2;\n"
     5014    "MUL R1.xyz, R0, c[5].z;\n"
     5015    "ADD R3.z, -R1.w, c[10].x;\n"
     5016    "MAD R2.xyz, R3.z, R1, R2;\n"
     5017    "MUL R1.y, R1.w, R2.w;\n"
     5018    "MUL R1.x, R1.w, R0.w;\n"
     5019    "MUL R1.z, R0.w, R3;\n"
     5020    "DP3 R2.w, R1, c[5];\n"
     5021    "MUL R3.xy, R3, c[6];\n"
     5022    "TEX R1, R3, texture[1], 2D;\n"
     5023    "ADD R2, R2, -R0;\n"
     5024    "DP4 R1.x, R1, c[9];\n"
     5025    "MAD result.color, R1.x, R2, R0;\n"
    50735026    "END\n"
    50745027    ;
     
    50815034    "TEMP R1;\n"
    50825035    "TEMP R2;\n"
    5083     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5084     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5085     "ADD R0.xyz, R0, c[5];\n"
    5086     "RCP R1.x, R0.z;\n"
    5087     "MUL R0.xy, R0, R1.x;\n"
    5088     "MUL R0.xy, R0, c[6];\n"
    5089     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    5090     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    5091     "MOV R0.y, -R0;\n"
    5092     "TEX R0, R0, texture[2], 2D;\n"
     5036    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5037    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5038    "ADD R1.xyz, R0, c[3];\n"
     5039    "RCP R0.z, R1.z;\n"
     5040    "MUL R1.xy, R1, R0.z;\n"
     5041    "MUL R0.xy, fragment.position, c[5];\n"
     5042    "TEX R0, R0, texture[0], 2D;\n"
     5043    "MUL R1.xy, R1, c[0];\n"
     5044    "TEX R1, R1, texture[2], 2D;\n"
     5045    "ADD R2.x, -R0.w, c[8];\n"
     5046    "MUL R2.xyz, R1, R2.x;\n"
     5047    "MAD R1.xyz, R1, R0, R2;\n"
    50935048    "ADD R2.x, -R1.w, c[8];\n"
    5094     "MUL R2.xyz, R0, R2.x;\n"
    5095     "MAD R0.xyz, R0, R1, R2;\n"
    5096     "ADD R2.x, -R0.w, c[8];\n"
    5097     "MAD R2.xyz, R1, R2.x, R0;\n"
    5098     "ADD R0.z, R0.w, R1.w;\n"
    5099     "MAD R2.w, -R0, R1, R0.z;\n"
    5100     "ADD R0.xy, fragment.position, c[0];\n"
    5101     "MUL R0.xy, R0, c[1];\n"
    5102     "TEX R0, R0, texture[1], 2D;\n"
    5103     "ADD R2, R2, -R1;\n"
    5104     "DP4 R0.x, R0, c[2];\n"
    5105     "MAD result.color, R0.x, R2, R1;\n"
     5049    "MAD R2.xyz, R0, R2.x, R1;\n"
     5050    "ADD R1.z, R1.w, R0.w;\n"
     5051    "MAD R2.w, -R1, R0, R1.z;\n"
     5052    "ADD R1.xy, fragment.position, c[6];\n"
     5053    "MUL R1.xy, R1, c[4];\n"
     5054    "TEX R1, R1, texture[1], 2D;\n"
     5055    "ADD R2, R2, -R0;\n"
     5056    "DP4 R1.x, R1, c[7];\n"
     5057    "MAD result.color, R1.x, R2, R0;\n"
    51065058    "END\n"
    51075059    ;
     
    51145066    "TEMP R2;\n"
    51155067    "TEMP R3;\n"
    5116     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5117     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5118     "ADD R0.xyz, R0, c[5];\n"
    5119     "RCP R0.z, R0.z;\n"
    5120     "MUL R0.xy, R0, R0.z;\n"
    5121     "MUL R0.xy, R0, c[6];\n"
    5122     "MOV R0.y, -R0;\n"
    5123     "MUL R1.xy, fragment.position, c[7];\n"
    5124     "ADD R3.xy, fragment.position, c[0];\n"
    5125     "TEX R1, R1, texture[0], 2D;\n"
    5126     "TEX R0, R0, texture[2], 2D;\n"
    5127     "ADD R2, R0, R1;\n"
    5128     "MAD R2, -R0, R1, R2;\n"
    5129     "MUL R3.xy, R3, c[1];\n"
    5130     "TEX R0, R3, texture[1], 2D;\n"
    5131     "ADD R2, R2, -R1;\n"
    5132     "DP4 R0.x, R0, c[2];\n"
    5133     "MAD result.color, R0.x, R2, R1;\n"
     5068    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5069    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5070    "ADD R0.xyz, R0, c[3];\n"
     5071    "RCP R0.z, R0.z;\n"
     5072    "MUL R0.xy, R0, R0.z;\n"
     5073    "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
     5074    "ADD R3.xy, fragment.position, c[6];\n"
     5075    "TEX R1, R0.zwzw, texture[2], 2D;\n"
     5076    "MUL R0.xy, fragment.position, c[5];\n"
     5077    "TEX R0, R0, texture[0], 2D;\n"
     5078    "ADD R2, R1, R0;\n"
     5079    "MAD R2, -R1, R0, R2;\n"
     5080    "MUL R3.xy, R3, c[4];\n"
     5081    "TEX R1, R3, texture[1], 2D;\n"
     5082    "ADD R2, R2, -R0;\n"
     5083    "DP4 R1.x, R1, c[7];\n"
     5084    "MAD result.color, R1.x, R2, R0;\n"
    51345085    "END\n"
    51355086    ;
     
    51445095    "TEMP R3;\n"
    51455096    "TEMP R4;\n"
    5146     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5147     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5148     "ADD R0.xyz, R0, c[5];\n"
    5149     "RCP R0.z, R0.z;\n"
    5150     "MUL R0.xy, R0, R0.z;\n"
    5151     "MUL R0.xy, R0, c[6];\n"
    5152     "MOV R0.y, -R0;\n"
     5097    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5098    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5099    "ADD R0.xyz, R0, c[3];\n"
     5100    "RCP R0.z, R0.z;\n"
     5101    "MUL R0.xy, R0, R0.z;\n"
     5102    "MUL R0.xy, R0, c[0];\n"
    51535103    "TEX R0, R0, texture[2], 2D;\n"
    5154     "MUL R1.xy, fragment.position, c[7];\n"
     5104    "MUL R1.xy, fragment.position, c[5];\n"
    51555105    "TEX R1, R1, texture[0], 2D;\n"
    51565106    "ADD R2.w, -R1, c[8].y;\n"
     
    51735123    "ADD R0.z, R0.w, R1.w;\n"
    51745124    "MAD R2.w, -R0, R1, R0.z;\n"
    5175     "ADD R0.xy, fragment.position, c[0];\n"
    5176     "MUL R0.xy, R0, c[1];\n"
     5125    "ADD R0.xy, fragment.position, c[6];\n"
     5126    "MUL R0.xy, R0, c[4];\n"
    51775127    "TEX R0, R0, texture[1], 2D;\n"
    51785128    "ADD R2, R2, -R1;\n"
    5179     "DP4 R0.x, R0, c[2];\n"
     5129    "DP4 R0.x, R0, c[7];\n"
    51805130    "MAD result.color, R0.x, R2, R1;\n"
    51815131    "END\n"
     
    51905140    "TEMP R2;\n"
    51915141    "TEMP R3;\n"
    5192     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5193     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5194     "ADD R0.xyz, R0, c[5];\n"
    5195     "RCP R0.z, R0.z;\n"
    5196     "MUL R0.xy, R0, R0.z;\n"
    5197     "MUL R0.xy, R0, c[6];\n"
    5198     "MOV R0.y, -R0;\n"
    5199     "MUL R1.xy, fragment.position, c[7];\n"
    5200     "TEX R1, R1, texture[0], 2D;\n"
    5201     "TEX R0, R0, texture[2], 2D;\n"
    5202     "MUL R3.xyz, R1, R0.w;\n"
    5203     "MUL R2.xyz, R0, R1.w;\n"
     5142    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5143    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5144    "ADD R0.xyz, R0, c[3];\n"
     5145    "RCP R0.z, R0.z;\n"
     5146    "MUL R0.zw, R0.xyxy, R0.z;\n"
     5147    "MUL R1.xy, R0.zwzw, c[0];\n"
     5148    "MUL R0.xy, fragment.position, c[5];\n"
     5149    "TEX R0, R0, texture[0], 2D;\n"
     5150    "TEX R1, R1, texture[2], 2D;\n"
     5151    "MUL R3.xyz, R1.w, R0;\n"
     5152    "MUL R2.xyz, R1, R0.w;\n"
    52045153    "MIN R2.xyz, R2, R3;\n"
    5205     "ADD R2.w, -R1, c[8].x;\n"
    5206     "MAD R0.xyz, R0, R2.w, R2;\n"
    5207     "ADD R2.x, -R0.w, c[8];\n"
    5208     "MAD R2.xyz, R1, R2.x, R0;\n"
    5209     "ADD R0.z, R0.w, R1.w;\n"
    5210     "MAD R2.w, -R0, R1, R0.z;\n"
    5211     "ADD R0.xy, fragment.position, c[0];\n"
    5212     "MUL R0.xy, R0, c[1];\n"
    5213     "TEX R0, R0, texture[1], 2D;\n"
    5214     "ADD R2, R2, -R1;\n"
    5215     "DP4 R0.x, R0, c[2];\n"
    5216     "MAD result.color, R0.x, R2, R1;\n"
     5154    "ADD R2.w, -R0, c[8].x;\n"
     5155    "MAD R1.xyz, R1, R2.w, R2;\n"
     5156    "ADD R2.x, -R1.w, c[8];\n"
     5157    "MAD R2.xyz, R0, R2.x, R1;\n"
     5158    "ADD R1.z, R1.w, R0.w;\n"
     5159    "MAD R2.w, -R1, R0, R1.z;\n"
     5160    "ADD R1.xy, fragment.position, c[6];\n"
     5161    "MUL R1.xy, R1, c[4];\n"
     5162    "TEX R1, R1, texture[1], 2D;\n"
     5163    "ADD R2, R2, -R0;\n"
     5164    "DP4 R1.x, R1, c[7];\n"
     5165    "MAD result.color, R1.x, R2, R0;\n"
    52175166    "END\n"
    52185167    ;
     
    52265175    "TEMP R2;\n"
    52275176    "TEMP R3;\n"
    5228     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5229     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5230     "ADD R0.xyz, R0, c[5];\n"
    5231     "RCP R0.z, R0.z;\n"
    5232     "MUL R0.xy, R0, R0.z;\n"
    5233     "MUL R0.xy, R0, c[6];\n"
    5234     "MOV R0.y, -R0;\n"
    5235     "MUL R1.xy, fragment.position, c[7];\n"
    5236     "TEX R1, R1, texture[0], 2D;\n"
    5237     "TEX R0, R0, texture[2], 2D;\n"
    5238     "MUL R3.xyz, R1, R0.w;\n"
    5239     "MUL R2.xyz, R0, R1.w;\n"
     5177    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5178    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5179    "ADD R0.xyz, R0, c[3];\n"
     5180    "RCP R0.z, R0.z;\n"
     5181    "MUL R0.zw, R0.xyxy, R0.z;\n"
     5182    "MUL R1.xy, R0.zwzw, c[0];\n"
     5183    "MUL R0.xy, fragment.position, c[5];\n"
     5184    "TEX R0, R0, texture[0], 2D;\n"
     5185    "TEX R1, R1, texture[2], 2D;\n"
     5186    "MUL R3.xyz, R1.w, R0;\n"
     5187    "MUL R2.xyz, R1, R0.w;\n"
    52405188    "MAX R2.xyz, R2, R3;\n"
    5241     "ADD R2.w, -R1, c[8].x;\n"
    5242     "MAD R0.xyz, R0, R2.w, R2;\n"
    5243     "ADD R2.x, -R0.w, c[8];\n"
    5244     "MAD R2.xyz, R1, R2.x, R0;\n"
    5245     "ADD R0.z, R0.w, R1.w;\n"
    5246     "MAD R2.w, -R0, R1, R0.z;\n"
    5247     "ADD R0.xy, fragment.position, c[0];\n"
    5248     "MUL R0.xy, R0, c[1];\n"
    5249     "TEX R0, R0, texture[1], 2D;\n"
    5250     "ADD R2, R2, -R1;\n"
    5251     "DP4 R0.x, R0, c[2];\n"
    5252     "MAD result.color, R0.x, R2, R1;\n"
     5189    "ADD R2.w, -R0, c[8].x;\n"
     5190    "MAD R1.xyz, R1, R2.w, R2;\n"
     5191    "ADD R2.x, -R1.w, c[8];\n"
     5192    "MAD R2.xyz, R0, R2.x, R1;\n"
     5193    "ADD R1.z, R1.w, R0.w;\n"
     5194    "MAD R2.w, -R1, R0, R1.z;\n"
     5195    "ADD R1.xy, fragment.position, c[6];\n"
     5196    "MUL R1.xy, R1, c[4];\n"
     5197    "TEX R1, R1, texture[1], 2D;\n"
     5198    "ADD R2, R2, -R0;\n"
     5199    "DP4 R1.x, R1, c[7];\n"
     5200    "MAD result.color, R1.x, R2, R0;\n"
    52535201    "END\n"
    52545202    ;
     
    52575205    "!!ARBfp1.0\n"
    52585206    "PARAM c[9] = { program.local[0..7],\n"
    5259     "           { 1, 1e-06 } };\n"
     5207    "           { 1, 1e-006 } };\n"
    52605208    "TEMP R0;\n"
    52615209    "TEMP R1;\n"
     
    52635211    "TEMP R3;\n"
    52645212    "TEMP R4;\n"
    5265     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5266     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5267     "ADD R0.xyz, R0, c[5];\n"
    5268     "RCP R0.z, R0.z;\n"
    5269     "MUL R0.xy, R0, R0.z;\n"
    5270     "MUL R0.xy, R0, c[6];\n"
    5271     "MOV R0.y, -R0;\n"
     5213    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5214    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5215    "ADD R0.xyz, R0, c[3];\n"
     5216    "RCP R0.z, R0.z;\n"
     5217    "MUL R0.xy, R0, R0.z;\n"
     5218    "MUL R0.xy, R0, c[0];\n"
    52725219    "TEX R0, R0, texture[2], 2D;\n"
    52735220    "MAX R1.x, R0.w, c[8].y;\n"
    52745221    "RCP R1.x, R1.x;\n"
    5275     "MAD R1.xyz, -R0, R1.x, c[8].x;\n"
    5276     "MAX R2.xyz, R1, c[8].y;\n"
    5277     "MUL R1.xy, fragment.position, c[7];\n"
     5222    "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
     5223    "MAX R2.xyz, R2, c[8].y;\n"
     5224    "MUL R1.xy, fragment.position, c[5];\n"
    52785225    "TEX R1, R1, texture[0], 2D;\n"
    52795226    "ADD R2.w, -R0, c[8].x;\n"
     
    52815228    "ADD R2.w, -R1, c[8].x;\n"
    52825229    "MAD R4.xyz, R0, R2.w, R3;\n"
    5283     "MUL R3.xyz, R1, R0.w;\n"
     5230    "MUL R3.xyz, R0.w, R1;\n"
    52845231    "MUL R2.w, R0, R1;\n"
    52855232    "MAD R0.xyz, R0, R1.w, R3;\n"
     
    52945241    "ADD R0.z, R0.w, R1.w;\n"
    52955242    "MAD R2.w, -R0, R1, R0.z;\n"
    5296     "ADD R0.xy, fragment.position, c[0];\n"
    5297     "MUL R0.xy, R0, c[1];\n"
     5243    "ADD R0.xy, fragment.position, c[6];\n"
     5244    "MUL R0.xy, R0, c[4];\n"
    52985245    "TEX R0, R0, texture[1], 2D;\n"
    52995246    "ADD R2, R2, -R1;\n"
    5300     "DP4 R0.x, R0, c[2];\n"
     5247    "DP4 R0.x, R0, c[7];\n"
    53015248    "MAD result.color, R0.x, R2, R1;\n"
    53025249    "END\n"
     
    53065253    "!!ARBfp1.0\n"
    53075254    "PARAM c[9] = { program.local[0..7],\n"
    5308     "           { 1, 9.9999997e-06 } };\n"
     5255    "           { 1, 9.9999997e-006 } };\n"
    53095256    "TEMP R0;\n"
    53105257    "TEMP R1;\n"
     
    53135260    "TEMP R4;\n"
    53145261    "TEMP R5;\n"
    5315     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5316     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5317     "ADD R0.xyz, R0, c[5];\n"
    5318     "RCP R0.z, R0.z;\n"
    5319     "MUL R0.xy, R0, R0.z;\n"
    5320     "MUL R0.xy, R0, c[6];\n"
    5321     "MOV R0.y, -R0;\n"
     5262    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5263    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5264    "ADD R0.xyz, R0, c[3];\n"
     5265    "RCP R0.z, R0.z;\n"
     5266    "MUL R0.xy, R0, R0.z;\n"
     5267    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     5268    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     5269    "MUL R0.xy, R0, c[0];\n"
    53225270    "TEX R0, R0, texture[2], 2D;\n"
    5323     "MUL R1.xy, fragment.position, c[7];\n"
    5324     "TEX R1, R1, texture[0], 2D;\n"
    5325     "MUL R2.xyz, R1, R0.w;\n"
     5271    "MUL R2.xyz, R0.w, R1;\n"
    53265272    "MAD R3.xyz, R0, R1.w, R2;\n"
    53275273    "MAD R2.xyz, -R0.w, R1.w, R3;\n"
     
    53385284    "MAD R0.xyz, R0, R2.w, R4;\n"
    53395285    "MUL R2.w, R0, R1;\n"
    5340     "ADD R3.w, -R0, c[8].x;\n"
    53415286    "MAD R2.xyz, R1, R3.w, R2;\n"
    53425287    "ADD R2.xyz, R2, -R0;\n"
     
    53455290    "ADD R0.z, R0.w, R1.w;\n"
    53465291    "MAD R2.w, -R0, R1, R0.z;\n"
    5347     "ADD R0.xy, fragment.position, c[0];\n"
    5348     "MUL R0.xy, R0, c[1];\n"
     5292    "ADD R0.xy, fragment.position, c[6];\n"
     5293    "MUL R0.xy, R0, c[4];\n"
    53495294    "TEX R0, R0, texture[1], 2D;\n"
    53505295    "ADD R2, R2, -R1;\n"
    5351     "DP4 R0.x, R0, c[2];\n"
     5296    "DP4 R0.x, R0, c[7];\n"
    53525297    "MAD result.color, R0.x, R2, R1;\n"
    53535298    "END\n"
     
    53635308    "TEMP R3;\n"
    53645309    "TEMP R4;\n"
    5365     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5366     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5367     "ADD R0.xyz, R0, c[5];\n"
    5368     "RCP R0.z, R0.z;\n"
    5369     "MUL R0.xy, R0, R0.z;\n"
    5370     "MUL R0.xy, R0, c[6];\n"
    5371     "MOV R0.y, -R0;\n"
     5310    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5311    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5312    "ADD R0.xyz, R0, c[3];\n"
     5313    "RCP R0.z, R0.z;\n"
     5314    "MUL R0.xy, R0, R0.z;\n"
     5315    "MUL R0.xy, R0, c[0];\n"
    53725316    "TEX R0, R0, texture[2], 2D;\n"
    5373     "MUL R1.xy, fragment.position, c[7];\n"
     5317    "MUL R1.xy, fragment.position, c[5];\n"
    53745318    "TEX R1, R1, texture[0], 2D;\n"
    53755319    "ADD R2.w, -R1, c[8].y;\n"
     
    53925336    "ADD R0.z, R0.w, R1.w;\n"
    53935337    "MAD R2.w, -R0, R1, R0.z;\n"
    5394     "ADD R0.xy, fragment.position, c[0];\n"
    5395     "MUL R0.xy, R0, c[1];\n"
     5338    "ADD R0.xy, fragment.position, c[6];\n"
     5339    "MUL R0.xy, R0, c[4];\n"
    53965340    "TEX R0, R0, texture[1], 2D;\n"
    53975341    "ADD R2, R2, -R1;\n"
    5398     "DP4 R0.x, R0, c[2];\n"
     5342    "DP4 R0.x, R0, c[7];\n"
    53995343    "MAD result.color, R0.x, R2, R1;\n"
    54005344    "END\n"
     
    54045348    "!!ARBfp1.0\n"
    54055349    "PARAM c[10] = { program.local[0..7],\n"
    5406     "           { 1, 9.9999997e-06, 2, 8 },\n"
    5407     "           { 3 } };\n"
     5350    "           { 1, 2, 9.9999997e-006, 4 },\n"
     5351    "           { 16, 12, 3 } };\n"
    54085352    "TEMP R0;\n"
    54095353    "TEMP R1;\n"
     
    54135357    "TEMP R5;\n"
    54145358    "TEMP R6;\n"
    5415     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5416     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5417     "ADD R0.xyz, R0, c[5];\n"
    5418     "RCP R0.z, R0.z;\n"
    5419     "MUL R0.xy, R0, R0.z;\n"
    5420     "MUL R0.xy, R0, c[6];\n"
    5421     "MUL R1.xy, fragment.position, c[7];\n"
     5359    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5360    "MUL R1.xy, fragment.position, c[5];\n"
    54225361    "TEX R1, R1, texture[0], 2D;\n"
    5423     "MAX R0.z, R1.w, c[8].y;\n"
    5424     "RCP R2.w, R0.z;\n"
    5425     "MUL R2.xyz, R1, R2.w;\n"
    5426     "MUL R6.xyz, -R2, c[8].w;\n"
    5427     "MAD R3.xyz, -R1, R2.w, c[8].x;\n"
    5428     "MOV R0.y, -R0;\n"
     5362    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5363    "ADD R0.xyz, R0, c[3];\n"
     5364    "RCP R0.z, R0.z;\n"
     5365    "MUL R0.xy, R0, R0.z;\n"
     5366    "MAX R0.w, R1, c[8].z;\n"
     5367    "RCP R0.w, R0.w;\n"
     5368    "MUL R3.xyz, R1, R0.w;\n"
     5369    "MAD R2.xyz, R3, c[9].x, -c[9].y;\n"
     5370    "MUL R0.xy, R0, c[0];\n"
    54295371    "TEX R0, R0, texture[2], 2D;\n"
    5430     "MAD R4.xyz, R0, c[8].z, -R0.w;\n"
    5431     "MUL R5.xyz, R3, R4;\n"
    5432     "MAD R3.xyz, -R3, R4, R0.w;\n"
    5433     "ADD R6.xyz, R6, c[9].x;\n"
    5434     "RSQ R2.x, R2.x;\n"
    5435     "RSQ R2.z, R2.z;\n"
    5436     "RSQ R2.y, R2.y;\n"
    5437     "MAD R5.xyz, -R5, R6, R0.w;\n"
    5438     "MUL R3.xyz, R1, R3;\n"
     5372    "MAD R4.xyz, R3, R2, c[9].z;\n"
     5373    "MAD R2.xyz, R0, c[8].y, -R0.w;\n"
     5374    "MUL R5.xyz, R1.w, R2;\n"
     5375    "MUL R6.xyz, R5, R4;\n"
     5376    "RSQ R2.w, R3.x;\n"
     5377    "RCP R4.x, R2.w;\n"
     5378    "RSQ R2.w, R3.y;\n"
     5379    "RSQ R3.w, R3.z;\n"
     5380    "RCP R4.y, R2.w;\n"
     5381    "RCP R4.z, R3.w;\n"
     5382    "ADD R4.xyz, -R3, R4;\n"
     5383    "MUL R6.xyz, R3, R6;\n"
     5384    "MUL R4.xyz, R5, R4;\n"
     5385    "ADD R3.xyz, -R3, c[8].x;\n"
     5386    "MAD R2.xyz, R2, R3, R0.w;\n"
     5387    "MUL R3.xyz, R0, c[8].y;\n"
     5388    "MAD R5.xyz, R0.w, R1, R6;\n"
     5389    "MAD R4.xyz, R0.w, R1, R4;\n"
     5390    "ADD R6.xyz, R4, -R5;\n"
     5391    "MUL R4.xyz, R1, c[8].w;\n"
     5392    "SGE R4.xyz, R4, R1.w;\n"
     5393    "MAD R4.xyz, R4, R6, R5;\n"
     5394    "MAD R4.xyz, -R1, R2, R4;\n"
     5395    "SGE R3.xyz, R3, R0.w;\n"
     5396    "MUL R2.xyz, R1, R2;\n"
    54395397    "ADD R2.w, -R1, c[8].x;\n"
    5440     "RCP R2.x, R2.x;\n"
    5441     "RCP R2.z, R2.z;\n"
    5442     "RCP R2.y, R2.y;\n"
    5443     "MAD R2.xyz, R2, R1.w, -R1;\n"
    5444     "MUL R6.xyz, R2, R4;\n"
    5445     "MUL R2.xyz, R1, R5;\n"
    5446     "MAD R6.xyz, R1, R0.w, R6;\n"
    5447     "MUL R4.xyz, R0, c[8].z;\n"
    5448     "MUL R5.xyz, R1, c[8].w;\n"
    5449     "ADD R6.xyz, R6, -R2;\n"
    5450     "SGE R5.xyz, R5, R1.w;\n"
    5451     "MUL R5.xyz, R5, R6;\n"
    5452     "ADD R2.xyz, R2, R5;\n"
    5453     "SGE R4.xyz, R4, R0.w;\n"
    5454     "ADD R2.xyz, R2, -R3;\n"
    5455     "MUL R2.xyz, R4, R2;\n"
    5456     "ADD R2.xyz, R3, R2;\n"
    5457     "MAD R0.xyz, R0, R2.w, R2;\n"
    5458     "ADD R2.x, -R0.w, c[8];\n"
    5459     "MAD R2.xyz, R1, R2.x, R0;\n"
     5398    "MAD R2.xyz, R3, R4, R2;\n"
     5399    "MAD R2.xyz, R0, R2.w, R2;\n"
     5400    "ADD R0.x, -R0.w, c[8];\n"
     5401    "MAD R2.xyz, R1, R0.x, R2;\n"
    54605402    "ADD R0.z, R0.w, R1.w;\n"
    54615403    "MAD R2.w, -R0, R1, R0.z;\n"
    5462     "ADD R0.xy, fragment.position, c[0];\n"
    5463     "MUL R0.xy, R0, c[1];\n"
     5404    "ADD R0.xy, fragment.position, c[6];\n"
     5405    "MUL R0.xy, R0, c[4];\n"
    54645406    "TEX R0, R0, texture[1], 2D;\n"
    54655407    "ADD R2, R2, -R1;\n"
    5466     "DP4 R0.x, R0, c[2];\n"
     5408    "DP4 R0.x, R0, c[7];\n"
    54675409    "MAD result.color, R0.x, R2, R1;\n"
    54685410    "END\n"
     
    54775419    "TEMP R2;\n"
    54785420    "TEMP R3;\n"
    5479     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5480     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5481     "ADD R0.xyz, R0, c[5];\n"
    5482     "RCP R0.z, R0.z;\n"
    5483     "MUL R0.xy, R0, R0.z;\n"
    5484     "MUL R0.xy, R0, c[6];\n"
    5485     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    5486     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    5487     "MOV R0.y, -R0;\n"
    5488     "TEX R0, R0, texture[2], 2D;\n"
    5489     "ADD R3.xyz, R0, R1;\n"
    5490     "MUL R2.xyz, R1, R0.w;\n"
    5491     "MUL R0.xyz, R0, R1.w;\n"
    5492     "MIN R0.xyz, R0, R2;\n"
    5493     "MAD R2.xyz, -R0, c[8].x, R3;\n"
    5494     "ADD R0.z, R0.w, R1.w;\n"
    5495     "MAD R2.w, -R0, R1, R0.z;\n"
    5496     "ADD R0.xy, fragment.position, c[0];\n"
    5497     "MUL R0.xy, R0, c[1];\n"
     5421    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5422    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5423    "ADD R0.xyz, R0, c[3];\n"
     5424    "RCP R0.z, R0.z;\n"
     5425    "MUL R0.zw, R0.xyxy, R0.z;\n"
     5426    "MUL R1.xy, R0.zwzw, c[0];\n"
     5427    "MUL R0.xy, fragment.position, c[5];\n"
     5428    "TEX R0, R0, texture[0], 2D;\n"
     5429    "TEX R1, R1, texture[2], 2D;\n"
     5430    "ADD R2.xyz, R1, R0;\n"
     5431    "MUL R3.xyz, R1.w, R0;\n"
     5432    "MUL R1.xyz, R1, R0.w;\n"
     5433    "MIN R1.xyz, R1, R3;\n"
     5434    "MAD R2.xyz, -R1, c[8].x, R2;\n"
     5435    "ADD R1.z, R1.w, R0.w;\n"
     5436    "MAD R2.w, -R1, R0, R1.z;\n"
     5437    "ADD R1.xy, fragment.position, c[6];\n"
     5438    "MUL R1.xy, R1, c[4];\n"
     5439    "TEX R1, R1, texture[1], 2D;\n"
     5440    "ADD R2, R2, -R0;\n"
     5441    "DP4 R1.x, R1, c[7];\n"
     5442    "MAD result.color, R1.x, R2, R0;\n"
     5443    "END\n"
     5444    ;
     5445
     5446static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION =
     5447    "!!ARBfp1.0\n"
     5448    "PARAM c[9] = { program.local[0..7],\n"
     5449    "           { 2, 1 } };\n"
     5450    "TEMP R0;\n"
     5451    "TEMP R1;\n"
     5452    "TEMP R2;\n"
     5453    "TEMP R3;\n"
     5454    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5455    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5456    "ADD R0.xyz, R0, c[3];\n"
     5457    "RCP R0.z, R0.z;\n"
     5458    "MUL R0.zw, R0.xyxy, R0.z;\n"
     5459    "MUL R1.xy, R0.zwzw, c[0];\n"
     5460    "MUL R0.xy, fragment.position, c[5];\n"
     5461    "TEX R0, R0, texture[0], 2D;\n"
     5462    "TEX R1, R1, texture[2], 2D;\n"
     5463    "MUL R2.xyz, R1.w, R0;\n"
     5464    "MAD R3.xyz, R1, R0.w, R2;\n"
     5465    "MUL R2.xyz, R1, R0;\n"
     5466    "MAD R2.xyz, -R2, c[8].x, R3;\n"
     5467    "ADD R2.w, -R0, c[8].y;\n"
     5468    "MAD R1.xyz, R1, R2.w, R2;\n"
     5469    "ADD R2.x, -R1.w, c[8].y;\n"
     5470    "MAD R2.xyz, R0, R2.x, R1;\n"
     5471    "ADD R1.z, R1.w, R0.w;\n"
     5472    "MAD R2.w, -R1, R0, R1.z;\n"
     5473    "ADD R1.xy, fragment.position, c[6];\n"
     5474    "MUL R1.xy, R1, c[4];\n"
     5475    "TEX R1, R1, texture[1], 2D;\n"
     5476    "ADD R2, R2, -R0;\n"
     5477    "DP4 R1.x, R1, c[7];\n"
     5478    "MAD result.color, R1.x, R2, R0;\n"
     5479    "END\n"
     5480    ;
     5481
     5482static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
     5483    "!!ARBfp1.0\n"
     5484    "PARAM c[8] = { program.local[0..6],\n"
     5485    "           { 1 } };\n"
     5486    "TEMP R0;\n"
     5487    "TEMP R1;\n"
     5488    "TEMP R2;\n"
     5489    "TEMP R3;\n"
     5490    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5491    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5492    "ADD R0.xyz, R0, c[3];\n"
     5493    "RCP R0.z, R0.z;\n"
     5494    "MUL R0.xy, R0, R0.z;\n"
     5495    "MUL R1.xy, fragment.position, c[6];\n"
     5496    "TEX R1, R1, texture[0], 2D;\n"
     5497    "MUL R2.xyz, R1, c[4].y;\n"
     5498    "MUL R0.xy, R0, c[0];\n"
    54985499    "TEX R0, R0, texture[1], 2D;\n"
    5499     "ADD R2, R2, -R1;\n"
    5500     "DP4 R0.x, R0, c[2];\n"
    5501     "MAD result.color, R0.x, R2, R1;\n"
    5502     "END\n"
    5503     ;
    5504 
    5505 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION =
    5506     "!!ARBfp1.0\n"
    5507     "PARAM c[9] = { program.local[0..7],\n"
    5508     "           { 1, 2 } };\n"
    5509     "TEMP R0;\n"
    5510     "TEMP R1;\n"
    5511     "TEMP R2;\n"
    5512     "TEMP R3;\n"
    5513     "MUL R0.xyz, fragment.position.y, c[4];\n"
    5514     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    5515     "ADD R0.xyz, R0, c[5];\n"
    5516     "RCP R0.z, R0.z;\n"
    5517     "MUL R0.xy, R0, R0.z;\n"
    5518     "MUL R0.xy, R0, c[6];\n"
    5519     "MOV R0.y, -R0;\n"
    5520     "MUL R1.xy, fragment.position, c[7];\n"
    5521     "TEX R1, R1, texture[0], 2D;\n"
    5522     "TEX R0, R0, texture[2], 2D;\n"
    5523     "MUL R2.xyz, R1, R0.w;\n"
    5524     "MAD R3.xyz, R0, R1.w, R2;\n"
    5525     "MUL R2.xyz, R0, R1;\n"
    5526     "MAD R2.xyz, -R2, c[8].y, R3;\n"
    5527     "ADD R2.w, -R1, c[8].x;\n"
    5528     "MAD R0.xyz, R0, R2.w, R2;\n"
    5529     "ADD R2.x, -R0.w, c[8];\n"
    5530     "MAD R2.xyz, R1, R2.x, R0;\n"
    5531     "ADD R0.z, R0.w, R1.w;\n"
    5532     "MAD R2.w, -R0, R1, R0.z;\n"
    5533     "ADD R0.xy, fragment.position, c[0];\n"
    5534     "MUL R0.xy, R0, c[1];\n"
    5535     "TEX R0, R0, texture[1], 2D;\n"
    5536     "ADD R2, R2, -R1;\n"
    5537     "DP4 R0.x, R0, c[2];\n"
    5538     "MAD result.color, R0.x, R2, R1;\n"
    5539     "END\n"
    5540     ;
    5541 
    5542 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
    5543     "!!ARBfp1.0\n"
    5544     "PARAM c[8] = { program.local[0..4],\n"
    5545     "           { 1 },\n"
    5546     "           program.local[6..7] };\n"
    5547     "TEMP R0;\n"
    5548     "TEMP R1;\n"
    5549     "TEMP R2;\n"
    5550     "TEMP R3;\n"
    5551     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5552     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5553     "ADD R0.xyz, R0, c[2];\n"
    5554     "RCP R0.z, R0.z;\n"
    5555     "MUL R0.xy, R0, R0.z;\n"
    5556     "MUL R0.xy, R0, c[3];\n"
    5557     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    5558     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    5559     "MUL R2.xyz, R1, c[7].y;\n"
    5560     "MOV R0.y, -R0;\n"
    5561     "TEX R0, R0, texture[1], 2D;\n"
    5562     "MUL R3.xyz, R2, R0.w;\n"
    5563     "MUL R2.xyz, R0, c[7].x;\n"
    5564     "MAD R2.xyz, R2, R1.w, R3;\n"
    5565     "MUL R0.xyz, R0, c[6].y;\n"
    5566     "ADD R2.w, -R1, c[5].x;\n"
    5567     "MAD R0.xyz, R0, R2.w, R2;\n"
    5568     "ADD R2.x, -R0.w, c[5];\n"
    5569     "MUL R1.xyz, R1, c[6].z;\n"
    5570     "MAD result.color.xyz, R1, R2.x, R0;\n"
    5571     "ADD R0.y, -R1.w, c[5].x;\n"
     5500    "MUL R3.xyz, R0.w, R2;\n"
     5501    "MUL R2.xyz, R0, c[4].x;\n"
     5502    "MAD R2.xyz, R1.w, R2, R3;\n"
     5503    "ADD R2.w, -R1, c[7].x;\n"
     5504    "MUL R0.xyz, R0, c[5].y;\n"
     5505    "MAD R0.xyz, R2.w, R0, R2;\n"
     5506    "ADD R2.x, -R0.w, c[7];\n"
     5507    "MUL R1.xyz, R1, c[5].z;\n"
     5508    "MAD result.color.xyz, R2.x, R1, R0;\n"
    55725509    "MUL R0.x, R0.w, R1.w;\n"
    55735510    "MUL R0.z, R1.w, R2.x;\n"
    5574     "MUL R0.y, R0.w, R0;\n"
    5575     "DP3 result.color.w, R0, c[6];\n"
     5511    "MUL R0.y, R0.w, R2.w;\n"
     5512    "DP3 result.color.w, R0, c[5];\n"
    55765513    "END\n"
    55775514    ;
     
    55845521    "TEMP R1;\n"
    55855522    "TEMP R2;\n"
    5586     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5587     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5588     "ADD R0.xyz, R0, c[2];\n"
    5589     "RCP R1.x, R0.z;\n"
    5590     "MUL R0.xy, R0, R1.x;\n"
    5591     "MUL R0.xy, R0, c[3];\n"
    5592     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    5593     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    5594     "MOV R0.y, -R0;\n"
     5523    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5524    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5525    "ADD R0.xyz, R0, c[3];\n"
     5526    "RCP R0.z, R0.z;\n"
     5527    "MUL R0.xy, R0, R0.z;\n"
     5528    "MUL R1.xy, fragment.position, c[4];\n"
     5529    "TEX R1, R1, texture[0], 2D;\n"
     5530    "MUL R0.xy, R0, c[0];\n"
    55955531    "TEX R0, R0, texture[1], 2D;\n"
    55965532    "ADD R2.x, -R1.w, c[5];\n"
     
    56105546    "TEMP R1;\n"
    56115547    "TEMP R2;\n"
    5612     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5613     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5614     "ADD R0.xyz, R0, c[2];\n"
    5615     "RCP R0.z, R0.z;\n"
    5616     "MUL R0.xy, R0, R0.z;\n"
    5617     "MUL R0.xy, R0, c[3];\n"
     5548    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5549    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5550    "ADD R0.xyz, R0, c[3];\n"
     5551    "RCP R0.z, R0.z;\n"
     5552    "MUL R0.xy, R0, R0.z;\n"
    56185553    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
    56195554    "TEX R1, R0.zwzw, texture[0], 2D;\n"
    5620     "MOV R0.y, -R0;\n"
     5555    "MUL R0.xy, R0, c[0];\n"
    56215556    "TEX R0, R0, texture[1], 2D;\n"
    56225557    "ADD R2, R0, R1;\n"
     
    56335568    "TEMP R2;\n"
    56345569    "TEMP R3;\n"
    5635     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5636     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5637     "ADD R0.xyz, R0, c[2];\n"
    5638     "RCP R0.z, R0.z;\n"
    5639     "MUL R0.xy, R0, R0.z;\n"
    5640     "MUL R0.xy, R0, c[3];\n"
    5641     "MOV R0.y, -R0;\n"
     5570    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5571    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5572    "ADD R0.xyz, R0, c[3];\n"
     5573    "RCP R0.z, R0.z;\n"
     5574    "MUL R0.xy, R0, R0.z;\n"
     5575    "MUL R0.xy, R0, c[0];\n"
    56425576    "TEX R0, R0, texture[1], 2D;\n"
    56435577    "MUL R1.xy, fragment.position, c[4];\n"
     
    56735607    "TEMP R2;\n"
    56745608    "TEMP R3;\n"
    5675     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5676     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5677     "ADD R0.xyz, R0, c[2];\n"
    5678     "RCP R0.z, R0.z;\n"
    5679     "MUL R0.xy, R0, R0.z;\n"
    5680     "MUL R0.xy, R0, c[3];\n"
    5681     "MOV R0.y, -R0;\n"
    5682     "MUL R1.xy, fragment.position, c[4];\n"
    5683     "TEX R1, R1, texture[0], 2D;\n"
     5609    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5610    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5611    "ADD R0.xyz, R0, c[3];\n"
     5612    "RCP R0.z, R0.z;\n"
     5613    "MUL R0.xy, R0, R0.z;\n"
     5614    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     5615    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     5616    "MUL R0.xy, R0, c[0];\n"
    56845617    "TEX R0, R0, texture[1], 2D;\n"
    56855618    "MUL R2.xyz, R0, R1.w;\n"
    5686     "MUL R3.xyz, R1, R0.w;\n"
     5619    "MUL R3.xyz, R0.w, R1;\n"
    56875620    "MIN R2.xyz, R2, R3;\n"
    56885621    "ADD R2.w, -R1, c[5].x;\n"
     
    57035636    "TEMP R2;\n"
    57045637    "TEMP R3;\n"
    5705     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5706     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5707     "ADD R0.xyz, R0, c[2];\n"
    5708     "RCP R0.z, R0.z;\n"
    5709     "MUL R0.xy, R0, R0.z;\n"
    5710     "MUL R0.xy, R0, c[3];\n"
    5711     "MOV R0.y, -R0;\n"
    5712     "MUL R1.xy, fragment.position, c[4];\n"
    5713     "TEX R1, R1, texture[0], 2D;\n"
     5638    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5639    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5640    "ADD R0.xyz, R0, c[3];\n"
     5641    "RCP R0.z, R0.z;\n"
     5642    "MUL R0.xy, R0, R0.z;\n"
     5643    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     5644    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     5645    "MUL R0.xy, R0, c[0];\n"
    57145646    "TEX R0, R0, texture[1], 2D;\n"
    57155647    "MUL R2.xyz, R0, R1.w;\n"
    5716     "MUL R3.xyz, R1, R0.w;\n"
     5648    "MUL R3.xyz, R0.w, R1;\n"
    57175649    "MAX R2.xyz, R2, R3;\n"
    57185650    "ADD R2.w, -R1, c[5].x;\n"
     
    57285660    "!!ARBfp1.0\n"
    57295661    "PARAM c[6] = { program.local[0..4],\n"
    5730     "           { 1, 1e-06 } };\n"
    5731     "TEMP R0;\n"
    5732     "TEMP R1;\n"
    5733     "TEMP R2;\n"
    5734     "TEMP R3;\n"
    5735     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5736     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5737     "ADD R0.xyz, R0, c[2];\n"
    5738     "RCP R0.z, R0.z;\n"
    5739     "MUL R0.xy, R0, R0.z;\n"
    5740     "MUL R0.xy, R0, c[3];\n"
    5741     "MOV R0.y, -R0;\n"
     5662    "           { 1, 1e-006 } };\n"
     5663    "TEMP R0;\n"
     5664    "TEMP R1;\n"
     5665    "TEMP R2;\n"
     5666    "TEMP R3;\n"
     5667    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5668    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5669    "ADD R0.xyz, R0, c[3];\n"
     5670    "RCP R0.z, R0.z;\n"
     5671    "MUL R0.xy, R0, R0.z;\n"
     5672    "MUL R0.xy, R0, c[0];\n"
    57425673    "TEX R0, R0, texture[1], 2D;\n"
    57435674    "MAX R1.x, R0.w, c[5].y;\n"
    57445675    "RCP R1.x, R1.x;\n"
    5745     "MAD R1.xyz, -R0, R1.x, c[5].x;\n"
    5746     "MAX R2.xyz, R1, c[5].y;\n"
     5676    "MAD R3.xyz, -R0, R1.x, c[5].x;\n"
     5677    "MAX R3.xyz, R3, c[5].y;\n"
    57475678    "MUL R1.xy, fragment.position, c[4];\n"
    57485679    "TEX R1, R1, texture[0], 2D;\n"
    5749     "ADD R2.w, -R0, c[5].x;\n"
    5750     "MUL R3.xyz, R1, R2.w;\n"
     5680    "ADD R2.x, -R0.w, c[5];\n"
     5681    "MUL R2.xyz, R1, R2.x;\n"
    57515682    "ADD R2.w, -R1, c[5].x;\n"
    5752     "MAD R3.xyz, R0, R2.w, R3;\n"
    5753     "MUL R1.xyz, R1, R0.w;\n"
     5683    "MAD R2.xyz, R0, R2.w, R2;\n"
     5684    "MUL R1.xyz, R0.w, R1;\n"
    57545685    "MAD R0.xyz, R0, R1.w, R1;\n"
    57555686    "MUL R2.w, R0, R1;\n"
    5756     "RCP R2.x, R2.x;\n"
    5757     "RCP R2.y, R2.y;\n"
    5758     "RCP R2.z, R2.z;\n"
    5759     "MAD R2.xyz, R1, R2, R3;\n"
    5760     "MAD R3.xyz, R0.w, R1.w, R3;\n"
     5687    "RCP R3.x, R3.x;\n"
     5688    "RCP R3.y, R3.y;\n"
     5689    "RCP R3.z, R3.z;\n"
     5690    "MAD R3.xyz, R1, R3, R2;\n"
     5691    "MAD R2.xyz, R0.w, R1.w, R2;\n"
    57615692    "ADD R1.x, R0.w, R1.w;\n"
    5762     "ADD R3.xyz, R3, -R2;\n"
     5693    "ADD R2.xyz, R2, -R3;\n"
    57635694    "SGE R0.xyz, R0, R2.w;\n"
    5764     "MAD result.color.xyz, R0, R3, R2;\n"
     5695    "MAD result.color.xyz, R0, R2, R3;\n"
    57655696    "MAD result.color.w, -R0, R1, R1.x;\n"
    57665697    "END\n"
     
    57705701    "!!ARBfp1.0\n"
    57715702    "PARAM c[6] = { program.local[0..4],\n"
    5772     "           { 1, 9.9999997e-06 } };\n"
     5703    "           { 1, 9.9999997e-006 } };\n"
    57735704    "TEMP R0;\n"
    57745705    "TEMP R1;\n"
     
    57775708    "TEMP R4;\n"
    57785709    "TEMP R5;\n"
    5779     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5780     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5781     "ADD R0.xyz, R0, c[2];\n"
    5782     "RCP R0.z, R0.z;\n"
    5783     "MUL R0.xy, R0, R0.z;\n"
    5784     "MUL R0.xy, R0, c[3];\n"
    5785     "MOV R0.y, -R0;\n"
     5710    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5711    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5712    "ADD R0.xyz, R0, c[3];\n"
     5713    "RCP R0.z, R0.z;\n"
     5714    "MUL R0.xy, R0, R0.z;\n"
     5715    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     5716    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     5717    "MUL R0.xy, R0, c[0];\n"
    57865718    "TEX R0, R0, texture[1], 2D;\n"
    5787     "MUL R1.xy, fragment.position, c[4];\n"
    5788     "TEX R1, R1, texture[0], 2D;\n"
    5789     "MUL R2.xyz, R1, R0.w;\n"
     5719    "MUL R2.xyz, R0.w, R1;\n"
    57905720    "MAD R3.xyz, R0, R1.w, R2;\n"
    57915721    "ADD R2.w, -R1, c[5].x;\n"
     
    58005730    "MAD R2.xyz, R4, R2, R5;\n"
    58015731    "MUL R4.xyz, R1, R3.w;\n"
     5732    "MAD R1.xyz, R1, R3.w, R2;\n"
    58025733    "MAD R0.xyz, R0, R2.w, R4;\n"
    5803     "ADD R3.w, -R0, c[5].x;\n"
    5804     "MAD R1.xyz, R1, R3.w, R2;\n"
    58055734    "MUL R2.x, R0.w, R1.w;\n"
    58065735    "ADD R2.w, R0, R1;\n"
     
    58215750    "TEMP R3;\n"
    58225751    "TEMP R4;\n"
    5823     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5824     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5825     "ADD R0.xyz, R0, c[2];\n"
    5826     "RCP R0.z, R0.z;\n"
    5827     "MUL R0.xy, R0, R0.z;\n"
    5828     "MUL R0.xy, R0, c[3];\n"
    5829     "MOV R0.y, -R0;\n"
     5752    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5753    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5754    "ADD R0.xyz, R0, c[3];\n"
     5755    "RCP R0.z, R0.z;\n"
     5756    "MUL R0.xy, R0, R0.z;\n"
     5757    "MUL R0.xy, R0, c[0];\n"
    58305758    "TEX R0, R0, texture[1], 2D;\n"
    58315759    "MUL R1.xy, fragment.position, c[4];\n"
     
    58375765    "MUL R2.xyz, R2, c[5].x;\n"
    58385766    "MAD R2.xyz, R0.w, R1.w, -R2;\n"
     5767    "MAD R2.xyz, R0, R2.w, R2;\n"
    58395768    "MUL R4.xyz, R0, R2.w;\n"
    58405769    "MUL R3.xyz, R0, R1;\n"
    5841     "MAD R2.xyz, R0, R2.w, R2;\n"
     5770    "MUL R0.xyz, R0, c[5].x;\n"
    58425771    "ADD R2.w, -R0, c[5].y;\n"
    5843     "MUL R0.xyz, R0, c[5].x;\n"
    5844     "MAD R2.xyz, R1, R2.w, R2;\n"
    58455772    "MAD R3.xyz, R3, c[5].x, R4;\n"
    5846     "MAD R1.xyz, R1, R2.w, R3;\n"
    5847     "ADD R2.w, R0, R1;\n"
    5848     "ADD R2.xyz, R2, -R1;\n"
     5773    "MAD R3.xyz, R1, R2.w, R3;\n"
     5774    "MAD R1.xyz, R1, R2.w, R2;\n"
     5775    "ADD R2.x, R0.w, R1.w;\n"
     5776    "ADD R1.xyz, R1, -R3;\n"
    58495777    "SGE R0.xyz, R0, R0.w;\n"
    5850     "MAD result.color.xyz, R0, R2, R1;\n"
    5851     "MAD result.color.w, -R0, R1, R2;\n"
     5778    "MAD result.color.xyz, R0, R1, R3;\n"
     5779    "MAD result.color.w, -R0, R1, R2.x;\n"
    58525780    "END\n"
    58535781    ;
     
    58565784    "!!ARBfp1.0\n"
    58575785    "PARAM c[7] = { program.local[0..4],\n"
    5858     "           { 1, 9.9999997e-06, 2, 8 },\n"
    5859     "           { 3 } };\n"
     5786    "           { 1, 2, 9.9999997e-006, 4 },\n"
     5787    "           { 16, 12, 3 } };\n"
    58605788    "TEMP R0;\n"
    58615789    "TEMP R1;\n"
     
    58655793    "TEMP R5;\n"
    58665794    "TEMP R6;\n"
    5867     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5868     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5869     "ADD R0.xyz, R0, c[2];\n"
    5870     "RCP R0.z, R0.z;\n"
    5871     "MUL R0.xy, R0, R0.z;\n"
    5872     "MUL R0.xy, R0, c[3];\n"
     5795    "MUL R0.xyz, fragment.position.y, c[2];\n"
    58735796    "MUL R1.xy, fragment.position, c[4];\n"
    58745797    "TEX R1, R1, texture[0], 2D;\n"
    5875     "MAX R0.z, R1.w, c[5].y;\n"
    5876     "RCP R2.w, R0.z;\n"
    5877     "MUL R2.xyz, R1, R2.w;\n"
    5878     "MUL R6.xyz, -R2, c[5].w;\n"
    5879     "MAD R3.xyz, -R1, R2.w, c[5].x;\n"
    5880     "MOV R0.y, -R0;\n"
     5798    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5799    "ADD R0.xyz, R0, c[3];\n"
     5800    "RCP R0.z, R0.z;\n"
     5801    "MUL R0.xy, R0, R0.z;\n"
     5802    "MAX R0.w, R1, c[5].z;\n"
     5803    "RCP R0.w, R0.w;\n"
     5804    "MUL R3.xyz, R1, R0.w;\n"
     5805    "MAD R2.xyz, R3, c[6].x, -c[6].y;\n"
     5806    "MUL R0.xy, R0, c[0];\n"
    58815807    "TEX R0, R0, texture[1], 2D;\n"
    5882     "MAD R4.xyz, R0, c[5].z, -R0.w;\n"
    5883     "MUL R5.xyz, R3, R4;\n"
    5884     "MAD R3.xyz, -R3, R4, R0.w;\n"
    5885     "ADD R6.xyz, R6, c[6].x;\n"
    5886     "RSQ R2.x, R2.x;\n"
    5887     "RSQ R2.z, R2.z;\n"
    5888     "RSQ R2.y, R2.y;\n"
    5889     "MAD R5.xyz, -R5, R6, R0.w;\n"
    5890     "MUL R3.xyz, R1, R3;\n"
    5891     "RCP R2.x, R2.x;\n"
    5892     "RCP R2.z, R2.z;\n"
    5893     "RCP R2.y, R2.y;\n"
    5894     "MAD R2.xyz, R2, R1.w, -R1;\n"
    5895     "MUL R6.xyz, R2, R4;\n"
    5896     "MUL R2.xyz, R1, R5;\n"
    5897     "MUL R4.xyz, R0, c[5].z;\n"
    5898     "MAD R6.xyz, R1, R0.w, R6;\n"
    5899     "MUL R5.xyz, R1, c[5].w;\n"
    5900     "ADD R6.xyz, R6, -R2;\n"
    5901     "SGE R5.xyz, R5, R1.w;\n"
    5902     "MUL R5.xyz, R5, R6;\n"
    5903     "ADD R2.xyz, R2, R5;\n"
    5904     "ADD R2.xyz, R2, -R3;\n"
    5905     "SGE R4.xyz, R4, R0.w;\n"
    5906     "MUL R2.xyz, R4, R2;\n"
    5907     "ADD R2.xyz, R3, R2;\n"
     5808    "MAD R4.xyz, R3, R2, c[6].z;\n"
     5809    "MAD R2.xyz, R0, c[5].y, -R0.w;\n"
     5810    "MUL R5.xyz, R1.w, R2;\n"
     5811    "MUL R6.xyz, R5, R4;\n"
     5812    "RSQ R2.w, R3.x;\n"
     5813    "RCP R4.x, R2.w;\n"
     5814    "RSQ R2.w, R3.y;\n"
     5815    "RSQ R3.w, R3.z;\n"
     5816    "RCP R4.y, R2.w;\n"
     5817    "RCP R4.z, R3.w;\n"
     5818    "ADD R4.xyz, -R3, R4;\n"
     5819    "MUL R6.xyz, R3, R6;\n"
     5820    "MUL R4.xyz, R5, R4;\n"
     5821    "ADD R3.xyz, -R3, c[5].x;\n"
     5822    "MAD R2.xyz, R2, R3, R0.w;\n"
     5823    "MUL R3.xyz, R0, c[5].y;\n"
     5824    "MAD R5.xyz, R0.w, R1, R6;\n"
     5825    "MAD R4.xyz, R0.w, R1, R4;\n"
     5826    "ADD R6.xyz, R4, -R5;\n"
     5827    "MUL R4.xyz, R1, c[5].w;\n"
     5828    "SGE R4.xyz, R4, R1.w;\n"
     5829    "MAD R4.xyz, R4, R6, R5;\n"
     5830    "MAD R4.xyz, -R1, R2, R4;\n"
     5831    "MUL R2.xyz, R1, R2;\n"
     5832    "SGE R3.xyz, R3, R0.w;\n"
     5833    "MAD R2.xyz, R3, R4, R2;\n"
    59085834    "ADD R2.w, -R1, c[5].x;\n"
    5909     "MAD R0.xyz, R0, R2.w, R2;\n"
    5910     "ADD R2.x, R0.w, R1.w;\n"
    5911     "ADD R2.y, -R0.w, c[5].x;\n"
    5912     "MAD result.color.xyz, R1, R2.y, R0;\n"
    5913     "MAD result.color.w, -R0, R1, R2.x;\n"
     5835    "MAD R2.xyz, R0, R2.w, R2;\n"
     5836    "ADD R0.x, R0.w, R1.w;\n"
     5837    "ADD R0.y, -R0.w, c[5].x;\n"
     5838    "MAD result.color.xyz, R1, R0.y, R2;\n"
     5839    "MAD result.color.w, -R0, R1, R0.x;\n"
    59145840    "END\n"
    59155841    ;
     
    59235849    "TEMP R2;\n"
    59245850    "TEMP R3;\n"
    5925     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5926     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5927     "ADD R0.xyz, R0, c[2];\n"
    5928     "RCP R0.z, R0.z;\n"
    5929     "MUL R0.xy, R0, R0.z;\n"
    5930     "MUL R0.xy, R0, c[3];\n"
    5931     "MOV R0.y, -R0;\n"
    5932     "MUL R1.xy, fragment.position, c[4];\n"
     5851    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5852    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5853    "ADD R0.xyz, R0, c[3];\n"
     5854    "RCP R0.z, R0.z;\n"
     5855    "MUL R0.xy, R0, R0.z;\n"
     5856    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     5857    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     5858    "MUL R0.xy, R0, c[0];\n"
    59335859    "TEX R0, R0, texture[1], 2D;\n"
    5934     "TEX R1, R1, texture[0], 2D;\n"
    59355860    "MUL R2.xyz, R0, R1.w;\n"
    5936     "MUL R3.xyz, R1, R0.w;\n"
     5861    "MUL R3.xyz, R0.w, R1;\n"
    59375862    "ADD R0.xyz, R0, R1;\n"
    59385863    "MIN R2.xyz, R2, R3;\n"
     
    59465871    "!!ARBfp1.0\n"
    59475872    "PARAM c[6] = { program.local[0..4],\n"
    5948     "           { 1, 2 } };\n"
    5949     "TEMP R0;\n"
    5950     "TEMP R1;\n"
    5951     "TEMP R2;\n"
    5952     "TEMP R3;\n"
    5953     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5954     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5955     "ADD R0.xyz, R0, c[2];\n"
    5956     "RCP R0.z, R0.z;\n"
    5957     "MUL R0.xy, R0, R0.z;\n"
    5958     "MUL R0.xy, R0, c[3];\n"
    5959     "MOV R0.y, -R0;\n"
    5960     "MUL R1.xy, fragment.position, c[4];\n"
    5961     "TEX R1, R1, texture[0], 2D;\n"
     5873    "           { 2, 1 } };\n"
     5874    "TEMP R0;\n"
     5875    "TEMP R1;\n"
     5876    "TEMP R2;\n"
     5877    "TEMP R3;\n"
     5878    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5879    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5880    "ADD R0.xyz, R0, c[3];\n"
     5881    "RCP R0.z, R0.z;\n"
     5882    "MUL R0.xy, R0, R0.z;\n"
     5883    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     5884    "TEX R1, R0.zwzw, texture[0], 2D;\n"
     5885    "MUL R0.xy, R0, c[0];\n"
    59625886    "TEX R0, R0, texture[1], 2D;\n"
    5963     "MUL R2.xyz, R1, R0.w;\n"
     5887    "MUL R2.xyz, R0.w, R1;\n"
    59645888    "MAD R3.xyz, R0, R1.w, R2;\n"
    59655889    "MUL R2.xyz, R0, R1;\n"
    5966     "MAD R2.xyz, -R2, c[5].y, R3;\n"
    5967     "ADD R2.w, -R1, c[5].x;\n"
     5890    "MAD R2.xyz, -R2, c[5].x, R3;\n"
     5891    "ADD R2.w, -R1, c[5].y;\n"
    59685892    "MAD R0.xyz, R0, R2.w, R2;\n"
    59695893    "ADD R2.x, R0.w, R1.w;\n"
    5970     "ADD R2.y, -R0.w, c[5].x;\n"
     5894    "ADD R2.y, -R0.w, c[5];\n"
    59715895    "MAD result.color.xyz, R1, R2.y, R0;\n"
    59725896    "MAD result.color.w, -R0, R1, R2.x;\n"
     
    59795903    "TEMP R0;\n"
    59805904    "TEMP R1;\n"
    5981     "MUL R0.xyz, fragment.position.y, c[1];\n"
    5982     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    5983     "ADD R1.xyz, R0, c[2];\n"
     5905    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5906    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5907    "ADD R1.xyz, R0, c[3];\n"
    59845908    "RCP R0.z, R1.z;\n"
    59855909    "MUL R1.xy, R1, R0.z;\n"
    5986     "ADD R0.xy, fragment.position, c[4];\n"
    5987     "MUL R0.xy, R0, c[5];\n"
     5910    "ADD R0.xy, fragment.position, c[5];\n"
     5911    "MUL R0.xy, R0, c[4];\n"
    59885912    "TEX R0, R0, texture[0], 2D;\n"
    59895913    "DP4 R1.z, R0, c[6];\n"
    5990     "MUL R1.xy, R1, c[3];\n"
    5991     "MOV R0.x, R1;\n"
    5992     "MOV R0.y, -R1;\n"
    5993     "TEX R0, R0, texture[1], 2D;\n"
     5914    "MUL R1.xy, R1, c[0];\n"
     5915    "TEX R0, R1, texture[1], 2D;\n"
    59945916    "MUL result.color, R0, R1.z;\n"
    59955917    "END\n"
     
    60005922    "PARAM c[4] = { program.local[0..3] };\n"
    60015923    "TEMP R0;\n"
    6002     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6003     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6004     "ADD R0.xyz, R0, c[2];\n"
    6005     "RCP R0.z, R0.z;\n"
    6006     "MUL R0.xy, R0, R0.z;\n"
    6007     "MUL R0.xy, R0, c[3];\n"
    6008     "MOV R0.y, -R0;\n"
     5924    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5925    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5926    "ADD R0.xyz, R0, c[3];\n"
     5927    "RCP R0.z, R0.z;\n"
     5928    "MUL R0.xy, R0, R0.z;\n"
     5929    "MUL R0.xy, R0, c[0];\n"
    60095930    "TEX result.color, R0, texture[0], 2D;\n"
    60105931    "END\n"
     
    60135934static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
    60145935    "!!ARBfp1.0\n"
    6015     "PARAM c[11] = { program.local[0..7],\n"
    6016     "           { 1 },\n"
    6017     "           program.local[9..10] };\n"
    6018     "TEMP R0;\n"
    6019     "TEMP R1;\n"
    6020     "TEMP R2;\n"
    6021     "TEMP R3;\n"
    6022     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6023     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6024     "ADD R0.xyz, R0, c[5];\n"
    6025     "RCP R0.z, R0.z;\n"
    6026     "MUL R0.xy, R0, R0.z;\n"
    6027     "MUL R0.xy, R0, c[6];\n"
    6028     "MOV R0.y, -R0;\n"
    6029     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    6030     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    6031     "TEX R0.x, R0, texture[2], 2D;\n"
    6032     "MUL R0, fragment.color.primary, R0.x;\n"
    6033     "MUL R2.xyz, R1, c[10].y;\n"
    6034     "MUL R3.xyz, R2, R0.w;\n"
    6035     "MUL R2.xyz, R0, c[10].x;\n"
    6036     "MAD R2.xyz, R2, R1.w, R3;\n"
    6037     "ADD R3.xy, fragment.position, c[0];\n"
    6038     "MUL R0.xyz, R0, c[9].y;\n"
    6039     "ADD R2.w, -R1, c[8].x;\n"
    6040     "MAD R2.xyz, R0, R2.w, R2;\n"
    6041     "ADD R2.w, -R0, c[8].x;\n"
    6042     "MUL R0.xyz, R1, c[9].z;\n"
    6043     "MAD R2.xyz, R0, R2.w, R2;\n"
    6044     "ADD R0.y, -R1.w, c[8].x;\n"
    6045     "MUL R0.z, R1.w, R2.w;\n"
    6046     "MUL R0.x, R0.w, R1.w;\n"
    6047     "MUL R0.y, R0.w, R0;\n"
    6048     "DP3 R2.w, R0, c[9];\n"
    6049     "MUL R3.xy, R3, c[1];\n"
    6050     "TEX R0, R3, texture[1], 2D;\n"
    6051     "ADD R2, R2, -R1;\n"
    6052     "DP4 R0.x, R0, c[2];\n"
    6053     "MAD result.color, R0.x, R2, R1;\n"
     5936    "PARAM c[11] = { program.local[0..9],\n"
     5937    "           { 1 } };\n"
     5938    "TEMP R0;\n"
     5939    "TEMP R1;\n"
     5940    "TEMP R2;\n"
     5941    "TEMP R3;\n"
     5942    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5943    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5944    "ADD R0.xyz, R0, c[3];\n"
     5945    "RCP R0.z, R0.z;\n"
     5946    "MUL R0.xy, R0, R0.z;\n"
     5947    "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
     5948    "TEX R1.x, R0.zwzw, texture[2], 2D;\n"
     5949    "MUL R0.xy, fragment.position, c[7];\n"
     5950    "TEX R0, R0, texture[0], 2D;\n"
     5951    "ADD R1.x, -R1, c[10];\n"
     5952    "MUL R1, fragment.color.primary, R1.x;\n"
     5953    "MUL R2.xyz, R0, c[4].y;\n"
     5954    "MUL R3.xyz, R1.w, R2;\n"
     5955    "MUL R2.xyz, R1, c[4].x;\n"
     5956    "MAD R2.xyz, R0.w, R2, R3;\n"
     5957    "ADD R3.xy, fragment.position, c[8];\n"
     5958    "ADD R2.w, -R0, c[10].x;\n"
     5959    "MUL R1.xyz, R1, c[5].y;\n"
     5960    "MAD R2.xyz, R2.w, R1, R2;\n"
     5961    "MUL R1.xyz, R0, c[5].z;\n"
     5962    "ADD R3.z, -R1.w, c[10].x;\n"
     5963    "MAD R2.xyz, R3.z, R1, R2;\n"
     5964    "MUL R1.y, R1.w, R2.w;\n"
     5965    "MUL R1.x, R1.w, R0.w;\n"
     5966    "MUL R1.z, R0.w, R3;\n"
     5967    "DP3 R2.w, R1, c[5];\n"
     5968    "MUL R3.xy, R3, c[6];\n"
     5969    "TEX R1, R3, texture[1], 2D;\n"
     5970    "ADD R2, R2, -R0;\n"
     5971    "DP4 R1.x, R1, c[9];\n"
     5972    "MAD result.color, R1.x, R2, R0;\n"
    60545973    "END\n"
    60555974    ;
     
    60625981    "TEMP R1;\n"
    60635982    "TEMP R2;\n"
    6064     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6065     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6066     "ADD R0.xyz, R0, c[5];\n"
    6067     "RCP R0.z, R0.z;\n"
    6068     "MUL R0.xy, R0, R0.z;\n"
    6069     "MUL R0.xy, R0, c[6];\n"
    6070     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    6071     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    6072     "MOV R0.y, -R0;\n"
     5983    "MUL R0.xyz, fragment.position.y, c[2];\n"
     5984    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     5985    "ADD R0.xyz, R0, c[3];\n"
     5986    "RCP R0.z, R0.z;\n"
     5987    "MUL R0.xy, R0, R0.z;\n"
     5988    "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
     5989    "TEX R1.x, R0.zwzw, texture[2], 2D;\n"
     5990    "MUL R0.xy, fragment.position, c[5];\n"
     5991    "TEX R0, R0, texture[0], 2D;\n"
     5992    "ADD R1.x, -R1, c[8];\n"
     5993    "MUL R1, fragment.color.primary, R1.x;\n"
     5994    "ADD R2.x, -R0.w, c[8];\n"
     5995    "MUL R2.xyz, R1, R2.x;\n"
     5996    "MAD R1.xyz, R1, R0, R2;\n"
     5997    "ADD R2.x, -R1.w, c[8];\n"
     5998    "MAD R2.xyz, R0, R2.x, R1;\n"
     5999    "ADD R1.z, R1.w, R0.w;\n"
     6000    "MAD R2.w, -R1, R0, R1.z;\n"
     6001    "ADD R1.xy, fragment.position, c[6];\n"
     6002    "MUL R1.xy, R1, c[4];\n"
     6003    "TEX R1, R1, texture[1], 2D;\n"
     6004    "ADD R2, R2, -R0;\n"
     6005    "DP4 R1.x, R1, c[7];\n"
     6006    "MAD result.color, R1.x, R2, R0;\n"
     6007    "END\n"
     6008    ;
     6009
     6010static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN =
     6011    "!!ARBfp1.0\n"
     6012    "PARAM c[9] = { program.local[0..7],\n"
     6013    "           { 1 } };\n"
     6014    "TEMP R0;\n"
     6015    "TEMP R1;\n"
     6016    "TEMP R2;\n"
     6017    "TEMP R3;\n"
     6018    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6019    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6020    "ADD R0.xyz, R0, c[3];\n"
     6021    "RCP R0.z, R0.z;\n"
     6022    "MUL R0.xy, R0, R0.z;\n"
     6023    "MUL R0.xy, R0, c[0];\n"
    60736024    "TEX R0.x, R0, texture[2], 2D;\n"
    6074     "MUL R0, fragment.color.primary, R0.x;\n"
    6075     "ADD R2.x, -R1.w, c[8];\n"
    6076     "MUL R2.xyz, R0, R2.x;\n"
    6077     "MAD R0.xyz, R0, R1, R2;\n"
    6078     "ADD R2.x, -R0.w, c[8];\n"
    6079     "MAD R2.xyz, R1, R2.x, R0;\n"
    6080     "ADD R0.z, R0.w, R1.w;\n"
    6081     "MAD R2.w, -R0, R1, R0.z;\n"
    6082     "ADD R0.xy, fragment.position, c[0];\n"
    6083     "MUL R0.xy, R0, c[1];\n"
    6084     "TEX R0, R0, texture[1], 2D;\n"
    6085     "ADD R2, R2, -R1;\n"
    6086     "DP4 R0.x, R0, c[2];\n"
    6087     "MAD result.color, R0.x, R2, R1;\n"
    6088     "END\n"
    6089     ;
    6090 
    6091 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN =
    6092     "!!ARBfp1.0\n"
    6093     "PARAM c[8] = { program.local[0..7] };\n"
    6094     "TEMP R0;\n"
    6095     "TEMP R1;\n"
    6096     "TEMP R2;\n"
    6097     "TEMP R3;\n"
    6098     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6099     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6100     "ADD R0.xyz, R0, c[5];\n"
    6101     "RCP R0.z, R0.z;\n"
    6102     "MUL R0.xy, R0, R0.z;\n"
    6103     "MUL R0.xy, R0, c[6];\n"
    6104     "MOV R0.y, -R0;\n"
    6105     "TEX R1.x, R0, texture[2], 2D;\n"
    6106     "MUL R0.xy, fragment.position, c[7];\n"
    6107     "ADD R3.xy, fragment.position, c[0];\n"
     6025    "ADD R0.z, -R0.x, c[8].x;\n"
     6026    "ADD R3.xy, fragment.position, c[6];\n"
     6027    "MUL R1, fragment.color.primary, R0.z;\n"
     6028    "MUL R0.xy, fragment.position, c[5];\n"
    61086029    "TEX R0, R0, texture[0], 2D;\n"
    6109     "MUL R1, fragment.color.primary, R1.x;\n"
    61106030    "ADD R2, R1, R0;\n"
    61116031    "MAD R2, -R1, R0, R2;\n"
    6112     "MUL R3.xy, R3, c[1];\n"
     6032    "MUL R3.xy, R3, c[4];\n"
    61136033    "TEX R1, R3, texture[1], 2D;\n"
    61146034    "ADD R2, R2, -R0;\n"
    6115     "DP4 R1.x, R1, c[2];\n"
     6035    "DP4 R1.x, R1, c[7];\n"
    61166036    "MAD result.color, R1.x, R2, R0;\n"
    61176037    "END\n"
     
    61216041    "!!ARBfp1.0\n"
    61226042    "PARAM c[9] = { program.local[0..7],\n"
    6123     "           { 2, 1 } };\n"
     6043    "           { 1, 2 } };\n"
    61246044    "TEMP R0;\n"
    61256045    "TEMP R1;\n"
     
    61276047    "TEMP R3;\n"
    61286048    "TEMP R4;\n"
    6129     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6130     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6131     "ADD R0.xyz, R0, c[5];\n"
    6132     "RCP R0.z, R0.z;\n"
    6133     "MUL R0.xy, R0, R0.z;\n"
    6134     "MUL R0.xy, R0, c[6];\n"
    6135     "MOV R0.y, -R0;\n"
    6136     "TEX R1.x, R0, texture[2], 2D;\n"
    6137     "MUL R1, fragment.color.primary, R1.x;\n"
    6138     "MUL R0.xy, fragment.position, c[7];\n"
    6139     "TEX R0, R0, texture[0], 2D;\n"
    6140     "ADD R2.w, -R0, c[8].y;\n"
     6049    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6050    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6051    "ADD R0.xyz, R0, c[3];\n"
     6052    "RCP R0.z, R0.z;\n"
     6053    "MUL R0.xy, R0, R0.z;\n"
     6054    "MUL R0.xy, R0, c[0];\n"
     6055    "TEX R0.x, R0, texture[2], 2D;\n"
     6056    "ADD R0.x, -R0, c[8];\n"
     6057    "MUL R1, fragment.color.primary, R0.x;\n"
     6058    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     6059    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6060    "ADD R2.w, -R0, c[8].x;\n"
    61416061    "ADD R3.xyz, R1.w, -R1;\n"
    61426062    "ADD R2.xyz, R0.w, -R0;\n"
    61436063    "MUL R2.xyz, R2, R3;\n"
    6144     "MUL R2.xyz, R2, c[8].x;\n"
     6064    "MUL R2.xyz, R2, c[8].y;\n"
    61456065    "MAD R2.xyz, R1.w, R0.w, -R2;\n"
    61466066    "MUL R4.xyz, R1, R2.w;\n"
    61476067    "MUL R3.xyz, R1, R0;\n"
    61486068    "MAD R1.xyz, R1, R2.w, R2;\n"
    6149     "ADD R2.x, -R1.w, c[8].y;\n"
    6150     "MAD R3.xyz, R3, c[8].x, R4;\n"
     6069    "ADD R2.x, -R1.w, c[8];\n"
     6070    "MAD R3.xyz, R3, c[8].y, R4;\n"
    61516071    "MAD R3.xyz, R0, R2.x, R3;\n"
    61526072    "MAD R1.xyz, R0, R2.x, R1;\n"
    6153     "MUL R2.xyz, R0, c[8].x;\n"
     6073    "MUL R2.xyz, R0, c[8].y;\n"
    61546074    "ADD R1.xyz, R1, -R3;\n"
    61556075    "SGE R2.xyz, R2, R0.w;\n"
     
    61576077    "ADD R1.z, R1.w, R0.w;\n"
    61586078    "MAD R2.w, -R1, R0, R1.z;\n"
    6159     "ADD R1.xy, fragment.position, c[0];\n"
    6160     "MUL R1.xy, R1, c[1];\n"
     6079    "ADD R1.xy, fragment.position, c[6];\n"
     6080    "MUL R1.xy, R1, c[4];\n"
    61616081    "TEX R1, R1, texture[1], 2D;\n"
    61626082    "ADD R2, R2, -R0;\n"
    6163     "DP4 R1.x, R1, c[2];\n"
     6083    "DP4 R1.x, R1, c[7];\n"
    61646084    "MAD result.color, R1.x, R2, R0;\n"
    61656085    "END\n"
     
    61746094    "TEMP R2;\n"
    61756095    "TEMP R3;\n"
    6176     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6177     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6178     "ADD R0.xyz, R0, c[5];\n"
    6179     "RCP R0.z, R0.z;\n"
    6180     "MUL R0.xy, R0, R0.z;\n"
    6181     "MUL R0.xy, R0, c[6];\n"
    6182     "MOV R0.y, -R0;\n"
    6183     "TEX R0.x, R0, texture[2], 2D;\n"
    6184     "MUL R1.xy, fragment.position, c[7];\n"
    6185     "TEX R1, R1, texture[0], 2D;\n"
    6186     "MUL R0, fragment.color.primary, R0.x;\n"
    6187     "MUL R3.xyz, R1, R0.w;\n"
    6188     "MUL R2.xyz, R0, R1.w;\n"
     6096    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6097    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6098    "ADD R0.xyz, R0, c[3];\n"
     6099    "RCP R0.z, R0.z;\n"
     6100    "MUL R0.xy, R0, R0.z;\n"
     6101    "MUL R0.xy, R0, c[0];\n"
     6102    "TEX R1.x, R0, texture[2], 2D;\n"
     6103    "MUL R0.xy, fragment.position, c[5];\n"
     6104    "TEX R0, R0, texture[0], 2D;\n"
     6105    "ADD R1.x, -R1, c[8];\n"
     6106    "MUL R1, fragment.color.primary, R1.x;\n"
     6107    "MUL R3.xyz, R1.w, R0;\n"
     6108    "MUL R2.xyz, R1, R0.w;\n"
    61896109    "MIN R2.xyz, R2, R3;\n"
    6190     "ADD R2.w, -R1, c[8].x;\n"
    6191     "MAD R0.xyz, R0, R2.w, R2;\n"
    6192     "ADD R2.x, -R0.w, c[8];\n"
    6193     "MAD R2.xyz, R1, R2.x, R0;\n"
    6194     "ADD R0.z, R0.w, R1.w;\n"
    6195     "MAD R2.w, -R0, R1, R0.z;\n"
    6196     "ADD R0.xy, fragment.position, c[0];\n"
    6197     "MUL R0.xy, R0, c[1];\n"
    6198     "TEX R0, R0, texture[1], 2D;\n"
    6199     "ADD R2, R2, -R1;\n"
    6200     "DP4 R0.x, R0, c[2];\n"
    6201     "MAD result.color, R0.x, R2, R1;\n"
     6110    "ADD R2.w, -R0, c[8].x;\n"
     6111    "MAD R1.xyz, R1, R2.w, R2;\n"
     6112    "ADD R2.x, -R1.w, c[8];\n"
     6113    "MAD R2.xyz, R0, R2.x, R1;\n"
     6114    "ADD R1.z, R1.w, R0.w;\n"
     6115    "MAD R2.w, -R1, R0, R1.z;\n"
     6116    "ADD R1.xy, fragment.position, c[6];\n"
     6117    "MUL R1.xy, R1, c[4];\n"
     6118    "TEX R1, R1, texture[1], 2D;\n"
     6119    "ADD R2, R2, -R0;\n"
     6120    "DP4 R1.x, R1, c[7];\n"
     6121    "MAD result.color, R1.x, R2, R0;\n"
    62026122    "END\n"
    62036123    ;
     
    62116131    "TEMP R2;\n"
    62126132    "TEMP R3;\n"
    6213     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6214     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6215     "ADD R0.xyz, R0, c[5];\n"
    6216     "RCP R0.z, R0.z;\n"
    6217     "MUL R0.xy, R0, R0.z;\n"
    6218     "MUL R0.xy, R0, c[6];\n"
    6219     "MOV R0.y, -R0;\n"
     6133    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6134    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6135    "ADD R0.xyz, R0, c[3];\n"
     6136    "RCP R0.z, R0.z;\n"
     6137    "MUL R0.xy, R0, R0.z;\n"
     6138    "MUL R0.xy, R0, c[0];\n"
     6139    "TEX R1.x, R0, texture[2], 2D;\n"
     6140    "MUL R0.xy, fragment.position, c[5];\n"
     6141    "TEX R0, R0, texture[0], 2D;\n"
     6142    "ADD R1.x, -R1, c[8];\n"
     6143    "MUL R1, fragment.color.primary, R1.x;\n"
     6144    "MUL R3.xyz, R1.w, R0;\n"
     6145    "MUL R2.xyz, R1, R0.w;\n"
     6146    "MAX R2.xyz, R2, R3;\n"
     6147    "ADD R2.w, -R0, c[8].x;\n"
     6148    "MAD R1.xyz, R1, R2.w, R2;\n"
     6149    "ADD R2.x, -R1.w, c[8];\n"
     6150    "MAD R2.xyz, R0, R2.x, R1;\n"
     6151    "ADD R1.z, R1.w, R0.w;\n"
     6152    "MAD R2.w, -R1, R0, R1.z;\n"
     6153    "ADD R1.xy, fragment.position, c[6];\n"
     6154    "MUL R1.xy, R1, c[4];\n"
     6155    "TEX R1, R1, texture[1], 2D;\n"
     6156    "ADD R2, R2, -R0;\n"
     6157    "DP4 R1.x, R1, c[7];\n"
     6158    "MAD result.color, R1.x, R2, R0;\n"
     6159    "END\n"
     6160    ;
     6161
     6162static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE =
     6163    "!!ARBfp1.0\n"
     6164    "PARAM c[9] = { program.local[0..7],\n"
     6165    "           { 1, 1e-006 } };\n"
     6166    "TEMP R0;\n"
     6167    "TEMP R1;\n"
     6168    "TEMP R2;\n"
     6169    "TEMP R3;\n"
     6170    "TEMP R4;\n"
     6171    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6172    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6173    "ADD R0.xyz, R0, c[3];\n"
     6174    "RCP R0.z, R0.z;\n"
     6175    "MUL R0.xy, R0, R0.z;\n"
     6176    "MUL R0.xy, R0, c[0];\n"
    62206177    "TEX R0.x, R0, texture[2], 2D;\n"
    6221     "MUL R1.xy, fragment.position, c[7];\n"
    6222     "TEX R1, R1, texture[0], 2D;\n"
    6223     "MUL R0, fragment.color.primary, R0.x;\n"
    6224     "MUL R3.xyz, R1, R0.w;\n"
    6225     "MUL R2.xyz, R0, R1.w;\n"
    6226     "MAX R2.xyz, R2, R3;\n"
    6227     "ADD R2.w, -R1, c[8].x;\n"
    6228     "MAD R0.xyz, R0, R2.w, R2;\n"
    6229     "ADD R2.x, -R0.w, c[8];\n"
    6230     "MAD R2.xyz, R1, R2.x, R0;\n"
    6231     "ADD R0.z, R0.w, R1.w;\n"
    6232     "MAD R2.w, -R0, R1, R0.z;\n"
    6233     "ADD R0.xy, fragment.position, c[0];\n"
    6234     "MUL R0.xy, R0, c[1];\n"
    6235     "TEX R0, R0, texture[1], 2D;\n"
    6236     "ADD R2, R2, -R1;\n"
    6237     "DP4 R0.x, R0, c[2];\n"
    6238     "MAD result.color, R0.x, R2, R1;\n"
    6239     "END\n"
    6240     ;
    6241 
    6242 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE =
    6243     "!!ARBfp1.0\n"
    6244     "PARAM c[9] = { program.local[0..7],\n"
    6245     "           { 1, 1e-06 } };\n"
    6246     "TEMP R0;\n"
    6247     "TEMP R1;\n"
    6248     "TEMP R2;\n"
    6249     "TEMP R3;\n"
    6250     "TEMP R4;\n"
    6251     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6252     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6253     "ADD R0.xyz, R0, c[5];\n"
    6254     "RCP R0.z, R0.z;\n"
    6255     "MUL R0.xy, R0, R0.z;\n"
    6256     "MUL R0.xy, R0, c[6];\n"
    6257     "MOV R0.y, -R0;\n"
    6258     "TEX R0.x, R0, texture[2], 2D;\n"
     6178    "ADD R0.x, -R0, c[8];\n"
    62596179    "MUL R1, fragment.color.primary, R0.x;\n"
    62606180    "MAX R0.x, R1.w, c[8].y;\n"
    62616181    "RCP R0.x, R0.x;\n"
    6262     "MAD R0.xyz, -R1, R0.x, c[8].x;\n"
    6263     "MAX R2.xyz, R0, c[8].y;\n"
    6264     "MUL R0.xy, fragment.position, c[7];\n"
     6182    "MAD R2.xyz, -R1, R0.x, c[8].x;\n"
     6183    "MAX R2.xyz, R2, c[8].y;\n"
     6184    "MUL R0.xy, fragment.position, c[5];\n"
    62656185    "TEX R0, R0, texture[0], 2D;\n"
    62666186    "ADD R2.w, -R1, c[8].x;\n"
     
    62686188    "ADD R2.w, -R0, c[8].x;\n"
    62696189    "MAD R4.xyz, R1, R2.w, R3;\n"
    6270     "MUL R3.xyz, R0, R1.w;\n"
     6190    "MUL R3.xyz, R1.w, R0;\n"
    62716191    "MUL R2.w, R1, R0;\n"
    62726192    "MAD R1.xyz, R1, R0.w, R3;\n"
     
    62816201    "ADD R1.z, R1.w, R0.w;\n"
    62826202    "MAD R2.w, -R1, R0, R1.z;\n"
    6283     "ADD R1.xy, fragment.position, c[0];\n"
    6284     "MUL R1.xy, R1, c[1];\n"
     6203    "ADD R1.xy, fragment.position, c[6];\n"
     6204    "MUL R1.xy, R1, c[4];\n"
    62856205    "TEX R1, R1, texture[1], 2D;\n"
    62866206    "ADD R2, R2, -R0;\n"
    6287     "DP4 R1.x, R1, c[2];\n"
     6207    "DP4 R1.x, R1, c[7];\n"
    62886208    "MAD result.color, R1.x, R2, R0;\n"
    62896209    "END\n"
     
    62936213    "!!ARBfp1.0\n"
    62946214    "PARAM c[9] = { program.local[0..7],\n"
    6295     "           { 1, 9.9999997e-06 } };\n"
     6215    "           { 1, 9.9999997e-006 } };\n"
    62966216    "TEMP R0;\n"
    62976217    "TEMP R1;\n"
     
    63006220    "TEMP R4;\n"
    63016221    "TEMP R5;\n"
    6302     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6303     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6304     "ADD R0.xyz, R0, c[5];\n"
    6305     "RCP R0.z, R0.z;\n"
    6306     "MUL R0.xy, R0, R0.z;\n"
    6307     "MUL R0.xy, R0, c[6];\n"
    6308     "MOV R0.y, -R0;\n"
    6309     "TEX R1.x, R0, texture[2], 2D;\n"
     6222    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6223    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6224    "ADD R0.xyz, R0, c[3];\n"
     6225    "RCP R0.z, R0.z;\n"
     6226    "MUL R0.xy, R0, R0.z;\n"
     6227    "MUL R0.xy, R0, c[0];\n"
     6228    "TEX R0.x, R0, texture[2], 2D;\n"
     6229    "ADD R1.x, -R0, c[8];\n"
    63106230    "MUL R1, fragment.color.primary, R1.x;\n"
    6311     "MUL R0.xy, fragment.position, c[7];\n"
    6312     "TEX R0, R0, texture[0], 2D;\n"
    6313     "MUL R2.xyz, R0, R1.w;\n"
     6231    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     6232    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6233    "MUL R2.xyz, R1.w, R0;\n"
    63146234    "MAD R3.xyz, R1, R0.w, R2;\n"
    63156235    "MAD R2.xyz, -R1.w, R0.w, R3;\n"
     
    63266246    "MAD R1.xyz, R1, R2.w, R4;\n"
    63276247    "MUL R2.w, R1, R0;\n"
    6328     "ADD R3.w, -R1, c[8].x;\n"
    63296248    "MAD R2.xyz, R0, R3.w, R2;\n"
    63306249    "ADD R2.xyz, R2, -R1;\n"
     
    63336252    "ADD R1.z, R1.w, R0.w;\n"
    63346253    "MAD R2.w, -R1, R0, R1.z;\n"
    6335     "ADD R1.xy, fragment.position, c[0];\n"
    6336     "MUL R1.xy, R1, c[1];\n"
     6254    "ADD R1.xy, fragment.position, c[6];\n"
     6255    "MUL R1.xy, R1, c[4];\n"
    63376256    "TEX R1, R1, texture[1], 2D;\n"
    63386257    "ADD R2, R2, -R0;\n"
    6339     "DP4 R1.x, R1, c[2];\n"
     6258    "DP4 R1.x, R1, c[7];\n"
    63406259    "MAD result.color, R1.x, R2, R0;\n"
    63416260    "END\n"
     
    63456264    "!!ARBfp1.0\n"
    63466265    "PARAM c[9] = { program.local[0..7],\n"
    6347     "           { 2, 1 } };\n"
     6266    "           { 1, 2 } };\n"
    63486267    "TEMP R0;\n"
    63496268    "TEMP R1;\n"
     
    63516270    "TEMP R3;\n"
    63526271    "TEMP R4;\n"
    6353     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6354     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6355     "ADD R0.xyz, R0, c[5];\n"
    6356     "RCP R0.z, R0.z;\n"
    6357     "MUL R0.xy, R0, R0.z;\n"
    6358     "MUL R0.xy, R0, c[6];\n"
    6359     "MOV R0.y, -R0;\n"
    6360     "TEX R1.x, R0, texture[2], 2D;\n"
    6361     "MUL R1, fragment.color.primary, R1.x;\n"
    6362     "MUL R0.xy, fragment.position, c[7];\n"
    6363     "TEX R0, R0, texture[0], 2D;\n"
    6364     "ADD R2.w, -R0, c[8].y;\n"
     6272    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6273    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6274    "ADD R0.xyz, R0, c[3];\n"
     6275    "RCP R0.z, R0.z;\n"
     6276    "MUL R0.xy, R0, R0.z;\n"
     6277    "MUL R0.xy, R0, c[0];\n"
     6278    "TEX R0.x, R0, texture[2], 2D;\n"
     6279    "ADD R0.x, -R0, c[8];\n"
     6280    "MUL R1, fragment.color.primary, R0.x;\n"
     6281    "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
     6282    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6283    "ADD R2.w, -R0, c[8].x;\n"
    63656284    "ADD R3.xyz, R1.w, -R1;\n"
    63666285    "ADD R2.xyz, R0.w, -R0;\n"
    63676286    "MUL R2.xyz, R2, R3;\n"
    6368     "MUL R2.xyz, R2, c[8].x;\n"
     6287    "MUL R2.xyz, R2, c[8].y;\n"
    63696288    "MAD R2.xyz, R1.w, R0.w, -R2;\n"
    63706289    "MUL R4.xyz, R1, R2.w;\n"
    63716290    "MAD R2.xyz, R1, R2.w, R2;\n"
    63726291    "MUL R3.xyz, R1, R0;\n"
    6373     "ADD R2.w, -R1, c[8].y;\n"
    6374     "MAD R3.xyz, R3, c[8].x, R4;\n"
    6375     "MUL R1.xyz, R1, c[8].x;\n"
     6292    "ADD R2.w, -R1, c[8].x;\n"
     6293    "MAD R3.xyz, R3, c[8].y, R4;\n"
     6294    "MUL R1.xyz, R1, c[8].y;\n"
    63766295    "SGE R1.xyz, R1, R1.w;\n"
    63776296    "MAD R3.xyz, R0, R2.w, R3;\n"
     
    63816300    "ADD R1.z, R1.w, R0.w;\n"
    63826301    "MAD R2.w, -R1, R0, R1.z;\n"
    6383     "ADD R1.xy, fragment.position, c[0];\n"
    6384     "MUL R1.xy, R1, c[1];\n"
     6302    "ADD R1.xy, fragment.position, c[6];\n"
     6303    "MUL R1.xy, R1, c[4];\n"
    63856304    "TEX R1, R1, texture[1], 2D;\n"
    63866305    "ADD R2, R2, -R0;\n"
    6387     "DP4 R1.x, R1, c[2];\n"
     6306    "DP4 R1.x, R1, c[7];\n"
    63886307    "MAD result.color, R1.x, R2, R0;\n"
    63896308    "END\n"
     
    63936312    "!!ARBfp1.0\n"
    63946313    "PARAM c[10] = { program.local[0..7],\n"
    6395     "           { 1, 9.9999997e-06, 2, 8 },\n"
    6396     "           { 3 } };\n"
     6314    "           { 1, 2, 9.9999997e-006, 4 },\n"
     6315    "           { 16, 12, 3 } };\n"
    63976316    "TEMP R0;\n"
    63986317    "TEMP R1;\n"
     
    64016320    "TEMP R4;\n"
    64026321    "TEMP R5;\n"
    6403     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6404     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6405     "ADD R1.xyz, R0, c[5];\n"
    6406     "RCP R0.z, R1.z;\n"
    6407     "MUL R1.xy, R1, R0.z;\n"
    6408     "MUL R1.xy, R1, c[6];\n"
    6409     "MOV R1.y, -R1;\n"
    6410     "MUL R0.xy, fragment.position, c[7];\n"
     6322    "TEMP R6;\n"
     6323    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6324    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6325    "ADD R1.xyz, R0, c[3];\n"
     6326    "RCP R1.z, R1.z;\n"
     6327    "MUL R1.xy, R1, R1.z;\n"
     6328    "MUL R1.xy, R1, c[0];\n"
     6329    "TEX R1.x, R1, texture[2], 2D;\n"
     6330    "MUL R0.xy, fragment.position, c[5];\n"
    64116331    "TEX R0, R0, texture[0], 2D;\n"
    6412     "MAX R1.z, R0.w, c[8].y;\n"
    6413     "RCP R2.w, R1.z;\n"
    6414     "MUL R2.xyz, R0, R2.w;\n"
    6415     "MUL R5.xyz, -R2, c[8].w;\n"
    6416     "MAD R4.xyz, -R0, R2.w, c[8].x;\n"
    6417     "TEX R1.x, R1, texture[2], 2D;\n"
     6332    "MAX R1.z, R0.w, c[8];\n"
     6333    "RCP R1.z, R1.z;\n"
     6334    "MUL R3.xyz, R0, R1.z;\n"
     6335    "MAD R2.xyz, R3, c[9].x, -c[9].y;\n"
     6336    "ADD R1.x, -R1, c[8];\n"
    64186337    "MUL R1, fragment.color.primary, R1.x;\n"
    6419     "MAD R3.xyz, R1, c[8].z, -R1.w;\n"
    6420     "RSQ R2.x, R2.x;\n"
    6421     "RSQ R2.z, R2.z;\n"
    6422     "RSQ R2.y, R2.y;\n"
    6423     "MUL R4.xyz, R4, R3;\n"
    6424     "ADD R5.xyz, R5, c[9].x;\n"
    6425     "MUL R5.xyz, R4, R5;\n"
    6426     "ADD R4.xyz, R1.w, -R4;\n"
     6338    "MAD R4.xyz, R3, R2, c[9].z;\n"
     6339    "MAD R2.xyz, R1, c[8].y, -R1.w;\n"
     6340    "MUL R5.xyz, R0.w, R2;\n"
     6341    "MUL R6.xyz, R5, R4;\n"
     6342    "RSQ R2.w, R3.x;\n"
     6343    "RCP R4.x, R2.w;\n"
     6344    "RSQ R2.w, R3.y;\n"
     6345    "RSQ R3.w, R3.z;\n"
     6346    "RCP R4.y, R2.w;\n"
     6347    "RCP R4.z, R3.w;\n"
     6348    "ADD R4.xyz, -R3, R4;\n"
     6349    "MUL R6.xyz, R3, R6;\n"
     6350    "MUL R4.xyz, R5, R4;\n"
     6351    "ADD R3.xyz, -R3, c[8].x;\n"
     6352    "MAD R2.xyz, R2, R3, R1.w;\n"
     6353    "MUL R3.xyz, R1, c[8].y;\n"
     6354    "MAD R5.xyz, R1.w, R0, R6;\n"
     6355    "MAD R4.xyz, R1.w, R0, R4;\n"
     6356    "ADD R6.xyz, R4, -R5;\n"
     6357    "MUL R4.xyz, R0, c[8].w;\n"
     6358    "SGE R4.xyz, R4, R0.w;\n"
     6359    "MAD R4.xyz, R4, R6, R5;\n"
     6360    "MAD R4.xyz, -R0, R2, R4;\n"
     6361    "SGE R3.xyz, R3, R1.w;\n"
     6362    "MUL R2.xyz, R0, R2;\n"
    64276363    "ADD R2.w, -R0, c[8].x;\n"
    6428     "RCP R2.x, R2.x;\n"
    6429     "RCP R2.z, R2.z;\n"
    6430     "RCP R2.y, R2.y;\n"
    6431     "MAD R2.xyz, R2, R0.w, -R0;\n"
    6432     "MUL R3.xyz, R2, R3;\n"
    6433     "ADD R2.xyz, R1.w, -R5;\n"
    6434     "MAD R5.xyz, R0, R1.w, R3;\n"
    6435     "MUL R2.xyz, R0, R2;\n"
    6436     "MUL R3.xyz, R0, c[8].w;\n"
    6437     "ADD R5.xyz, R5, -R2;\n"
    6438     "SGE R3.xyz, R3, R0.w;\n"
    6439     "MUL R3.xyz, R3, R5;\n"
    6440     "ADD R2.xyz, R2, R3;\n"
    6441     "MUL R3.xyz, R0, R4;\n"
    6442     "MUL R4.xyz, R1, c[8].z;\n"
    6443     "SGE R4.xyz, R4, R1.w;\n"
    6444     "ADD R2.xyz, R2, -R3;\n"
    6445     "MUL R2.xyz, R4, R2;\n"
    6446     "ADD R2.xyz, R3, R2;\n"
     6364    "MAD R2.xyz, R3, R4, R2;\n"
     6365    "MAD R2.xyz, R1, R2.w, R2;\n"
     6366    "ADD R1.x, -R1.w, c[8];\n"
     6367    "MAD R2.xyz, R0, R1.x, R2;\n"
     6368    "ADD R1.z, R1.w, R0.w;\n"
     6369    "MAD R2.w, -R1, R0, R1.z;\n"
     6370    "ADD R1.xy, fragment.position, c[6];\n"
     6371    "MUL R1.xy, R1, c[4];\n"
     6372    "TEX R1, R1, texture[1], 2D;\n"
     6373    "ADD R2, R2, -R0;\n"
     6374    "DP4 R1.x, R1, c[7];\n"
     6375    "MAD result.color, R1.x, R2, R0;\n"
     6376    "END\n"
     6377    ;
     6378
     6379static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE =
     6380    "!!ARBfp1.0\n"
     6381    "PARAM c[9] = { program.local[0..7],\n"
     6382    "           { 1, 2 } };\n"
     6383    "TEMP R0;\n"
     6384    "TEMP R1;\n"
     6385    "TEMP R2;\n"
     6386    "TEMP R3;\n"
     6387    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6388    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6389    "ADD R0.xyz, R0, c[3];\n"
     6390    "RCP R0.z, R0.z;\n"
     6391    "MUL R0.xy, R0, R0.z;\n"
     6392    "MUL R0.xy, R0, c[0];\n"
     6393    "TEX R1.x, R0, texture[2], 2D;\n"
     6394    "MUL R0.xy, fragment.position, c[5];\n"
     6395    "ADD R1.x, -R1, c[8];\n"
     6396    "TEX R0, R0, texture[0], 2D;\n"
     6397    "MUL R1, fragment.color.primary, R1.x;\n"
     6398    "ADD R2.xyz, R1, R0;\n"
     6399    "MUL R3.xyz, R1.w, R0;\n"
     6400    "MUL R1.xyz, R1, R0.w;\n"
     6401    "MIN R1.xyz, R1, R3;\n"
     6402    "MAD R2.xyz, -R1, c[8].y, R2;\n"
     6403    "ADD R1.z, R1.w, R0.w;\n"
     6404    "MAD R2.w, -R1, R0, R1.z;\n"
     6405    "ADD R1.xy, fragment.position, c[6];\n"
     6406    "MUL R1.xy, R1, c[4];\n"
     6407    "TEX R1, R1, texture[1], 2D;\n"
     6408    "ADD R2, R2, -R0;\n"
     6409    "DP4 R1.x, R1, c[7];\n"
     6410    "MAD result.color, R1.x, R2, R0;\n"
     6411    "END\n"
     6412    ;
     6413
     6414static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION =
     6415    "!!ARBfp1.0\n"
     6416    "PARAM c[9] = { program.local[0..7],\n"
     6417    "           { 1, 2 } };\n"
     6418    "TEMP R0;\n"
     6419    "TEMP R1;\n"
     6420    "TEMP R2;\n"
     6421    "TEMP R3;\n"
     6422    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6423    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6424    "ADD R0.xyz, R0, c[3];\n"
     6425    "RCP R0.z, R0.z;\n"
     6426    "MUL R0.xy, R0, R0.z;\n"
     6427    "MUL R0.xy, R0, c[0];\n"
     6428    "TEX R1.x, R0, texture[2], 2D;\n"
     6429    "MUL R0.xy, fragment.position, c[5];\n"
     6430    "TEX R0, R0, texture[0], 2D;\n"
     6431    "ADD R1.x, -R1, c[8];\n"
     6432    "MUL R1, fragment.color.primary, R1.x;\n"
     6433    "MUL R2.xyz, R1.w, R0;\n"
     6434    "MAD R3.xyz, R1, R0.w, R2;\n"
     6435    "MUL R2.xyz, R1, R0;\n"
     6436    "MAD R2.xyz, -R2, c[8].y, R3;\n"
     6437    "ADD R2.w, -R0, c[8].x;\n"
    64476438    "MAD R1.xyz, R1, R2.w, R2;\n"
    64486439    "ADD R2.x, -R1.w, c[8];\n"
     
    64506441    "ADD R1.z, R1.w, R0.w;\n"
    64516442    "MAD R2.w, -R1, R0, R1.z;\n"
    6452     "ADD R1.xy, fragment.position, c[0];\n"
    6453     "MUL R1.xy, R1, c[1];\n"
     6443    "ADD R1.xy, fragment.position, c[6];\n"
     6444    "MUL R1.xy, R1, c[4];\n"
    64546445    "TEX R1, R1, texture[1], 2D;\n"
    64556446    "ADD R2, R2, -R0;\n"
    6456     "DP4 R1.x, R1, c[2];\n"
     6447    "DP4 R1.x, R1, c[7];\n"
    64576448    "MAD result.color, R1.x, R2, R0;\n"
    64586449    "END\n"
    64596450    ;
    64606451
    6461 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE =
    6462     "!!ARBfp1.0\n"
    6463     "PARAM c[9] = { program.local[0..7],\n"
    6464     "           { 2 } };\n"
    6465     "TEMP R0;\n"
    6466     "TEMP R1;\n"
    6467     "TEMP R2;\n"
    6468     "TEMP R3;\n"
    6469     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6470     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6471     "ADD R0.xyz, R0, c[5];\n"
    6472     "RCP R0.z, R0.z;\n"
    6473     "MUL R0.xy, R0, R0.z;\n"
    6474     "MUL R0.xy, R0, c[6];\n"
    6475     "MOV R0.y, -R0;\n"
    6476     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
    6477     "TEX R1, R0.zwzw, texture[0], 2D;\n"
    6478     "TEX R0.x, R0, texture[2], 2D;\n"
    6479     "MUL R0, fragment.color.primary, R0.x;\n"
    6480     "ADD R3.xyz, R0, R1;\n"
    6481     "MUL R2.xyz, R1, R0.w;\n"
    6482     "MUL R0.xyz, R0, R1.w;\n"
    6483     "MIN R0.xyz, R0, R2;\n"
    6484     "MAD R2.xyz, -R0, c[8].x, R3;\n"
    6485     "ADD R0.z, R0.w, R1.w;\n"
    6486     "MAD R2.w, -R0, R1, R0.z;\n"
    6487     "ADD R0.xy, fragment.position, c[0];\n"
    6488     "MUL R0.xy, R0, c[1];\n"
    6489     "TEX R0, R0, texture[1], 2D;\n"
    6490     "ADD R2, R2, -R1;\n"
    6491     "DP4 R0.x, R0, c[2];\n"
    6492     "MAD result.color, R0.x, R2, R1;\n"
    6493     "END\n"
    6494     ;
    6495 
    6496 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION =
    6497     "!!ARBfp1.0\n"
    6498     "PARAM c[9] = { program.local[0..7],\n"
    6499     "           { 1, 2 } };\n"
    6500     "TEMP R0;\n"
    6501     "TEMP R1;\n"
    6502     "TEMP R2;\n"
    6503     "TEMP R3;\n"
    6504     "MUL R0.xyz, fragment.position.y, c[4];\n"
    6505     "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
    6506     "ADD R0.xyz, R0, c[5];\n"
    6507     "RCP R0.z, R0.z;\n"
    6508     "MUL R0.xy, R0, R0.z;\n"
    6509     "MUL R0.xy, R0, c[6];\n"
    6510     "MOV R0.y, -R0;\n"
    6511     "TEX R0.x, R0, texture[2], 2D;\n"
    6512     "MUL R1.xy, fragment.position, c[7];\n"
    6513     "TEX R1, R1, texture[0], 2D;\n"
    6514     "MUL R0, fragment.color.primary, R0.x;\n"
    6515     "MUL R2.xyz, R1, R0.w;\n"
    6516     "MAD R3.xyz, R0, R1.w, R2;\n"
    6517     "MUL R2.xyz, R0, R1;\n"
    6518     "MAD R2.xyz, -R2, c[8].y, R3;\n"
    6519     "ADD R2.w, -R1, c[8].x;\n"
    6520     "MAD R0.xyz, R0, R2.w, R2;\n"
    6521     "ADD R2.x, -R0.w, c[8];\n"
    6522     "MAD R2.xyz, R1, R2.x, R0;\n"
    6523     "ADD R0.z, R0.w, R1.w;\n"
    6524     "MAD R2.w, -R0, R1, R0.z;\n"
    6525     "ADD R0.xy, fragment.position, c[0];\n"
    6526     "MUL R0.xy, R0, c[1];\n"
    6527     "TEX R0, R0, texture[1], 2D;\n"
    6528     "ADD R2, R2, -R1;\n"
    6529     "DP4 R0.x, R0, c[2];\n"
    6530     "MAD result.color, R0.x, R2, R1;\n"
    6531     "END\n"
    6532     ;
    6533 
    65346452static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
    65356453    "!!ARBfp1.0\n"
    6536     "PARAM c[8] = { program.local[0..4],\n"
    6537     "           { 1 },\n"
    6538     "           program.local[6..7] };\n"
    6539     "TEMP R0;\n"
    6540     "TEMP R1;\n"
    6541     "TEMP R2;\n"
    6542     "TEMP R3;\n"
    6543     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6544     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6545     "ADD R0.xyz, R0, c[2];\n"
    6546     "RCP R0.z, R0.z;\n"
    6547     "MUL R0.xy, R0, R0.z;\n"
    6548     "MUL R0.xy, R0, c[3];\n"
    6549     "MOV R0.w, -R0.y;\n"
    6550     "MOV R0.z, R0.x;\n"
    6551     "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
    6552     "MUL R0.xy, fragment.position, c[4];\n"
    6553     "TEX R0, R0, texture[0], 2D;\n"
    6554     "MUL R2.xyz, R0, c[7].y;\n"
     6454    "PARAM c[8] = { program.local[0..6],\n"
     6455    "           { 1 } };\n"
     6456    "TEMP R0;\n"
     6457    "TEMP R1;\n"
     6458    "TEMP R2;\n"
     6459    "TEMP R3;\n"
     6460    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6461    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6462    "ADD R0.xyz, R0, c[3];\n"
     6463    "RCP R0.z, R0.z;\n"
     6464    "MUL R0.xy, R0, R0.z;\n"
     6465    "MUL R0.xy, R0, c[0];\n"
     6466    "TEX R1.x, R0, texture[1], 2D;\n"
     6467    "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
     6468    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6469    "MUL R2.xyz, R0, c[4].y;\n"
     6470    "ADD R1.x, -R1, c[7];\n"
    65556471    "MUL R1, fragment.color.primary, R1.x;\n"
    6556     "MUL R3.xyz, R2, R1.w;\n"
    6557     "MUL R2.xyz, R1, c[7].x;\n"
    6558     "MUL R0.xyz, R0, c[6].z;\n"
    6559     "MAD R2.xyz, R2, R0.w, R3;\n"
    6560     "MUL R1.xyz, R1, c[6].y;\n"
    6561     "ADD R2.w, -R0, c[5].x;\n"
    6562     "MAD R1.xyz, R1, R2.w, R2;\n"
    6563     "ADD R2.x, -R1.w, c[5];\n"
    6564     "MAD result.color.xyz, R0, R2.x, R1;\n"
    6565     "ADD R0.y, -R0.w, c[5].x;\n"
     6472    "MUL R3.xyz, R1.w, R2;\n"
     6473    "MUL R2.xyz, R1, c[4].x;\n"
     6474    "MUL R0.xyz, R0, c[5].z;\n"
     6475    "MAD R2.xyz, R0.w, R2, R3;\n"
     6476    "ADD R2.w, -R0, c[7].x;\n"
     6477    "MUL R1.xyz, R1, c[5].y;\n"
     6478    "MAD R1.xyz, R2.w, R1, R2;\n"
     6479    "ADD R2.x, -R1.w, c[7];\n"
     6480    "MAD result.color.xyz, R2.x, R0, R1;\n"
    65666481    "MUL R0.x, R1.w, R0.w;\n"
    65676482    "MUL R0.z, R0.w, R2.x;\n"
    6568     "MUL R0.y, R1.w, R0;\n"
    6569     "DP3 result.color.w, R0, c[6];\n"
     6483    "MUL R0.y, R1.w, R2.w;\n"
     6484    "DP3 result.color.w, R0, c[5];\n"
    65706485    "END\n"
    65716486    ;
     
    65786493    "TEMP R1;\n"
    65796494    "TEMP R2;\n"
    6580     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6581     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6582     "ADD R0.xyz, R0, c[2];\n"
    6583     "RCP R0.z, R0.z;\n"
    6584     "MUL R0.zw, R0.xyxy, R0.z;\n"
    6585     "MUL R1.xy, R0.zwzw, c[3];\n"
    6586     "MOV R1.y, -R1;\n"
    6587     "MUL R0.xy, fragment.position, c[4];\n"
    6588     "TEX R0, R0, texture[0], 2D;\n"
    6589     "TEX R1.x, R1, texture[1], 2D;\n"
     6495    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6496    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6497    "ADD R0.xyz, R0, c[3];\n"
     6498    "RCP R0.z, R0.z;\n"
     6499    "MUL R0.xy, R0, R0.z;\n"
     6500    "MUL R0.xy, R0, c[0];\n"
     6501    "TEX R1.x, R0, texture[1], 2D;\n"
     6502    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6503    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6504    "ADD R1.x, -R1, c[5];\n"
    65906505    "MUL R1, fragment.color.primary, R1.x;\n"
    65916506    "ADD R2.x, -R0.w, c[5];\n"
     
    66016516static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK =
    66026517    "!!ARBfp1.0\n"
    6603     "PARAM c[5] = { program.local[0..4] };\n"
    6604     "TEMP R0;\n"
    6605     "TEMP R1;\n"
    6606     "TEMP R2;\n"
    6607     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6608     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6609     "ADD R0.xyz, R0, c[2];\n"
    6610     "RCP R0.z, R0.z;\n"
    6611     "MUL R0.xy, R0, R0.z;\n"
    6612     "MUL R0.xy, R0, c[3];\n"
    6613     "MOV R0.w, -R0.y;\n"
    6614     "MOV R0.z, R0.x;\n"
    6615     "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
    6616     "MUL R0.xy, fragment.position, c[4];\n"
    6617     "TEX R0, R0, texture[0], 2D;\n"
     6518    "PARAM c[6] = { program.local[0..4],\n"
     6519    "           { 1 } };\n"
     6520    "TEMP R0;\n"
     6521    "TEMP R1;\n"
     6522    "TEMP R2;\n"
     6523    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6524    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6525    "ADD R0.xyz, R0, c[3];\n"
     6526    "RCP R0.z, R0.z;\n"
     6527    "MUL R0.xy, R0, R0.z;\n"
     6528    "MUL R0.xy, R0, c[0];\n"
     6529    "TEX R0.x, R0, texture[1], 2D;\n"
     6530    "ADD R1.x, -R0, c[5];\n"
     6531    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6532    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    66186533    "MUL R1, fragment.color.primary, R1.x;\n"
    66196534    "ADD R2, R1, R0;\n"
     
    66256540    "!!ARBfp1.0\n"
    66266541    "PARAM c[6] = { program.local[0..4],\n"
    6627     "           { 2, 1 } };\n"
    6628     "TEMP R0;\n"
    6629     "TEMP R1;\n"
    6630     "TEMP R2;\n"
    6631     "TEMP R3;\n"
    6632     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6633     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6634     "ADD R0.xyz, R0, c[2];\n"
    6635     "RCP R0.z, R0.z;\n"
    6636     "MUL R0.xy, R0, R0.z;\n"
    6637     "MUL R0.xy, R0, c[3];\n"
    6638     "MOV R0.y, -R0;\n"
    6639     "TEX R1.x, R0, texture[1], 2D;\n"
    6640     "MUL R1, fragment.color.primary, R1.x;\n"
    6641     "MUL R0.xy, fragment.position, c[4];\n"
    6642     "TEX R0, R0, texture[0], 2D;\n"
     6542    "           { 1, 2 } };\n"
     6543    "TEMP R0;\n"
     6544    "TEMP R1;\n"
     6545    "TEMP R2;\n"
     6546    "TEMP R3;\n"
     6547    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6548    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6549    "ADD R0.xyz, R0, c[3];\n"
     6550    "RCP R0.z, R0.z;\n"
     6551    "MUL R0.xy, R0, R0.z;\n"
     6552    "MUL R0.xy, R0, c[0];\n"
     6553    "TEX R0.x, R0, texture[1], 2D;\n"
     6554    "ADD R0.x, -R0, c[5];\n"
     6555    "MUL R1, fragment.color.primary, R0.x;\n"
     6556    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6557    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    66436558    "ADD R3.xyz, R1.w, -R1;\n"
    66446559    "ADD R2.xyz, R0.w, -R0;\n"
    66456560    "MUL R2.xyz, R2, R3;\n"
    6646     "ADD R2.w, -R0, c[5].y;\n"
    6647     "MUL R2.xyz, R2, c[5].x;\n"
     6561    "ADD R2.w, -R0, c[5].x;\n"
     6562    "MUL R2.xyz, R2, c[5].y;\n"
    66486563    "MAD R2.xyz, R1.w, R0.w, -R2;\n"
    66496564    "MAD R2.xyz, R1, R2.w, R2;\n"
    66506565    "MUL R3.xyz, R1, R2.w;\n"
    66516566    "MUL R1.xyz, R1, R0;\n"
    6652     "ADD R2.w, -R1, c[5].y;\n"
    6653     "MAD R1.xyz, R1, c[5].x, R3;\n"
     6567    "ADD R2.w, -R1, c[5].x;\n"
     6568    "MAD R1.xyz, R1, c[5].y, R3;\n"
    66546569    "MAD R1.xyz, R0, R2.w, R1;\n"
    66556570    "MAD R2.xyz, R0, R2.w, R2;\n"
    6656     "MUL R0.xyz, R0, c[5].x;\n"
     6571    "MUL R0.xyz, R0, c[5].y;\n"
    66576572    "ADD R2.w, R1, R0;\n"
    66586573    "ADD R2.xyz, R2, -R1;\n"
     
    66716586    "TEMP R2;\n"
    66726587    "TEMP R3;\n"
    6673     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6674     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6675     "ADD R0.xyz, R0, c[2];\n"
    6676     "RCP R0.z, R0.z;\n"
    6677     "MUL R0.xy, R0, R0.z;\n"
    6678     "MUL R0.xy, R0, c[3];\n"
    6679     "MOV R0.y, -R0;\n"
    6680     "TEX R1.x, R0, texture[1], 2D;\n"
    6681     "MUL R0.xy, fragment.position, c[4];\n"
    6682     "TEX R0, R0, texture[0], 2D;\n"
     6588    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6589    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6590    "ADD R0.xyz, R0, c[3];\n"
     6591    "RCP R0.z, R0.z;\n"
     6592    "MUL R0.xy, R0, R0.z;\n"
     6593    "MUL R0.xy, R0, c[0];\n"
     6594    "TEX R0.x, R0, texture[1], 2D;\n"
     6595    "ADD R1.x, -R0, c[5];\n"
     6596    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6597    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    66836598    "MUL R1, fragment.color.primary, R1.x;\n"
    66846599    "MUL R2.xyz, R1, R0.w;\n"
    6685     "MUL R3.xyz, R0, R1.w;\n"
     6600    "MUL R3.xyz, R1.w, R0;\n"
    66866601    "MIN R2.xyz, R2, R3;\n"
    66876602    "ADD R2.w, -R0, c[5].x;\n"
     
    67026617    "TEMP R2;\n"
    67036618    "TEMP R3;\n"
    6704     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6705     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6706     "ADD R0.xyz, R0, c[2];\n"
    6707     "RCP R0.z, R0.z;\n"
    6708     "MUL R0.xy, R0, R0.z;\n"
    6709     "MUL R0.xy, R0, c[3];\n"
    6710     "MOV R0.y, -R0;\n"
    6711     "TEX R1.x, R0, texture[1], 2D;\n"
    6712     "MUL R0.xy, fragment.position, c[4];\n"
    6713     "TEX R0, R0, texture[0], 2D;\n"
     6619    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6620    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6621    "ADD R0.xyz, R0, c[3];\n"
     6622    "RCP R0.z, R0.z;\n"
     6623    "MUL R0.xy, R0, R0.z;\n"
     6624    "MUL R0.xy, R0, c[0];\n"
     6625    "TEX R0.x, R0, texture[1], 2D;\n"
     6626    "ADD R1.x, -R0, c[5];\n"
     6627    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6628    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    67146629    "MUL R1, fragment.color.primary, R1.x;\n"
    67156630    "MUL R2.xyz, R1, R0.w;\n"
    6716     "MUL R3.xyz, R0, R1.w;\n"
     6631    "MUL R3.xyz, R1.w, R0;\n"
    67176632    "MAX R2.xyz, R2, R3;\n"
    67186633    "ADD R2.w, -R0, c[5].x;\n"
     
    67286643    "!!ARBfp1.0\n"
    67296644    "PARAM c[6] = { program.local[0..4],\n"
    6730     "           { 1, 1e-06 } };\n"
    6731     "TEMP R0;\n"
    6732     "TEMP R1;\n"
    6733     "TEMP R2;\n"
    6734     "TEMP R3;\n"
    6735     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6736     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6737     "ADD R0.xyz, R0, c[2];\n"
    6738     "RCP R0.z, R0.z;\n"
    6739     "MUL R0.xy, R0, R0.z;\n"
    6740     "MUL R0.xy, R0, c[3];\n"
    6741     "MOV R0.y, -R0;\n"
     6645    "           { 1, 1e-006 } };\n"
     6646    "TEMP R0;\n"
     6647    "TEMP R1;\n"
     6648    "TEMP R2;\n"
     6649    "TEMP R3;\n"
     6650    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6651    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6652    "ADD R0.xyz, R0, c[3];\n"
     6653    "RCP R0.z, R0.z;\n"
     6654    "MUL R0.xy, R0, R0.z;\n"
     6655    "MUL R0.xy, R0, c[0];\n"
    67426656    "TEX R0.x, R0, texture[1], 2D;\n"
     6657    "ADD R0.x, -R0, c[5];\n"
    67436658    "MUL R1, fragment.color.primary, R0.x;\n"
    67446659    "MAX R0.x, R1.w, c[5].y;\n"
    67456660    "RCP R0.x, R0.x;\n"
    6746     "MAD R0.xyz, -R1, R0.x, c[5].x;\n"
    6747     "MAX R2.xyz, R0, c[5].y;\n"
     6661    "MAD R3.xyz, -R1, R0.x, c[5].x;\n"
     6662    "MAX R3.xyz, R3, c[5].y;\n"
    67486663    "MUL R0.xy, fragment.position, c[4];\n"
    67496664    "TEX R0, R0, texture[0], 2D;\n"
    6750     "ADD R2.w, -R1, c[5].x;\n"
    6751     "MUL R3.xyz, R0, R2.w;\n"
     6665    "ADD R2.x, -R1.w, c[5];\n"
     6666    "MUL R2.xyz, R0, R2.x;\n"
    67526667    "ADD R2.w, -R0, c[5].x;\n"
    6753     "MAD R3.xyz, R1, R2.w, R3;\n"
    6754     "MUL R0.xyz, R0, R1.w;\n"
    6755     "RCP R2.x, R2.x;\n"
    6756     "RCP R2.y, R2.y;\n"
    6757     "RCP R2.z, R2.z;\n"
    6758     "MAD R2.xyz, R0, R2, R3;\n"
     6668    "MAD R2.xyz, R1, R2.w, R2;\n"
     6669    "MUL R0.xyz, R1.w, R0;\n"
     6670    "RCP R3.x, R3.x;\n"
     6671    "RCP R3.y, R3.y;\n"
     6672    "RCP R3.z, R3.z;\n"
     6673    "MAD R3.xyz, R0, R3, R2;\n"
    67596674    "MAD R0.xyz, R1, R0.w, R0;\n"
    6760     "MAD R3.xyz, R1.w, R0.w, R3;\n"
     6675    "MAD R2.xyz, R1.w, R0.w, R2;\n"
    67616676    "MUL R2.w, R1, R0;\n"
    67626677    "ADD R1.x, R1.w, R0.w;\n"
    6763     "ADD R3.xyz, R3, -R2;\n"
     6678    "ADD R2.xyz, R2, -R3;\n"
    67646679    "SGE R0.xyz, R0, R2.w;\n"
    6765     "MAD result.color.xyz, R0, R3, R2;\n"
     6680    "MAD result.color.xyz, R0, R2, R3;\n"
    67666681    "MAD result.color.w, -R1, R0, R1.x;\n"
    67676682    "END\n"
     
    67716686    "!!ARBfp1.0\n"
    67726687    "PARAM c[6] = { program.local[0..4],\n"
    6773     "           { 1, 9.9999997e-06 } };\n"
     6688    "           { 1, 9.9999997e-006 } };\n"
    67746689    "TEMP R0;\n"
    67756690    "TEMP R1;\n"
     
    67786693    "TEMP R4;\n"
    67796694    "TEMP R5;\n"
    6780     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6781     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6782     "ADD R0.xyz, R0, c[2];\n"
    6783     "RCP R0.z, R0.z;\n"
    6784     "MUL R0.xy, R0, R0.z;\n"
    6785     "MUL R0.xy, R0, c[3];\n"
    6786     "MOV R0.y, -R0;\n"
    6787     "TEX R1.x, R0, texture[1], 2D;\n"
     6695    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6696    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6697    "ADD R0.xyz, R0, c[3];\n"
     6698    "RCP R0.z, R0.z;\n"
     6699    "MUL R0.xy, R0, R0.z;\n"
     6700    "MUL R0.xy, R0, c[0];\n"
     6701    "TEX R0.x, R0, texture[1], 2D;\n"
     6702    "ADD R1.x, -R0, c[5];\n"
    67886703    "MUL R1, fragment.color.primary, R1.x;\n"
    6789     "MUL R0.xy, fragment.position, c[4];\n"
    6790     "TEX R0, R0, texture[0], 2D;\n"
    6791     "MUL R2.xyz, R0, R1.w;\n"
     6704    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6705    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6706    "MUL R2.xyz, R1.w, R0;\n"
    67926707    "MAD R3.xyz, R1, R0.w, R2;\n"
    67936708    "ADD R2.w, -R0, c[5].x;\n"
     
    68026717    "MAD R2.xyz, R4, R2, R5;\n"
    68036718    "MUL R4.xyz, R0, R3.w;\n"
     6719    "MAD R0.xyz, R0, R3.w, R2;\n"
    68046720    "MAD R1.xyz, R1, R2.w, R4;\n"
    6805     "ADD R3.w, -R1, c[5].x;\n"
    6806     "MAD R0.xyz, R0, R3.w, R2;\n"
    68076721    "MUL R2.x, R1.w, R0.w;\n"
    68086722    "ADD R2.w, R1, R0;\n"
     
    68176731    "!!ARBfp1.0\n"
    68186732    "PARAM c[6] = { program.local[0..4],\n"
    6819     "           { 2, 1 } };\n"
     6733    "           { 1, 2 } };\n"
    68206734    "TEMP R0;\n"
    68216735    "TEMP R1;\n"
     
    68236737    "TEMP R3;\n"
    68246738    "TEMP R4;\n"
    6825     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6826     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6827     "ADD R0.xyz, R0, c[2];\n"
    6828     "RCP R0.z, R0.z;\n"
    6829     "MUL R0.xy, R0, R0.z;\n"
    6830     "MUL R0.xy, R0, c[3];\n"
    6831     "MOV R0.y, -R0;\n"
    6832     "TEX R1.x, R0, texture[1], 2D;\n"
    6833     "MUL R1, fragment.color.primary, R1.x;\n"
    6834     "MUL R0.xy, fragment.position, c[4];\n"
    6835     "TEX R0, R0, texture[0], 2D;\n"
    6836     "ADD R2.w, -R0, c[5].y;\n"
     6739    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6740    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6741    "ADD R0.xyz, R0, c[3];\n"
     6742    "RCP R0.z, R0.z;\n"
     6743    "MUL R0.xy, R0, R0.z;\n"
     6744    "MUL R0.xy, R0, c[0];\n"
     6745    "TEX R0.x, R0, texture[1], 2D;\n"
     6746    "ADD R0.x, -R0, c[5];\n"
     6747    "MUL R1, fragment.color.primary, R0.x;\n"
     6748    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6749    "TEX R0, R0.zwzw, texture[0], 2D;\n"
     6750    "ADD R2.w, -R0, c[5].x;\n"
    68376751    "ADD R3.xyz, R1.w, -R1;\n"
    68386752    "ADD R2.xyz, R0.w, -R0;\n"
    68396753    "MUL R2.xyz, R2, R3;\n"
    6840     "MUL R2.xyz, R2, c[5].x;\n"
     6754    "MUL R2.xyz, R2, c[5].y;\n"
    68416755    "MAD R2.xyz, R1.w, R0.w, -R2;\n"
     6756    "MAD R2.xyz, R1, R2.w, R2;\n"
    68426757    "MUL R4.xyz, R1, R2.w;\n"
    68436758    "MUL R3.xyz, R1, R0;\n"
    6844     "MAD R2.xyz, R1, R2.w, R2;\n"
    6845     "ADD R2.w, -R1, c[5].y;\n"
    6846     "MUL R1.xyz, R1, c[5].x;\n"
    6847     "MAD R2.xyz, R0, R2.w, R2;\n"
    6848     "MAD R3.xyz, R3, c[5].x, R4;\n"
    6849     "MAD R0.xyz, R0, R2.w, R3;\n"
    6850     "ADD R2.w, R1, R0;\n"
    6851     "ADD R2.xyz, R2, -R0;\n"
     6759    "MUL R1.xyz, R1, c[5].y;\n"
     6760    "ADD R2.w, -R1, c[5].x;\n"
     6761    "MAD R3.xyz, R3, c[5].y, R4;\n"
     6762    "MAD R3.xyz, R0, R2.w, R3;\n"
     6763    "MAD R0.xyz, R0, R2.w, R2;\n"
     6764    "ADD R2.x, R1.w, R0.w;\n"
     6765    "ADD R0.xyz, R0, -R3;\n"
    68526766    "SGE R1.xyz, R1, R1.w;\n"
    6853     "MAD result.color.xyz, R1, R2, R0;\n"
    6854     "MAD result.color.w, -R1, R0, R2;\n"
     6767    "MAD result.color.xyz, R1, R0, R3;\n"
     6768    "MAD result.color.w, -R1, R0, R2.x;\n"
    68556769    "END\n"
    68566770    ;
     
    68596773    "!!ARBfp1.0\n"
    68606774    "PARAM c[7] = { program.local[0..4],\n"
    6861     "           { 1, 9.9999997e-06, 2, 8 },\n"
    6862     "           { 3 } };\n"
     6775    "           { 1, 2, 9.9999997e-006, 4 },\n"
     6776    "           { 16, 12, 3 } };\n"
    68636777    "TEMP R0;\n"
    68646778    "TEMP R1;\n"
     
    68676781    "TEMP R4;\n"
    68686782    "TEMP R5;\n"
    6869     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6870     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6871     "ADD R1.xyz, R0, c[2];\n"
    6872     "RCP R0.z, R1.z;\n"
    6873     "MUL R1.xy, R1, R0.z;\n"
    6874     "MUL R1.xy, R1, c[3];\n"
    6875     "MOV R1.y, -R1;\n"
     6783    "TEMP R6;\n"
     6784    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6785    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6786    "ADD R1.xyz, R0, c[3];\n"
     6787    "RCP R1.z, R1.z;\n"
     6788    "MUL R1.xy, R1, R1.z;\n"
     6789    "MUL R1.xy, R1, c[0];\n"
     6790    "TEX R1.x, R1, texture[1], 2D;\n"
    68766791    "MUL R0.xy, fragment.position, c[4];\n"
    68776792    "TEX R0, R0, texture[0], 2D;\n"
    6878     "MAX R1.z, R0.w, c[5].y;\n"
    6879     "RCP R2.w, R1.z;\n"
    6880     "MUL R2.xyz, R0, R2.w;\n"
    6881     "MUL R5.xyz, -R2, c[5].w;\n"
    6882     "MAD R4.xyz, -R0, R2.w, c[5].x;\n"
    6883     "TEX R1.x, R1, texture[1], 2D;\n"
     6793    "MAX R1.z, R0.w, c[5];\n"
     6794    "RCP R1.z, R1.z;\n"
     6795    "MUL R3.xyz, R0, R1.z;\n"
     6796    "MAD R2.xyz, R3, c[6].x, -c[6].y;\n"
     6797    "ADD R1.x, -R1, c[5];\n"
    68846798    "MUL R1, fragment.color.primary, R1.x;\n"
    6885     "MAD R3.xyz, R1, c[5].z, -R1.w;\n"
    6886     "RSQ R2.x, R2.x;\n"
    6887     "RSQ R2.z, R2.z;\n"
    6888     "RSQ R2.y, R2.y;\n"
    6889     "MUL R4.xyz, R4, R3;\n"
    6890     "ADD R5.xyz, R5, c[6].x;\n"
    6891     "MUL R5.xyz, R4, R5;\n"
    6892     "ADD R4.xyz, R1.w, -R4;\n"
    6893     "RCP R2.x, R2.x;\n"
    6894     "RCP R2.z, R2.z;\n"
    6895     "RCP R2.y, R2.y;\n"
    6896     "MAD R2.xyz, R2, R0.w, -R0;\n"
    6897     "MUL R3.xyz, R2, R3;\n"
    6898     "ADD R2.xyz, R1.w, -R5;\n"
    6899     "MAD R5.xyz, R0, R1.w, R3;\n"
     6799    "MAD R4.xyz, R3, R2, c[6].z;\n"
     6800    "MAD R2.xyz, R1, c[5].y, -R1.w;\n"
     6801    "MUL R5.xyz, R0.w, R2;\n"
     6802    "MUL R6.xyz, R5, R4;\n"
     6803    "RSQ R2.w, R3.x;\n"
     6804    "RCP R4.x, R2.w;\n"
     6805    "RSQ R2.w, R3.y;\n"
     6806    "RSQ R3.w, R3.z;\n"
     6807    "RCP R4.y, R2.w;\n"
     6808    "RCP R4.z, R3.w;\n"
     6809    "ADD R4.xyz, -R3, R4;\n"
     6810    "MUL R6.xyz, R3, R6;\n"
     6811    "MUL R4.xyz, R5, R4;\n"
     6812    "ADD R3.xyz, -R3, c[5].x;\n"
     6813    "MAD R2.xyz, R2, R3, R1.w;\n"
     6814    "MUL R3.xyz, R1, c[5].y;\n"
     6815    "MAD R5.xyz, R1.w, R0, R6;\n"
     6816    "MAD R4.xyz, R1.w, R0, R4;\n"
     6817    "ADD R6.xyz, R4, -R5;\n"
     6818    "MUL R4.xyz, R0, c[5].w;\n"
     6819    "SGE R4.xyz, R4, R0.w;\n"
     6820    "MAD R4.xyz, R4, R6, R5;\n"
     6821    "MAD R4.xyz, -R0, R2, R4;\n"
    69006822    "MUL R2.xyz, R0, R2;\n"
    6901     "MUL R3.xyz, R0, c[5].w;\n"
    6902     "ADD R5.xyz, R5, -R2;\n"
    6903     "SGE R3.xyz, R3, R0.w;\n"
    6904     "MUL R3.xyz, R3, R5;\n"
    6905     "ADD R2.xyz, R2, R3;\n"
    6906     "MUL R3.xyz, R0, R4;\n"
    6907     "MUL R4.xyz, R1, c[5].z;\n"
    6908     "ADD R2.xyz, R2, -R3;\n"
    6909     "SGE R4.xyz, R4, R1.w;\n"
    6910     "MUL R2.xyz, R4, R2;\n"
    6911     "ADD R2.xyz, R3, R2;\n"
     6823    "SGE R3.xyz, R3, R1.w;\n"
     6824    "MAD R2.xyz, R3, R4, R2;\n"
    69126825    "ADD R2.w, -R0, c[5].x;\n"
    6913     "MAD R1.xyz, R1, R2.w, R2;\n"
    6914     "ADD R2.x, R1.w, R0.w;\n"
    6915     "ADD R2.y, -R1.w, c[5].x;\n"
    6916     "MAD result.color.xyz, R0, R2.y, R1;\n"
    6917     "MAD result.color.w, -R1, R0, R2.x;\n"
     6826    "MAD R2.xyz, R1, R2.w, R2;\n"
     6827    "ADD R1.x, R1.w, R0.w;\n"
     6828    "ADD R1.y, -R1.w, c[5].x;\n"
     6829    "MAD result.color.xyz, R0, R1.y, R2;\n"
     6830    "MAD result.color.w, -R1, R0, R1.x;\n"
    69186831    "END\n"
    69196832    ;
     
    69226835    "!!ARBfp1.0\n"
    69236836    "PARAM c[6] = { program.local[0..4],\n"
    6924     "           { 2 } };\n"
    6925     "TEMP R0;\n"
    6926     "TEMP R1;\n"
    6927     "TEMP R2;\n"
    6928     "TEMP R3;\n"
    6929     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6930     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6931     "ADD R0.xyz, R0, c[2];\n"
    6932     "RCP R0.z, R0.z;\n"
    6933     "MUL R0.xy, R0, R0.z;\n"
    6934     "MUL R0.xy, R0, c[3];\n"
    6935     "MOV R0.y, -R0;\n"
    6936     "TEX R1.x, R0, texture[1], 2D;\n"
    6937     "MUL R0.xy, fragment.position, c[4];\n"
     6837    "           { 1, 2 } };\n"
     6838    "TEMP R0;\n"
     6839    "TEMP R1;\n"
     6840    "TEMP R2;\n"
     6841    "TEMP R3;\n"
     6842    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6843    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6844    "ADD R0.xyz, R0, c[3];\n"
     6845    "RCP R0.z, R0.z;\n"
     6846    "MUL R0.xy, R0, R0.z;\n"
     6847    "MUL R0.xy, R0, c[0];\n"
     6848    "TEX R0.x, R0, texture[1], 2D;\n"
     6849    "ADD R1.x, -R0, c[5];\n"
     6850    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6851    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    69386852    "MUL R1, fragment.color.primary, R1.x;\n"
    6939     "TEX R0, R0, texture[0], 2D;\n"
    6940     "MUL R3.xyz, R0, R1.w;\n"
     6853    "MUL R3.xyz, R1.w, R0;\n"
    69416854    "MUL R2.xyz, R1, R0.w;\n"
    69426855    "ADD R0.xyz, R1, R0;\n"
    69436856    "MIN R2.xyz, R2, R3;\n"
    69446857    "ADD R1.x, R1.w, R0.w;\n"
    6945     "MAD result.color.xyz, -R2, c[5].x, R0;\n"
     6858    "MAD result.color.xyz, -R2, c[5].y, R0;\n"
    69466859    "MAD result.color.w, -R1, R0, R1.x;\n"
    69476860    "END\n"
     
    69566869    "TEMP R2;\n"
    69576870    "TEMP R3;\n"
    6958     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6959     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6960     "ADD R0.xyz, R0, c[2];\n"
    6961     "RCP R0.z, R0.z;\n"
    6962     "MUL R0.xy, R0, R0.z;\n"
    6963     "MUL R0.xy, R0, c[3];\n"
    6964     "MOV R0.y, -R0;\n"
    6965     "TEX R1.x, R0, texture[1], 2D;\n"
    6966     "MUL R0.xy, fragment.position, c[4];\n"
    6967     "TEX R0, R0, texture[0], 2D;\n"
     6871    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6872    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6873    "ADD R0.xyz, R0, c[3];\n"
     6874    "RCP R0.z, R0.z;\n"
     6875    "MUL R0.xy, R0, R0.z;\n"
     6876    "MUL R0.xy, R0, c[0];\n"
     6877    "TEX R0.x, R0, texture[1], 2D;\n"
     6878    "ADD R1.x, -R0, c[5];\n"
     6879    "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
     6880    "TEX R0, R0.zwzw, texture[0], 2D;\n"
    69686881    "MUL R1, fragment.color.primary, R1.x;\n"
    6969     "MUL R2.xyz, R0, R1.w;\n"
     6882    "MUL R2.xyz, R1.w, R0;\n"
    69706883    "MAD R3.xyz, R1, R0.w, R2;\n"
    69716884    "MUL R2.xyz, R1, R0;\n"
     
    69826895static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK =
    69836896    "!!ARBfp1.0\n"
    6984     "PARAM c[7] = { program.local[0..6] };\n"
    6985     "TEMP R0;\n"
    6986     "TEMP R1;\n"
    6987     "MUL R0.xyz, fragment.position.y, c[1];\n"
    6988     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    6989     "ADD R1.xyz, R0, c[2];\n"
    6990     "RCP R0.z, R1.z;\n"
    6991     "MUL R0.zw, R1.xyxy, R0.z;\n"
    6992     "MUL R1.xy, R0.zwzw, c[3];\n"
    6993     "MOV R1.y, -R1;\n"
    6994     "ADD R0.xy, fragment.position, c[4];\n"
    6995     "MUL R0.xy, R0, c[5];\n"
     6897    "PARAM c[8] = { program.local[0..6],\n"
     6898    "           { 1 } };\n"
     6899    "TEMP R0;\n"
     6900    "TEMP R1;\n"
     6901    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6902    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6903    "ADD R0.xyz, R0, c[3];\n"
     6904    "RCP R0.z, R0.z;\n"
     6905    "MUL R0.zw, R0.xyxy, R0.z;\n"
     6906    "MUL R0.zw, R0, c[0].xyxy;\n"
     6907    "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
     6908    "ADD R0.xy, fragment.position, c[5];\n"
     6909    "MUL R0.xy, R0, c[4];\n"
    69966910    "TEX R0, R0, texture[0], 2D;\n"
    6997     "TEX R1.x, R1, texture[1], 2D;\n"
    6998     "DP4 R0.x, R0, c[6];\n"
    6999     "MUL R1, fragment.color.primary, R1.x;\n"
    7000     "MUL result.color, R1, R0.x;\n"
     6911    "DP4 R1.y, R0, c[6];\n"
     6912    "ADD R1.x, -R1, c[7];\n"
     6913    "MUL R0, fragment.color.primary, R1.x;\n"
     6914    "MUL result.color, R0, R1.y;\n"
    70016915    "END\n"
    70026916    ;
     
    70046918static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK =
    70056919    "!!ARBfp1.0\n"
    7006     "PARAM c[4] = { program.local[0..3] };\n"
    7007     "TEMP R0;\n"
    7008     "MUL R0.xyz, fragment.position.y, c[1];\n"
    7009     "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
    7010     "ADD R0.xyz, R0, c[2];\n"
    7011     "RCP R0.z, R0.z;\n"
    7012     "MUL R0.xy, R0, R0.z;\n"
    7013     "MUL R0.xy, R0, c[3];\n"
    7014     "MOV R0.y, -R0;\n"
     6920    "PARAM c[5] = { program.local[0..3],\n"
     6921    "           { 1 } };\n"
     6922    "TEMP R0;\n"
     6923    "MUL R0.xyz, fragment.position.y, c[2];\n"
     6924    "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
     6925    "ADD R0.xyz, R0, c[3];\n"
     6926    "RCP R0.z, R0.z;\n"
     6927    "MUL R0.xy, R0, R0.z;\n"
     6928    "MUL R0.xy, R0, c[0];\n"
    70156929    "TEX R0.x, R0, texture[0], 2D;\n"
     6930    "ADD R0.x, -R0, c[4];\n"
    70166931    "MUL result.color, fragment.color.primary, R0.x;\n"
    70176932    "END\n"
     
    71967111static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = {
    71977112    {
    7198         { -1, -1, -1, 1, -1, 6, 2, -1, 5, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7199         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7200         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7201         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7202         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7203         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7204         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7205         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7206         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7207         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7208         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7209         { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
    7210         { -1, -1, -1, -1, -1, 3, -1, -1, 2, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
     7113        { -1, -1, -1, 2, -1, 0, 5, -1, 1, 3, 1, 0, -1, 4, -1, -1, -1, -1, -1, },
     7114        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7115        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7116        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7117        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7118        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7119        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7120        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7121        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7122        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7123        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7124        { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
     7125        { -1, -1, -1, -1, -1, 0, -1, -1, 1, 2, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
    72117126        { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
    72127127        { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
     
    72207135        { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
    72217136        { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
    7222         { -1, -1, -1, 1, -1, -1, 2, -1, -1, -1, 0, -1, -1, 0, -1, -1, -1, -1, -1, },
     7137        { -1, -1, -1, 0, -1, -1, 2, -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, -1, -1, },
    72237138        { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
    72247139    },
    72257140    {
    7226         { -1, -1, 4, 1, 5, 11, 2, -1, 10, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7227         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7228         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7229         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7230         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7231         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7232         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7233         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7234         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7235         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7236         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7237         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
    7238         { -1, -1, 1, -1, 2, 8, -1, -1, 7, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7239         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7240         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7241         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7242         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7243         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7244         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7245         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7246         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7247         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7248         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7249         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
    7250         { -1, -1, 1, 7, 2, -1, 8, -1, -1, -1, 0, -1, 1, 6, -1, 5, 3, 0, -1, },
    7251         { -1, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 5, 3, 0, -1, },
     7141        { -1, -1, 3, 7, 4, 5, 10, -1, 6, 8, 1, 0, 2, 9, -1, 1, 0, 2, -1, },
     7142        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7143        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7144        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7145        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7146        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7147        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7148        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7149        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7150        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7151        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7152        { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
     7153        { -1, -1, 3, -1, 4, 5, -1, -1, 6, 7, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7154        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7155        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7156        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7157        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7158        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7159        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7160        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7161        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7162        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7163        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7164        { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
     7165        { -1, -1, 3, 5, 4, -1, 7, -1, -1, -1, 0, -1, 1, 6, -1, 1, 0, 2, -1, },
     7166        { -1, -1, 3, -1, 4, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, 0, 2, -1, },
    72527167    },
    72537168    {
    7254         { -1, -1, 4, 1, 5, 12, 2, -1, 11, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7255         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7256         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7257         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7258         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7259         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7260         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7261         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7262         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7263         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7264         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7265         { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
    7266         { -1, -1, 1, -1, 2, 9, -1, -1, 8, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7267         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7268         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7269         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7270         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7271         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7272         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7273         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7274         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7275         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7276         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7277         { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
    7278         { -1, -1, 1, 8, 2, -1, 9, -1, -1, -1, 0, -1, 1, 7, -1, -1, -1, 0, 5, },
    7279         { -1, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, 5, },
     7169        { -1, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, 0, },
     7170        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7171        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7172        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7173        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7174        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7175        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7176        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7177        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7178        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7179        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7180        { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
     7181        { -1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7182        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7183        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7184        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7185        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7186        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7187        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7188        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7189        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7190        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7191        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7192        { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
     7193        { -1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, 0, },
     7194        { -1, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, 0, },
    72807195    },
    72817196    {
    7282         { -1, 6, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7283         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7284         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7285         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7286         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7287         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7288         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7289         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7290         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7291         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7292         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7293         { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
    7294         { -1, 3, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7295         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7296         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7297         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7298         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7299         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7300         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7301         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7302         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7303         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7304         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7305         { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
    7306         { -1, 3, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, 1, 4, -1, -1, -1, 0, -1, },
    7307         { -1, 3, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, -1, },
     7197        { -1, 0, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, -1, },
     7198        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7199        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7200        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7201        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7202        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7203        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7204        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7205        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7206        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7207        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7208        { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
     7209        { -1, 0, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7210        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7211        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7212        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7213        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7214        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7215        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7216        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7217        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7218        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7219        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7220        { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
     7221        { -1, 0, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, -1, },
     7222        { -1, 0, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, -1, },
    73087223    },
    73097224    {
    7310         { 2, -1, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7311         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7312         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7313         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7314         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7315         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7316         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7317         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7318         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7319         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7320         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7321         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7322         { 1, -1, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7323         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7324         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7325         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7326         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7327         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7328         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7329         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7330         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7331         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7332         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7333         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7334         { 1, -1, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, -1, 4, 3, -1, -1, 0, -1, },
    7335         { 0, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, },
     7225        { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, },
     7226        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7227        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7228        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7229        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7230        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7231        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7232        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7233        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7234        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7235        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7236        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7237        { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7238        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7239        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7240        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7241        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7242        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7243        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7244        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7245        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7246        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7247        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7248        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7249        { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, },
     7250        { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, },
    73367251    },
    73377252    {
    7338         { 2, -1, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7339         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7340         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7341         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7342         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7343         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7344         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7345         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7346         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7347         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7348         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7349         { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
    7350         { 1, -1, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7351         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7352         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7353         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7354         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7355         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7356         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7357         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7358         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7359         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7360         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7361         { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
    7362         { 1, -1, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, -1, 4, 3, -1, -1, 0, -1, },
    7363         { 0, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, },
     7253        { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, },
     7254        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7255        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7256        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7257        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7258        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7259        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7260        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7261        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7262        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7263        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7264        { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
     7265        { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7266        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7267        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7268        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7269        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7270        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7271        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7272        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7273        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7274        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7275        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7276        { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
     7277        { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, },
     7278        { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, },
    73647279    },
    73657280};
     
    73677282static int mask_variable_locations[num_fragment_masks][num_fragment_variables] = {
    73687283    { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
    7369     { -1, -1, 2, -1, 3, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, },
     7284    { -1, -1, 1, -1, 2, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, },
    73707285};
    73717286
  • trunk/src/opengl/util/generator.cpp

    r2 r561  
    22**
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    4 ** Contact: Qt Software Information (qt-info@nokia.com)
     4** All rights reserved.
     5** Contact: Nokia Corporation (qt-info@nokia.com)
    56**
    67** This file is part of the QtOpenGL module of the Qt Toolkit.
     
    2122** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    2223**
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
     24** In addition, as a special exception, Nokia gives you certain additional
     25** rights.  These rights are described in the Nokia Qt LGPL Exception
     26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    2727**
    2828** GNU General Public License Usage
     
    3434** met: http://www.gnu.org/copyleft/gpl.html.
    3535**
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at qt-sales@nokia.com.
     36** If you have questions regarding the use of this file, please contact
     37** Nokia at qt-info@nokia.com.
    3838** $QT_END_LICENSE$
    3939**
     
    4949
    5050#include <QtDebug>
     51#include <cstdlib>
    5152
    5253QT_BEGIN_NAMESPACE
    5354
    5455QT_USE_NAMESPACE
     56
     57#define TAB "    "
    5558
    5659typedef QPair<QString, QString> QStringPair;
     
    117120
    118121        if (lineStream.atEnd()) {
    119             qDebug() << "Error in file" << confFile << "(" << enumerator << ")";
     122            qDebug() << "Error in file" << confFile << '(' << enumerator << ')';
    120123            exit(0);
    121124        }
     
    243246}
    244247
     248void writeVariablesEnum(QTextStream &out, const char *name, const QSet<QString> &s)
     249{
     250    out << "enum " << name << " {";
     251    QSet<QString>::const_iterator it = s.begin();
     252    if (it != s.end()) {
     253        out << "\n" TAB "VAR_" << it->toUpper();
     254        for (++it; it != s.end(); ++it)
     255            out << ",\n" TAB "VAR_" << it->toUpper();
     256    }
     257    out << "\n};\n\n";
     258}
     259
     260void writeTypesEnum(QTextStream &out, const char *name, const QList<QStringPair> &s)
     261{
     262    out << "enum " << name << " {";
     263    QList<QStringPair>::const_iterator it = s.begin();
     264    if (it != s.end()) {
     265        out << "\n" TAB << it->first;
     266        for (++it; it != s.end(); ++it)
     267            out << ",\n" TAB << it->first;
     268    }
     269    out << "\n};\n\n";
     270}
     271
    245272void writeIncludeFile(const QSet<QString> &variables,
    246273                      const QList<QStringPair> &brushes,
     
    257284    QTextStream out(&includeFile);
    258285
    259     QLatin1String tab("    ");
    260 
    261     out << "#ifndef FRAGMENTPROGRAMS_H\n"
    262         << "#define FRAGMENTPROGRAMS_H\n\n";
    263 
    264     out << "enum FragmentVariable {\n";
    265     foreach (QString str, variables)
    266         out << tab << "VAR_" << str.toUpper() << ",\n";
    267     out << "};\n\n";
    268 
    269     out << "enum FragmentBrushType {\n";
    270     foreach (QStringPair brush, brushes)
    271         out << tab << brush.first << ",\n";
    272     out << "};\n\n";
    273 
    274     out << "enum FragmentCompositionModeType {\n";
    275     foreach (QStringPair mode, compositionModes)
    276         out << tab << mode.first << ",\n";
    277     out << "};\n\n";
    278 
    279     out << "enum FragmentMaskType {\n";
    280     foreach (QStringPair mask, masks)
    281         out << tab << mask.first << ",\n";
    282     out << "};\n\n";
     286    QLatin1String tab(TAB);
     287
     288    out << "/****************************************************************************\n"
     289           "**\n"
     290           "** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).\n"
     291           "** All rights reserved.\n"
     292           "** Contact: Nokia Corporation (qt-info@nokia.com)\n"
     293           "**\n"
     294           "** This file is part of the QtOpenGL module of the Qt Toolkit.\n"
     295           "**\n"
     296           "** $QT_BEGIN_LICENSE:LGPL$\n"
     297           "** Commercial Usage\n"
     298           "** Licensees holding valid Qt Commercial licenses may use this file in\n"
     299           "** accordance with the Qt Commercial License Agreement provided with the\n"
     300           "** Software or, alternatively, in accordance with the terms contained in\n"
     301           "** a written agreement between you and Nokia.\n"
     302           "**\n"
     303           "** GNU Lesser General Public License Usage\n"
     304           "** Alternatively, this file may be used under the terms of the GNU Lesser\n"
     305           "** General Public License version 2.1 as published by the Free Software\n"
     306           "** Foundation and appearing in the file LICENSE.LGPL included in the\n"
     307           "** packaging of this file.  Please review the following information to\n"
     308           "** ensure the GNU Lesser General Public License version 2.1 requirements\n"
     309           "** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.\n"
     310           "**\n"
     311           "** In addition, as a special exception, Nokia gives you certain additional\n"
     312           "** rights.  These rights are described in the Nokia Qt LGPL Exception\n"
     313           "** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.\n"
     314           "**\n"
     315           "** GNU General Public License Usage\n"
     316           "** Alternatively, this file may be used under the terms of the GNU\n"
     317           "** General Public License version 3.0 as published by the Free Software\n"
     318           "** Foundation and appearing in the file LICENSE.GPL included in the\n"
     319           "** packaging of this file.  Please review the following information to\n"
     320           "** ensure the GNU General Public License version 3.0 requirements will be\n"
     321           "** met: http://www.gnu.org/copyleft/gpl.html.\n"
     322           "**\n"
     323           "** If you have questions regarding the use of this file, please contact\n"
     324           "** Nokia at qt-info@nokia.com.\n"
     325           "** $QT_END_LICENSE$\n"
     326           "**\n"
     327           "****************************************************************************/\n"
     328           "\n"
     329           "#ifndef FRAGMENTPROGRAMS_P_H\n"
     330           "#define FRAGMENTPROGRAMS_P_H\n"
     331           "\n"
     332           "//\n"
     333           "//  W A R N I N G\n"
     334           "//  -------------\n"
     335           "//\n"
     336           "// This file is not part of the Qt API.  It exists purely as an\n"
     337           "// implementation detail.  This header file may change from version to\n"
     338           "// version without notice, or even be removed.\n"
     339           "//\n"
     340           "// We mean it.\n"
     341           "//\n"
     342           "\n";
     343
     344    writeVariablesEnum(out, "FragmentVariable", variables);
     345    writeTypesEnum(out, "FragmentBrushType", brushes);
     346    writeTypesEnum(out, "FragmentCompositionModeType", compositionModes);
     347    writeTypesEnum(out, "FragmentMaskType", masks);
    283348
    284349    out << "static const unsigned int num_fragment_variables = " << variables.size() << ";\n\n";
  • trunk/src/opengl/util/generator.pro

    r2 r561  
    1010# Input
    1111SOURCES += generator.cpp
     12
     13CONFIG += console
  • trunk/src/opengl/util/glsl_to_include.sh

    r2 r561  
    11#! /bin/sh
     2#############################################################################
     3##
     4## Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     5## All rights reserved.
     6## Contact: Nokia Corporation (qt-info@nokia.com)
     7##
     8## This file is the build configuration utility of the Qt Toolkit.
     9##
     10## $QT_BEGIN_LICENSE:LGPL$
     11## Commercial Usage
     12## Licensees holding valid Qt Commercial licenses may use this file in
     13## accordance with the Qt Commercial License Agreement provided with the
     14## Software or, alternatively, in accordance with the terms contained in
     15## a written agreement between you and Nokia.
     16##
     17## GNU Lesser General Public License Usage
     18## Alternatively, this file may be used under the terms of the GNU Lesser
     19## General Public License version 2.1 as published by the Free Software
     20## Foundation and appearing in the file LICENSE.LGPL included in the
     21## packaging of this file.  Please review the following information to
     22## ensure the GNU Lesser General Public License version 2.1 requirements
     23## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
     24##
     25## In addition, as a special exception, Nokia gives you certain additional
     26## rights.  These rights are described in the Nokia Qt LGPL Exception
     27## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
     28##
     29## GNU General Public License Usage
     30## Alternatively, this file may be used under the terms of the GNU
     31## General Public License version 3.0 as published by the Free Software
     32## Foundation and appearing in the file LICENSE.GPL included in the
     33## packaging of this file.  Please review the following information to
     34## ensure the GNU General Public License version 3.0 requirements will be
     35## met: http://www.gnu.org/copyleft/gpl.html.
     36##
     37## If you have questions regarding the use of this file, please contact
     38## Nokia at qt-info@nokia.com.
     39## $QT_END_LICENSE$
     40##
     41#############################################################################
    242
    343# Compile a .glsl file to a file that can be included in a C++ program
  • trunk/src/opengl/util/masks.conf

    r2 r561  
    11FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA trap_exact_aa.glsl
    22FRAGMENT_PROGRAM_MASK_ELLIPSE_AA ellipse_aa.glsl
    3 #FRAGMENT_PROGRAM_MASK_ELLIPSE ellipse.glsl
  • trunk/src/opengl/util/pattern_brush.glsl

    r2 r561  
    1818    coords *= inv_brush_texture_size;
    1919
    20     coords.y = -coords.y;
    21 
    22     float alpha = texture2D(brush_texture, coords).r;
     20    float alpha = 1.0 - texture2D(brush_texture, coords).r;
    2321
    2422    return gl_Color * alpha;
  • trunk/src/opengl/util/simple_porter_duff.glsl

    r2 r561  
    88    result.xyz = porterduff_ab.x * src.xyz * dst.a
    99               + porterduff_ab.y * dst.xyz * src.a
    10                + porterduff_xyz.y * src.xyz * (1 - dst.a)
    11                + porterduff_xyz.z * dst.xyz * (1 - src.a);
     10               + porterduff_xyz.y * src.xyz * (1.0 - dst.a)
     11               + porterduff_xyz.z * dst.xyz * (1.0 - src.a);
    1212
    13     result.a = dot(porterduff_xyz, vec3(src.a * dst.a, src.a * (1 - dst.a), dst.a * (1 - src.a)));
     13    result.a = dot(porterduff_xyz, vec3(src.a * dst.a, src.a * (1.0 - dst.a), dst.a * (1.0 - src.a)));
    1414
    1515    return result;
  • trunk/src/opengl/util/texture_brush.glsl

    r2 r561  
    1818    coords *= inv_brush_texture_size;
    1919
    20     coords.y = -coords.y;
    21 
    2220    return texture2D(brush_texture, coords);
    2321}
  • trunk/src/opengl/util/trap_exact_aa.glsl

    r2 r561  
    1515
    1616    // transform right line to left to be able to use same calculations for both
    17     vecX.zw = 2 * gl_FragCoord.x - vecX.zw;
     17    vecX.zw = 2.0 * gl_FragCoord.x - vecX.zw;
    1818
    1919    vec2 topX = vec2(vecX.x, vecX.z);
     
    3434    vec2 temp = mix(area - 0.5 * (right - bottomXTemp) * (intersectY.yw - bottom), // left < bottom < right < top
    3535                    (0.5 * (topXTemp + bottomXTemp) - left) * area,    // left < bottom < top < right
    36                     step(topXTemp, right));
     36                    step(topXTemp, right.xx));
    3737
    3838    vec2 excluded = 0.5 * (top - intersectY.xz) * (topXTemp - left); // bottom < left < top < right
    3939
    4040    excluded = mix((top - 0.5 * (intersectY.yw + intersectY.xz)) * (right - left), // bottom < left < right < top
    41                    excluded, step(topXTemp, right));
     41                   excluded, step(topXTemp, right.xx));
    4242
    4343    excluded = mix(temp, // left < bottom < right (see calculation of temp)
    44                    excluded, step(bottomXTemp, left));
     44                   excluded, step(bottomXTemp, left.xx));
    4545
    4646    excluded = mix(vec2(area, area), // right < bottom < top
    47                    excluded, step(bottomXTemp, right));
     47                   excluded, step(bottomXTemp, right.xx));
    4848
    4949    excluded *= step(left, topXTemp);
     
    5454void main()
    5555{
    56     gl_FragColor = quad_aa();
     56    gl_FragColor = quad_aa().xxxx;
    5757}
    5858
Note: See TracChangeset for help on using the changeset viewer.