Changeset 561 for trunk/src/opengl/util


Ignore:
Timestamp:
Feb 11, 2010, 11:19:06 PM (16 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 - 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 - 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 - src.a);
     9    result.rgb = mix(dst.rgb * src.a / max(1 - 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 - 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 * 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 - 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 - src.a),
     9                     src.a * dst.a - 2 - src.a),
     10                     step(src.a, 2 * 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 - 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 - 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 - src.a),
     9                     src.a * dst.a - 2 - src.a),
     10                     step(dst.a, 2 * 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();
    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 ([email protected])
     4** All rights reserved.
     5** Contact: Nokia Corporation ([email protected])
    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
     37** @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 R;\n"
    135136    "ADD R0.y, fragment.position, -c[0].x;\n"
    136     "MAX R2.x, R0.y, fragment.texcoord[0].y;\n"
     137    "MAX R.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 R;\n"
     146    "MOV R;\n"
     147    "MOV R;\n"
     148    "MOV R;\n"
     149    ";\n"
     150    "M;\n"
     151    ";\n"
     152    "fragment.texcoord[0];\n"
     153    "w;\n"
     154    ";\n"
     155    ";\n"
     156    "ADD R3.;\n"
     157    "ADD R;\n"
     158    "ADD R;\n"
     159    ";\n"
     160    ";\n"
     161    ";\n"
     162    "MAD R;\n"
     163    ";\n"
     164    "M;\n"
     165    "ADD R.x;\n"
     166    ";\n"
     167    "MUL R;\n"
     168    "ADD R;\n"
     169    "M;\n"
     170    "MAD R;\n"
     171    ";\n"
     172    ", R1;\n"
     173    "MAD R;\n"
     174    ";\n"
     175    ";\n"
     176    "ADD R;\n"
     177    ";\n"
     178    ";\n"
     179    "SGE R0.zw, R;\n"
     180    ";\n"
     181    "SGE R;\n"
     182    "M;\n"
     183    ";\n"
     184    "SGE R0.z, R.x;\n"
     185    ";\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[];\n"
     199    "MUL R1.xyz, R0.y, c[];\n"
     200    "MAD R0.xyz, R0.x, c[], R1;\n"
     201    "ADD R0.xyz, R0, c[];\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[];\n"
     206    "MOV R1.zw, c[].xyxy;\n"
     207    "MOV R0.x, c[].z;\n"
     208    "MOV R0.y, c[].z;\n"
     209    "MAD R0, , R1.xzyw;\n"
    210210    "MUL R1.xy, R2, fragment.texcoord[0];\n"
    211     "MUL R0, R0, R2.z;\n"
     211    "MUL R0, R;\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[];\n"
     272    "TEX R, R0, texture[0], 2D;\n"
     273    "ADD R.w, c[4];\n"
     274    "MUL R.x;\n"
     275    "MAD R;\n"
     276    "ADD R.w, -fragment.color.primary, c[4].x;\n"
     277    "MAD R2.xyz, R;\n"
     278    "ADD R.w;\n"
     279    "MAD R2.w, -fragment.color.primary, R.z;\n"
     280    "ADD R];\n"
     281    "MUL R];\n"
     282    "TEX R, texture[1], 2D;\n"
     283    "ADD R2, R2, -R;\n"
     284    "DP4 R];\n"
     285    "MAD result.color, R;\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[];\n"
     296    "TEX R, R0, texture[0], 2D;\n"
     297    "ADD R];\n"
     298    "ADD R2, fragment.color.primary, R;\n"
     299    "MUL R];\n"
     300    "MAD R2, -fragment.color.primary, R, R2;\n"
     301    "TEX R, texture[1], 2D;\n"
     302    "ADD R2, R2, -R;\n"
     303    "DP4 R];\n"
     304    "MAD result.color, R;\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[];\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[];\n"
     338    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     354    "TEX R, R0, texture[0], 2D;\n"
     355    "MUL R2.xyz, ;\n"
     356    "MUL R.w;\n"
     357    "MIN R, R2;\n"
     358    "ADD R, c[4].x;\n"
     359    "MAD R;\n"
     360    "ADD R.w, -fragment.color.primary, c[4].x;\n"
     361    "MAD R2.xyz, R;\n"
     362    "ADD R.w;\n"
     363    "MAD R2.w, -fragment.color.primary, R.z;\n"
     364    "ADD R];\n"
     365    "MUL R];\n"
     366    "TEX R, texture[1], 2D;\n"
     367    "ADD R2, R2, -R;\n"
     368    "DP4 R];\n"
     369    "MAD result.color, R;\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[];\n"
     381    "TEX R, R0, texture[0], 2D;\n"
     382    "MUL R2.xyz, ;\n"
     383    "MUL R.w;\n"
     384    "MAX R, R2;\n"
     385    "ADD R, c[4].x;\n"
     386    "MAD R;\n"
     387    "ADD R.w, -fragment.color.primary, c[4].x;\n"
     388    "MAD R2.xyz, R;\n"
     389    "ADD R.w;\n"
     390    "MAD R2.w, -fragment.color.primary, R.z;\n"
     391    "ADD R];\n"
     392    "MUL R];\n"
     393    "TEX R, texture[1], 2D;\n"
     394    "ADD R2, R2, -R;\n"
     395    "DP4 R];\n"
     396    "MAD result.color, R;\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-06 } };\n"
     404    "TEMP R0;\n"
     405    "TEMP R1;\n"
     406    "TEMP R2;\n"
     407    "TEMP R3;\n"
     408    "MUL R0.xy, fragment.position, c[];\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.;\n"
     411    "MAX R1.;\n"
     412    "MUL R2.xyz, R0, R1.;\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.;\n"
     416    "MAD R1.xyz, -fragment.color.primary, R1., 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, ;\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[];\n"
     432    "MUL R1.xy, R1, c[];\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[];\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-06 } };\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[];\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, ;\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
    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[];\n"
     473    "MUL R1.xy, R1, c[];\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[];\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[];\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[];\n"
     511    "MUL R0.xy, R0, c[];\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[];\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, },\n"
     523    "           { 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[];\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].;\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[];\n"
     623    "MUL R1.xy, R1, c[];\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[];\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, R;\n"
     652    "MUL R0.y, fragment.color.primary.w, R;\n"
     653    "DP3 result.color.w, R0, c[];\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, ;\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, ;\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-06 } };\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, ;\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-06 } };\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, ;\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, },\n"
     866    "           { 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, ;\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    "           { } };\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, ;\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]., R2;\n"
     946    "ADD R1.w, -R0, c[1].;\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];\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[];\n"
     960    "MUL R0.xy, R0, c[];\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[];\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, ;\n"
     991    "MUL R0.y, R0.;\n"
     992    "MUL R0.;\n"
     993    "MAD R0.;\n"
     994    "RSQ R0.;\n"
     995    "RCP R0.z, R0.;\n"
     996    "ADD R, R0.z;\n"
     997    "M;\n"
     998    ";\n"
     999    ";\n"
     1000    "MUL R0.;\n"
     1001    ";\n"
     1002    "MUL R.y;\n"
     1003    "TEX R, texture[2], 1D;\n"
     1004    "MUL R2.xyz, R].y;\n"
     1005    "MUL R3.xyz, R;\n"
     1006    "MUL R2.xyz, R].x;\n"
     1007    "MAD R2.xyz, R, R3;\n"
     1008    "ADD R3.xy, fragment.position, c[];\n"
     1009    "ADD R2.w, -R].z;\n"
     1010    "MUL R].y;\n"
     1011    "MAD R2.xyz, R, R2;\n"
     1012    "MUL R].z;\n"
     1013    "ADD R3.z, -R];\n"
     1014    "MAD R2.xyz, R, R2;\n"
     1015    "MUL R.w, R2.w;\n"
     1016    "MUL R.w;\n"
     1017    "MUL R.w, R3;\n"
     1018    "DP3 R2.w, R];\n"
     1019    "MUL R3.xy, R3, c[];\n"
     1020    "TEX R, R3, texture[1], 2D;\n"
     1021    "ADD R2, R2, -R;\n"
     1022    "DP4 R];\n"
     1023    "MAD result.color, R;\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
    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, ;\n"
     1044    "MUL R0.y, R0.;\n"
     1045    "MUL R0.;\n"
     1046    "MAD R0.;\n"
     1047    "RSQ R0.;\n"
     1048    "RCP R0.z, R0.;\n"
     1049    "ADD R, R0.z;\n"
     1050    "M;\n"
     1051    ";\n"
     1052    ";\n"
     1053    "MUL R0.;\n"
     1054    ";\n"
     1055    "MUL R.y;\n"
     1056    "TEX R, texture[2], 1D;\n"
     1057    "ADD R2.x, -R].z;\n"
     1058    "MUL R2.xyz, R, R2.x;\n"
     1059    "MAD R, R2;\n"
     1060    "ADD R2.x, -R].z;\n"
     1061    "MAD R2.xyz, R;\n"
     1062    "ADD R.w;\n"
     1063    "MAD R2.w, -R.z;\n"
     1064    "ADD R];\n"
     1065    "MUL R];\n"
     1066    "TEX R, texture[1], 2D;\n"
     1067    "ADD R2, R2, -R;\n"
     1068    "DP4 R];\n"
     1069    "MAD result.color, R;\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
    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[].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[].z;\n"
     1157    "MAD R3.xyz, R3, c[].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[].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[];\n"
     1167    "MUL R0.xy, R0, c[];\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[];\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
    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[].z;\n"
    13281312    "MAD R4.xyz, R0, R2.w, R3;\n"
    1329     "MUL R3.xyz, R1, R0.w;\n"
     1313    "MUL R3.xyz, R;\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[];\n"
     1327    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     1346    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     1347    "ADD R0.xyz, R0, c[];\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
    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, ;\n"
     1355    "MUL R0.y, R0.;\n"
     1356    "MUL R0.;\n"
     1357    "MAD R0.;\n"
     1358    ".x;\n"
     1359    ";\n"
     1360    ";\n"
     1361    ";\n"
     1362    ";\n"
     1363    ";\n"
     1364    "y;\n"
     1365    ";\n"
     1366    "MUL R0.x, R0, R0.;\n"
    13841367    "TEX R0, R0, texture[2], 1D;\n"
    1385     "MUL R2.xyz, R1, R0.w;\n"
     1368    "MUL R2.xyz, R;\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[].w;\n"
     1373    "ADD R2.w, -R1, c[].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[].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[];\n"
     1390    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     1408    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     1409    "ADD R0.xyz, R0, c[];\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
    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[].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[].z;\n"
     1440    "MAD R3.xyz, R3, c[].x, R4;\n"
     1441    "MUL R0.xyz, R0, c[].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[];\n"
     1450    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     1471    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     1472    "ADD R0.xyz, R0, c[];\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
    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 R].x, -R0.w;\n"
     1498    "M;\n"
     1499    "M;\n"
     1500    ";\n"
     1501    "RSQ R2..x;\n"
     1502    "R;\n"
     1503    "RSQ R2..y;\n"
     1504    ";\n"
     1505    ";\n"
     1506    ";\n"
     1507    ";\n"
     1508    ";\n"
     1509    ";\n"
     1510    ";\n"
     1511    "M;\n"
     1512    "MUL R;\n"
     1513    "MAD R, R6;\n"
     1514    "M;\n"
     1515    ";\n"
     1516    ";\n"
     1517    "SGE R, R1.w;\n"
     1518    "M;\n"
     1519    ";\n"
     1520    "SGE R, R0.w;\n"
     1521    ";\n"
     1522    ";\n"
     1523    ", R2;\n"
     1524    "MAD R.xyz, R0, R2.w, R2;\n"
     1525    "ADD R].z;\n"
     1526    "MAD R2.xyz, R1, R;\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[];\n"
     1530    "MUL R0.xy, R0, c[];\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[];\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[];\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, ;\n"
     1556    "MUL R0.y, R0.;\n"
     1557    "MUL R0.;\n"
     1558    "MAD R0.;\n"
     1559    "RSQ R0.z, R0.;\n"
     1560    ";\n"
     1561    ";\n"
     1562    ";\n"
     1563    ";\n"
     1564    ";\n"
     1565    ";\n"
     1566    ";\n"
     1567    ";\n"
     1568    "TEX R, texture[2], 1D;\n"
     1569    "ADD R;\n"
     1570    "MUL R;\n"
     1571    "MUL R.w;\n"
     1572    "MIN R;\n"
     1573    "MAD R2.xyz, -R;\n"
     1574    "ADD R.w;\n"
     1575    "MAD R2.w, -R.z;\n"
     1576    "ADD R];\n"
     1577    "MUL R];\n"
     1578    "TEX R, texture[1], 2D;\n"
     1579    "ADD R2, R2, -R;\n"
     1580    "DP4 R];\n"
     1581    "MAD result.color, R;\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[];\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[].y;\n"
     1662    "MOV R0.;\n"
     1663    "MUL R0.;\n"
     1664    "RCP R0.;\n"
     1665    "MUL R0.x, 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, R;\n"
     1668    "MUL R2.xyz, R0, c[].x;\n"
     1669    "MAD R2.xyz, R, R3;\n"
     1670    "ADD R2.w, -R1, c[].z;\n"
     1671    "MUL R0.xyz, R0, c[].y;\n"
     1672    "MAD R0.xyz, R, R2;\n"
     1673    "ADD R2.x, -R0.w, c[].z;\n"
     1674    "MUL R1.xyz, R1, c[].z;\n"
     1675    "MAD result.color.xyz, R, 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[];\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
    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, ;\n"
     1700    "MUL R0.y, R0.;\n"
     1701    "MUL R0.;\n"
     1702    "MAD R0.;\n"
     1703    "RSQ R0.;\n"
     1704    "RCP R0.z, R0.;\n"
     1705    "ADD R0., -R0, R0.z;\n"
     1706    "MUL R0.zw, fragment.position.xyxy, c[].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.;\n"
     1709    "MUL R0.;\n"
     1710    "RCP R0.;\n"
     1711    "MUL R0.x, 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[].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[].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[];\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, ;\n"
     1740    "MUL R0.y, R0.;\n"
     1741    "MUL R0.;\n"
     1742    "MAD R0.;\n"
     1743    "RSQ R0.z, R0.;\n"
     1744    ";\n"
     1745    ";\n"
     1746    ";\n"
     1747    ";\n"
     1748    ";\n"
     1749    "y;\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
    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[].z;\n"
     1799    "MAD R0.xyz, R0, c[].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[].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
    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[].z;\n"
    19641935    "MAD R3.xyz, R0, R2.w, R3;\n"
    1965     "MUL R1.xyz, R1, R0.w;\n"
     1936    "MUL R1.xyz, R;\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[];\n"
     1963    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     1964    "ADD R0.xyz, R0, c[];\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
    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, ;\n"
     1972    "MUL R0.y, R0.;\n"
     1973    "MUL R0.;\n"
     1974    "MAD R0.;\n"
     1975    ".x;\n"
     1976    ";\n"
     1977    ";\n"
     1978    ";\n"
     1979    ";\n"
     1980    ";\n"
     1981    "y;\n"
     1982    ";\n"
     1983    "MUL R0.x, R0, R0.;\n"
    20141984    "TEX R0, R0, texture[1], 1D;\n"
    2015     "MUL R2.xyz, R1, R0.w;\n"
     1985    "MUL R2.xyz, R;\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[].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[].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[].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[];\n"
     2019    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     2020    "ADD R0.xyz, R0, c[];\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
    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[].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[].z;\n"
     2051    "MUL R0.xyz, R0, c[].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[].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[];\n"
     2076    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     2077    "ADD R0.xyz, R0, c[];\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
    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, R;\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[].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
    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, ;\n"
     2196    "MUL R0.y, R0.;\n"
     2197    "MUL R0.;\n"
     2198    "MAD R0.;\n"
     2199    ".x;\n"
     2200    ";\n"
     2201    ";\n"
     2202    ";\n"
     2203    ";\n"
     2204    ";\n"
     2205    "y;\n"
     2206    ";\n"
     2207    "MUL R0.x, R0, R0.;\n"
    22432208    "TEX R0, R0, texture[1], 1D;\n"
    2244     "MUL R2.xyz, R1, R0.w;\n"
     2209    "MUL R2.xyz, R;\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[].x, R3;\n"
     2213    "ADD R2.w, -R1, c[].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[].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
    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, ;\n"
     2238    "MUL R0.y, R0.z, c[];\n"
     2239    "MUL R0.x, R0, c[];\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.;\n"
     2245    "MUL R0.;\n"
     2246    "RCP R1.y, R0.;\n"
     2247    "ADD R0.;\n"
     2248    "MUL R0.;\n"
     2249    "TEX R0, R0, 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[];\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[;\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[].w;\n"
     2530    "MAD R3.xyz, R3, c[, 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[;\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[];\n"
     2540    "MUL R0.xy, R0, c[];\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[];\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[;\n"
    27672730    "MAD R4.xyz, R0, R2.w, R3;\n"
    2768     "MUL R3.xyz, R1, R0.w;\n"
     2731    "MUL R3.xyz, R;\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[];\n"
     2745    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     2766    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     2767    "ADD R0.xyz, R0, c[];\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 R;\n"
    28132774    "ABS R0.z, R0;\n"
    2814     "CMP R0.y, -R0.z, R0, R0.w;\n"
     2775    "CMP R0.y, -R0.z, R0, R;\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, R;\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[];\n"
     2823    "MUL R0.xy, R0, c[];\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[];\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
     2877
     2878
    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[;\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[];\n"
     2888    "MAD R3.xyz, R3, c[, R4;\n"
     2889    "MUL R0.xyz, R0, c[;\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[];\n"
     2898    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     2922    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     2923    "ADD R0.xyz, R0, c[];\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 R;\n"
    29682930    "ABS R0.z, R0;\n"
    2969     "CMP R0.y, -R0.z, R0, R0.w;\n"
     2931    "CMP R0.y, -R0.z, R0, R;\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[];\n"
     2994    "MUL R0.xy, R0, c[];\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[];\n"
    31622998    "MAD result.color, R0.x, R2, R1;\n"
    31632999    "END\n"
    31643000    ;
    31653001
     3002
     3003
     3004
     3005
     3006
     3007
     3008
     3009
     3010
     3011
     3012
     3013
     3014
     3015
     3016
     3017
     3018
     3019
     3020
     3021
     3022
     3023
     3024
     3025
     3026
     3027
     3028
     3029
     3030
     3031
     3032
     3033
     3034
     3035
     3036
     3037
     3038
     3039
     3040
     3041
     3042
     3043
     3044
     3045
     3046
     3047
     3048
     3049
     3050
     3051
     3052
     3053
     3054
     3055
     3056
     3057
     3058
     3059
     3060
     3061
     3062
     3063
     3064
     3065
     3066
     3067
     3068
     3069
     3070
     3071
     3072
     3073
     3074
     3075
     3076
     3077
     3078
     3079
     3080
     3081
     3082
     3083
     3084
     3085
     3086
     3087
     3088
     3089
     3090
     3091
     3092
     3093
     3094
     3095
     3096
     3097
     3098
     3099
     3100
     3101
     3102
     3103
     3104
     3105
     3106
     3107
     3108
     3109
     3110
     3111
     3112
     3113
     3114
     3115
     3116
     3117
     3118
     3119
     3120
     3121
     3122
     3123
     3124
     3125
     3126
     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, R;\n"
     3177    "MUL R2.xyz, R0, c[].x;\n"
     3178    "MAD R2.xyz, R, R3;\n"
     3179    "ADD R2.w, -R1, c[;\n"
     3180    "MUL R0.xyz, R0, c[].y;\n"
     3181    "MAD R0.xyz, R, R2;\n"
     3182    "ADD R2.x, -R0.w, c[;\n"
     3183    "MUL R1.xyz, R1, c[].z;\n"
     3184    "MAD result.color.xyz, R, 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[];\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[;\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[;\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
     3342
    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[];\n"
     3353    "MAD R0.xyz, R0, c[, 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[;\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..],\n"
     3368    "           { 0. },\n"
     3369    "           { },\n"
     3370    "           \n"
     3371    "\n"
     3372    ";\n"
     3373    "TEMP R;\n"
     3374    "TEMP R;\n"
     3375    ";\n"
     3376    ";\n"
     3377    "];\n"
     3378    ";\n"
     3379    ";\n"
     3380    ";\n"
     3381    ";\n"
     3382    "A;\n"
     3383    "A.y;\n"
     3384    "A;\n"
     3385    ".x;\n"
     3386    "ABS R0.;\n"
     3387    ", R0.w;\n"
     3388    ";\n"
     3389    ";\n"
     3390    ";\n"
     3391    ";\n"
     3392    ";\n"
     3393    ";\n"
     3394    "M;\n"
     3395    ";\n"
     3396    "M;\n"
     3397    ";\n"
     3398    ";\n"
     3399    ";\n"
     3400    "CMP R0.;\n"
     3401    ";\n"
     3402    ";\n"
     3403    ";\n"
     3404    ";\n"
     3405    ";\n"
     3406    "];\n"
     3407    "MUL R0.x, R0, c[];\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, R;\n"
    34503413    "MIN R2.xyz, R2, R3;\n"
    3451     "ADD R2.w, -R1, c[4];\n"
     3414    "ADD R2.w, -R1, c[;\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[;\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..],\n"
     3426    "           { 0. },\n"
     3427    "           { },\n"
     3428    "           \n"
     3429    "\n"
     3430    ";\n"
     3431    "TEMP R;\n"
     3432    "TEMP R;\n"
     3433    ";\n"
     3434    ";\n"
     3435    "];\n"
     3436    ";\n"
     3437    ";\n"
     3438    ";\n"
     3439    ";\n"
     3440    "A;\n"
     3441    "A.y;\n"
     3442    "A;\n"
     3443    ".x;\n"
     3444    "ABS R0.;\n"
     3445    ", R0.w;\n"
     3446    ";\n"
     3447    ";\n"
     3448    ";\n"
     3449    ";\n"
     3450    ";\n"
     3451    ";\n"
     3452    "M;\n"
     3453    ";\n"
     3454    "M;\n"
     3455    ";\n"
     3456    ";\n"
     3457    ";\n"
     3458    "CMP R0.;\n"
     3459    ";\n"
     3460    ";\n"
     3461    ";\n"
     3462    ";\n"
     3463    ";\n"
     3464    "];\n"
     3465    "MUL R0.x, R0, c[];\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, R;\n"
    35083471    "MAX R2.xyz, R2, R3;\n"
    3509     "ADD R2.w, -R1, c[4];\n"
     3472    "ADD R2.w, -R1, c[;\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[;\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..],\n"
     3484    "           { 0.0020000001, },\n"
     3485    "           { },\n"
     3486    "           \n"
     3487    "\n"
     3488    ";\n"
     3489    "TEMP R;\n"
     3490    "TEMP R;\n"
     3491    ";\n"
     3492    ";\n"
     3493    "];\n"
     3494    ";\n"
     3495    ";\n"
     3496    ";\n"
     3497    ";\n"
     3498    "A;\n"
     3499    "A;\n"
     3500    "A;\n"
     3501    ".x;\n"
     3502    "ABS R0.;\n"
     3503    ", R0.w;\n"
     3504    ";\n"
     3505    ";\n"
     3506    ";\n"
     3507    ";\n"
     3508    ";\n"
     3509    ";\n"
     3510    "M.x;\n"
     3511    ";\n"
     3512    "M;\n"
     3513    ";\n"
     3514    ";\n"
     3515    ";\n"
     3516    "CMP R0.;\n"
     3517    ";\n"
     3518    "CMP R0.;\n"
     3519    ", R0;\n"
     3520    "];\n"
     3521    "MUL R0.x, R0, c[;\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[;\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[;\n"
     3528    "MAX R2.xyz, R1, c[;\n"
     3529    "MUL R1.xy, fragment.position, c[];\n"
    35673530    "TEX R1, R1, texture[0], 2D;\n"
    3568     "ADD R2.w, -R0, c[4];\n"
     3531    "ADD R2.w, -R0, c[;\n"
    35693532    "MUL R3.xyz, R1, R2.w;\n"
    3570     "ADD R2.w, -R1, c[4];\n"
     3533    "ADD R2.w, -R1, c[;\n"
    35713534    "MAD R3.xyz, R0, R2.w, R3;\n"
    3572     "MUL R1.xyz, R1, R0.w;\n"
     3535    "MUL R1.xyz, R;\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[];\n"
     3564    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     3565    "ADD R0.xyz, R0, c[];\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 R;\n"
    36113572    "ABS R0.z, R0;\n"
    3612     "CMP R0.y, -R0.z, R0, R0.w;\n"
     3573    "CMP R0.y, -R0.z, R0, R;\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, R;\n"
    36383600    "MAD R3.xyz, R0, R1.w, R2;\n"
     3601
    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[;\n"
    36423605    "MUL R5.xyz, R0, R2.w;\n"
    3643     "ADD R3.w, -R0, c[4];\n"
     3606    "ADD R3.w, -R0, c[;\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
     3669
     3670
    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[;\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[];\n"
     3680    "MUL R0.xyz, R0, c[;\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[, 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[];\n"
     3708    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     3709    "ADD R0.xyz, R0, c[];\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 R;\n"
    37543716    "ABS R0.z, R0;\n"
    3755     "CMP R0.y, -R0.z, R0, R0.w;\n"
     3717    "CMP R0.y, -R0.z, R0, R;\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
     3748
     3749
     3750
     3751
     3752
     3753
     3754
     3755
     3756
     3757
     3758
     3759
     3760
     3761
     3762
     3763
     3764
     3765
     3766
     3767
     3768
     3769
     3770
     3771
     3772
     3773
     3774
     3775
     3776
     3777
     3778
     3779
     3780
     3781
     3782
     3783
     3784
     3785
     3786
     3787
     3788
     3789
     3790
     3791
     3792
     3793
     3794
     3795
     3796
     3797
     3798
     3799
     3800
     3801
     3802
     3803
     3804
     3805
     3806
     3807
     3808
     3809
     3810
     3811
     3812
     3813
     3814
     3815
     3816
     3817
     3818
     3819
     3820
     3821
     3822
     3823
     3824
     3825
     3826
     3827
    38653828    "MUL R2.xyz, R0, R1.w;\n"
    3866     "MUL R3.xyz, R1, R0.w;\n"
     3829    "MUL R3.xyz, R;\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[, 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..],\n"
     3841    "           { 0. },\n"
     3842    "           { },\n"
     3843    "           \n"
     3844    "\n"
     3845    ";\n"
     3846    "TEMP R;\n"
     3847    "TEMP R;\n"
     3848    ";\n"
     3849    ";\n"
     3850    "];\n"
     3851    ";\n"
     3852    ";\n"
     3853    ";\n"
     3854    ";\n"
     3855    "A;\n"
     3856    "A.y;\n"
     3857    "A;\n"
     3858    ".x;\n"
     3859    "ABS R0.;\n"
     3860    ", R0.w;\n"
     3861    ";\n"
     3862    ";\n"
     3863    ";\n"
     3864    ";\n"
     3865    ";\n"
     3866    ";\n"
     3867    "M;\n"
     3868    ";\n"
     3869    "M;\n"
     3870    ";\n"
     3871    ";\n"
     3872    ";\n"
     3873    "CMP R0.;\n"
     3874    ";\n"
     3875    ";\n"
     3876    ";\n"
     3877    ";\n"
     3878    ";\n"
     3879    "];\n"
     3880    "MUL R0.x, R0, c[];\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, R;\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[, R3;\n"
     3888    "ADD R2.w, -R1, c[];\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[].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..],\n"
     3900    "           { 0. },\n"
     3901    "           { },\n"
     3902    "           \n"
     3903    "\n"
     3904    ";\n"
     3905    ";\n"
     3906    ";\n"
     3907    "];\n"
     3908    ";\n"
     3909    ";\n"
     3910    ";\n"
     3911    ";\n"
     3912    "A;\n"
     3913    "A.y;\n"
     3914    "A;\n"
     3915    ".x;\n"
     3916    "ABS R0.;\n"
     3917    ", R0.w;\n"
     3918    ";\n"
     3919    ";\n"
     3920    ";\n"
     3921    ";\n"
     3922    ";\n"
     3923    ";\n"
     3924    "M;\n"
     3925    ";\n"
     3926    "M;\n"
     3927    ";\n"
     3928    ";\n"
     3929    ";\n"
     3930    "CMP R0.;\n"
     3931    ";\n"
     3932    ";\n"
     3933    "CMP R0.;\n"
     3934    ";\n"
     3935    "MUL R1.x, R0];\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.;\n"
     3938    "MUL R0.xy, R0];\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[];\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[];\n"
     4107    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4108    "ADD R0.xyz, R0, c[];\n"
     4109    "RCP R0.z, R0.z;\n"
     4110    "MUL R0.xy, R0, R0.z;\n"
     4111    "MUL R0.xy, R0, c[];\n"
    41504112    "ADD R0.x, R0, R0.y;\n"
    4151     "MUL R0.x, R0, c[6].z;\n"
     4113    "MUL R0.x, R0, c[].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[];\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[];\n"
     4137    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     4154    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4155    "ADD R0.xyz, R0, c[];\n"
     4156    "RCP R0.z, R0.z;\n"
     4157    "MUL R0.xy, R0, R0.z;\n"
     4158    "MUL R0.xy, R0, c[];\n"
     4159    "ADD R0., R0.y;\n"
     4160    "MUL R].z;\n"
     4161    "MUL R];\n"
     4162    "TEX R, texture[0], 2D;\n"
     4163    "TEX R, texture[2], 1D;\n"
     4164    "MUL R3.xyz, R1;\n"
     4165    "MUL R2.xyz, R.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, -R, c[8].x;\n"
     4168    "MAD R, R2.w, R2;\n"
     4169    "ADD R2.x, -R.w, c[8];\n"
     4170    "MAD R2.xyz, R;\n"
     4171    "ADD R.w;\n"
     4172    "MAD R2.w, -R.z;\n"
     4173    "ADD R];\n"
     4174    "MUL R];\n"
     4175    "TEX R, texture[1], 2D;\n"
     4176    "ADD R2, R2, -R;\n"
     4177    "DP4 R];\n"
     4178    "MAD result.color, R;\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[];\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, R;\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[];\n"
     4261    "MUL R0.xy, R0, c[];\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[];\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-06 } };\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[];\n"
     4280    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4281    "ADD R0.xyz, R0, c[];\n"
     4282    "RCP R0.z, R0.z;\n"
     4283    "MUL R0.xy, R0, R0.z;\n"
     4284    "MUL R0.xy, R0, c[];\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[];\n"
     4312    "MUL R0.xy, R0, c[];\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[];\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[];\n"
     4330    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4331    "ADD R0.xyz, R0, c[];\n"
     4332    "RCP R0.z, R0.z;\n"
     4333    "MUL R0.xy, R0, R0.z;\n"
     4334    "MUL R0.xy, R0, c[];\n"
    43744335    "ADD R0.x, R0, R0.y;\n"
    4375     "MUL R0.x, R0, c[6].z;\n"
     4336    "MUL R0.x, R0, c[].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[];\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[];\n"
     4360    "MUL R0.xy, R0, c[];\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[];\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, },\n"
     4372    "           { 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[];\n"
     4428    "MUL R0.xy, R0, c[];\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[];\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[].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[];\n"
     4580    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4581    "ADD R0.xyz, R0, c[];\n"
     4582    "RCP R0.z, R0.z;\n"
     4583    "MUL R0.xy, R0, R0.z;\n"
     4584    "MUL R0.xy, R0, c[];\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[].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[];\n"
     4604    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4605    "ADD R0.xyz, R0, c[];\n"
     4606    "RCP R0.z, R0.z;\n"
     4607    "MUL R0.xy, R0, R0.z;\n"
     4608    "MUL R0.xy, R0, c[];\n"
    46514609    "ADD R0.x, R0, R0.y;\n"
    4652     "MUL R0.x, R0, c[3].z;\n"
     4610    "MUL R0.x, R0, c[].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[];\n"
     4645    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4646    "ADD R0.xyz, R0, c[];\n"
     4647    "RCP R0.z, R0.z;\n"
     4648    "MUL R0.xy, R0, R0.z;\n"
     4649    "MUL R0.xy, R0, c[];\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.;\n"
     4652    ";\n"
     4653    ";\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, R;\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[];\n"
     4676    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4677    "ADD R0.xyz, R0, c[];\n"
     4678    "RCP R0.z, R0.z;\n"
     4679    "MUL R0.xy, R0, R0.z;\n"
     4680    "MUL R0.xy, R0, c[];\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.;\n"
     4683    ";\n"
     4684    ";\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, R;\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-06 } };\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[];\n"
     4707    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4708    "ADD R0.xyz, R0, c[];\n"
     4709    "RCP R0.z, R0.z;\n"
     4710    "MUL R0.xy, R0, R0.z;\n"
     4711    "MUL R0.xy, R0, c[];\n"
    47544712    "ADD R0.x, R0, R0.y;\n"
    4755     "MUL R0.x, R0, c[3].z;\n"
     4713    "MUL R0.x, R0, c[].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, R;\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-06 } };\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[];\n"
     4752    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4753    "ADD R0.xyz, R0, c[];\n"
     4754    "RCP R0.z, R0.z;\n"
     4755    "MUL R0.xy, R0, R0.z;\n"
     4756    "MUL R0.xy, R0, c[];\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
    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[];\n"
     4796    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4797    "ADD R0.xyz, R0, c[];\n"
     4798    "RCP R0.z, R0.z;\n"
     4799    "MUL R0.xy, R0, R0.z;\n"
     4800    "MUL R0.xy, R0, c[];\n"
    48444801    "ADD R0.x, R0, R0.y;\n"
    4845     "MUL R0.x, R0, c[3].z;\n"
     4802    "MUL R0.x, R0, c[].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, },\n"
     4832    "           { 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 R.xyz, R0, R2.w, R2;\n"
     4883    "ADD R.x, R0.w, R1.w;\n"
     4884    "ADD R.y, -R0.w, c[5].x;\n"
     4885    "MAD result.color.xyz, R1, R;\n"
     4886    "MAD result.color.w, -R0, R1, R.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[];\n"
     4899    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4900    "ADD R0.xyz, R0, c[];\n"
     4901    "RCP R0.z, R0.z;\n"
     4902    "MUL R0.xy, R0, R0.z;\n"
     4903    "MUL R0.xy, R0, c[];\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, R;\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    "           { } };\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[];\n"
     4928    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4929    "ADD R0.xyz, R0, c[];\n"
     4930    "RCP R0.z, R0.z;\n"
     4931    "MUL R0.xy, R0, R0.z;\n"
     4932    "MUL R0.xy, R0, c[];\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.;\n"
     4935    ";\n"
     4936    ";\n"
    49814937    "TEX R0, R0, texture[1], 1D;\n"
    4982     "MUL R2.xyz, R1, R0.w;\n"
     4938    "MUL R2.xyz, R;\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]., R3;\n"
     4942    "ADD R2.w, -R1, c[5].;\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[];\n"
     4957    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4958    "ADD R0.xyz, R0, c[];\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[].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[];\n"
     4964    "MUL R0.xy, R0, c[];\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[].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[];\n"
     4978    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     4979    "ADD R0.xyz, R0, c[];\n"
     4980    "RCP R0.z, R0.z;\n"
     4981    "MUL R0.xy, R0, R0.z;\n"
     4982    "MUL R0.xy, R0, c[];\n"
    50274983    "ADD R0.x, R0, R0.y;\n"
    5028     "MUL R0.x, R0, c[3].z;\n"
     4984    "MUL R0.x, R0, c[].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[];\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[];\n"
     5126    "MUL R0.xy, R0, c[];\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[];\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, -R, c[8].x;\n"
     5155    "MAD R, R2.w, R2;\n"
     5156    "ADD R2.x, -R.w, c[8];\n"
     5157    "MAD R2.xyz, R;\n"
     5158    "ADD R.w;\n"
     5159    "MAD R2.w, -R.z;\n"
     5160    "ADD R];\n"
     5161    "MUL R];\n"
     5162    "TEX R, texture[1], 2D;\n"
     5163    "ADD R2, R2, -R;\n"
     5164    "DP4 R];\n"
     5165    "MAD result.color, R;\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, -R, c[8].x;\n"
     5190    "MAD R, R2.w, R2;\n"
     5191    "ADD R2.x, -R.w, c[8];\n"
     5192    "MAD R2.xyz, R;\n"
     5193    "ADD R.w;\n"
     5194    "MAD R2.w, -R.z;\n"
     5195    "ADD R];\n"
     5196    "MUL R];\n"
     5197    "TEX R, texture[1], 2D;\n"
     5198    "ADD R2, R2, -R;\n"
     5199    "DP4 R];\n"
     5200    "MAD result.color, R;\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-06 } };\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 R.xyz, -R0, R1.x, c[8].x;\n"
     5223    "MAX R2.xyz, R, c[8].y;\n"
     5224    "MUL R1.xy, fragment.position, c[];\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, R;\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[];\n"
     5244    "MUL R0.xy, R0, c[];\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[];\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-06 } };\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[];\n"
     5293    "MUL R0.xy, R0, c[];\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[];\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[];\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[];\n"
     5339    "MUL R0.xy, R0, c[];\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[];\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, },\n"
     5351    "           { 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[];\n"
     5405    "MUL R0.xy, R0, c[];\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[];\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, R;\n"
     5512    "DP3 result.color.w, R0, c[];\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    "M;\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, R;\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, R;\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 R.xyz, -R0, R1.x, c[5].x;\n"
     5677    "MAX R, 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.;\n"
     5681    "MUL R;\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 R;\n"
     5684    "MUL R1.xyz, R;\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 R.x;\n"
     5688    "RCP R.y;\n"
     5689    "RCP R.z;\n"
     5690    "MAD R;\n"
     5691    "MAD R;\n"
    57615692    "ADD R1.x, R0.w, R1.w;\n"
    5762     "ADD R3.xyz, R3, -R2;\n"
     5693    "ADD R;\n"
    57635694    "SGE R0.xyz, R0, R2.w;\n"
    5764     "MAD result.color.xyz, R0, R3, R2;\n"
     5695    "MAD result.color.xyz, R0, R;\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-06 } };\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
    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
    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    "M;\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, R;\n"
     5779    "MAD result.color.w, -R0, R1, R2;\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, },\n"
     5787    "           { 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, R;\n"
     5809    "M;\n"
     5810    "M;\n"
     5811    ";\n"
     5812    "RSQ R2..x;\n"
     5813    "R;\n"
     5814    "RSQ R2..y;\n"
     5815    ";\n"
     5816    ";\n"
     5817    "RCP R;\n"
     5818    ";\n"
     5819    ";\n"
     5820    "M;\n"
     5821    ";\n"
     5822    "M;\n"
     5823    "MUL R;\n"
     5824    "MAD R, R6;\n"
     5825    "M;\n"
     5826    "ADD R6.xyz, R;\n"
     5827    ".w;\n"
     5828    ";\n"
     5829    ", R5;\n"
     5830    ";\n"
     5831    ";\n"
     5832    ";\n"
     5833    ", 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 R.xyz, R0, R2.w, R2;\n"
     5836    "ADD R.x, R0.w, R1.w;\n"
     5837    "ADD R.y, -R0.w, c[5].x;\n"
     5838    "MAD result.color.xyz, R1, R;\n"
     5839    "MAD result.color.w, -R0, R1, R.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[];\n"
     5852    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     5853    "ADD R0.xyz, R0, c[];\n"
     5854    "RCP R0.z, R0.z;\n"
     5855    "MUL R0.xy, R0, R0.z;\n"
     5856    "MUL R0.;\n"
     5857    ";\n"
     5858    "MUL R];\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, R;\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, R;\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]., R3;\n"
     5891    "ADD R2.w, -R1, c[5].;\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[];\n"
     5906    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     5907    "ADD R1.xyz, R0, c[];\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[];\n"
     5911    "MUL R0.xy, R0, c[];\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[];\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[];\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    "           { } };\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[];\n"
     6050    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6051    "ADD R0.xyz, R0, c[];\n"
     6052    "RCP R0.z, R0.z;\n"
     6053    "MUL R0.xy, R0, R0.z;\n"
     6054    "MUL R0.xy, R0, c[];\n"
     6055    ";\n"
     6056    ";\n"
     6057    "MUL R1, fragment.color.primary, R.x;\n"
     6058    "MUL R0.;\n"
     6059    "TEX R0, R0, texture[0], 2D;\n"
     6060    "ADD R2.w, -R0, c[8].;\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].;\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]., 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].;\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[];\n"
     6080    "MUL R1.xy, R1, c[];\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[];\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[];\n"
     6097    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6098    "ADD R0.xyz, R0, c[];\n"
     6099    "RCP R0.z, R0.z;\n"
     6100    "MUL R0.xy, R0, R0.z;\n"
     6101    "MUL R0.xy, R0, c[];\n"
     6102    ";\n"
     6103    ";\n"
     6104    ";\n"
     6105    ";\n"
     6106    "MUL R.x;\n"
     6107    "MUL R3.xyz, R1;\n"
     6108    "MUL R2.xyz, R.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, -R, c[8].x;\n"
     6111    "MAD R, R2.w, R2;\n"
     6112    "ADD R2.x, -R.w, c[8];\n"
     6113    "MAD R2.xyz, R;\n"
     6114    "ADD R.w;\n"
     6115    "MAD R2.w, -R.z;\n"
     6116    "ADD R];\n"
     6117    "MUL R];\n"
     6118    "TEX R, texture[1], 2D;\n"
     6119    "ADD R2, R2, -R;\n"
     6120    "DP4 R];\n"
     6121    "MAD result.color, R;\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 R.xyz, -R1, R0.x, c[8].x;\n"
     6183    "MAX R2.xyz, R, c[8].y;\n"
     6184    "MUL R0.xy, fragment.position, c[];\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, R;\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[];\n"
     6204    "MUL R1.xy, R1, c[];\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[];\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-06 } };\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[];\n"
     6223    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6224    "ADD R0.xyz, R0, c[];\n"
     6225    "RCP R0.z, R0.z;\n"
     6226    "MUL R0.xy, R0, R0.z;\n"
     6227    "MUL R0.xy, R0, c[];\n"
     6228    ";\n"
     6229    ";\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.;\n"
     6232    "TEX R0, R0, texture[0], 2D;\n"
     6233    "MUL R2.xyz, R;\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[];\n"
     6255    "MUL R1.xy, R1, c[];\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[];\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    "           { } };\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[];\n"
     6273    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6274    "ADD R0.xyz, R0, c[];\n"
     6275    "RCP R0.z, R0.z;\n"
     6276    "MUL R0.xy, R0, R0.z;\n"
     6277    "MUL R0.xy, R0, c[];\n"
     6278    ";\n"
     6279    ";\n"
     6280    "MUL R1, fragment.color.primary, R.x;\n"
     6281    "MUL R0.;\n"
     6282    "TEX R0, R0, texture[0], 2D;\n"
     6283    "ADD R2.w, -R0, c[8].;\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].;\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].;\n"
     6293    "MAD R3.xyz, R3, c[8]., R4;\n"
     6294    "MUL R1.xyz, R1, c[8].;\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[];\n"
     6303    "MUL R1.xy, R1, c[];\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[];\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, },\n"
     6315    "           { 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[];\n"
     6444    "MUL R1.xy, R1, c[];\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[];\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, R;\n"
     6484    "DP3 result.color.w, R0, c[];\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[];\n"
     6496    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6497    "ADD R0.xyz, R0, c[];\n"
     6498    "RCP R0.z, R0.z;\n"
     6499    "MUL R0., R0.z;\n"
     6500    "MUL R];\n"
     6501    ";\n"
     6502    "MUL R0.;\n"
     6503    "TEX R0, R0, texture[0], 2D;\n"
     6504    ";\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[\n"
     6519    ";\n"
     6520    "TEMP R;\n"
     6521    "TEMP R;\n"
     6522    ";\n"
     6523    "M;\n"
     6524    ";\n"
     6525    ";\n"
     6526    ", R0.z;\n"
     6527    "MUL R0.xy, R0, ;\n"
     6528    "M;\n"
     6529    ";\n"
     6530    ";\n"
     6531    "MUL R0.;\n"
     6532    "TEX R0, R0, 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    "           { } };\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[];\n"
     6548    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6549    "ADD R0.xyz, R0, c[];\n"
     6550    "RCP R0.z, R0.z;\n"
     6551    "MUL R0.xy, R0, R0.z;\n"
     6552    "MUL R0.xy, R0, c[];\n"
     6553    ";\n"
     6554    ";\n"
     6555    "MUL R1, fragment.color.primary, R.x;\n"
     6556    "MUL R0.;\n"
     6557    "TEX R0, R0, 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].;\n"
     6562    "MUL R2.xyz, R2, c[5].;\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].;\n"
     6568    "MAD R1.xyz, R1, c[5]., 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].;\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[];\n"
     6589    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6590    "ADD R0.xyz, R0, c[];\n"
     6591    "RCP R0.z, R0.z;\n"
     6592    "MUL R0.xy, R0, R0.z;\n"
     6593    "MUL R0.xy, R0, c[];\n"
     6594    ";\n"
     6595    ";\n"
     6596    "MUL R0.;\n"
     6597    "TEX R0, R0, 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, R;\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[];\n"
     6620    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6621    "ADD R0.xyz, R0, c[];\n"
     6622    "RCP R0.z, R0.z;\n"
     6623    "MUL R0.xy, R0, R0.z;\n"
     6624    "MUL R0.xy, R0, c[];\n"
     6625    ";\n"
     6626    ";\n"
     6627    "MUL R0.;\n"
     6628    "TEX R0, R0, 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, R;\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
    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 R.xyz, -R1, R0.x, c[5].x;\n"
     6662    "MAX R, 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.;\n"
     6666    "MUL R;\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 R;\n"
     6669    "MUL R0.xyz, R;\n"
     6670    "RCP R.x;\n"
     6671    "RCP R.y;\n"
     6672    "RCP R.z;\n"
     6673    "MAD R;\n"
    67596674    "MAD R0.xyz, R1, R0.w, R0;\n"
    6760     "MAD R3.xyz, R1.w, R0.w, R3;\n"
     6675    "MAD R;\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 R;\n"
    67646679    "SGE R0.xyz, R0, R2.w;\n"
    6765     "MAD result.color.xyz, R0, R3, R2;\n"
     6680    "MAD result.color.xyz, R0, R;\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-06 } };\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[];\n"
     6696    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6697    "ADD R0.xyz, R0, c[];\n"
     6698    "RCP R0.z, R0.z;\n"
     6699    "MUL R0.xy, R0, R0.z;\n"
     6700    "MUL R0.xy, R0, c[];\n"
     6701    ";\n"
     6702    ";\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.;\n"
     6705    "TEX R0, R0, texture[0], 2D;\n"
     6706    "MUL R2.xyz, R;\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
    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    "           { } };\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[];\n"
     6740    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6741    "ADD R0.xyz, R0, c[];\n"
     6742    "RCP R0.z, R0.z;\n"
     6743    "MUL R0.xy, R0, R0.z;\n"
     6744    "MUL R0.xy, R0, c[];\n"
     6745    ";\n"
     6746    ";\n"
     6747    "MUL R1, fragment.color.primary, R.x;\n"
     6748    "MUL R0.;\n"
     6749    "TEX R0, R0, texture[0], 2D;\n"
     6750    "ADD R2.w, -R0, c[5].;\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].;\n"
    68416755    "MAD R2.xyz, R1.w, R0.w, -R2;\n"
     6756
    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, R;\n"
     6768    "MAD result.color.w, -R1, R0, R2;\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, },\n"
     6776    "           { 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 R.xyz, R1, R2.w, R2;\n"
     6827    "ADD R.x, R1.w, R0.w;\n"
     6828    "ADD R.y, -R1.w, c[5].x;\n"
     6829    "MAD result.color.xyz, R0, R;\n"
     6830    "MAD result.color.w, -R1, R0, R.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]., 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[];\n"
     6872    "MAD R0.xyz, fragment.position.x, c[], R0;\n"
     6873    "ADD R0.xyz, R0, c[];\n"
     6874    "RCP R0.z, R0.z;\n"
     6875    "MUL R0.xy, R0, R0.z;\n"
     6876    "MUL R0.xy, R0, c[];\n"
     6877    ";\n"
     6878    ";\n"
     6879    "MUL R0.;\n"
     6880    "TEX R0, R0, 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, R;\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    ";\n"
     6912    "];\n"
     6913    "MUL R, fragment.color.primary, R1.x;\n"
     6914    "MUL result.color, R;\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[\n"
     6921    ";\n"
     6922    ";\n"
     6923    "M;\n"
     6924    ";\n"
     6925    ";\n"
     6926    ", R0.z;\n"
     6927    "MUL R0.xy, R0, ;\n"
     6928    "M;\n"
    70156929    "TEX R0.x, R0, texture[0], 2D;\n"
     6930
    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, , -1, -1, -1, -1, -1, },
     7114        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7115        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7116        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7117        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7118        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7119        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7120        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7121        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7122        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7123        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7124        { -1, -1, -1, , -1, -1, -1, -1, -1, },
     7125        { -1, -1, -1, -1, -1, , -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, , -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, , -1, },
     7142        { -1, -1, , -1, },
     7143        { -1, -1, , -1, },
     7144        { -1, -1, , -1, },
     7145        { -1, -1, , -1, },
     7146        { -1, -1, , -1, },
     7147        { -1, -1, , -1, },
     7148        { -1, -1, , -1, },
     7149        { -1, -1, , -1, },
     7150        { -1, -1, , -1, },
     7151        { -1, -1, , -1, },
     7152        { -1, -1, , -1, },
     7153        { -1, -1, , -1, },
     7154        { -1, -1, , -1, },
     7155        { -1, -1, , -1, },
     7156        { -1, -1, , -1, },
     7157        { -1, -1, , -1, },
     7158        { -1, -1, , -1, },
     7159        { -1, -1, , -1, },
     7160        { -1, -1, , -1, },
     7161        { -1, -1, , -1, },
     7162        { -1, -1, , -1, },
     7163        { -1, -1, , -1, },
     7164        { -1, -1, , -1, },
     7165        { -1, -1, , -1, },
     7166        { -1, -1, , -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, , },
     7170        { -1, -1, , },
     7171        { -1, -1, , },
     7172        { -1, -1, , },
     7173        { -1, -1, , },
     7174        { -1, -1, , },
     7175        { -1, -1, , },
     7176        { -1, -1, , },
     7177        { -1, -1, , },
     7178        { -1, -1, , },
     7179        { -1, -1, , },
     7180        { -1, -1, , },
     7181        { -1, -1, , },
     7182        { -1, -1, , },
     7183        { -1, -1, , },
     7184        { -1, -1, , },
     7185        { -1, -1, , },
     7186        { -1, -1, , },
     7187        { -1, -1, , },
     7188        { -1, -1, , },
     7189        { -1, -1, , },
     7190        { -1, -1, , },
     7191        { -1, -1, , },
     7192        { -1, -1, , },
     7193        { -1, -1, , },
     7194        { -1, -1, , },
    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, , -1, },
     7198        { -1, , -1, },
     7199        { -1, , -1, },
     7200        { -1, , -1, },
     7201        { -1, , -1, },
     7202        { -1, , -1, },
     7203        { -1, , -1, },
     7204        { -1, , -1, },
     7205        { -1, , -1, },
     7206        { -1, , -1, },
     7207        { -1, , -1, },
     7208        { -1, , -1, },
     7209        { -1, , -1, },
     7210        { -1, , -1, },
     7211        { -1, , -1, },
     7212        { -1, , -1, },
     7213        { -1, , -1, },
     7214        { -1, , -1, },
     7215        { -1, , -1, },
     7216        { -1, , -1, },
     7217        { -1, , -1, },
     7218        { -1, , -1, },
     7219        { -1, , -1, },
     7220        { -1, , -1, },
     7221        { -1, , -1, },
     7222        { -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, , -1, },
     7226        { 2, -1, , -1, },
     7227        { 2, -1, , -1, },
     7228        { 2, -1, , -1, },
     7229        { 2, -1, , -1, },
     7230        { 2, -1, , -1, },
     7231        { 2, -1, , -1, },
     7232        { 2, -1, , -1, },
     7233        { 2, -1, , -1, },
     7234        { 2, -1, , -1, },
     7235        { 2, -1, , -1, },
     7236        { 2, -1, , -1, },
     7237        { 1, -1, , -1, },
     7238        { 1, -1, , -1, },
     7239        { 1, -1, , -1, },
     7240        { 1, -1, , -1, },
     7241        { 1, -1, , -1, },
     7242        { 1, -1, , -1, },
     7243        { 1, -1, , -1, },
     7244        { 1, -1, , -1, },
     7245        { 1, -1, , -1, },
     7246        { 1, -1, , -1, },
     7247        { 1, -1, , -1, },
     7248        { 1, -1, , -1, },
     7249        { 1, -1, , -1, },
     7250        { 0, -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, , -1, },
     7254        { 2, -1, , -1, },
     7255        { 2, -1, , -1, },
     7256        { 2, -1, , -1, },
     7257        { 2, -1, , -1, },
     7258        { 2, -1, , -1, },
     7259        { 2, -1, , -1, },
     7260        { 2, -1, , -1, },
     7261        { 2, -1, , -1, },
     7262        { 2, -1, , -1, },
     7263        { 2, -1, , -1, },
     7264        { 2, -1, , -1, },
     7265        { 1, -1, , -1, },
     7266        { 1, -1, , -1, },
     7267        { 1, -1, , -1, },
     7268        { 1, -1, , -1, },
     7269        { 1, -1, , -1, },
     7270        { 1, -1, , -1, },
     7271        { 1, -1, , -1, },
     7272        { 1, -1, , -1, },
     7273        { 1, -1, , -1, },
     7274        { 1, -1, , -1, },
     7275        { 1, -1, , -1, },
     7276        { 1, -1, , -1, },
     7277        { 1, -1, , -1, },
     7278        { 0, -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, },
    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 ([email protected])
     4** All rights reserved.
     5** Contact: Nokia Corporation ([email protected])
    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
     37** @nokia.com.
    3838** $QT_END_LICENSE$
    3939**
     
    4949
    5050#include <QtDebug>
     51
    5152
    5253QT_BEGIN_NAMESPACE
    5354
    5455QT_USE_NAMESPACE
     56
     57
    5558
    5659typedef QPair<QString, QString> QStringPair;
     
    117120
    118121        if (lineStream.atEnd()) {
    119             qDebug() << "Error in file" << confFile << "(" << enumerator << ")";
     122            qDebug() << "Error in file" << confFile << ;
    120123            exit(0);
    121124        }
     
    243246}
    244247
     248
     249
     250
     251
     252
     253
     254
     255
     256
     257
     258
     259
     260
     261
     262
     263
     264
     265
     266
     267
     268
     269
     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 ([email protected])\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 [email protected].\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
     13
  • trunk/src/opengl/util/glsl_to_include.sh

    r2 r561  
    11#! /bin/sh
     2
     3
     4
     5
     6
     7
     8
     9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     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 - dst.a)
     11               + porterduff_xyz.z * dst.xyz * (1 - 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 - 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 * 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));
    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));
    4242
    4343    excluded = mix(temp, // left < bottom < right (see calculation of temp)
    44                    excluded, step(bottomXTemp, left));
     44                   excluded, step(bottomXTemp, left));
    4545
    4646    excluded = mix(vec2(area, area), // right < bottom < top
    47                    excluded, step(bottomXTemp, right));
     47                   excluded, step(bottomXTemp, right));
    4848
    4949    excluded *= step(left, topXTemp);
     
    5454void main()
    5555{
    56     gl_FragColor = quad_aa();
     56    gl_FragColor = quad_aa();
    5757}
    5858
Note: See TracChangeset for help on using the changeset viewer.