src/opengl/util/fragmentprograms_p.h
changeset 0 1918ee327afb
child 3 41300fa6a67c
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtOpenGL module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    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.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #ifndef FRAGMENTPROGRAMS_P_H
       
    43 #define FRAGMENTPROGRAMS_P_H
       
    44 
       
    45 //
       
    46 //  W A R N I N G
       
    47 //  -------------
       
    48 //
       
    49 // This file is not part of the Qt API.  It exists purely as an
       
    50 // implementation detail.  This header file may change from version to
       
    51 // version without notice, or even be removed.
       
    52 //
       
    53 // We mean it.
       
    54 //
       
    55 
       
    56 enum FragmentVariable {
       
    57     VAR_BRUSH_TEXTURE,
       
    58     VAR_LINEAR,
       
    59     VAR_INV_MATRIX_M1,
       
    60     VAR_INV_MASK_SIZE,
       
    61     VAR_INV_MATRIX_M2,
       
    62     VAR_PORTERDUFF_AB,
       
    63     VAR_MASK_CHANNEL,
       
    64     VAR_ELLIPSE_OFFSET,
       
    65     VAR_PORTERDUFF_XYZ,
       
    66     VAR_INV_DST_SIZE,
       
    67     VAR_MASK_TEXTURE,
       
    68     VAR_DST_TEXTURE,
       
    69     VAR_PALETTE,
       
    70     VAR_MASK_OFFSET,
       
    71     VAR_INV_BRUSH_TEXTURE_SIZE,
       
    72     VAR_FMP2_M_RADIUS2,
       
    73     VAR_FMP,
       
    74     VAR_INV_MATRIX_M0,
       
    75     VAR_ANGLE
       
    76 };
       
    77 
       
    78 enum FragmentBrushType {
       
    79     FRAGMENT_PROGRAM_BRUSH_SOLID,
       
    80     FRAGMENT_PROGRAM_BRUSH_RADIAL,
       
    81     FRAGMENT_PROGRAM_BRUSH_CONICAL,
       
    82     FRAGMENT_PROGRAM_BRUSH_LINEAR,
       
    83     FRAGMENT_PROGRAM_BRUSH_TEXTURE,
       
    84     FRAGMENT_PROGRAM_BRUSH_PATTERN
       
    85 };
       
    86 
       
    87 enum FragmentCompositionModeType {
       
    88     COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
    89     COMPOSITION_MODES_MULTIPLY,
       
    90     COMPOSITION_MODES_SCREEN,
       
    91     COMPOSITION_MODES_OVERLAY,
       
    92     COMPOSITION_MODES_DARKEN,
       
    93     COMPOSITION_MODES_LIGHTEN,
       
    94     COMPOSITION_MODES_COLORDODGE,
       
    95     COMPOSITION_MODES_COLORBURN,
       
    96     COMPOSITION_MODES_HARDLIGHT,
       
    97     COMPOSITION_MODES_SOFTLIGHT,
       
    98     COMPOSITION_MODES_DIFFERENCE,
       
    99     COMPOSITION_MODES_EXCLUSION,
       
   100     COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
   101     COMPOSITION_MODES_MULTIPLY_NOMASK,
       
   102     COMPOSITION_MODES_SCREEN_NOMASK,
       
   103     COMPOSITION_MODES_OVERLAY_NOMASK,
       
   104     COMPOSITION_MODES_DARKEN_NOMASK,
       
   105     COMPOSITION_MODES_LIGHTEN_NOMASK,
       
   106     COMPOSITION_MODES_COLORDODGE_NOMASK,
       
   107     COMPOSITION_MODES_COLORBURN_NOMASK,
       
   108     COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
   109     COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
   110     COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
   111     COMPOSITION_MODES_EXCLUSION_NOMASK,
       
   112     COMPOSITION_MODE_BLEND_MODE_MASK,
       
   113     COMPOSITION_MODE_BLEND_MODE_NOMASK
       
   114 };
       
   115 
       
   116 enum FragmentMaskType {
       
   117     FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
       
   118     FRAGMENT_PROGRAM_MASK_ELLIPSE_AA
       
   119 };
       
   120 
       
   121 static const unsigned int num_fragment_variables = 19;
       
   122 
       
   123 static const unsigned int num_fragment_brushes = 6;
       
   124 static const unsigned int num_fragment_composition_modes = 26;
       
   125 static const unsigned int num_fragment_masks = 2;
       
   126 
       
   127 static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA =
       
   128     "!!ARBfp1.0\n"
       
   129     "PARAM c[1] = { { 0.5, 2 } };\n"
       
   130     "TEMP R0;\n"
       
   131     "TEMP R1;\n"
       
   132     "TEMP R2;\n"
       
   133     "TEMP R3;\n"
       
   134     "TEMP R4;\n"
       
   135     "ADD R3.z, fragment.position.x, c[0].x;\n"
       
   136     "ADD R0.y, fragment.position, -c[0].x;\n"
       
   137     "MAX R4.x, fragment.texcoord[0].y, R0.y;\n"
       
   138     "ADD R0.x, fragment.position.y, c[0];\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"
       
   144     "MAD R0, fragment.texcoord[1].xxzz, R0, fragment.texcoord[1].yyww;\n"
       
   145     "MAD R0.zw, fragment.position.x, c[0].y, -R0;\n"
       
   146     "MOV R2.x, R0;\n"
       
   147     "MOV R2.y, R0.z;\n"
       
   148     "MOV R1.w, R0;\n"
       
   149     "MOV R1.z, R0.y;\n"
       
   150     "MIN R1.xy, R2, R1.zwzw;\n"
       
   151     "SGE R0.xy, R1.zwzw, R2;\n"
       
   152     "ADD R0.zw, -fragment.texcoord[0], -fragment.texcoord[0];\n"
       
   153     "MAD R3.xy, R0, R0.zwzw, fragment.texcoord[0].zwzw;\n"
       
   154     "ADD R0, -R1.xxyy, R2.zwzw;\n"
       
   155     "MAD R0, R0, R3.xxyy, R4.x;\n"
       
   156     "ADD R3.xy, R0.ywzw, R0.xzzw;\n"
       
   157     "ADD R4.zw, R3.w, -R0.xyxz;\n"
       
   158     "ADD R0.zw, -R4.x, R0.xyyw;\n"
       
   159     "ADD R0.xy, R3.z, -R1;\n"
       
   160     "MAX R1.zw, R2.xyxy, R1;\n"
       
   161     "MUL R0.xy, R0, R0.zwzw;\n"
       
   162     "MAD R3.xy, -R3, c[0].x, R3.w;\n"
       
   163     "ADD R2.w, R3.z, -R2.z;\n"
       
   164     "MUL R2.xy, R3, R2.w;\n"
       
   165     "ADD R2.w, R3, -R4.x;\n"
       
   166     "ADD R3.xy, -R2.z, R1.zwzw;\n"
       
   167     "MUL R3.xy, R4.zwzw, R3;\n"
       
   168     "ADD R4.zw, R1.xyxy, R1;\n"
       
   169     "MAD R0.zw, R4, c[0].x, -R2.z;\n"
       
   170     "MAD R0.xy, -R0, c[0].x, R2.w;\n"
       
   171     "MAD R4.zw, R0, R2.w, -R0.xyxy;\n"
       
   172     "SGE R0.zw, R3.z, R1;\n"
       
   173     "MAD R0.xy, R0.zwzw, R4.zwzw, R0;\n"
       
   174     "MAD R3.xy, R3, c[0].x, -R2;\n"
       
   175     "MAD R0.zw, R0, R3.xyxy, R2.xyxy;\n"
       
   176     "ADD R2.xy, R0.zwzw, -R0;\n"
       
   177     "SGE R0.zw, R2.z, R1.xyxy;\n"
       
   178     "MAD R0.xy, R0.zwzw, R2, R0;\n"
       
   179     "SGE R0.zw, R1, R2.z;\n"
       
   180     "ADD R0.xy, R0, -R2.w;\n"
       
   181     "SGE R1.xy, R3.z, R1;\n"
       
   182     "MAD R0.xy, R1, R0, R2.w;\n"
       
   183     "MAD R0.x, -R0, R0.z, R2.w;\n"
       
   184     "SGE R0.z, R3.w, R4.x;\n"
       
   185     "MAD R0.x, -R0.y, R0.w, R0;\n"
       
   186     "MUL result.color, R0.x, R0.z;\n"
       
   187     "END\n"
       
   188     ;
       
   189 
       
   190 static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA =
       
   191     "!!ARBfp1.0\n"
       
   192     "PARAM c[6] = { program.local[0..3],\n"
       
   193     "		{ -2, 1, -0.5, 2 },\n"
       
   194     "		{ 3 } };\n"
       
   195     "TEMP R0;\n"
       
   196     "TEMP R1;\n"
       
   197     "TEMP R2;\n"
       
   198     "ADD R0.xy, fragment.position, c[3];\n"
       
   199     "MUL R1.xyz, R0.y, c[1];\n"
       
   200     "MAD R0.xyz, R0.x, c[0], R1;\n"
       
   201     "ADD R0.xyz, R0, c[2];\n"
       
   202     "RCP R2.z, R0.z;\n"
       
   203     "MUL R0.zw, R0.xyxy, R2.z;\n"
       
   204     "MUL R2.xy, R0.zwzw, fragment.texcoord[0];\n"
       
   205     "MOV R1.xy, c[0];\n"
       
   206     "MOV R1.zw, c[1].xyxy;\n"
       
   207     "MOV R0.x, c[0].z;\n"
       
   208     "MOV R0.y, c[1].z;\n"
       
   209     "MAD R0, R0.zzww, -R0.xyxy, R1.xzyw;\n"
       
   210     "MUL R1.xy, R2, fragment.texcoord[0];\n"
       
   211     "MUL R0, R2.z, R0;\n"
       
   212     "MUL R1.xy, R1, c[4].x;\n"
       
   213     "MUL R1.zw, R1.xyxy, R0.xyxz;\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"
       
   218     "ADD R0.x, R0, R0.y;\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"
       
   224     "MUL R0.y, -R0.x, c[4].w;\n"
       
   225     "ADD R0.y, R0, c[5].x;\n"
       
   226     "MUL R0.x, R0, R0;\n"
       
   227     "MUL result.color, R0.x, R0.y;\n"
       
   228     "END\n"
       
   229     ;
       
   230 
       
   231 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
       
   232     "!!ARBfp1.0\n"
       
   233     "PARAM c[7] = { program.local[0..5],\n"
       
   234     "		{ 1 } };\n"
       
   235     "TEMP R0;\n"
       
   236     "TEMP R1;\n"
       
   237     "TEMP R2;\n"
       
   238     "TEMP R3;\n"
       
   239     "MUL R0.xy, fragment.position, c[3];\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"
       
   261     "END\n"
       
   262     ;
       
   263 
       
   264 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY =
       
   265     "!!ARBfp1.0\n"
       
   266     "PARAM c[5] = { program.local[0..3],\n"
       
   267     "		{ 1 } };\n"
       
   268     "TEMP R0;\n"
       
   269     "TEMP R1;\n"
       
   270     "TEMP R2;\n"
       
   271     "MUL R0.xy, fragment.position, c[1];\n"
       
   272     "TEX R0, R0, texture[0], 2D;\n"
       
   273     "ADD R1.x, -R0.w, c[4];\n"
       
   274     "MUL R1.xyz, fragment.color.primary, R1.x;\n"
       
   275     "MAD R1.xyz, fragment.color.primary, R0, R1;\n"
       
   276     "ADD R1.w, -fragment.color.primary, c[4].x;\n"
       
   277     "MAD R2.xyz, R0, R1.w, R1;\n"
       
   278     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   279     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   280     "ADD R1.xy, fragment.position, c[2];\n"
       
   281     "MUL R1.xy, R1, c[0];\n"
       
   282     "TEX R1, R1, texture[1], 2D;\n"
       
   283     "ADD R2, R2, -R0;\n"
       
   284     "DP4 R1.x, R1, c[3];\n"
       
   285     "MAD result.color, R1.x, R2, R0;\n"
       
   286     "END\n"
       
   287     ;
       
   288 
       
   289 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN =
       
   290     "!!ARBfp1.0\n"
       
   291     "PARAM c[4] = { program.local[0..3] };\n"
       
   292     "TEMP R0;\n"
       
   293     "TEMP R1;\n"
       
   294     "TEMP R2;\n"
       
   295     "MUL R0.xy, fragment.position, c[1];\n"
       
   296     "TEX R0, R0, texture[0], 2D;\n"
       
   297     "ADD R1.xy, fragment.position, c[2];\n"
       
   298     "ADD R2, fragment.color.primary, R0;\n"
       
   299     "MUL R1.xy, R1, c[0];\n"
       
   300     "MAD R2, -fragment.color.primary, R0, R2;\n"
       
   301     "TEX R1, R1, texture[1], 2D;\n"
       
   302     "ADD R2, R2, -R0;\n"
       
   303     "DP4 R1.x, R1, c[3];\n"
       
   304     "MAD result.color, R1.x, R2, R0;\n"
       
   305     "END\n"
       
   306     ;
       
   307 
       
   308 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY =
       
   309     "!!ARBfp1.0\n"
       
   310     "PARAM c[5] = { program.local[0..3],\n"
       
   311     "		{ 2, 1 } };\n"
       
   312     "TEMP R0;\n"
       
   313     "TEMP R1;\n"
       
   314     "TEMP R2;\n"
       
   315     "TEMP R3;\n"
       
   316     "MUL R0.xy, fragment.position, c[1];\n"
       
   317     "TEX R1, R0, texture[0], 2D;\n"
       
   318     "ADD R0.w, -R1, c[4].y;\n"
       
   319     "MUL R3.xyz, fragment.color.primary, R0.w;\n"
       
   320     "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
       
   321     "ADD R0.xyz, R1.w, -R1;\n"
       
   322     "MUL R0.xyz, R0, R2;\n"
       
   323     "MUL R0.xyz, R0, c[4].x;\n"
       
   324     "MAD R0.xyz, fragment.color.primary.w, R1.w, -R0;\n"
       
   325     "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
       
   326     "MUL R2.xyz, fragment.color.primary, R1;\n"
       
   327     "MAD R2.xyz, R2, c[4].x, R3;\n"
       
   328     "ADD R0.w, -fragment.color.primary, c[4].y;\n"
       
   329     "MAD R3.xyz, R1, R0.w, R0;\n"
       
   330     "MAD R2.xyz, R1, R0.w, R2;\n"
       
   331     "MUL R0.xyz, R1, c[4].x;\n"
       
   332     "SGE R0.xyz, R0, R1.w;\n"
       
   333     "ADD R3.xyz, R3, -R2;\n"
       
   334     "MAD R2.xyz, R0, R3, R2;\n"
       
   335     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
       
   336     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
       
   337     "ADD R0.xy, fragment.position, c[2];\n"
       
   338     "MUL R0.xy, R0, c[0];\n"
       
   339     "TEX R0, R0, texture[1], 2D;\n"
       
   340     "ADD R2, R2, -R1;\n"
       
   341     "DP4 R0.x, R0, c[3];\n"
       
   342     "MAD result.color, R0.x, R2, R1;\n"
       
   343     "END\n"
       
   344     ;
       
   345 
       
   346 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN =
       
   347     "!!ARBfp1.0\n"
       
   348     "PARAM c[5] = { program.local[0..3],\n"
       
   349     "		{ 1 } };\n"
       
   350     "TEMP R0;\n"
       
   351     "TEMP R1;\n"
       
   352     "TEMP R2;\n"
       
   353     "MUL R0.xy, fragment.position, c[1];\n"
       
   354     "TEX R0, R0, texture[0], 2D;\n"
       
   355     "MUL R2.xyz, fragment.color.primary.w, R0;\n"
       
   356     "MUL R1.xyz, fragment.color.primary, R0.w;\n"
       
   357     "MIN R1.xyz, R1, R2;\n"
       
   358     "ADD R1.w, -R0, c[4].x;\n"
       
   359     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   360     "ADD R1.w, -fragment.color.primary, c[4].x;\n"
       
   361     "MAD R2.xyz, R0, R1.w, R1;\n"
       
   362     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   363     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   364     "ADD R1.xy, fragment.position, c[2];\n"
       
   365     "MUL R1.xy, R1, c[0];\n"
       
   366     "TEX R1, R1, texture[1], 2D;\n"
       
   367     "ADD R2, R2, -R0;\n"
       
   368     "DP4 R1.x, R1, c[3];\n"
       
   369     "MAD result.color, R1.x, R2, R0;\n"
       
   370     "END\n"
       
   371     ;
       
   372 
       
   373 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN =
       
   374     "!!ARBfp1.0\n"
       
   375     "PARAM c[5] = { program.local[0..3],\n"
       
   376     "		{ 1 } };\n"
       
   377     "TEMP R0;\n"
       
   378     "TEMP R1;\n"
       
   379     "TEMP R2;\n"
       
   380     "MUL R0.xy, fragment.position, c[1];\n"
       
   381     "TEX R0, R0, texture[0], 2D;\n"
       
   382     "MUL R2.xyz, fragment.color.primary.w, R0;\n"
       
   383     "MUL R1.xyz, fragment.color.primary, R0.w;\n"
       
   384     "MAX R1.xyz, R1, R2;\n"
       
   385     "ADD R1.w, -R0, c[4].x;\n"
       
   386     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   387     "ADD R1.w, -fragment.color.primary, c[4].x;\n"
       
   388     "MAD R2.xyz, R0, R1.w, R1;\n"
       
   389     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   390     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   391     "ADD R1.xy, fragment.position, c[2];\n"
       
   392     "MUL R1.xy, R1, c[0];\n"
       
   393     "TEX R1, R1, texture[1], 2D;\n"
       
   394     "ADD R2, R2, -R0;\n"
       
   395     "DP4 R1.x, R1, c[3];\n"
       
   396     "MAD result.color, R1.x, R2, R0;\n"
       
   397     "END\n"
       
   398     ;
       
   399 
       
   400 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE =
       
   401     "!!ARBfp1.0\n"
       
   402     "PARAM c[5] = { program.local[0..3],\n"
       
   403     "		{ 1, 1e-006 } };\n"
       
   404     "TEMP R0;\n"
       
   405     "TEMP R1;\n"
       
   406     "TEMP R2;\n"
       
   407     "TEMP R3;\n"
       
   408     "MUL R0.xy, fragment.position, c[1];\n"
       
   409     "TEX R0, R0, texture[0], 2D;\n"
       
   410     "ADD R1.x, -fragment.color.primary.w, c[4];\n"
       
   411     "MAX R1.y, fragment.color.primary.w, c[4];\n"
       
   412     "MUL R2.xyz, R0, R1.x;\n"
       
   413     "ADD R1.w, -R0, c[4].x;\n"
       
   414     "MAD R3.xyz, fragment.color.primary, R1.w, R2;\n"
       
   415     "RCP R1.y, R1.y;\n"
       
   416     "MAD R1.xyz, -fragment.color.primary, R1.y, c[4].x;\n"
       
   417     "MAX R1.xyz, R1, c[4].y;\n"
       
   418     "MUL R2.xyz, fragment.color.primary.w, R0;\n"
       
   419     "MUL R1.w, fragment.color.primary, R0;\n"
       
   420     "RCP R1.x, R1.x;\n"
       
   421     "RCP R1.y, R1.y;\n"
       
   422     "RCP R1.z, R1.z;\n"
       
   423     "MAD R1.xyz, R2, R1, R3;\n"
       
   424     "MAD R3.xyz, fragment.color.primary.w, R0.w, R3;\n"
       
   425     "MAD R2.xyz, fragment.color.primary, R0.w, R2;\n"
       
   426     "ADD R3.xyz, R3, -R1;\n"
       
   427     "SGE R2.xyz, R2, R1.w;\n"
       
   428     "MAD R2.xyz, R2, R3, R1;\n"
       
   429     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   430     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   431     "ADD R1.xy, fragment.position, c[2];\n"
       
   432     "MUL R1.xy, R1, c[0];\n"
       
   433     "TEX R1, R1, texture[1], 2D;\n"
       
   434     "ADD R2, R2, -R0;\n"
       
   435     "DP4 R1.x, R1, c[3];\n"
       
   436     "MAD result.color, R1.x, R2, R0;\n"
       
   437     "END\n"
       
   438     ;
       
   439 
       
   440 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN =
       
   441     "!!ARBfp1.0\n"
       
   442     "PARAM c[5] = { program.local[0..3],\n"
       
   443     "		{ 1, 9.9999997e-006 } };\n"
       
   444     "TEMP R0;\n"
       
   445     "TEMP R1;\n"
       
   446     "TEMP R2;\n"
       
   447     "TEMP R3;\n"
       
   448     "TEMP R4;\n"
       
   449     "MUL R0.xy, fragment.position, c[1];\n"
       
   450     "TEX R0, R0, texture[0], 2D;\n"
       
   451     "ADD R1.w, -R0, c[4].x;\n"
       
   452     "MUL R1.xyz, fragment.color.primary.w, R0;\n"
       
   453     "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
       
   454     "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
       
   455     "MUL R3.xyz, fragment.color.primary.w, R1;\n"
       
   456     "MAX R1.xyz, fragment.color.primary, c[4].y;\n"
       
   457     "ADD R2.w, -fragment.color.primary, c[4].x;\n"
       
   458     "MUL R4.xyz, fragment.color.primary, R1.w;\n"
       
   459     "RCP R1.x, R1.x;\n"
       
   460     "RCP R1.y, R1.y;\n"
       
   461     "RCP R1.z, R1.z;\n"
       
   462     "MAD R3.xyz, R3, R1, R4;\n"
       
   463     "MUL R1.xyz, R0, R2.w;\n"
       
   464     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   465     "MAD R3.xyz, R0, R2.w, R3;\n"
       
   466     "MUL R1.w, fragment.color.primary, R0;\n"
       
   467     "ADD R3.xyz, R3, -R1;\n"
       
   468     "SGE R2.xyz, R2, R1.w;\n"
       
   469     "MAD R2.xyz, R2, R3, R1;\n"
       
   470     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   471     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   472     "ADD R1.xy, fragment.position, c[2];\n"
       
   473     "MUL R1.xy, R1, c[0];\n"
       
   474     "TEX R1, R1, texture[1], 2D;\n"
       
   475     "ADD R2, R2, -R0;\n"
       
   476     "DP4 R1.x, R1, c[3];\n"
       
   477     "MAD result.color, R1.x, R2, R0;\n"
       
   478     "END\n"
       
   479     ;
       
   480 
       
   481 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT =
       
   482     "!!ARBfp1.0\n"
       
   483     "PARAM c[5] = { program.local[0..3],\n"
       
   484     "		{ 2, 1 } };\n"
       
   485     "TEMP R0;\n"
       
   486     "TEMP R1;\n"
       
   487     "TEMP R2;\n"
       
   488     "TEMP R3;\n"
       
   489     "MUL R0.xy, fragment.position, c[1];\n"
       
   490     "TEX R1, R0, texture[0], 2D;\n"
       
   491     "ADD R0.w, -R1, c[4].y;\n"
       
   492     "MUL R3.xyz, fragment.color.primary, R0.w;\n"
       
   493     "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
       
   494     "ADD R0.xyz, R1.w, -R1;\n"
       
   495     "MUL R0.xyz, R0, R2;\n"
       
   496     "MUL R0.xyz, R0, c[4].x;\n"
       
   497     "MAD R0.xyz, fragment.color.primary.w, R1.w, -R0;\n"
       
   498     "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
       
   499     "MUL R2.xyz, fragment.color.primary, R1;\n"
       
   500     "MAD R2.xyz, R2, c[4].x, R3;\n"
       
   501     "ADD R0.w, -fragment.color.primary, c[4].y;\n"
       
   502     "MAD R3.xyz, R1, R0.w, R0;\n"
       
   503     "MAD R2.xyz, R1, R0.w, R2;\n"
       
   504     "MUL R0.xyz, fragment.color.primary, c[4].x;\n"
       
   505     "SGE R0.xyz, R0, fragment.color.primary.w;\n"
       
   506     "ADD R3.xyz, R3, -R2;\n"
       
   507     "MAD R2.xyz, R0, R3, R2;\n"
       
   508     "ADD R0.z, fragment.color.primary.w, R1.w;\n"
       
   509     "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
       
   510     "ADD R0.xy, fragment.position, c[2];\n"
       
   511     "MUL R0.xy, R0, c[0];\n"
       
   512     "TEX R0, R0, texture[1], 2D;\n"
       
   513     "ADD R2, R2, -R1;\n"
       
   514     "DP4 R0.x, R0, c[3];\n"
       
   515     "MAD result.color, R0.x, R2, R1;\n"
       
   516     "END\n"
       
   517     ;
       
   518 
       
   519 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT =
       
   520     "!!ARBfp1.0\n"
       
   521     "PARAM c[6] = { program.local[0..3],\n"
       
   522     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
   523     "		{ 3 } };\n"
       
   524     "TEMP R0;\n"
       
   525     "TEMP R1;\n"
       
   526     "TEMP R2;\n"
       
   527     "TEMP R3;\n"
       
   528     "TEMP R4;\n"
       
   529     "TEMP R5;\n"
       
   530     "MUL R0.xy, fragment.position, c[1];\n"
       
   531     "TEX R0, R0, texture[0], 2D;\n"
       
   532     "MAX R1.x, R0.w, c[4].z;\n"
       
   533     "RCP R1.w, R1.x;\n"
       
   534     "MUL R1.xyz, R0, R1.w;\n"
       
   535     "MUL R4.xyz, -R1, c[4].w;\n"
       
   536     "RSQ R2.x, R1.x;\n"
       
   537     "RSQ R2.z, R1.z;\n"
       
   538     "RSQ R2.y, R1.y;\n"
       
   539     "MAD R1.xyz, -R0, R1.w, c[4].x;\n"
       
   540     "RCP R2.x, R2.x;\n"
       
   541     "RCP R2.z, R2.z;\n"
       
   542     "RCP R2.y, R2.y;\n"
       
   543     "MAD R3.xyz, R0.w, R2, -R0;\n"
       
   544     "MAD R2.xyz, fragment.color.primary, c[4].y, -fragment.color.primary.w;\n"
       
   545     "MUL R3.xyz, R2, R3;\n"
       
   546     "ADD R5.xyz, R4, c[5].x;\n"
       
   547     "MUL R4.xyz, R1, R2;\n"
       
   548     "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n"
       
   549     "MUL R2.xyz, fragment.color.primary, c[4].y;\n"
       
   550     "MAD R5.xyz, -R4, R5, fragment.color.primary.w;\n"
       
   551     "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n"
       
   552     "MAD R4.xyz, -R0, R5, R3;\n"
       
   553     "MUL R3.xyz, R0, c[4].w;\n"
       
   554     "MUL R5.xyz, R0, R5;\n"
       
   555     "SGE R3.xyz, R3, R0.w;\n"
       
   556     "MAD R3.xyz, R3, R4, R5;\n"
       
   557     "MAD R3.xyz, -R0, R1, R3;\n"
       
   558     "MUL R1.xyz, R0, R1;\n"
       
   559     "SGE R2.xyz, R2, fragment.color.primary.w;\n"
       
   560     "MAD R2.xyz, R2, R3, R1;\n"
       
   561     "ADD R1.x, -R0.w, c[4];\n"
       
   562     "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n"
       
   563     "ADD R1.x, -fragment.color.primary.w, c[4];\n"
       
   564     "MAD R2.xyz, R0, R1.x, R2;\n"
       
   565     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   566     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   567     "ADD R1.xy, fragment.position, c[2];\n"
       
   568     "MUL R1.xy, R1, c[0];\n"
       
   569     "TEX R1, R1, texture[1], 2D;\n"
       
   570     "ADD R2, R2, -R0;\n"
       
   571     "DP4 R1.x, R1, c[3];\n"
       
   572     "MAD result.color, R1.x, R2, R0;\n"
       
   573     "END\n"
       
   574     ;
       
   575 
       
   576 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE =
       
   577     "!!ARBfp1.0\n"
       
   578     "PARAM c[5] = { program.local[0..3],\n"
       
   579     "		{ 2 } };\n"
       
   580     "TEMP R0;\n"
       
   581     "TEMP R1;\n"
       
   582     "TEMP R2;\n"
       
   583     "TEMP R3;\n"
       
   584     "MUL R0.xy, fragment.position, c[1];\n"
       
   585     "TEX R0, R0, texture[0], 2D;\n"
       
   586     "ADD R1.xyz, fragment.color.primary, R0;\n"
       
   587     "MUL R3.xyz, fragment.color.primary.w, R0;\n"
       
   588     "MUL R2.xyz, fragment.color.primary, R0.w;\n"
       
   589     "MIN R2.xyz, R2, R3;\n"
       
   590     "MAD R2.xyz, -R2, c[4].x, R1;\n"
       
   591     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   592     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   593     "ADD R1.xy, fragment.position, c[2];\n"
       
   594     "MUL R1.xy, R1, c[0];\n"
       
   595     "TEX R1, R1, texture[1], 2D;\n"
       
   596     "ADD R2, R2, -R0;\n"
       
   597     "DP4 R1.x, R1, c[3];\n"
       
   598     "MAD result.color, R1.x, R2, R0;\n"
       
   599     "END\n"
       
   600     ;
       
   601 
       
   602 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION =
       
   603     "!!ARBfp1.0\n"
       
   604     "PARAM c[5] = { program.local[0..3],\n"
       
   605     "		{ 2, 1 } };\n"
       
   606     "TEMP R0;\n"
       
   607     "TEMP R1;\n"
       
   608     "TEMP R2;\n"
       
   609     "MUL R0.xy, fragment.position, c[1];\n"
       
   610     "TEX R0, R0, texture[0], 2D;\n"
       
   611     "MUL R1.xyz, fragment.color.primary.w, R0;\n"
       
   612     "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
       
   613     "MUL R1.xyz, fragment.color.primary, R0;\n"
       
   614     "MAD R1.xyz, -R1, c[4].x, R2;\n"
       
   615     "ADD R1.w, -R0, c[4].y;\n"
       
   616     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   617     "ADD R1.w, -fragment.color.primary, c[4].y;\n"
       
   618     "MAD R2.xyz, R0, R1.w, R1;\n"
       
   619     "ADD R1.z, fragment.color.primary.w, R0.w;\n"
       
   620     "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
       
   621     "ADD R1.xy, fragment.position, c[2];\n"
       
   622     "MUL R1.xy, R1, c[0];\n"
       
   623     "TEX R1, R1, texture[1], 2D;\n"
       
   624     "ADD R2, R2, -R0;\n"
       
   625     "DP4 R1.x, R1, c[3];\n"
       
   626     "MAD result.color, R1.x, R2, R0;\n"
       
   627     "END\n"
       
   628     ;
       
   629 
       
   630 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
       
   631     "!!ARBfp1.0\n"
       
   632     "PARAM c[4] = { program.local[0..2],\n"
       
   633     "		{ 1 } };\n"
       
   634     "TEMP R0;\n"
       
   635     "TEMP R1;\n"
       
   636     "TEMP R2;\n"
       
   637     "MUL R0.xy, fragment.position, c[2];\n"
       
   638     "TEX R0, R0, texture[0], 2D;\n"
       
   639     "MUL R1.xyz, R0, c[0].y;\n"
       
   640     "MUL R2.xyz, fragment.color.primary.w, R1;\n"
       
   641     "MUL R1.xyz, fragment.color.primary, c[0].x;\n"
       
   642     "MAD R2.xyz, R0.w, R1, R2;\n"
       
   643     "MUL R0.xyz, R0, c[1].z;\n"
       
   644     "ADD R1.w, -R0, c[3].x;\n"
       
   645     "MUL R1.xyz, fragment.color.primary, c[1].y;\n"
       
   646     "MAD R1.xyz, R1.w, R1, R2;\n"
       
   647     "ADD R2.x, -fragment.color.primary.w, c[3];\n"
       
   648     "MAD result.color.xyz, R2.x, R0, R1;\n"
       
   649     "MUL R0.x, fragment.color.primary.w, R0.w;\n"
       
   650     "MUL R0.z, R0.w, R2.x;\n"
       
   651     "MUL R0.y, fragment.color.primary.w, R1.w;\n"
       
   652     "DP3 result.color.w, R0, c[1];\n"
       
   653     "END\n"
       
   654     ;
       
   655 
       
   656 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK =
       
   657     "!!ARBfp1.0\n"
       
   658     "PARAM c[2] = { program.local[0],\n"
       
   659     "		{ 1 } };\n"
       
   660     "TEMP R0;\n"
       
   661     "TEMP R1;\n"
       
   662     "TEMP R2;\n"
       
   663     "MUL R0.xy, fragment.position, c[0];\n"
       
   664     "TEX R0, R0, texture[0], 2D;\n"
       
   665     "ADD R1.x, -R0.w, c[1];\n"
       
   666     "MUL R1.xyz, fragment.color.primary, R1.x;\n"
       
   667     "ADD R1.w, fragment.color.primary, R0;\n"
       
   668     "MAD R1.xyz, fragment.color.primary, R0, R1;\n"
       
   669     "ADD R2.x, -fragment.color.primary.w, c[1];\n"
       
   670     "MAD result.color.xyz, R0, R2.x, R1;\n"
       
   671     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   672     "END\n"
       
   673     ;
       
   674 
       
   675 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK =
       
   676     "!!ARBfp1.0\n"
       
   677     "PARAM c[1] = { program.local[0] };\n"
       
   678     "TEMP R0;\n"
       
   679     "TEMP R1;\n"
       
   680     "MUL R0.xy, fragment.position, c[0];\n"
       
   681     "TEX R0, R0, texture[0], 2D;\n"
       
   682     "ADD R1, fragment.color.primary, R0;\n"
       
   683     "MAD result.color, -fragment.color.primary, R0, R1;\n"
       
   684     "END\n"
       
   685     ;
       
   686 
       
   687 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK =
       
   688     "!!ARBfp1.0\n"
       
   689     "PARAM c[2] = { program.local[0],\n"
       
   690     "		{ 2, 1 } };\n"
       
   691     "TEMP R0;\n"
       
   692     "TEMP R1;\n"
       
   693     "TEMP R2;\n"
       
   694     "TEMP R3;\n"
       
   695     "MUL R0.xy, fragment.position, c[0];\n"
       
   696     "TEX R0, R0, texture[0], 2D;\n"
       
   697     "ADD R1.w, -R0, c[1].y;\n"
       
   698     "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
       
   699     "ADD R1.xyz, R0.w, -R0;\n"
       
   700     "MUL R1.xyz, R1, R2;\n"
       
   701     "MUL R1.xyz, R1, c[1].x;\n"
       
   702     "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n"
       
   703     "MUL R3.xyz, fragment.color.primary, R1.w;\n"
       
   704     "MUL R2.xyz, fragment.color.primary, R0;\n"
       
   705     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   706     "ADD R1.w, -fragment.color.primary, c[1].y;\n"
       
   707     "MAD R2.xyz, R2, c[1].x, R3;\n"
       
   708     "MAD R2.xyz, R0, R1.w, R2;\n"
       
   709     "MAD R1.xyz, R0, R1.w, R1;\n"
       
   710     "MUL R0.xyz, R0, c[1].x;\n"
       
   711     "ADD R1.w, fragment.color.primary, R0;\n"
       
   712     "ADD R1.xyz, R1, -R2;\n"
       
   713     "SGE R0.xyz, R0, R0.w;\n"
       
   714     "MAD result.color.xyz, R0, R1, R2;\n"
       
   715     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   716     "END\n"
       
   717     ;
       
   718 
       
   719 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK =
       
   720     "!!ARBfp1.0\n"
       
   721     "PARAM c[2] = { program.local[0],\n"
       
   722     "		{ 1 } };\n"
       
   723     "TEMP R0;\n"
       
   724     "TEMP R1;\n"
       
   725     "TEMP R2;\n"
       
   726     "MUL R0.xy, fragment.position, c[0];\n"
       
   727     "TEX R0, R0, texture[0], 2D;\n"
       
   728     "MUL R2.xyz, fragment.color.primary.w, R0;\n"
       
   729     "MUL R1.xyz, fragment.color.primary, R0.w;\n"
       
   730     "MIN R1.xyz, R1, R2;\n"
       
   731     "ADD R1.w, -R0, c[1].x;\n"
       
   732     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   733     "ADD R1.w, fragment.color.primary, R0;\n"
       
   734     "ADD R2.x, -fragment.color.primary.w, c[1];\n"
       
   735     "MAD result.color.xyz, R0, R2.x, R1;\n"
       
   736     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   737     "END\n"
       
   738     ;
       
   739 
       
   740 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK =
       
   741     "!!ARBfp1.0\n"
       
   742     "PARAM c[2] = { program.local[0],\n"
       
   743     "		{ 1 } };\n"
       
   744     "TEMP R0;\n"
       
   745     "TEMP R1;\n"
       
   746     "TEMP R2;\n"
       
   747     "MUL R0.xy, fragment.position, c[0];\n"
       
   748     "TEX R0, R0, texture[0], 2D;\n"
       
   749     "MUL R2.xyz, fragment.color.primary.w, R0;\n"
       
   750     "MUL R1.xyz, fragment.color.primary, R0.w;\n"
       
   751     "MAX R1.xyz, R1, R2;\n"
       
   752     "ADD R1.w, -R0, c[1].x;\n"
       
   753     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   754     "ADD R1.w, fragment.color.primary, R0;\n"
       
   755     "ADD R2.x, -fragment.color.primary.w, c[1];\n"
       
   756     "MAD result.color.xyz, R0, R2.x, R1;\n"
       
   757     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   758     "END\n"
       
   759     ;
       
   760 
       
   761 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK =
       
   762     "!!ARBfp1.0\n"
       
   763     "PARAM c[2] = { program.local[0],\n"
       
   764     "		{ 1, 1e-006 } };\n"
       
   765     "TEMP R0;\n"
       
   766     "TEMP R1;\n"
       
   767     "TEMP R2;\n"
       
   768     "MAX R1.y, fragment.color.primary.w, c[1];\n"
       
   769     "RCP R2.x, R1.y;\n"
       
   770     "MUL R0.xy, fragment.position, c[0];\n"
       
   771     "TEX R0, R0, texture[0], 2D;\n"
       
   772     "ADD R1.x, -fragment.color.primary.w, c[1];\n"
       
   773     "MUL R1.xyz, R0, R1.x;\n"
       
   774     "ADD R1.w, -R0, c[1].x;\n"
       
   775     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   776     "MAD R2.xyz, -fragment.color.primary, R2.x, c[1].x;\n"
       
   777     "MAX R2.xyz, R2, c[1].y;\n"
       
   778     "MUL R0.xyz, fragment.color.primary.w, R0;\n"
       
   779     "MUL R1.w, fragment.color.primary, R0;\n"
       
   780     "RCP R2.x, R2.x;\n"
       
   781     "RCP R2.y, R2.y;\n"
       
   782     "RCP R2.z, R2.z;\n"
       
   783     "MAD R2.xyz, R0, R2, R1;\n"
       
   784     "MAD R1.xyz, fragment.color.primary.w, R0.w, R1;\n"
       
   785     "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
       
   786     "SGE R0.xyz, R0, R1.w;\n"
       
   787     "ADD R1.xyz, R1, -R2;\n"
       
   788     "ADD R1.w, fragment.color.primary, R0;\n"
       
   789     "MAD result.color.xyz, R0, R1, R2;\n"
       
   790     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   791     "END\n"
       
   792     ;
       
   793 
       
   794 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK =
       
   795     "!!ARBfp1.0\n"
       
   796     "PARAM c[2] = { program.local[0],\n"
       
   797     "		{ 1, 9.9999997e-006 } };\n"
       
   798     "TEMP R0;\n"
       
   799     "TEMP R1;\n"
       
   800     "TEMP R2;\n"
       
   801     "TEMP R3;\n"
       
   802     "TEMP R4;\n"
       
   803     "MUL R0.xy, fragment.position, c[0];\n"
       
   804     "TEX R0, R0, texture[0], 2D;\n"
       
   805     "MUL R1.xyz, fragment.color.primary.w, R0;\n"
       
   806     "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
       
   807     "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
       
   808     "MUL R3.xyz, fragment.color.primary.w, R1;\n"
       
   809     "MAX R1.xyz, fragment.color.primary, c[1].y;\n"
       
   810     "ADD R1.w, -R0, c[1].x;\n"
       
   811     "MUL R4.xyz, fragment.color.primary, R1.w;\n"
       
   812     "ADD R2.w, -fragment.color.primary, c[1].x;\n"
       
   813     "RCP R1.x, R1.x;\n"
       
   814     "RCP R1.y, R1.y;\n"
       
   815     "RCP R1.z, R1.z;\n"
       
   816     "MAD R1.xyz, R3, R1, R4;\n"
       
   817     "MUL R3.xyz, R0, R2.w;\n"
       
   818     "MAD R0.xyz, R0, R2.w, R1;\n"
       
   819     "MAD R1.xyz, fragment.color.primary, R1.w, R3;\n"
       
   820     "MUL R1.w, fragment.color.primary, R0;\n"
       
   821     "SGE R2.xyz, R2, R1.w;\n"
       
   822     "ADD R0.xyz, R0, -R1;\n"
       
   823     "ADD R1.w, fragment.color.primary, R0;\n"
       
   824     "MAD result.color.xyz, R2, R0, R1;\n"
       
   825     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   826     "END\n"
       
   827     ;
       
   828 
       
   829 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK =
       
   830     "!!ARBfp1.0\n"
       
   831     "PARAM c[2] = { program.local[0],\n"
       
   832     "		{ 2, 1 } };\n"
       
   833     "TEMP R0;\n"
       
   834     "TEMP R1;\n"
       
   835     "TEMP R2;\n"
       
   836     "TEMP R3;\n"
       
   837     "MUL R0.xy, fragment.position, c[0];\n"
       
   838     "TEX R0, R0, texture[0], 2D;\n"
       
   839     "ADD R1.w, -R0, c[1].y;\n"
       
   840     "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
       
   841     "ADD R1.xyz, R0.w, -R0;\n"
       
   842     "MUL R1.xyz, R1, R2;\n"
       
   843     "MUL R1.xyz, R1, c[1].x;\n"
       
   844     "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n"
       
   845     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   846     "MUL R3.xyz, fragment.color.primary, R1.w;\n"
       
   847     "MUL R2.xyz, fragment.color.primary, R0;\n"
       
   848     "ADD R1.w, -fragment.color.primary, c[1].y;\n"
       
   849     "MAD R2.xyz, R2, c[1].x, R3;\n"
       
   850     "MAD R2.xyz, R0, R1.w, R2;\n"
       
   851     "MAD R0.xyz, R0, R1.w, R1;\n"
       
   852     "ADD R1.xyz, R0, -R2;\n"
       
   853     "MUL R0.xyz, fragment.color.primary, c[1].x;\n"
       
   854     "ADD R1.w, fragment.color.primary, R0;\n"
       
   855     "SGE R0.xyz, R0, fragment.color.primary.w;\n"
       
   856     "MAD result.color.xyz, R0, R1, R2;\n"
       
   857     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   858     "END\n"
       
   859     ;
       
   860 
       
   861 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
       
   862     "!!ARBfp1.0\n"
       
   863     "PARAM c[3] = { program.local[0],\n"
       
   864     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
   865     "		{ 3 } };\n"
       
   866     "TEMP R0;\n"
       
   867     "TEMP R1;\n"
       
   868     "TEMP R2;\n"
       
   869     "TEMP R3;\n"
       
   870     "TEMP R4;\n"
       
   871     "TEMP R5;\n"
       
   872     "MUL R0.xy, fragment.position, c[0];\n"
       
   873     "TEX R0, R0, texture[0], 2D;\n"
       
   874     "MAX R1.x, R0.w, c[1].z;\n"
       
   875     "RCP R1.w, R1.x;\n"
       
   876     "MUL R1.xyz, R0, R1.w;\n"
       
   877     "MUL R4.xyz, -R1, c[1].w;\n"
       
   878     "RSQ R2.x, R1.x;\n"
       
   879     "RSQ R2.z, R1.z;\n"
       
   880     "RSQ R2.y, R1.y;\n"
       
   881     "RCP R2.x, R2.x;\n"
       
   882     "RCP R2.z, R2.z;\n"
       
   883     "RCP R2.y, R2.y;\n"
       
   884     "MAD R3.xyz, R0.w, R2, -R0;\n"
       
   885     "MAD R2.xyz, fragment.color.primary, c[1].y, -fragment.color.primary.w;\n"
       
   886     "MUL R3.xyz, R2, R3;\n"
       
   887     "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n"
       
   888     "MAD R1.xyz, -R0, R1.w, c[1].x;\n"
       
   889     "ADD R5.xyz, R4, c[2].x;\n"
       
   890     "MUL R4.xyz, R1, R2;\n"
       
   891     "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n"
       
   892     "MAD R5.xyz, -R4, R5, fragment.color.primary.w;\n"
       
   893     "MAD R4.xyz, -R0, R5, R3;\n"
       
   894     "MUL R3.xyz, R0, c[1].w;\n"
       
   895     "MUL R2.xyz, fragment.color.primary, c[1].y;\n"
       
   896     "MUL R5.xyz, R0, R5;\n"
       
   897     "SGE R3.xyz, R3, R0.w;\n"
       
   898     "MAD R3.xyz, R3, R4, R5;\n"
       
   899     "MAD R3.xyz, -R0, R1, R3;\n"
       
   900     "MUL R1.xyz, R0, R1;\n"
       
   901     "SGE R2.xyz, R2, fragment.color.primary.w;\n"
       
   902     "MAD R2.xyz, R2, R3, R1;\n"
       
   903     "ADD R1.x, -R0.w, c[1];\n"
       
   904     "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n"
       
   905     "ADD R1.x, fragment.color.primary.w, R0.w;\n"
       
   906     "ADD R1.y, -fragment.color.primary.w, c[1].x;\n"
       
   907     "MAD result.color.xyz, R0, R1.y, R2;\n"
       
   908     "MAD result.color.w, -fragment.color.primary, R0, R1.x;\n"
       
   909     "END\n"
       
   910     ;
       
   911 
       
   912 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK =
       
   913     "!!ARBfp1.0\n"
       
   914     "PARAM c[2] = { program.local[0],\n"
       
   915     "		{ 2 } };\n"
       
   916     "TEMP R0;\n"
       
   917     "TEMP R1;\n"
       
   918     "TEMP R2;\n"
       
   919     "MUL R0.xy, fragment.position, c[0];\n"
       
   920     "TEX R0, R0, texture[0], 2D;\n"
       
   921     "MUL R2.xyz, fragment.color.primary.w, R0;\n"
       
   922     "MUL R1.xyz, fragment.color.primary, R0.w;\n"
       
   923     "ADD R1.w, fragment.color.primary, R0;\n"
       
   924     "MIN R1.xyz, R1, R2;\n"
       
   925     "ADD R0.xyz, fragment.color.primary, R0;\n"
       
   926     "MAD result.color.xyz, -R1, c[1].x, R0;\n"
       
   927     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   928     "END\n"
       
   929     ;
       
   930 
       
   931 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK =
       
   932     "!!ARBfp1.0\n"
       
   933     "PARAM c[2] = { program.local[0],\n"
       
   934     "		{ 2, 1 } };\n"
       
   935     "TEMP R0;\n"
       
   936     "TEMP R1;\n"
       
   937     "TEMP R2;\n"
       
   938     "MUL R0.xy, fragment.position, c[0];\n"
       
   939     "TEX R0, R0, texture[0], 2D;\n"
       
   940     "MUL R1.xyz, fragment.color.primary.w, R0;\n"
       
   941     "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
       
   942     "MUL R1.xyz, fragment.color.primary, R0;\n"
       
   943     "MAD R1.xyz, -R1, c[1].x, R2;\n"
       
   944     "ADD R1.w, -R0, c[1].y;\n"
       
   945     "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
       
   946     "ADD R1.w, fragment.color.primary, R0;\n"
       
   947     "ADD R2.x, -fragment.color.primary.w, c[1].y;\n"
       
   948     "MAD result.color.xyz, R0, R2.x, R1;\n"
       
   949     "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
       
   950     "END\n"
       
   951     ;
       
   952 
       
   953 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK =
       
   954     "!!ARBfp1.0\n"
       
   955     "PARAM c[3] = { program.local[0..2] };\n"
       
   956     "TEMP R0;\n"
       
   957     "ADD R0.xy, fragment.position, c[1];\n"
       
   958     "MUL R0.xy, R0, c[0];\n"
       
   959     "TEX R0, R0, texture[0], 2D;\n"
       
   960     "DP4 R0.x, R0, c[2];\n"
       
   961     "MUL result.color, fragment.color.primary, R0.x;\n"
       
   962     "END\n"
       
   963     ;
       
   964 
       
   965 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK =
       
   966     "!!ARBfp1.0\n"
       
   967     "MOV result.color, fragment.color.primary;\n"
       
   968     "END\n"
       
   969     ;
       
   970 
       
   971 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
       
   972     "!!ARBfp1.0\n"
       
   973     "PARAM c[12] = { program.local[0..10],\n"
       
   974     "		{ 2, 4, 1 } };\n"
       
   975     "TEMP R0;\n"
       
   976     "TEMP R1;\n"
       
   977     "TEMP R2;\n"
       
   978     "TEMP R3;\n"
       
   979     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
   980     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
   981     "ADD R0.xyz, R0, c[4];\n"
       
   982     "RCP R0.z, R0.z;\n"
       
   983     "MUL R0.xy, R0, R0.z;\n"
       
   984     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
   985     "ADD R0.z, R0, R0.w;\n"
       
   986     "MUL R0.xy, R0, c[0];\n"
       
   987     "ADD R0.x, R0, R0.y;\n"
       
   988     "MUL R0.z, -R0, c[1].x;\n"
       
   989     "MUL R0.y, R0.x, c[11].x;\n"
       
   990     "MUL R0.z, R0, c[11].y;\n"
       
   991     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
   992     "RSQ R0.x, R0.x;\n"
       
   993     "RCP R0.z, R0.x;\n"
       
   994     "ADD R1.x, -R0.y, R0.z;\n"
       
   995     "MOV R0.x, c[11];\n"
       
   996     "MUL R0.z, R0.x, c[1].x;\n"
       
   997     "RCP R1.y, R0.z;\n"
       
   998     "MUL R0.xy, fragment.position, c[8];\n"
       
   999     "TEX R0, R0, texture[0], 2D;\n"
       
  1000     "MUL R1.x, R1, R1.y;\n"
       
  1001     "TEX R1, R1, texture[2], 1D;\n"
       
  1002     "MUL R2.xyz, R0, c[5].y;\n"
       
  1003     "MUL R3.xyz, R1.w, R2;\n"
       
  1004     "MUL R2.xyz, R1, c[5].x;\n"
       
  1005     "MAD R2.xyz, R0.w, R2, R3;\n"
       
  1006     "ADD R3.xy, fragment.position, c[9];\n"
       
  1007     "ADD R2.w, -R0, c[11].z;\n"
       
  1008     "MUL R1.xyz, R1, c[6].y;\n"
       
  1009     "MAD R2.xyz, R2.w, R1, R2;\n"
       
  1010     "MUL R1.xyz, R0, c[6].z;\n"
       
  1011     "ADD R3.z, -R1.w, c[11];\n"
       
  1012     "MAD R2.xyz, R3.z, R1, R2;\n"
       
  1013     "MUL R1.y, R1.w, R2.w;\n"
       
  1014     "MUL R1.x, R1.w, R0.w;\n"
       
  1015     "MUL R1.z, R0.w, R3;\n"
       
  1016     "DP3 R2.w, R1, c[6];\n"
       
  1017     "MUL R3.xy, R3, c[7];\n"
       
  1018     "TEX R1, R3, texture[1], 2D;\n"
       
  1019     "ADD R2, R2, -R0;\n"
       
  1020     "DP4 R1.x, R1, c[10];\n"
       
  1021     "MAD result.color, R1.x, R2, R0;\n"
       
  1022     "END\n"
       
  1023     ;
       
  1024 
       
  1025 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY =
       
  1026     "!!ARBfp1.0\n"
       
  1027     "PARAM c[10] = { program.local[0..8],\n"
       
  1028     "		{ 2, 4, 1 } };\n"
       
  1029     "TEMP R0;\n"
       
  1030     "TEMP R1;\n"
       
  1031     "TEMP R2;\n"
       
  1032     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1033     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1034     "ADD R0.xyz, R0, c[4];\n"
       
  1035     "RCP R0.z, R0.z;\n"
       
  1036     "MUL R0.xy, R0, R0.z;\n"
       
  1037     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1038     "ADD R0.z, R0, R0.w;\n"
       
  1039     "MUL R0.xy, R0, c[0];\n"
       
  1040     "ADD R0.x, R0, R0.y;\n"
       
  1041     "MUL R0.z, -R0, c[1].x;\n"
       
  1042     "MUL R0.y, R0.x, c[9].x;\n"
       
  1043     "MUL R0.z, R0, c[9].y;\n"
       
  1044     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1045     "RSQ R0.x, R0.x;\n"
       
  1046     "RCP R0.z, R0.x;\n"
       
  1047     "ADD R1.x, -R0.y, R0.z;\n"
       
  1048     "MOV R0.x, c[9];\n"
       
  1049     "MUL R0.z, R0.x, c[1].x;\n"
       
  1050     "RCP R1.y, R0.z;\n"
       
  1051     "MUL R0.xy, fragment.position, c[6];\n"
       
  1052     "TEX R0, R0, texture[0], 2D;\n"
       
  1053     "MUL R1.x, R1, R1.y;\n"
       
  1054     "TEX R1, R1, texture[2], 1D;\n"
       
  1055     "ADD R2.x, -R0.w, c[9].z;\n"
       
  1056     "MUL R2.xyz, R1, R2.x;\n"
       
  1057     "MAD R1.xyz, R1, R0, R2;\n"
       
  1058     "ADD R2.x, -R1.w, c[9].z;\n"
       
  1059     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  1060     "ADD R1.z, R1.w, R0.w;\n"
       
  1061     "MAD R2.w, -R1, R0, R1.z;\n"
       
  1062     "ADD R1.xy, fragment.position, c[7];\n"
       
  1063     "MUL R1.xy, R1, c[5];\n"
       
  1064     "TEX R1, R1, texture[1], 2D;\n"
       
  1065     "ADD R2, R2, -R0;\n"
       
  1066     "DP4 R1.x, R1, c[8];\n"
       
  1067     "MAD result.color, R1.x, R2, R0;\n"
       
  1068     "END\n"
       
  1069     ;
       
  1070 
       
  1071 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN =
       
  1072     "!!ARBfp1.0\n"
       
  1073     "PARAM c[10] = { program.local[0..8],\n"
       
  1074     "		{ 2, 4 } };\n"
       
  1075     "TEMP R0;\n"
       
  1076     "TEMP R1;\n"
       
  1077     "TEMP R2;\n"
       
  1078     "TEMP R3;\n"
       
  1079     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1080     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1081     "ADD R0.xyz, R0, c[4];\n"
       
  1082     "RCP R0.z, R0.z;\n"
       
  1083     "MUL R0.xy, R0, R0.z;\n"
       
  1084     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1085     "ADD R0.z, R0, R0.w;\n"
       
  1086     "MUL R0.xy, R0, c[0];\n"
       
  1087     "ADD R0.x, R0, R0.y;\n"
       
  1088     "MUL R0.y, R0.x, c[9].x;\n"
       
  1089     "MOV R0.x, c[9];\n"
       
  1090     "MUL R0.z, -R0, c[1].x;\n"
       
  1091     "MUL R0.z, R0, c[9].y;\n"
       
  1092     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1093     "ADD R3.xy, fragment.position, c[7];\n"
       
  1094     "MUL R0.w, R0.x, c[1].x;\n"
       
  1095     "RSQ R0.z, R0.z;\n"
       
  1096     "RCP R0.x, R0.z;\n"
       
  1097     "RCP R0.z, R0.w;\n"
       
  1098     "ADD R0.x, -R0.y, R0;\n"
       
  1099     "MUL R0.z, R0.x, R0;\n"
       
  1100     "TEX R1, R0.z, texture[2], 1D;\n"
       
  1101     "MUL R0.xy, fragment.position, c[6];\n"
       
  1102     "TEX R0, R0, texture[0], 2D;\n"
       
  1103     "ADD R2, R1, R0;\n"
       
  1104     "MAD R2, -R1, R0, R2;\n"
       
  1105     "MUL R3.xy, R3, c[5];\n"
       
  1106     "TEX R1, R3, texture[1], 2D;\n"
       
  1107     "ADD R2, R2, -R0;\n"
       
  1108     "DP4 R1.x, R1, c[8];\n"
       
  1109     "MAD result.color, R1.x, R2, R0;\n"
       
  1110     "END\n"
       
  1111     ;
       
  1112 
       
  1113 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY =
       
  1114     "!!ARBfp1.0\n"
       
  1115     "PARAM c[10] = { program.local[0..8],\n"
       
  1116     "		{ 2, 4, 1 } };\n"
       
  1117     "TEMP R0;\n"
       
  1118     "TEMP R1;\n"
       
  1119     "TEMP R2;\n"
       
  1120     "TEMP R3;\n"
       
  1121     "TEMP R4;\n"
       
  1122     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1123     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1124     "ADD R0.xyz, R0, c[4];\n"
       
  1125     "RCP R0.z, R0.z;\n"
       
  1126     "MUL R0.xy, R0, R0.z;\n"
       
  1127     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1128     "ADD R0.z, R0, R0.w;\n"
       
  1129     "MUL R0.xy, R0, c[0];\n"
       
  1130     "ADD R0.x, R0, R0.y;\n"
       
  1131     "MUL R0.y, R0.x, c[9].x;\n"
       
  1132     "MOV R0.x, c[9];\n"
       
  1133     "MUL R0.z, -R0, c[1].x;\n"
       
  1134     "MUL R0.z, R0, c[9].y;\n"
       
  1135     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1136     "MUL R1.xy, fragment.position, c[6];\n"
       
  1137     "TEX R1, R1, texture[0], 2D;\n"
       
  1138     "MUL R0.w, R0.x, c[1].x;\n"
       
  1139     "RSQ R0.z, R0.z;\n"
       
  1140     "RCP R0.x, R0.z;\n"
       
  1141     "ADD R2.w, -R1, c[9].z;\n"
       
  1142     "RCP R0.z, R0.w;\n"
       
  1143     "ADD R0.x, -R0.y, R0;\n"
       
  1144     "MUL R0.x, R0, R0.z;\n"
       
  1145     "TEX R0, R0, texture[2], 1D;\n"
       
  1146     "ADD R3.xyz, R0.w, -R0;\n"
       
  1147     "ADD R2.xyz, R1.w, -R1;\n"
       
  1148     "MUL R2.xyz, R2, R3;\n"
       
  1149     "MUL R2.xyz, R2, c[9].x;\n"
       
  1150     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  1151     "MUL R4.xyz, R0, R2.w;\n"
       
  1152     "MUL R3.xyz, R0, R1;\n"
       
  1153     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  1154     "ADD R2.x, -R0.w, c[9].z;\n"
       
  1155     "MAD R3.xyz, R3, c[9].x, R4;\n"
       
  1156     "MAD R3.xyz, R1, R2.x, R3;\n"
       
  1157     "MAD R0.xyz, R1, R2.x, R0;\n"
       
  1158     "MUL R2.xyz, R1, c[9].x;\n"
       
  1159     "ADD R0.xyz, R0, -R3;\n"
       
  1160     "SGE R2.xyz, R2, R1.w;\n"
       
  1161     "MAD R2.xyz, R2, R0, R3;\n"
       
  1162     "ADD R0.z, R0.w, R1.w;\n"
       
  1163     "MAD R2.w, -R0, R1, R0.z;\n"
       
  1164     "ADD R0.xy, fragment.position, c[7];\n"
       
  1165     "MUL R0.xy, R0, c[5];\n"
       
  1166     "TEX R0, R0, texture[1], 2D;\n"
       
  1167     "ADD R2, R2, -R1;\n"
       
  1168     "DP4 R0.x, R0, c[8];\n"
       
  1169     "MAD result.color, R0.x, R2, R1;\n"
       
  1170     "END\n"
       
  1171     ;
       
  1172 
       
  1173 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN =
       
  1174     "!!ARBfp1.0\n"
       
  1175     "PARAM c[10] = { program.local[0..8],\n"
       
  1176     "		{ 2, 4, 1 } };\n"
       
  1177     "TEMP R0;\n"
       
  1178     "TEMP R1;\n"
       
  1179     "TEMP R2;\n"
       
  1180     "TEMP R3;\n"
       
  1181     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1182     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1183     "ADD R0.xyz, R0, c[4];\n"
       
  1184     "RCP R0.z, R0.z;\n"
       
  1185     "MUL R0.xy, R0, R0.z;\n"
       
  1186     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1187     "ADD R0.z, R0, R0.w;\n"
       
  1188     "MUL R0.xy, R0, c[0];\n"
       
  1189     "ADD R0.x, R0, R0.y;\n"
       
  1190     "MUL R0.z, -R0, c[1].x;\n"
       
  1191     "MUL R0.y, R0.x, c[9].x;\n"
       
  1192     "MUL R0.z, R0, c[9].y;\n"
       
  1193     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1194     "RSQ R0.z, R0.x;\n"
       
  1195     "MOV R0.x, c[9];\n"
       
  1196     "MUL R0.x, R0, c[1];\n"
       
  1197     "RCP R0.z, R0.z;\n"
       
  1198     "ADD R0.z, -R0.y, R0;\n"
       
  1199     "RCP R0.w, R0.x;\n"
       
  1200     "MUL R1.x, R0.z, R0.w;\n"
       
  1201     "MUL R0.xy, fragment.position, c[6];\n"
       
  1202     "TEX R0, R0, texture[0], 2D;\n"
       
  1203     "TEX R1, R1, texture[2], 1D;\n"
       
  1204     "MUL R3.xyz, R1.w, R0;\n"
       
  1205     "MUL R2.xyz, R1, R0.w;\n"
       
  1206     "MIN R2.xyz, R2, R3;\n"
       
  1207     "ADD R2.w, -R0, c[9].z;\n"
       
  1208     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  1209     "ADD R2.x, -R1.w, c[9].z;\n"
       
  1210     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  1211     "ADD R1.z, R1.w, R0.w;\n"
       
  1212     "MAD R2.w, -R1, R0, R1.z;\n"
       
  1213     "ADD R1.xy, fragment.position, c[7];\n"
       
  1214     "MUL R1.xy, R1, c[5];\n"
       
  1215     "TEX R1, R1, texture[1], 2D;\n"
       
  1216     "ADD R2, R2, -R0;\n"
       
  1217     "DP4 R1.x, R1, c[8];\n"
       
  1218     "MAD result.color, R1.x, R2, R0;\n"
       
  1219     "END\n"
       
  1220     ;
       
  1221 
       
  1222 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN =
       
  1223     "!!ARBfp1.0\n"
       
  1224     "PARAM c[10] = { program.local[0..8],\n"
       
  1225     "		{ 2, 4, 1 } };\n"
       
  1226     "TEMP R0;\n"
       
  1227     "TEMP R1;\n"
       
  1228     "TEMP R2;\n"
       
  1229     "TEMP R3;\n"
       
  1230     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1231     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1232     "ADD R0.xyz, R0, c[4];\n"
       
  1233     "RCP R0.z, R0.z;\n"
       
  1234     "MUL R0.xy, R0, R0.z;\n"
       
  1235     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1236     "ADD R0.z, R0, R0.w;\n"
       
  1237     "MUL R0.xy, R0, c[0];\n"
       
  1238     "ADD R0.x, R0, R0.y;\n"
       
  1239     "MUL R0.z, -R0, c[1].x;\n"
       
  1240     "MUL R0.y, R0.x, c[9].x;\n"
       
  1241     "MUL R0.z, R0, c[9].y;\n"
       
  1242     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1243     "RSQ R0.z, R0.x;\n"
       
  1244     "MOV R0.x, c[9];\n"
       
  1245     "MUL R0.x, R0, c[1];\n"
       
  1246     "RCP R0.z, R0.z;\n"
       
  1247     "ADD R0.z, -R0.y, R0;\n"
       
  1248     "RCP R0.w, R0.x;\n"
       
  1249     "MUL R1.x, R0.z, R0.w;\n"
       
  1250     "MUL R0.xy, fragment.position, c[6];\n"
       
  1251     "TEX R0, R0, texture[0], 2D;\n"
       
  1252     "TEX R1, R1, texture[2], 1D;\n"
       
  1253     "MUL R3.xyz, R1.w, R0;\n"
       
  1254     "MUL R2.xyz, R1, R0.w;\n"
       
  1255     "MAX R2.xyz, R2, R3;\n"
       
  1256     "ADD R2.w, -R0, c[9].z;\n"
       
  1257     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  1258     "ADD R2.x, -R1.w, c[9].z;\n"
       
  1259     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  1260     "ADD R1.z, R1.w, R0.w;\n"
       
  1261     "MAD R2.w, -R1, R0, R1.z;\n"
       
  1262     "ADD R1.xy, fragment.position, c[7];\n"
       
  1263     "MUL R1.xy, R1, c[5];\n"
       
  1264     "TEX R1, R1, texture[1], 2D;\n"
       
  1265     "ADD R2, R2, -R0;\n"
       
  1266     "DP4 R1.x, R1, c[8];\n"
       
  1267     "MAD result.color, R1.x, R2, R0;\n"
       
  1268     "END\n"
       
  1269     ;
       
  1270 
       
  1271 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE =
       
  1272     "!!ARBfp1.0\n"
       
  1273     "PARAM c[10] = { program.local[0..8],\n"
       
  1274     "		{ 2, 4, 1, 1e-006 } };\n"
       
  1275     "TEMP R0;\n"
       
  1276     "TEMP R1;\n"
       
  1277     "TEMP R2;\n"
       
  1278     "TEMP R3;\n"
       
  1279     "TEMP R4;\n"
       
  1280     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1281     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1282     "ADD R0.xyz, R0, c[4];\n"
       
  1283     "RCP R0.z, R0.z;\n"
       
  1284     "MUL R0.xy, R0, R0.z;\n"
       
  1285     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1286     "ADD R0.z, R0, R0.w;\n"
       
  1287     "MUL R0.xy, R0, c[0];\n"
       
  1288     "ADD R0.x, R0, R0.y;\n"
       
  1289     "MUL R0.y, R0.x, c[9].x;\n"
       
  1290     "MOV R0.x, c[9];\n"
       
  1291     "MUL R0.z, -R0, c[1].x;\n"
       
  1292     "MUL R0.z, R0, c[9].y;\n"
       
  1293     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1294     "MUL R0.w, R0.x, c[1].x;\n"
       
  1295     "RSQ R0.z, R0.z;\n"
       
  1296     "RCP R0.x, R0.z;\n"
       
  1297     "RCP R0.z, R0.w;\n"
       
  1298     "ADD R0.x, -R0.y, R0;\n"
       
  1299     "MUL R0.x, R0, R0.z;\n"
       
  1300     "TEX R0, R0, texture[2], 1D;\n"
       
  1301     "MAX R1.x, R0.w, c[9].w;\n"
       
  1302     "RCP R1.x, R1.x;\n"
       
  1303     "MAD R1.xyz, -R0, R1.x, c[9].z;\n"
       
  1304     "MAX R2.xyz, R1, c[9].w;\n"
       
  1305     "MUL R1.xy, fragment.position, c[6];\n"
       
  1306     "TEX R1, R1, texture[0], 2D;\n"
       
  1307     "ADD R2.w, -R0, c[9].z;\n"
       
  1308     "MUL R3.xyz, R1, R2.w;\n"
       
  1309     "ADD R2.w, -R1, c[9].z;\n"
       
  1310     "MAD R4.xyz, R0, R2.w, R3;\n"
       
  1311     "MUL R3.xyz, R0.w, R1;\n"
       
  1312     "MUL R2.w, R0, R1;\n"
       
  1313     "MAD R0.xyz, R0, R1.w, R3;\n"
       
  1314     "SGE R0.xyz, R0, R2.w;\n"
       
  1315     "RCP R2.x, R2.x;\n"
       
  1316     "RCP R2.y, R2.y;\n"
       
  1317     "RCP R2.z, R2.z;\n"
       
  1318     "MAD R2.xyz, R3, R2, R4;\n"
       
  1319     "MAD R4.xyz, R0.w, R1.w, R4;\n"
       
  1320     "ADD R4.xyz, R4, -R2;\n"
       
  1321     "MAD R2.xyz, R0, R4, R2;\n"
       
  1322     "ADD R0.z, R0.w, R1.w;\n"
       
  1323     "MAD R2.w, -R0, R1, R0.z;\n"
       
  1324     "ADD R0.xy, fragment.position, c[7];\n"
       
  1325     "MUL R0.xy, R0, c[5];\n"
       
  1326     "TEX R0, R0, texture[1], 2D;\n"
       
  1327     "ADD R2, R2, -R1;\n"
       
  1328     "DP4 R0.x, R0, c[8];\n"
       
  1329     "MAD result.color, R0.x, R2, R1;\n"
       
  1330     "END\n"
       
  1331     ;
       
  1332 
       
  1333 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN =
       
  1334     "!!ARBfp1.0\n"
       
  1335     "PARAM c[10] = { program.local[0..8],\n"
       
  1336     "		{ 2, 4, 1, 9.9999997e-006 } };\n"
       
  1337     "TEMP R0;\n"
       
  1338     "TEMP R1;\n"
       
  1339     "TEMP R2;\n"
       
  1340     "TEMP R3;\n"
       
  1341     "TEMP R4;\n"
       
  1342     "TEMP R5;\n"
       
  1343     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1344     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1345     "ADD R0.xyz, R0, c[4];\n"
       
  1346     "RCP R0.z, R0.z;\n"
       
  1347     "MUL R0.xy, R0, R0.z;\n"
       
  1348     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1349     "ADD R0.z, R0, R0.w;\n"
       
  1350     "MUL R0.xy, R0, c[0];\n"
       
  1351     "ADD R0.x, R0, R0.y;\n"
       
  1352     "MUL R0.z, -R0, c[1].x;\n"
       
  1353     "MUL R0.y, R0.x, c[9].x;\n"
       
  1354     "MUL R0.z, R0, c[9].y;\n"
       
  1355     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1356     "RSQ R0.z, R0.x;\n"
       
  1357     "MOV R0.x, c[9];\n"
       
  1358     "MUL R0.w, R0.x, c[1].x;\n"
       
  1359     "RCP R0.z, R0.z;\n"
       
  1360     "ADD R0.x, -R0.y, R0.z;\n"
       
  1361     "RCP R0.y, R0.w;\n"
       
  1362     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
       
  1363     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1364     "MUL R0.x, R0, R0.y;\n"
       
  1365     "TEX R0, R0, texture[2], 1D;\n"
       
  1366     "MUL R2.xyz, R0.w, R1;\n"
       
  1367     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  1368     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  1369     "MUL R4.xyz, R0.w, R2;\n"
       
  1370     "MAX R2.xyz, R0, c[9].w;\n"
       
  1371     "ADD R2.w, -R1, c[9].z;\n"
       
  1372     "MUL R5.xyz, R0, R2.w;\n"
       
  1373     "ADD R3.w, -R0, c[9].z;\n"
       
  1374     "RCP R2.x, R2.x;\n"
       
  1375     "RCP R2.y, R2.y;\n"
       
  1376     "RCP R2.z, R2.z;\n"
       
  1377     "MAD R2.xyz, R4, R2, R5;\n"
       
  1378     "MUL R4.xyz, R1, R3.w;\n"
       
  1379     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  1380     "MUL R2.w, R0, R1;\n"
       
  1381     "MAD R2.xyz, R1, R3.w, R2;\n"
       
  1382     "ADD R2.xyz, R2, -R0;\n"
       
  1383     "SGE R3.xyz, R3, R2.w;\n"
       
  1384     "MAD R2.xyz, R3, R2, R0;\n"
       
  1385     "ADD R0.z, R0.w, R1.w;\n"
       
  1386     "MAD R2.w, -R0, R1, R0.z;\n"
       
  1387     "ADD R0.xy, fragment.position, c[7];\n"
       
  1388     "MUL R0.xy, R0, c[5];\n"
       
  1389     "TEX R0, R0, texture[1], 2D;\n"
       
  1390     "ADD R2, R2, -R1;\n"
       
  1391     "DP4 R0.x, R0, c[8];\n"
       
  1392     "MAD result.color, R0.x, R2, R1;\n"
       
  1393     "END\n"
       
  1394     ;
       
  1395 
       
  1396 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT =
       
  1397     "!!ARBfp1.0\n"
       
  1398     "PARAM c[10] = { program.local[0..8],\n"
       
  1399     "		{ 2, 4, 1 } };\n"
       
  1400     "TEMP R0;\n"
       
  1401     "TEMP R1;\n"
       
  1402     "TEMP R2;\n"
       
  1403     "TEMP R3;\n"
       
  1404     "TEMP R4;\n"
       
  1405     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1406     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1407     "ADD R0.xyz, R0, c[4];\n"
       
  1408     "RCP R0.z, R0.z;\n"
       
  1409     "MUL R0.xy, R0, R0.z;\n"
       
  1410     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1411     "ADD R0.z, R0, R0.w;\n"
       
  1412     "MUL R0.xy, R0, c[0];\n"
       
  1413     "ADD R0.x, R0, R0.y;\n"
       
  1414     "MUL R0.y, R0.x, c[9].x;\n"
       
  1415     "MOV R0.x, c[9];\n"
       
  1416     "MUL R0.z, -R0, c[1].x;\n"
       
  1417     "MUL R0.z, R0, c[9].y;\n"
       
  1418     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1419     "MUL R1.xy, fragment.position, c[6];\n"
       
  1420     "TEX R1, R1, texture[0], 2D;\n"
       
  1421     "MUL R0.w, R0.x, c[1].x;\n"
       
  1422     "RSQ R0.z, R0.z;\n"
       
  1423     "RCP R0.x, R0.z;\n"
       
  1424     "ADD R2.w, -R1, c[9].z;\n"
       
  1425     "RCP R0.z, R0.w;\n"
       
  1426     "ADD R0.x, -R0.y, R0;\n"
       
  1427     "MUL R0.x, R0, R0.z;\n"
       
  1428     "TEX R0, R0, texture[2], 1D;\n"
       
  1429     "ADD R3.xyz, R0.w, -R0;\n"
       
  1430     "ADD R2.xyz, R1.w, -R1;\n"
       
  1431     "MUL R2.xyz, R2, R3;\n"
       
  1432     "MUL R2.xyz, R2, c[9].x;\n"
       
  1433     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  1434     "MUL R4.xyz, R0, R2.w;\n"
       
  1435     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  1436     "MUL R3.xyz, R0, R1;\n"
       
  1437     "ADD R2.w, -R0, c[9].z;\n"
       
  1438     "MAD R3.xyz, R3, c[9].x, R4;\n"
       
  1439     "MUL R0.xyz, R0, c[9].x;\n"
       
  1440     "SGE R0.xyz, R0, R0.w;\n"
       
  1441     "MAD R3.xyz, R1, R2.w, R3;\n"
       
  1442     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  1443     "ADD R2.xyz, R2, -R3;\n"
       
  1444     "MAD R2.xyz, R0, R2, R3;\n"
       
  1445     "ADD R0.z, R0.w, R1.w;\n"
       
  1446     "MAD R2.w, -R0, R1, R0.z;\n"
       
  1447     "ADD R0.xy, fragment.position, c[7];\n"
       
  1448     "MUL R0.xy, R0, c[5];\n"
       
  1449     "TEX R0, R0, texture[1], 2D;\n"
       
  1450     "ADD R2, R2, -R1;\n"
       
  1451     "DP4 R0.x, R0, c[8];\n"
       
  1452     "MAD result.color, R0.x, R2, R1;\n"
       
  1453     "END\n"
       
  1454     ;
       
  1455 
       
  1456 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT =
       
  1457     "!!ARBfp1.0\n"
       
  1458     "PARAM c[11] = { program.local[0..8],\n"
       
  1459     "		{ 2, 4, 1, 9.9999997e-006 },\n"
       
  1460     "		{ 8, 3 } };\n"
       
  1461     "TEMP R0;\n"
       
  1462     "TEMP R1;\n"
       
  1463     "TEMP R2;\n"
       
  1464     "TEMP R3;\n"
       
  1465     "TEMP R4;\n"
       
  1466     "TEMP R5;\n"
       
  1467     "TEMP R6;\n"
       
  1468     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1469     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1470     "ADD R0.xyz, R0, c[4];\n"
       
  1471     "RCP R0.z, R0.z;\n"
       
  1472     "MUL R1.xy, fragment.position, c[6];\n"
       
  1473     "TEX R1, R1, texture[0], 2D;\n"
       
  1474     "MAX R0.w, R1, c[9];\n"
       
  1475     "RCP R2.w, R0.w;\n"
       
  1476     "MUL R5.xyz, R1, R2.w;\n"
       
  1477     "MUL R0.xy, R0, R0.z;\n"
       
  1478     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1479     "ADD R0.z, R0, R0.w;\n"
       
  1480     "MUL R0.xy, R0, c[0];\n"
       
  1481     "ADD R0.x, R0, R0.y;\n"
       
  1482     "MUL R0.y, R0.x, c[9].x;\n"
       
  1483     "MOV R0.x, c[9];\n"
       
  1484     "RSQ R2.x, R5.x;\n"
       
  1485     "RSQ R2.z, R5.z;\n"
       
  1486     "RSQ R2.y, R5.y;\n"
       
  1487     "MUL R0.z, -R0, c[1].x;\n"
       
  1488     "MUL R0.z, R0, c[9].y;\n"
       
  1489     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1490     "MUL R0.w, R0.x, c[1].x;\n"
       
  1491     "RSQ R0.z, R0.z;\n"
       
  1492     "RCP R0.x, R0.z;\n"
       
  1493     "RCP R0.z, R0.w;\n"
       
  1494     "ADD R0.x, -R0.y, R0;\n"
       
  1495     "MUL R0.x, R0, R0.z;\n"
       
  1496     "TEX R0, R0, texture[2], 1D;\n"
       
  1497     "MAD R3.xyz, R0, c[9].x, -R0.w;\n"
       
  1498     "MAD R6.xyz, -R5, c[10].x, c[10].y;\n"
       
  1499     "RCP R2.x, R2.x;\n"
       
  1500     "RCP R2.z, R2.z;\n"
       
  1501     "RCP R2.y, R2.y;\n"
       
  1502     "MAD R2.xyz, R1.w, R2, -R1;\n"
       
  1503     "MUL R2.xyz, R3, R2;\n"
       
  1504     "MAD R4.xyz, R0.w, R1, R2;\n"
       
  1505     "MAD R2.xyz, -R1, R2.w, c[9].z;\n"
       
  1506     "MUL R5.xyz, R2, R3;\n"
       
  1507     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  1508     "MAD R5.xyz, -R1, R6, R4;\n"
       
  1509     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  1510     "MUL R3.xyz, R0, c[9].x;\n"
       
  1511     "MUL R4.xyz, R1, c[10].x;\n"
       
  1512     "SGE R3.xyz, R3, R0.w;\n"
       
  1513     "ADD R2.w, -R1, c[9].z;\n"
       
  1514     "MUL R6.xyz, R1, R6;\n"
       
  1515     "SGE R4.xyz, R4, R1.w;\n"
       
  1516     "MAD R4.xyz, R4, R5, R6;\n"
       
  1517     "MAD R4.xyz, -R1, R2, R4;\n"
       
  1518     "MUL R2.xyz, R1, R2;\n"
       
  1519     "MAD R2.xyz, R3, R4, R2;\n"
       
  1520     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  1521     "ADD R0.x, -R0.w, c[9].z;\n"
       
  1522     "MAD R2.xyz, R1, R0.x, R2;\n"
       
  1523     "ADD R0.z, R0.w, R1.w;\n"
       
  1524     "MAD R2.w, -R0, R1, R0.z;\n"
       
  1525     "ADD R0.xy, fragment.position, c[7];\n"
       
  1526     "MUL R0.xy, R0, c[5];\n"
       
  1527     "TEX R0, R0, texture[1], 2D;\n"
       
  1528     "ADD R2, R2, -R1;\n"
       
  1529     "DP4 R0.x, R0, c[8];\n"
       
  1530     "MAD result.color, R0.x, R2, R1;\n"
       
  1531     "END\n"
       
  1532     ;
       
  1533 
       
  1534 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE =
       
  1535     "!!ARBfp1.0\n"
       
  1536     "PARAM c[10] = { program.local[0..8],\n"
       
  1537     "		{ 2, 4 } };\n"
       
  1538     "TEMP R0;\n"
       
  1539     "TEMP R1;\n"
       
  1540     "TEMP R2;\n"
       
  1541     "TEMP R3;\n"
       
  1542     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1543     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1544     "ADD R0.xyz, R0, c[4];\n"
       
  1545     "RCP R0.z, R0.z;\n"
       
  1546     "MUL R0.xy, R0, R0.z;\n"
       
  1547     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1548     "ADD R0.z, R0, R0.w;\n"
       
  1549     "MUL R0.xy, R0, c[0];\n"
       
  1550     "ADD R0.x, R0, R0.y;\n"
       
  1551     "MUL R0.z, -R0, c[1].x;\n"
       
  1552     "MUL R0.y, R0.x, c[9].x;\n"
       
  1553     "MUL R0.z, R0, c[9].y;\n"
       
  1554     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1555     "RSQ R0.z, R0.x;\n"
       
  1556     "MOV R0.x, c[9];\n"
       
  1557     "MUL R0.x, R0, c[1];\n"
       
  1558     "RCP R0.z, R0.z;\n"
       
  1559     "ADD R0.z, -R0.y, R0;\n"
       
  1560     "RCP R0.w, R0.x;\n"
       
  1561     "MUL R1.x, R0.z, R0.w;\n"
       
  1562     "MUL R0.xy, fragment.position, c[6];\n"
       
  1563     "TEX R0, R0, texture[0], 2D;\n"
       
  1564     "TEX R1, R1, texture[2], 1D;\n"
       
  1565     "ADD R2.xyz, R1, R0;\n"
       
  1566     "MUL R3.xyz, R1.w, R0;\n"
       
  1567     "MUL R1.xyz, R1, R0.w;\n"
       
  1568     "MIN R1.xyz, R1, R3;\n"
       
  1569     "MAD R2.xyz, -R1, c[9].x, R2;\n"
       
  1570     "ADD R1.z, R1.w, R0.w;\n"
       
  1571     "MAD R2.w, -R1, R0, R1.z;\n"
       
  1572     "ADD R1.xy, fragment.position, c[7];\n"
       
  1573     "MUL R1.xy, R1, c[5];\n"
       
  1574     "TEX R1, R1, texture[1], 2D;\n"
       
  1575     "ADD R2, R2, -R0;\n"
       
  1576     "DP4 R1.x, R1, c[8];\n"
       
  1577     "MAD result.color, R1.x, R2, R0;\n"
       
  1578     "END\n"
       
  1579     ;
       
  1580 
       
  1581 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION =
       
  1582     "!!ARBfp1.0\n"
       
  1583     "PARAM c[10] = { program.local[0..8],\n"
       
  1584     "		{ 2, 4, 1 } };\n"
       
  1585     "TEMP R0;\n"
       
  1586     "TEMP R1;\n"
       
  1587     "TEMP R2;\n"
       
  1588     "TEMP R3;\n"
       
  1589     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1590     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1591     "ADD R0.xyz, R0, c[4];\n"
       
  1592     "RCP R0.z, R0.z;\n"
       
  1593     "MUL R0.xy, R0, R0.z;\n"
       
  1594     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1595     "ADD R0.z, R0, R0.w;\n"
       
  1596     "MUL R0.xy, R0, c[0];\n"
       
  1597     "ADD R0.x, R0, R0.y;\n"
       
  1598     "MUL R0.z, -R0, c[1].x;\n"
       
  1599     "MUL R0.y, R0.x, c[9].x;\n"
       
  1600     "MUL R0.z, R0, c[9].y;\n"
       
  1601     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1602     "RSQ R0.z, R0.x;\n"
       
  1603     "MOV R0.x, c[9];\n"
       
  1604     "MUL R0.x, R0, c[1];\n"
       
  1605     "RCP R0.z, R0.z;\n"
       
  1606     "ADD R0.z, -R0.y, R0;\n"
       
  1607     "RCP R0.w, R0.x;\n"
       
  1608     "MUL R1.x, R0.z, R0.w;\n"
       
  1609     "MUL R0.xy, fragment.position, c[6];\n"
       
  1610     "TEX R0, R0, texture[0], 2D;\n"
       
  1611     "TEX R1, R1, texture[2], 1D;\n"
       
  1612     "MUL R2.xyz, R1.w, R0;\n"
       
  1613     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  1614     "MUL R2.xyz, R1, R0;\n"
       
  1615     "MAD R2.xyz, -R2, c[9].x, R3;\n"
       
  1616     "ADD R2.w, -R0, c[9].z;\n"
       
  1617     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  1618     "ADD R2.x, -R1.w, c[9].z;\n"
       
  1619     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  1620     "ADD R1.z, R1.w, R0.w;\n"
       
  1621     "MAD R2.w, -R1, R0, R1.z;\n"
       
  1622     "ADD R1.xy, fragment.position, c[7];\n"
       
  1623     "MUL R1.xy, R1, c[5];\n"
       
  1624     "TEX R1, R1, texture[1], 2D;\n"
       
  1625     "ADD R2, R2, -R0;\n"
       
  1626     "DP4 R1.x, R1, c[8];\n"
       
  1627     "MAD result.color, R1.x, R2, R0;\n"
       
  1628     "END\n"
       
  1629     ;
       
  1630 
       
  1631 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
       
  1632     "!!ARBfp1.0\n"
       
  1633     "PARAM c[9] = { program.local[0..7],\n"
       
  1634     "		{ 2, 4, 1 } };\n"
       
  1635     "TEMP R0;\n"
       
  1636     "TEMP R1;\n"
       
  1637     "TEMP R2;\n"
       
  1638     "TEMP R3;\n"
       
  1639     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1640     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1641     "ADD R0.xyz, R0, c[4];\n"
       
  1642     "RCP R0.z, R0.z;\n"
       
  1643     "MUL R0.xy, R0, R0.z;\n"
       
  1644     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1645     "ADD R0.z, R0, R0.w;\n"
       
  1646     "MUL R0.xy, R0, c[0];\n"
       
  1647     "ADD R0.x, R0, R0.y;\n"
       
  1648     "MUL R0.z, -R0, c[1].x;\n"
       
  1649     "MUL R0.y, R0.x, c[8].x;\n"
       
  1650     "MUL R0.z, R0, c[8].y;\n"
       
  1651     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1652     "RSQ R0.x, R0.x;\n"
       
  1653     "RCP R0.z, R0.x;\n"
       
  1654     "ADD R0.y, -R0, R0.z;\n"
       
  1655     "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
       
  1656     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1657     "MUL R2.xyz, R1, c[5].y;\n"
       
  1658     "MOV R0.x, c[8];\n"
       
  1659     "MUL R0.x, R0, c[1];\n"
       
  1660     "RCP R0.x, R0.x;\n"
       
  1661     "MUL R0.x, R0.y, R0;\n"
       
  1662     "TEX R0, R0, texture[1], 1D;\n"
       
  1663     "MUL R3.xyz, R0.w, R2;\n"
       
  1664     "MUL R2.xyz, R0, c[5].x;\n"
       
  1665     "MAD R2.xyz, R1.w, R2, R3;\n"
       
  1666     "ADD R2.w, -R1, c[8].z;\n"
       
  1667     "MUL R0.xyz, R0, c[6].y;\n"
       
  1668     "MAD R0.xyz, R2.w, R0, R2;\n"
       
  1669     "ADD R2.x, -R0.w, c[8].z;\n"
       
  1670     "MUL R1.xyz, R1, c[6].z;\n"
       
  1671     "MAD result.color.xyz, R2.x, R1, R0;\n"
       
  1672     "MUL R0.x, R0.w, R1.w;\n"
       
  1673     "MUL R0.z, R1.w, R2.x;\n"
       
  1674     "MUL R0.y, R0.w, R2.w;\n"
       
  1675     "DP3 result.color.w, R0, c[6];\n"
       
  1676     "END\n"
       
  1677     ;
       
  1678 
       
  1679 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
       
  1680     "!!ARBfp1.0\n"
       
  1681     "PARAM c[7] = { program.local[0..5],\n"
       
  1682     "		{ 2, 4, 1 } };\n"
       
  1683     "TEMP R0;\n"
       
  1684     "TEMP R1;\n"
       
  1685     "TEMP R2;\n"
       
  1686     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1687     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1688     "ADD R0.xyz, R0, c[4];\n"
       
  1689     "RCP R0.z, R0.z;\n"
       
  1690     "MUL R0.xy, R0, R0.z;\n"
       
  1691     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1692     "ADD R0.z, R0, R0.w;\n"
       
  1693     "MUL R0.xy, R0, c[0];\n"
       
  1694     "ADD R0.x, R0, R0.y;\n"
       
  1695     "MUL R0.z, -R0, c[1].x;\n"
       
  1696     "MUL R0.y, R0.x, c[6].x;\n"
       
  1697     "MUL R0.z, R0, c[6].y;\n"
       
  1698     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1699     "RSQ R0.x, R0.x;\n"
       
  1700     "RCP R0.z, R0.x;\n"
       
  1701     "ADD R0.y, -R0, R0.z;\n"
       
  1702     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  1703     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1704     "MOV R0.x, c[6];\n"
       
  1705     "MUL R0.x, R0, c[1];\n"
       
  1706     "RCP R0.x, R0.x;\n"
       
  1707     "MUL R0.x, R0.y, R0;\n"
       
  1708     "TEX R0, R0, texture[1], 1D;\n"
       
  1709     "ADD R2.x, -R1.w, c[6].z;\n"
       
  1710     "MUL R2.xyz, R0, R2.x;\n"
       
  1711     "MAD R0.xyz, R0, R1, R2;\n"
       
  1712     "ADD R2.x, R0.w, R1.w;\n"
       
  1713     "ADD R2.y, -R0.w, c[6].z;\n"
       
  1714     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  1715     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  1716     "END\n"
       
  1717     ;
       
  1718 
       
  1719 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK =
       
  1720     "!!ARBfp1.0\n"
       
  1721     "PARAM c[7] = { program.local[0..5],\n"
       
  1722     "		{ 2, 4 } };\n"
       
  1723     "TEMP R0;\n"
       
  1724     "TEMP R1;\n"
       
  1725     "TEMP R2;\n"
       
  1726     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1727     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1728     "ADD R0.xyz, R0, c[4];\n"
       
  1729     "RCP R0.z, R0.z;\n"
       
  1730     "MUL R0.xy, R0, R0.z;\n"
       
  1731     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1732     "ADD R0.z, R0, R0.w;\n"
       
  1733     "MUL R0.xy, R0, c[0];\n"
       
  1734     "ADD R0.x, R0, R0.y;\n"
       
  1735     "MUL R0.z, -R0, c[1].x;\n"
       
  1736     "MUL R0.y, R0.x, c[6].x;\n"
       
  1737     "MUL R0.z, R0, c[6].y;\n"
       
  1738     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1739     "RSQ R0.z, R0.x;\n"
       
  1740     "MOV R0.x, c[6];\n"
       
  1741     "MUL R0.w, R0.x, c[1].x;\n"
       
  1742     "RCP R0.z, R0.z;\n"
       
  1743     "ADD R0.x, -R0.y, R0.z;\n"
       
  1744     "RCP R0.y, R0.w;\n"
       
  1745     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  1746     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1747     "MUL R0.x, R0, R0.y;\n"
       
  1748     "TEX R0, R0, texture[1], 1D;\n"
       
  1749     "ADD R2, R0, R1;\n"
       
  1750     "MAD result.color, -R0, R1, R2;\n"
       
  1751     "END\n"
       
  1752     ;
       
  1753 
       
  1754 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK =
       
  1755     "!!ARBfp1.0\n"
       
  1756     "PARAM c[7] = { program.local[0..5],\n"
       
  1757     "		{ 2, 4, 1 } };\n"
       
  1758     "TEMP R0;\n"
       
  1759     "TEMP R1;\n"
       
  1760     "TEMP R2;\n"
       
  1761     "TEMP R3;\n"
       
  1762     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1763     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1764     "ADD R0.xyz, R0, c[4];\n"
       
  1765     "RCP R0.z, R0.z;\n"
       
  1766     "MUL R0.xy, R0, R0.z;\n"
       
  1767     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1768     "ADD R0.z, R0, R0.w;\n"
       
  1769     "MUL R0.xy, R0, c[0];\n"
       
  1770     "ADD R0.x, R0, R0.y;\n"
       
  1771     "MUL R0.y, R0.x, c[6].x;\n"
       
  1772     "MOV R0.x, c[6];\n"
       
  1773     "MUL R0.z, -R0, c[1].x;\n"
       
  1774     "MUL R0.z, R0, c[6].y;\n"
       
  1775     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1776     "MUL R1.xy, fragment.position, c[5];\n"
       
  1777     "TEX R1, R1, texture[0], 2D;\n"
       
  1778     "MUL R0.w, R0.x, c[1].x;\n"
       
  1779     "RSQ R0.z, R0.z;\n"
       
  1780     "RCP R0.x, R0.z;\n"
       
  1781     "ADD R2.w, -R1, c[6].z;\n"
       
  1782     "RCP R0.z, R0.w;\n"
       
  1783     "ADD R0.x, -R0.y, R0;\n"
       
  1784     "MUL R0.x, R0, R0.z;\n"
       
  1785     "TEX R0, R0, texture[1], 1D;\n"
       
  1786     "ADD R3.xyz, R0.w, -R0;\n"
       
  1787     "ADD R2.xyz, R1.w, -R1;\n"
       
  1788     "MUL R2.xyz, R2, R3;\n"
       
  1789     "MUL R2.xyz, R2, c[6].x;\n"
       
  1790     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  1791     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  1792     "MUL R3.xyz, R0, R2.w;\n"
       
  1793     "MUL R0.xyz, R0, R1;\n"
       
  1794     "ADD R2.w, -R0, c[6].z;\n"
       
  1795     "MAD R0.xyz, R0, c[6].x, R3;\n"
       
  1796     "MAD R0.xyz, R1, R2.w, R0;\n"
       
  1797     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  1798     "MUL R1.xyz, R1, c[6].x;\n"
       
  1799     "ADD R2.w, R0, R1;\n"
       
  1800     "ADD R2.xyz, R2, -R0;\n"
       
  1801     "SGE R1.xyz, R1, R1.w;\n"
       
  1802     "MAD result.color.xyz, R1, R2, R0;\n"
       
  1803     "MAD result.color.w, -R0, R1, R2;\n"
       
  1804     "END\n"
       
  1805     ;
       
  1806 
       
  1807 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK =
       
  1808     "!!ARBfp1.0\n"
       
  1809     "PARAM c[7] = { program.local[0..5],\n"
       
  1810     "		{ 2, 4, 1 } };\n"
       
  1811     "TEMP R0;\n"
       
  1812     "TEMP R1;\n"
       
  1813     "TEMP R2;\n"
       
  1814     "TEMP R3;\n"
       
  1815     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1816     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1817     "ADD R0.xyz, R0, c[4];\n"
       
  1818     "RCP R0.z, R0.z;\n"
       
  1819     "MUL R0.xy, R0, R0.z;\n"
       
  1820     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1821     "ADD R0.z, R0, R0.w;\n"
       
  1822     "MUL R0.xy, R0, c[0];\n"
       
  1823     "ADD R0.x, R0, R0.y;\n"
       
  1824     "MUL R0.z, -R0, c[1].x;\n"
       
  1825     "MUL R0.y, R0.x, c[6].x;\n"
       
  1826     "MUL R0.z, R0, c[6].y;\n"
       
  1827     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1828     "RSQ R0.z, R0.x;\n"
       
  1829     "MOV R0.x, c[6];\n"
       
  1830     "MUL R0.w, R0.x, c[1].x;\n"
       
  1831     "RCP R0.z, R0.z;\n"
       
  1832     "ADD R0.x, -R0.y, R0.z;\n"
       
  1833     "RCP R0.y, R0.w;\n"
       
  1834     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  1835     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1836     "MUL R0.x, R0, R0.y;\n"
       
  1837     "TEX R0, R0, texture[1], 1D;\n"
       
  1838     "MUL R2.xyz, R0, R1.w;\n"
       
  1839     "MUL R3.xyz, R0.w, R1;\n"
       
  1840     "MIN R2.xyz, R2, R3;\n"
       
  1841     "ADD R2.w, -R1, c[6].z;\n"
       
  1842     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  1843     "ADD R2.x, R0.w, R1.w;\n"
       
  1844     "ADD R2.y, -R0.w, c[6].z;\n"
       
  1845     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  1846     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  1847     "END\n"
       
  1848     ;
       
  1849 
       
  1850 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
       
  1851     "!!ARBfp1.0\n"
       
  1852     "PARAM c[7] = { program.local[0..5],\n"
       
  1853     "		{ 2, 4, 1 } };\n"
       
  1854     "TEMP R0;\n"
       
  1855     "TEMP R1;\n"
       
  1856     "TEMP R2;\n"
       
  1857     "TEMP R3;\n"
       
  1858     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1859     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1860     "ADD R0.xyz, R0, c[4];\n"
       
  1861     "RCP R0.z, R0.z;\n"
       
  1862     "MUL R0.xy, R0, R0.z;\n"
       
  1863     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1864     "ADD R0.z, R0, R0.w;\n"
       
  1865     "MUL R0.xy, R0, c[0];\n"
       
  1866     "ADD R0.x, R0, R0.y;\n"
       
  1867     "MUL R0.z, -R0, c[1].x;\n"
       
  1868     "MUL R0.y, R0.x, c[6].x;\n"
       
  1869     "MUL R0.z, R0, c[6].y;\n"
       
  1870     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1871     "RSQ R0.z, R0.x;\n"
       
  1872     "MOV R0.x, c[6];\n"
       
  1873     "MUL R0.w, R0.x, c[1].x;\n"
       
  1874     "RCP R0.z, R0.z;\n"
       
  1875     "ADD R0.x, -R0.y, R0.z;\n"
       
  1876     "RCP R0.y, R0.w;\n"
       
  1877     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  1878     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1879     "MUL R0.x, R0, R0.y;\n"
       
  1880     "TEX R0, R0, texture[1], 1D;\n"
       
  1881     "MUL R2.xyz, R0, R1.w;\n"
       
  1882     "MUL R3.xyz, R0.w, R1;\n"
       
  1883     "MAX R2.xyz, R2, R3;\n"
       
  1884     "ADD R2.w, -R1, c[6].z;\n"
       
  1885     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  1886     "ADD R2.x, R0.w, R1.w;\n"
       
  1887     "ADD R2.y, -R0.w, c[6].z;\n"
       
  1888     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  1889     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  1890     "END\n"
       
  1891     ;
       
  1892 
       
  1893 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
       
  1894     "!!ARBfp1.0\n"
       
  1895     "PARAM c[7] = { program.local[0..5],\n"
       
  1896     "		{ 2, 4, 1, 1e-006 } };\n"
       
  1897     "TEMP R0;\n"
       
  1898     "TEMP R1;\n"
       
  1899     "TEMP R2;\n"
       
  1900     "TEMP R3;\n"
       
  1901     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1902     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1903     "ADD R0.xyz, R0, c[4];\n"
       
  1904     "RCP R0.z, R0.z;\n"
       
  1905     "MUL R0.xy, R0, R0.z;\n"
       
  1906     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1907     "ADD R0.z, R0, R0.w;\n"
       
  1908     "MUL R0.xy, R0, c[0];\n"
       
  1909     "ADD R0.x, R0, R0.y;\n"
       
  1910     "MUL R0.y, R0.x, c[6].x;\n"
       
  1911     "MOV R0.x, c[6];\n"
       
  1912     "MUL R0.z, -R0, c[1].x;\n"
       
  1913     "MUL R0.z, R0, c[6].y;\n"
       
  1914     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  1915     "MUL R0.w, R0.x, c[1].x;\n"
       
  1916     "RSQ R0.z, R0.z;\n"
       
  1917     "RCP R0.x, R0.z;\n"
       
  1918     "RCP R0.z, R0.w;\n"
       
  1919     "ADD R0.x, -R0.y, R0;\n"
       
  1920     "MUL R0.x, R0, R0.z;\n"
       
  1921     "TEX R0, R0, texture[1], 1D;\n"
       
  1922     "MAX R1.x, R0.w, c[6].w;\n"
       
  1923     "RCP R1.x, R1.x;\n"
       
  1924     "MAD R1.xyz, -R0, R1.x, c[6].z;\n"
       
  1925     "MAX R2.xyz, R1, c[6].w;\n"
       
  1926     "MUL R1.xy, fragment.position, c[5];\n"
       
  1927     "TEX R1, R1, texture[0], 2D;\n"
       
  1928     "ADD R2.w, -R0, c[6].z;\n"
       
  1929     "MUL R3.xyz, R1, R2.w;\n"
       
  1930     "ADD R2.w, -R1, c[6].z;\n"
       
  1931     "MAD R3.xyz, R0, R2.w, R3;\n"
       
  1932     "MUL R1.xyz, R0.w, R1;\n"
       
  1933     "MAD R0.xyz, R0, R1.w, R1;\n"
       
  1934     "MUL R2.w, R0, R1;\n"
       
  1935     "RCP R2.x, R2.x;\n"
       
  1936     "RCP R2.y, R2.y;\n"
       
  1937     "RCP R2.z, R2.z;\n"
       
  1938     "MAD R2.xyz, R1, R2, R3;\n"
       
  1939     "MAD R3.xyz, R0.w, R1.w, R3;\n"
       
  1940     "ADD R1.x, R0.w, R1.w;\n"
       
  1941     "ADD R3.xyz, R3, -R2;\n"
       
  1942     "SGE R0.xyz, R0, R2.w;\n"
       
  1943     "MAD result.color.xyz, R0, R3, R2;\n"
       
  1944     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  1945     "END\n"
       
  1946     ;
       
  1947 
       
  1948 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK =
       
  1949     "!!ARBfp1.0\n"
       
  1950     "PARAM c[7] = { program.local[0..5],\n"
       
  1951     "		{ 2, 4, 1, 9.9999997e-006 } };\n"
       
  1952     "TEMP R0;\n"
       
  1953     "TEMP R1;\n"
       
  1954     "TEMP R2;\n"
       
  1955     "TEMP R3;\n"
       
  1956     "TEMP R4;\n"
       
  1957     "TEMP R5;\n"
       
  1958     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  1959     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  1960     "ADD R0.xyz, R0, c[4];\n"
       
  1961     "RCP R0.z, R0.z;\n"
       
  1962     "MUL R0.xy, R0, R0.z;\n"
       
  1963     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  1964     "ADD R0.z, R0, R0.w;\n"
       
  1965     "MUL R0.xy, R0, c[0];\n"
       
  1966     "ADD R0.x, R0, R0.y;\n"
       
  1967     "MUL R0.z, -R0, c[1].x;\n"
       
  1968     "MUL R0.y, R0.x, c[6].x;\n"
       
  1969     "MUL R0.z, R0, c[6].y;\n"
       
  1970     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  1971     "RSQ R0.z, R0.x;\n"
       
  1972     "MOV R0.x, c[6];\n"
       
  1973     "MUL R0.w, R0.x, c[1].x;\n"
       
  1974     "RCP R0.z, R0.z;\n"
       
  1975     "ADD R0.x, -R0.y, R0.z;\n"
       
  1976     "RCP R0.y, R0.w;\n"
       
  1977     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  1978     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  1979     "MUL R0.x, R0, R0.y;\n"
       
  1980     "TEX R0, R0, texture[1], 1D;\n"
       
  1981     "MUL R2.xyz, R0.w, R1;\n"
       
  1982     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  1983     "ADD R2.w, -R1, c[6].z;\n"
       
  1984     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  1985     "MUL R4.xyz, R0.w, R2;\n"
       
  1986     "MAX R2.xyz, R0, c[6].w;\n"
       
  1987     "MUL R5.xyz, R0, R2.w;\n"
       
  1988     "ADD R3.w, -R0, c[6].z;\n"
       
  1989     "RCP R2.x, R2.x;\n"
       
  1990     "RCP R2.y, R2.y;\n"
       
  1991     "RCP R2.z, R2.z;\n"
       
  1992     "MAD R2.xyz, R4, R2, R5;\n"
       
  1993     "MUL R4.xyz, R1, R3.w;\n"
       
  1994     "MAD R1.xyz, R1, R3.w, R2;\n"
       
  1995     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  1996     "MUL R2.x, R0.w, R1.w;\n"
       
  1997     "ADD R2.w, R0, R1;\n"
       
  1998     "ADD R1.xyz, R1, -R0;\n"
       
  1999     "SGE R2.xyz, R3, R2.x;\n"
       
  2000     "MAD result.color.xyz, R2, R1, R0;\n"
       
  2001     "MAD result.color.w, -R0, R1, R2;\n"
       
  2002     "END\n"
       
  2003     ;
       
  2004 
       
  2005 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
       
  2006     "!!ARBfp1.0\n"
       
  2007     "PARAM c[7] = { program.local[0..5],\n"
       
  2008     "		{ 2, 4, 1 } };\n"
       
  2009     "TEMP R0;\n"
       
  2010     "TEMP R1;\n"
       
  2011     "TEMP R2;\n"
       
  2012     "TEMP R3;\n"
       
  2013     "TEMP R4;\n"
       
  2014     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  2015     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  2016     "ADD R0.xyz, R0, c[4];\n"
       
  2017     "RCP R0.z, R0.z;\n"
       
  2018     "MUL R0.xy, R0, R0.z;\n"
       
  2019     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  2020     "ADD R0.z, R0, R0.w;\n"
       
  2021     "MUL R0.xy, R0, c[0];\n"
       
  2022     "ADD R0.x, R0, R0.y;\n"
       
  2023     "MUL R0.y, R0.x, c[6].x;\n"
       
  2024     "MOV R0.x, c[6];\n"
       
  2025     "MUL R0.z, -R0, c[1].x;\n"
       
  2026     "MUL R0.z, R0, c[6].y;\n"
       
  2027     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  2028     "MUL R1.xy, fragment.position, c[5];\n"
       
  2029     "TEX R1, R1, texture[0], 2D;\n"
       
  2030     "MUL R0.w, R0.x, c[1].x;\n"
       
  2031     "RSQ R0.z, R0.z;\n"
       
  2032     "RCP R0.x, R0.z;\n"
       
  2033     "ADD R2.w, -R1, c[6].z;\n"
       
  2034     "RCP R0.z, R0.w;\n"
       
  2035     "ADD R0.x, -R0.y, R0;\n"
       
  2036     "MUL R0.x, R0, R0.z;\n"
       
  2037     "TEX R0, R0, texture[1], 1D;\n"
       
  2038     "ADD R3.xyz, R0.w, -R0;\n"
       
  2039     "ADD R2.xyz, R1.w, -R1;\n"
       
  2040     "MUL R2.xyz, R2, R3;\n"
       
  2041     "MUL R2.xyz, R2, c[6].x;\n"
       
  2042     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  2043     "MUL R4.xyz, R0, R2.w;\n"
       
  2044     "MUL R3.xyz, R0, R1;\n"
       
  2045     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  2046     "ADD R2.w, -R0, c[6].z;\n"
       
  2047     "MUL R0.xyz, R0, c[6].x;\n"
       
  2048     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  2049     "MAD R3.xyz, R3, c[6].x, R4;\n"
       
  2050     "MAD R1.xyz, R1, R2.w, R3;\n"
       
  2051     "ADD R2.w, R0, R1;\n"
       
  2052     "ADD R2.xyz, R2, -R1;\n"
       
  2053     "SGE R0.xyz, R0, R0.w;\n"
       
  2054     "MAD result.color.xyz, R0, R2, R1;\n"
       
  2055     "MAD result.color.w, -R0, R1, R2;\n"
       
  2056     "END\n"
       
  2057     ;
       
  2058 
       
  2059 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
       
  2060     "!!ARBfp1.0\n"
       
  2061     "PARAM c[8] = { program.local[0..5],\n"
       
  2062     "		{ 2, 4, 1, 9.9999997e-006 },\n"
       
  2063     "		{ 8, 3 } };\n"
       
  2064     "TEMP R0;\n"
       
  2065     "TEMP R1;\n"
       
  2066     "TEMP R2;\n"
       
  2067     "TEMP R3;\n"
       
  2068     "TEMP R4;\n"
       
  2069     "TEMP R5;\n"
       
  2070     "TEMP R6;\n"
       
  2071     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  2072     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  2073     "ADD R0.xyz, R0, c[4];\n"
       
  2074     "RCP R0.z, R0.z;\n"
       
  2075     "MUL R1.xy, fragment.position, c[5];\n"
       
  2076     "TEX R1, R1, texture[0], 2D;\n"
       
  2077     "MAX R0.w, R1, c[6];\n"
       
  2078     "RCP R2.w, R0.w;\n"
       
  2079     "MUL R5.xyz, R1, R2.w;\n"
       
  2080     "MUL R0.xy, R0, R0.z;\n"
       
  2081     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  2082     "ADD R0.z, R0, R0.w;\n"
       
  2083     "MUL R0.xy, R0, c[0];\n"
       
  2084     "ADD R0.x, R0, R0.y;\n"
       
  2085     "MUL R0.y, R0.x, c[6].x;\n"
       
  2086     "MOV R0.x, c[6];\n"
       
  2087     "RSQ R2.x, R5.x;\n"
       
  2088     "RSQ R2.z, R5.z;\n"
       
  2089     "RSQ R2.y, R5.y;\n"
       
  2090     "MUL R0.z, -R0, c[1].x;\n"
       
  2091     "MUL R0.z, R0, c[6].y;\n"
       
  2092     "MAD R0.z, R0.y, R0.y, -R0;\n"
       
  2093     "MUL R0.w, R0.x, c[1].x;\n"
       
  2094     "RSQ R0.z, R0.z;\n"
       
  2095     "RCP R0.x, R0.z;\n"
       
  2096     "RCP R0.z, R0.w;\n"
       
  2097     "ADD R0.x, -R0.y, R0;\n"
       
  2098     "MUL R0.x, R0, R0.z;\n"
       
  2099     "TEX R0, R0, texture[1], 1D;\n"
       
  2100     "MAD R3.xyz, R0, c[6].x, -R0.w;\n"
       
  2101     "MAD R6.xyz, -R5, c[7].x, c[7].y;\n"
       
  2102     "RCP R2.x, R2.x;\n"
       
  2103     "RCP R2.z, R2.z;\n"
       
  2104     "RCP R2.y, R2.y;\n"
       
  2105     "MAD R2.xyz, R1.w, R2, -R1;\n"
       
  2106     "MUL R2.xyz, R3, R2;\n"
       
  2107     "MAD R4.xyz, R0.w, R1, R2;\n"
       
  2108     "MAD R2.xyz, -R1, R2.w, c[6].z;\n"
       
  2109     "MUL R5.xyz, R2, R3;\n"
       
  2110     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  2111     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  2112     "MAD R5.xyz, -R1, R6, R4;\n"
       
  2113     "MUL R3.xyz, R0, c[6].x;\n"
       
  2114     "MUL R4.xyz, R1, c[7].x;\n"
       
  2115     "MUL R6.xyz, R1, R6;\n"
       
  2116     "SGE R4.xyz, R4, R1.w;\n"
       
  2117     "MAD R4.xyz, R4, R5, R6;\n"
       
  2118     "MAD R4.xyz, -R1, R2, R4;\n"
       
  2119     "MUL R2.xyz, R1, R2;\n"
       
  2120     "SGE R3.xyz, R3, R0.w;\n"
       
  2121     "MAD R2.xyz, R3, R4, R2;\n"
       
  2122     "ADD R2.w, -R1, c[6].z;\n"
       
  2123     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  2124     "ADD R0.x, R0.w, R1.w;\n"
       
  2125     "ADD R0.y, -R0.w, c[6].z;\n"
       
  2126     "MAD result.color.xyz, R1, R0.y, R2;\n"
       
  2127     "MAD result.color.w, -R0, R1, R0.x;\n"
       
  2128     "END\n"
       
  2129     ;
       
  2130 
       
  2131 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
       
  2132     "!!ARBfp1.0\n"
       
  2133     "PARAM c[7] = { program.local[0..5],\n"
       
  2134     "		{ 2, 4 } };\n"
       
  2135     "TEMP R0;\n"
       
  2136     "TEMP R1;\n"
       
  2137     "TEMP R2;\n"
       
  2138     "TEMP R3;\n"
       
  2139     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  2140     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  2141     "ADD R0.xyz, R0, c[4];\n"
       
  2142     "RCP R0.z, R0.z;\n"
       
  2143     "MUL R0.xy, R0, R0.z;\n"
       
  2144     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  2145     "ADD R0.z, R0, R0.w;\n"
       
  2146     "MUL R0.xy, R0, c[0];\n"
       
  2147     "ADD R0.x, R0, R0.y;\n"
       
  2148     "MUL R0.z, -R0, c[1].x;\n"
       
  2149     "MUL R0.y, R0.x, c[6].x;\n"
       
  2150     "MUL R0.z, R0, c[6].y;\n"
       
  2151     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  2152     "RSQ R0.z, R0.x;\n"
       
  2153     "MOV R0.x, c[6];\n"
       
  2154     "MUL R0.w, R0.x, c[1].x;\n"
       
  2155     "RCP R0.z, R0.z;\n"
       
  2156     "ADD R0.x, -R0.y, R0.z;\n"
       
  2157     "RCP R0.y, R0.w;\n"
       
  2158     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  2159     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  2160     "MUL R0.x, R0, R0.y;\n"
       
  2161     "TEX R0, R0, texture[1], 1D;\n"
       
  2162     "MUL R2.xyz, R0, R1.w;\n"
       
  2163     "MUL R3.xyz, R0.w, R1;\n"
       
  2164     "ADD R0.xyz, R0, R1;\n"
       
  2165     "MIN R2.xyz, R2, R3;\n"
       
  2166     "ADD R1.x, R0.w, R1.w;\n"
       
  2167     "MAD result.color.xyz, -R2, c[6].x, R0;\n"
       
  2168     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  2169     "END\n"
       
  2170     ;
       
  2171 
       
  2172 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
       
  2173     "!!ARBfp1.0\n"
       
  2174     "PARAM c[7] = { program.local[0..5],\n"
       
  2175     "		{ 2, 4, 1 } };\n"
       
  2176     "TEMP R0;\n"
       
  2177     "TEMP R1;\n"
       
  2178     "TEMP R2;\n"
       
  2179     "TEMP R3;\n"
       
  2180     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  2181     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  2182     "ADD R0.xyz, R0, c[4];\n"
       
  2183     "RCP R0.z, R0.z;\n"
       
  2184     "MUL R0.xy, R0, R0.z;\n"
       
  2185     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  2186     "ADD R0.z, R0, R0.w;\n"
       
  2187     "MUL R0.xy, R0, c[0];\n"
       
  2188     "ADD R0.x, R0, R0.y;\n"
       
  2189     "MUL R0.z, -R0, c[1].x;\n"
       
  2190     "MUL R0.y, R0.x, c[6].x;\n"
       
  2191     "MUL R0.z, R0, c[6].y;\n"
       
  2192     "MAD R0.x, R0.y, R0.y, -R0.z;\n"
       
  2193     "RSQ R0.z, R0.x;\n"
       
  2194     "MOV R0.x, c[6];\n"
       
  2195     "MUL R0.w, R0.x, c[1].x;\n"
       
  2196     "RCP R0.z, R0.z;\n"
       
  2197     "ADD R0.x, -R0.y, R0.z;\n"
       
  2198     "RCP R0.y, R0.w;\n"
       
  2199     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  2200     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  2201     "MUL R0.x, R0, R0.y;\n"
       
  2202     "TEX R0, R0, texture[1], 1D;\n"
       
  2203     "MUL R2.xyz, R0.w, R1;\n"
       
  2204     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  2205     "MUL R2.xyz, R0, R1;\n"
       
  2206     "MAD R2.xyz, -R2, c[6].x, R3;\n"
       
  2207     "ADD R2.w, -R1, c[6].z;\n"
       
  2208     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  2209     "ADD R2.x, R0.w, R1.w;\n"
       
  2210     "ADD R2.y, -R0.w, c[6].z;\n"
       
  2211     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  2212     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  2213     "END\n"
       
  2214     ;
       
  2215 
       
  2216 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK =
       
  2217     "!!ARBfp1.0\n"
       
  2218     "PARAM c[9] = { program.local[0..7],\n"
       
  2219     "		{ 2, 4 } };\n"
       
  2220     "TEMP R0;\n"
       
  2221     "TEMP R1;\n"
       
  2222     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  2223     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  2224     "ADD R0.xyz, R0, c[4];\n"
       
  2225     "RCP R0.z, R0.z;\n"
       
  2226     "MUL R0.xy, R0, R0.z;\n"
       
  2227     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  2228     "ADD R0.z, R0, R0.w;\n"
       
  2229     "MUL R0.xy, R0, c[0];\n"
       
  2230     "ADD R0.x, R0, R0.y;\n"
       
  2231     "MUL R0.z, -R0, c[1].x;\n"
       
  2232     "MUL R0.y, R0.z, c[8];\n"
       
  2233     "MUL R0.x, R0, c[8];\n"
       
  2234     "MAD R0.y, R0.x, R0.x, -R0;\n"
       
  2235     "RSQ R0.y, R0.y;\n"
       
  2236     "RCP R0.y, R0.y;\n"
       
  2237     "ADD R1.x, -R0, R0.y;\n"
       
  2238     "MOV R0.x, c[8];\n"
       
  2239     "MUL R0.x, R0, c[1];\n"
       
  2240     "RCP R1.y, R0.x;\n"
       
  2241     "ADD R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
       
  2242     "MUL R0.zw, R0, c[5].xyxy;\n"
       
  2243     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  2244     "MUL R1.x, R1, R1.y;\n"
       
  2245     "DP4 R1.y, R0, c[7];\n"
       
  2246     "TEX R0, R1, texture[1], 1D;\n"
       
  2247     "MUL result.color, R0, R1.y;\n"
       
  2248     "END\n"
       
  2249     ;
       
  2250 
       
  2251 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
       
  2252     "!!ARBfp1.0\n"
       
  2253     "PARAM c[6] = { program.local[0..4],\n"
       
  2254     "		{ 2, 4 } };\n"
       
  2255     "TEMP R0;\n"
       
  2256     "MUL R0.xyz, fragment.position.y, c[3];\n"
       
  2257     "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
       
  2258     "ADD R0.xyz, R0, c[4];\n"
       
  2259     "RCP R0.z, R0.z;\n"
       
  2260     "MUL R0.xy, R0, R0.z;\n"
       
  2261     "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
       
  2262     "MUL R0.xy, R0, c[0];\n"
       
  2263     "ADD R0.z, R0, R0.w;\n"
       
  2264     "ADD R0.x, R0, R0.y;\n"
       
  2265     "MUL R0.z, -R0, c[1].x;\n"
       
  2266     "MUL R0.y, R0.z, c[5];\n"
       
  2267     "MUL R0.x, R0, c[5];\n"
       
  2268     "MAD R0.z, R0.x, R0.x, -R0.y;\n"
       
  2269     "MOV R0.y, c[5].x;\n"
       
  2270     "RSQ R0.z, R0.z;\n"
       
  2271     "MUL R0.w, R0.y, c[1].x;\n"
       
  2272     "RCP R0.y, R0.z;\n"
       
  2273     "RCP R0.z, R0.w;\n"
       
  2274     "ADD R0.x, -R0, R0.y;\n"
       
  2275     "MUL R0.x, R0, R0.z;\n"
       
  2276     "TEX result.color, R0, texture[0], 1D;\n"
       
  2277     "END\n"
       
  2278     ;
       
  2279 
       
  2280 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
       
  2281     "!!ARBfp1.0\n"
       
  2282     "PARAM c[13] = { program.local[0..9],\n"
       
  2283     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  2284     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  2285     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  2286     "TEMP R0;\n"
       
  2287     "TEMP R1;\n"
       
  2288     "TEMP R2;\n"
       
  2289     "TEMP R3;\n"
       
  2290     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2291     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2292     "ADD R0.xyz, R0, c[3];\n"
       
  2293     "RCP R0.z, R0.z;\n"
       
  2294     "MUL R0.xy, R0, R0.z;\n"
       
  2295     "ABS R0.z, R0.x;\n"
       
  2296     "ABS R0.w, R0.y;\n"
       
  2297     "ADD R0.w, R0, -R0.z;\n"
       
  2298     "ADD R1.x, R0.y, c[10].y;\n"
       
  2299     "ABS R0.w, R0;\n"
       
  2300     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2301     "ABS R0.w, -R0.y;\n"
       
  2302     "MAX R1.x, R0.z, R0.w;\n"
       
  2303     "RCP R1.y, R1.x;\n"
       
  2304     "MIN R1.x, R0.z, R0.w;\n"
       
  2305     "MUL R1.x, R1, R1.y;\n"
       
  2306     "MUL R1.y, R1.x, R1.x;\n"
       
  2307     "MAD R1.z, R1.y, c[11].x, c[11].y;\n"
       
  2308     "MAD R1.z, R1, R1.y, -c[11];\n"
       
  2309     "MAD R1.z, R1, R1.y, c[11].w;\n"
       
  2310     "MAD R1.z, R1, R1.y, -c[12].x;\n"
       
  2311     "MAD R1.y, R1.z, R1, c[12];\n"
       
  2312     "MUL R1.x, R1.y, R1;\n"
       
  2313     "ADD R1.y, -R1.x, c[10].w;\n"
       
  2314     "ADD R0.z, -R0, R0.w;\n"
       
  2315     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2316     "ADD R0.w, -R0.z, c[10].z;\n"
       
  2317     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2318     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2319     "ADD R0.x, R0, c[0];\n"
       
  2320     "MUL R1.x, R0, c[10];\n"
       
  2321     "FLR R1.y, R1.x;\n"
       
  2322     "MUL R0.xy, fragment.position, c[7];\n"
       
  2323     "TEX R0, R0, texture[0], 2D;\n"
       
  2324     "ADD R1.x, R1, -R1.y;\n"
       
  2325     "TEX R1, R1, texture[2], 1D;\n"
       
  2326     "MUL R2.xyz, R0, c[4].y;\n"
       
  2327     "MUL R3.xyz, R1.w, R2;\n"
       
  2328     "MUL R2.xyz, R1, c[4].x;\n"
       
  2329     "MAD R2.xyz, R0.w, R2, R3;\n"
       
  2330     "ADD R3.xy, fragment.position, c[8];\n"
       
  2331     "ADD R2.w, -R0, c[12].z;\n"
       
  2332     "MUL R1.xyz, R1, c[5].y;\n"
       
  2333     "MAD R2.xyz, R2.w, R1, R2;\n"
       
  2334     "MUL R1.xyz, R0, c[5].z;\n"
       
  2335     "ADD R3.z, -R1.w, c[12];\n"
       
  2336     "MAD R2.xyz, R3.z, R1, R2;\n"
       
  2337     "MUL R1.y, R1.w, R2.w;\n"
       
  2338     "MUL R1.x, R1.w, R0.w;\n"
       
  2339     "MUL R1.z, R0.w, R3;\n"
       
  2340     "DP3 R2.w, R1, c[5];\n"
       
  2341     "MUL R3.xy, R3, c[6];\n"
       
  2342     "TEX R1, R3, texture[1], 2D;\n"
       
  2343     "ADD R2, R2, -R0;\n"
       
  2344     "DP4 R1.x, R1, c[9];\n"
       
  2345     "MAD result.color, R1.x, R2, R0;\n"
       
  2346     "END\n"
       
  2347     ;
       
  2348 
       
  2349 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY =
       
  2350     "!!ARBfp1.0\n"
       
  2351     "PARAM c[11] = { program.local[0..7],\n"
       
  2352     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  2353     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  2354     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  2355     "TEMP R0;\n"
       
  2356     "TEMP R1;\n"
       
  2357     "TEMP R2;\n"
       
  2358     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2359     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2360     "ADD R0.xyz, R0, c[3];\n"
       
  2361     "RCP R0.z, R0.z;\n"
       
  2362     "MUL R0.xy, R0, R0.z;\n"
       
  2363     "ABS R0.z, R0.x;\n"
       
  2364     "ABS R0.w, R0.y;\n"
       
  2365     "ADD R0.w, R0, -R0.z;\n"
       
  2366     "ADD R1.x, R0.y, c[8].y;\n"
       
  2367     "ABS R0.w, R0;\n"
       
  2368     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2369     "ABS R0.w, -R0.y;\n"
       
  2370     "MAX R1.x, R0.z, R0.w;\n"
       
  2371     "RCP R1.y, R1.x;\n"
       
  2372     "MIN R1.x, R0.z, R0.w;\n"
       
  2373     "MUL R1.x, R1, R1.y;\n"
       
  2374     "MUL R1.y, R1.x, R1.x;\n"
       
  2375     "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
       
  2376     "MAD R1.z, R1, R1.y, -c[9];\n"
       
  2377     "MAD R1.z, R1, R1.y, c[9].w;\n"
       
  2378     "MAD R1.z, R1, R1.y, -c[10].x;\n"
       
  2379     "MAD R1.y, R1.z, R1, c[10];\n"
       
  2380     "MUL R1.x, R1.y, R1;\n"
       
  2381     "ADD R1.y, -R1.x, c[8].w;\n"
       
  2382     "ADD R0.z, -R0, R0.w;\n"
       
  2383     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2384     "ADD R0.w, -R0.z, c[8].z;\n"
       
  2385     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2386     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2387     "ADD R0.x, R0, c[0];\n"
       
  2388     "MUL R1.x, R0, c[8];\n"
       
  2389     "FLR R1.y, R1.x;\n"
       
  2390     "MUL R0.xy, fragment.position, c[5];\n"
       
  2391     "TEX R0, R0, texture[0], 2D;\n"
       
  2392     "ADD R1.x, R1, -R1.y;\n"
       
  2393     "TEX R1, R1, texture[2], 1D;\n"
       
  2394     "ADD R2.x, -R0.w, c[10].z;\n"
       
  2395     "MUL R2.xyz, R1, R2.x;\n"
       
  2396     "MAD R1.xyz, R1, R0, R2;\n"
       
  2397     "ADD R2.x, -R1.w, c[10].z;\n"
       
  2398     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  2399     "ADD R1.z, R1.w, R0.w;\n"
       
  2400     "MAD R2.w, -R1, R0, R1.z;\n"
       
  2401     "ADD R1.xy, fragment.position, c[6];\n"
       
  2402     "MUL R1.xy, R1, c[4];\n"
       
  2403     "TEX R1, R1, texture[1], 2D;\n"
       
  2404     "ADD R2, R2, -R0;\n"
       
  2405     "DP4 R1.x, R1, c[7];\n"
       
  2406     "MAD result.color, R1.x, R2, R0;\n"
       
  2407     "END\n"
       
  2408     ;
       
  2409 
       
  2410 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN =
       
  2411     "!!ARBfp1.0\n"
       
  2412     "PARAM c[11] = { program.local[0..7],\n"
       
  2413     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  2414     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  2415     "		{ 0.33299461, 0.99999559 } };\n"
       
  2416     "TEMP R0;\n"
       
  2417     "TEMP R1;\n"
       
  2418     "TEMP R2;\n"
       
  2419     "TEMP R3;\n"
       
  2420     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2421     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2422     "ADD R0.xyz, R0, c[3];\n"
       
  2423     "RCP R0.z, R0.z;\n"
       
  2424     "MUL R0.xy, R0, R0.z;\n"
       
  2425     "ADD R3.xy, fragment.position, c[6];\n"
       
  2426     "ABS R0.z, R0.x;\n"
       
  2427     "ABS R0.w, R0.y;\n"
       
  2428     "ADD R0.w, R0, -R0.z;\n"
       
  2429     "ADD R1.x, R0.y, c[8].y;\n"
       
  2430     "ABS R0.w, R0;\n"
       
  2431     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2432     "ABS R0.w, -R0.y;\n"
       
  2433     "MAX R1.x, R0.z, R0.w;\n"
       
  2434     "RCP R1.y, R1.x;\n"
       
  2435     "MIN R1.x, R0.z, R0.w;\n"
       
  2436     "MUL R1.x, R1, R1.y;\n"
       
  2437     "MUL R1.y, R1.x, R1.x;\n"
       
  2438     "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
       
  2439     "MAD R1.z, R1, R1.y, -c[9];\n"
       
  2440     "MAD R1.z, R1, R1.y, c[9].w;\n"
       
  2441     "MAD R1.z, R1, R1.y, -c[10].x;\n"
       
  2442     "MAD R1.y, R1.z, R1, c[10];\n"
       
  2443     "MUL R1.x, R1.y, R1;\n"
       
  2444     "ADD R0.z, -R0, R0.w;\n"
       
  2445     "ADD R1.y, -R1.x, c[8].w;\n"
       
  2446     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2447     "ADD R0.w, -R0.z, c[8].z;\n"
       
  2448     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2449     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2450     "ADD R0.x, R0, c[0];\n"
       
  2451     "MUL R0.x, R0, c[8];\n"
       
  2452     "FLR R0.y, R0.x;\n"
       
  2453     "ADD R0.z, R0.x, -R0.y;\n"
       
  2454     "TEX R1, R0.z, texture[2], 1D;\n"
       
  2455     "MUL R0.xy, fragment.position, c[5];\n"
       
  2456     "TEX R0, R0, texture[0], 2D;\n"
       
  2457     "ADD R2, R1, R0;\n"
       
  2458     "MAD R2, -R1, R0, R2;\n"
       
  2459     "MUL R3.xy, R3, c[4];\n"
       
  2460     "TEX R1, R3, texture[1], 2D;\n"
       
  2461     "ADD R2, R2, -R0;\n"
       
  2462     "DP4 R1.x, R1, c[7];\n"
       
  2463     "MAD result.color, R1.x, R2, R0;\n"
       
  2464     "END\n"
       
  2465     ;
       
  2466 
       
  2467 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY =
       
  2468     "!!ARBfp1.0\n"
       
  2469     "PARAM c[11] = { program.local[0..7],\n"
       
  2470     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  2471     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  2472     "		{ 3.141593, 0.15915494, 2, 1 } };\n"
       
  2473     "TEMP R0;\n"
       
  2474     "TEMP R1;\n"
       
  2475     "TEMP R2;\n"
       
  2476     "TEMP R3;\n"
       
  2477     "TEMP R4;\n"
       
  2478     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2479     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2480     "ADD R0.xyz, R0, c[3];\n"
       
  2481     "RCP R0.z, R0.z;\n"
       
  2482     "MUL R0.xy, R0, R0.z;\n"
       
  2483     "ABS R0.z, R0.x;\n"
       
  2484     "ABS R0.w, R0.y;\n"
       
  2485     "ADD R0.w, R0, -R0.z;\n"
       
  2486     "ADD R1.x, R0.y, c[8];\n"
       
  2487     "ABS R0.w, R0;\n"
       
  2488     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2489     "ABS R0.w, -R0.y;\n"
       
  2490     "MAX R1.x, R0.z, R0.w;\n"
       
  2491     "RCP R1.y, R1.x;\n"
       
  2492     "MIN R1.x, R0.z, R0.w;\n"
       
  2493     "MUL R1.x, R1, R1.y;\n"
       
  2494     "MUL R1.y, R1.x, R1.x;\n"
       
  2495     "MAD R1.z, R1.y, c[8].y, c[8];\n"
       
  2496     "MAD R1.z, R1, R1.y, -c[8].w;\n"
       
  2497     "MAD R1.z, R1, R1.y, c[9].x;\n"
       
  2498     "MAD R1.z, R1, R1.y, -c[9].y;\n"
       
  2499     "MAD R1.y, R1.z, R1, c[9].z;\n"
       
  2500     "MUL R1.x, R1.y, R1;\n"
       
  2501     "ADD R0.z, -R0, R0.w;\n"
       
  2502     "ADD R1.y, -R1.x, c[9].w;\n"
       
  2503     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2504     "ADD R0.w, -R0.z, c[10].x;\n"
       
  2505     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2506     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2507     "ADD R0.x, R0, c[0];\n"
       
  2508     "MUL R0.x, R0, c[10].y;\n"
       
  2509     "FLR R0.y, R0.x;\n"
       
  2510     "ADD R0.x, R0, -R0.y;\n"
       
  2511     "TEX R0, R0, texture[2], 1D;\n"
       
  2512     "MUL R1.xy, fragment.position, c[5];\n"
       
  2513     "TEX R1, R1, texture[0], 2D;\n"
       
  2514     "ADD R2.w, -R1, c[10];\n"
       
  2515     "ADD R3.xyz, R0.w, -R0;\n"
       
  2516     "ADD R2.xyz, R1.w, -R1;\n"
       
  2517     "MUL R2.xyz, R2, R3;\n"
       
  2518     "MUL R2.xyz, R2, c[10].z;\n"
       
  2519     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  2520     "MUL R4.xyz, R0, R2.w;\n"
       
  2521     "MUL R3.xyz, R0, R1;\n"
       
  2522     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  2523     "ADD R2.x, -R0.w, c[10].w;\n"
       
  2524     "MAD R3.xyz, R3, c[10].z, R4;\n"
       
  2525     "MAD R3.xyz, R1, R2.x, R3;\n"
       
  2526     "MAD R0.xyz, R1, R2.x, R0;\n"
       
  2527     "MUL R2.xyz, R1, c[10].z;\n"
       
  2528     "ADD R0.xyz, R0, -R3;\n"
       
  2529     "SGE R2.xyz, R2, R1.w;\n"
       
  2530     "MAD R2.xyz, R2, R0, R3;\n"
       
  2531     "ADD R0.z, R0.w, R1.w;\n"
       
  2532     "MAD R2.w, -R0, R1, R0.z;\n"
       
  2533     "ADD R0.xy, fragment.position, c[6];\n"
       
  2534     "MUL R0.xy, R0, c[4];\n"
       
  2535     "TEX R0, R0, texture[1], 2D;\n"
       
  2536     "ADD R2, R2, -R1;\n"
       
  2537     "DP4 R0.x, R0, c[7];\n"
       
  2538     "MAD result.color, R0.x, R2, R1;\n"
       
  2539     "END\n"
       
  2540     ;
       
  2541 
       
  2542 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN =
       
  2543     "!!ARBfp1.0\n"
       
  2544     "PARAM c[11] = { program.local[0..7],\n"
       
  2545     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  2546     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  2547     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  2548     "TEMP R0;\n"
       
  2549     "TEMP R1;\n"
       
  2550     "TEMP R2;\n"
       
  2551     "TEMP R3;\n"
       
  2552     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2553     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2554     "ADD R0.xyz, R0, c[3];\n"
       
  2555     "RCP R0.z, R0.z;\n"
       
  2556     "MUL R0.xy, R0, R0.z;\n"
       
  2557     "ABS R0.z, R0.x;\n"
       
  2558     "ABS R0.w, R0.y;\n"
       
  2559     "ADD R0.w, R0, -R0.z;\n"
       
  2560     "ADD R1.x, R0.y, c[8].y;\n"
       
  2561     "ABS R0.w, R0;\n"
       
  2562     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2563     "ABS R0.w, -R0.y;\n"
       
  2564     "MAX R1.x, R0.z, R0.w;\n"
       
  2565     "RCP R1.y, R1.x;\n"
       
  2566     "MIN R1.x, R0.z, R0.w;\n"
       
  2567     "MUL R1.x, R1, R1.y;\n"
       
  2568     "MUL R1.y, R1.x, R1.x;\n"
       
  2569     "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
       
  2570     "MAD R1.z, R1, R1.y, -c[9];\n"
       
  2571     "MAD R1.z, R1, R1.y, c[9].w;\n"
       
  2572     "MAD R1.z, R1, R1.y, -c[10].x;\n"
       
  2573     "MAD R1.y, R1.z, R1, c[10];\n"
       
  2574     "MUL R1.x, R1.y, R1;\n"
       
  2575     "ADD R1.y, -R1.x, c[8].w;\n"
       
  2576     "ADD R0.z, -R0, R0.w;\n"
       
  2577     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2578     "ADD R0.w, -R0.z, c[8].z;\n"
       
  2579     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2580     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2581     "ADD R0.x, R0, c[0];\n"
       
  2582     "MUL R0.z, R0.x, c[8].x;\n"
       
  2583     "FLR R0.w, R0.z;\n"
       
  2584     "ADD R1.x, R0.z, -R0.w;\n"
       
  2585     "MUL R0.xy, fragment.position, c[5];\n"
       
  2586     "TEX R0, R0, texture[0], 2D;\n"
       
  2587     "TEX R1, R1, texture[2], 1D;\n"
       
  2588     "MUL R3.xyz, R1.w, R0;\n"
       
  2589     "MUL R2.xyz, R1, R0.w;\n"
       
  2590     "MIN R2.xyz, R2, R3;\n"
       
  2591     "ADD R2.w, -R0, c[10].z;\n"
       
  2592     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  2593     "ADD R2.x, -R1.w, c[10].z;\n"
       
  2594     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  2595     "ADD R1.z, R1.w, R0.w;\n"
       
  2596     "MAD R2.w, -R1, R0, R1.z;\n"
       
  2597     "ADD R1.xy, fragment.position, c[6];\n"
       
  2598     "MUL R1.xy, R1, c[4];\n"
       
  2599     "TEX R1, R1, texture[1], 2D;\n"
       
  2600     "ADD R2, R2, -R0;\n"
       
  2601     "DP4 R1.x, R1, c[7];\n"
       
  2602     "MAD result.color, R1.x, R2, R0;\n"
       
  2603     "END\n"
       
  2604     ;
       
  2605 
       
  2606 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN =
       
  2607     "!!ARBfp1.0\n"
       
  2608     "PARAM c[11] = { program.local[0..7],\n"
       
  2609     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  2610     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  2611     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  2612     "TEMP R0;\n"
       
  2613     "TEMP R1;\n"
       
  2614     "TEMP R2;\n"
       
  2615     "TEMP R3;\n"
       
  2616     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2617     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2618     "ADD R0.xyz, R0, c[3];\n"
       
  2619     "RCP R0.z, R0.z;\n"
       
  2620     "MUL R0.xy, R0, R0.z;\n"
       
  2621     "ABS R0.z, R0.x;\n"
       
  2622     "ABS R0.w, R0.y;\n"
       
  2623     "ADD R0.w, R0, -R0.z;\n"
       
  2624     "ADD R1.x, R0.y, c[8].y;\n"
       
  2625     "ABS R0.w, R0;\n"
       
  2626     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2627     "ABS R0.w, -R0.y;\n"
       
  2628     "MAX R1.x, R0.z, R0.w;\n"
       
  2629     "RCP R1.y, R1.x;\n"
       
  2630     "MIN R1.x, R0.z, R0.w;\n"
       
  2631     "MUL R1.x, R1, R1.y;\n"
       
  2632     "MUL R1.y, R1.x, R1.x;\n"
       
  2633     "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
       
  2634     "MAD R1.z, R1, R1.y, -c[9];\n"
       
  2635     "MAD R1.z, R1, R1.y, c[9].w;\n"
       
  2636     "MAD R1.z, R1, R1.y, -c[10].x;\n"
       
  2637     "MAD R1.y, R1.z, R1, c[10];\n"
       
  2638     "MUL R1.x, R1.y, R1;\n"
       
  2639     "ADD R1.y, -R1.x, c[8].w;\n"
       
  2640     "ADD R0.z, -R0, R0.w;\n"
       
  2641     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2642     "ADD R0.w, -R0.z, c[8].z;\n"
       
  2643     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2644     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2645     "ADD R0.x, R0, c[0];\n"
       
  2646     "MUL R0.z, R0.x, c[8].x;\n"
       
  2647     "FLR R0.w, R0.z;\n"
       
  2648     "ADD R1.x, R0.z, -R0.w;\n"
       
  2649     "MUL R0.xy, fragment.position, c[5];\n"
       
  2650     "TEX R0, R0, texture[0], 2D;\n"
       
  2651     "TEX R1, R1, texture[2], 1D;\n"
       
  2652     "MUL R3.xyz, R1.w, R0;\n"
       
  2653     "MUL R2.xyz, R1, R0.w;\n"
       
  2654     "MAX R2.xyz, R2, R3;\n"
       
  2655     "ADD R2.w, -R0, c[10].z;\n"
       
  2656     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  2657     "ADD R2.x, -R1.w, c[10].z;\n"
       
  2658     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  2659     "ADD R1.z, R1.w, R0.w;\n"
       
  2660     "MAD R2.w, -R1, R0, R1.z;\n"
       
  2661     "ADD R1.xy, fragment.position, c[6];\n"
       
  2662     "MUL R1.xy, R1, c[4];\n"
       
  2663     "TEX R1, R1, texture[1], 2D;\n"
       
  2664     "ADD R2, R2, -R0;\n"
       
  2665     "DP4 R1.x, R1, c[7];\n"
       
  2666     "MAD result.color, R1.x, R2, R0;\n"
       
  2667     "END\n"
       
  2668     ;
       
  2669 
       
  2670 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE =
       
  2671     "!!ARBfp1.0\n"
       
  2672     "PARAM c[11] = { program.local[0..7],\n"
       
  2673     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  2674     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  2675     "		{ 3.141593, 0.15915494, 1, 1e-006 } };\n"
       
  2676     "TEMP R0;\n"
       
  2677     "TEMP R1;\n"
       
  2678     "TEMP R2;\n"
       
  2679     "TEMP R3;\n"
       
  2680     "TEMP R4;\n"
       
  2681     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2682     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2683     "ADD R0.xyz, R0, c[3];\n"
       
  2684     "RCP R0.z, R0.z;\n"
       
  2685     "MUL R0.xy, R0, R0.z;\n"
       
  2686     "ABS R0.z, R0.x;\n"
       
  2687     "ABS R0.w, R0.y;\n"
       
  2688     "ADD R0.w, R0, -R0.z;\n"
       
  2689     "ADD R1.x, R0.y, c[8];\n"
       
  2690     "ABS R0.w, R0;\n"
       
  2691     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2692     "ABS R0.w, -R0.y;\n"
       
  2693     "MAX R1.x, R0.z, R0.w;\n"
       
  2694     "RCP R1.y, R1.x;\n"
       
  2695     "MIN R1.x, R0.z, R0.w;\n"
       
  2696     "MUL R1.x, R1, R1.y;\n"
       
  2697     "MUL R1.y, R1.x, R1.x;\n"
       
  2698     "MAD R1.z, R1.y, c[8].y, c[8];\n"
       
  2699     "MAD R1.z, R1, R1.y, -c[8].w;\n"
       
  2700     "MAD R1.z, R1, R1.y, c[9].x;\n"
       
  2701     "MAD R1.z, R1, R1.y, -c[9].y;\n"
       
  2702     "MAD R1.y, R1.z, R1, c[9].z;\n"
       
  2703     "MUL R1.x, R1.y, R1;\n"
       
  2704     "ADD R1.y, -R1.x, c[9].w;\n"
       
  2705     "ADD R0.z, -R0, R0.w;\n"
       
  2706     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2707     "ADD R0.w, -R0.z, c[10].x;\n"
       
  2708     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2709     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2710     "ADD R0.x, R0, c[0];\n"
       
  2711     "MUL R0.x, R0, c[10].y;\n"
       
  2712     "FLR R0.y, R0.x;\n"
       
  2713     "ADD R0.x, R0, -R0.y;\n"
       
  2714     "TEX R0, R0, texture[2], 1D;\n"
       
  2715     "MAX R1.x, R0.w, c[10].w;\n"
       
  2716     "RCP R1.x, R1.x;\n"
       
  2717     "MAD R1.xyz, -R0, R1.x, c[10].z;\n"
       
  2718     "MAX R2.xyz, R1, c[10].w;\n"
       
  2719     "MUL R1.xy, fragment.position, c[5];\n"
       
  2720     "TEX R1, R1, texture[0], 2D;\n"
       
  2721     "ADD R2.w, -R0, c[10].z;\n"
       
  2722     "MUL R3.xyz, R1, R2.w;\n"
       
  2723     "ADD R2.w, -R1, c[10].z;\n"
       
  2724     "MAD R4.xyz, R0, R2.w, R3;\n"
       
  2725     "MUL R3.xyz, R0.w, R1;\n"
       
  2726     "MUL R2.w, R0, R1;\n"
       
  2727     "MAD R0.xyz, R0, R1.w, R3;\n"
       
  2728     "SGE R0.xyz, R0, R2.w;\n"
       
  2729     "RCP R2.x, R2.x;\n"
       
  2730     "RCP R2.y, R2.y;\n"
       
  2731     "RCP R2.z, R2.z;\n"
       
  2732     "MAD R2.xyz, R3, R2, R4;\n"
       
  2733     "MAD R4.xyz, R0.w, R1.w, R4;\n"
       
  2734     "ADD R4.xyz, R4, -R2;\n"
       
  2735     "MAD R2.xyz, R0, R4, R2;\n"
       
  2736     "ADD R0.z, R0.w, R1.w;\n"
       
  2737     "MAD R2.w, -R0, R1, R0.z;\n"
       
  2738     "ADD R0.xy, fragment.position, c[6];\n"
       
  2739     "MUL R0.xy, R0, c[4];\n"
       
  2740     "TEX R0, R0, texture[1], 2D;\n"
       
  2741     "ADD R2, R2, -R1;\n"
       
  2742     "DP4 R0.x, R0, c[7];\n"
       
  2743     "MAD result.color, R0.x, R2, R1;\n"
       
  2744     "END\n"
       
  2745     ;
       
  2746 
       
  2747 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN =
       
  2748     "!!ARBfp1.0\n"
       
  2749     "PARAM c[11] = { program.local[0..7],\n"
       
  2750     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  2751     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  2752     "		{ 3.141593, 0.15915494, 1, 9.9999997e-006 } };\n"
       
  2753     "TEMP R0;\n"
       
  2754     "TEMP R1;\n"
       
  2755     "TEMP R2;\n"
       
  2756     "TEMP R3;\n"
       
  2757     "TEMP R4;\n"
       
  2758     "TEMP R5;\n"
       
  2759     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2760     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2761     "ADD R0.xyz, R0, c[3];\n"
       
  2762     "RCP R0.z, R0.z;\n"
       
  2763     "MUL R0.xy, R0, R0.z;\n"
       
  2764     "ABS R0.w, R0.x;\n"
       
  2765     "ABS R0.z, R0.y;\n"
       
  2766     "ADD R0.z, R0, -R0.w;\n"
       
  2767     "ADD R1.x, R0.y, c[8];\n"
       
  2768     "ABS R0.z, R0;\n"
       
  2769     "CMP R0.y, -R0.z, R0, R1.x;\n"
       
  2770     "ABS R0.z, -R0.y;\n"
       
  2771     "MAX R1.x, R0.w, R0.z;\n"
       
  2772     "RCP R1.y, R1.x;\n"
       
  2773     "MIN R1.x, R0.w, R0.z;\n"
       
  2774     "MUL R1.x, R1, R1.y;\n"
       
  2775     "MUL R1.y, R1.x, R1.x;\n"
       
  2776     "MAD R1.z, R1.y, c[8].y, c[8];\n"
       
  2777     "MAD R1.z, R1, R1.y, -c[8].w;\n"
       
  2778     "MAD R1.z, R1, R1.y, c[9].x;\n"
       
  2779     "MAD R1.z, R1, R1.y, -c[9].y;\n"
       
  2780     "MAD R1.y, R1.z, R1, c[9].z;\n"
       
  2781     "MUL R1.x, R1.y, R1;\n"
       
  2782     "ADD R1.y, -R1.x, c[9].w;\n"
       
  2783     "ADD R0.z, -R0.w, R0;\n"
       
  2784     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2785     "ADD R0.w, -R0.z, c[10].x;\n"
       
  2786     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2787     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2788     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  2789     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  2790     "ADD R0.x, R0, c[0];\n"
       
  2791     "MUL R0.x, R0, c[10].y;\n"
       
  2792     "FLR R0.y, R0.x;\n"
       
  2793     "ADD R0.x, R0, -R0.y;\n"
       
  2794     "TEX R0, R0, texture[2], 1D;\n"
       
  2795     "MUL R2.xyz, R0.w, R1;\n"
       
  2796     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  2797     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  2798     "MUL R4.xyz, R0.w, R2;\n"
       
  2799     "MAX R2.xyz, R0, c[10].w;\n"
       
  2800     "ADD R2.w, -R1, c[10].z;\n"
       
  2801     "ADD R3.w, -R0, c[10].z;\n"
       
  2802     "MUL R5.xyz, R0, R2.w;\n"
       
  2803     "RCP R2.x, R2.x;\n"
       
  2804     "RCP R2.y, R2.y;\n"
       
  2805     "RCP R2.z, R2.z;\n"
       
  2806     "MAD R2.xyz, R4, R2, R5;\n"
       
  2807     "MUL R4.xyz, R1, R3.w;\n"
       
  2808     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  2809     "MUL R2.w, R0, R1;\n"
       
  2810     "MAD R2.xyz, R1, R3.w, R2;\n"
       
  2811     "ADD R2.xyz, R2, -R0;\n"
       
  2812     "SGE R3.xyz, R3, R2.w;\n"
       
  2813     "MAD R2.xyz, R3, R2, R0;\n"
       
  2814     "ADD R0.z, R0.w, R1.w;\n"
       
  2815     "MAD R2.w, -R0, R1, R0.z;\n"
       
  2816     "ADD R0.xy, fragment.position, c[6];\n"
       
  2817     "MUL R0.xy, R0, c[4];\n"
       
  2818     "TEX R0, R0, texture[1], 2D;\n"
       
  2819     "ADD R2, R2, -R1;\n"
       
  2820     "DP4 R0.x, R0, c[7];\n"
       
  2821     "MAD result.color, R0.x, R2, R1;\n"
       
  2822     "END\n"
       
  2823     ;
       
  2824 
       
  2825 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT =
       
  2826     "!!ARBfp1.0\n"
       
  2827     "PARAM c[11] = { program.local[0..7],\n"
       
  2828     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  2829     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  2830     "		{ 3.141593, 0.15915494, 2, 1 } };\n"
       
  2831     "TEMP R0;\n"
       
  2832     "TEMP R1;\n"
       
  2833     "TEMP R2;\n"
       
  2834     "TEMP R3;\n"
       
  2835     "TEMP R4;\n"
       
  2836     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2837     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2838     "ADD R0.xyz, R0, c[3];\n"
       
  2839     "RCP R0.z, R0.z;\n"
       
  2840     "MUL R0.xy, R0, R0.z;\n"
       
  2841     "ABS R0.z, R0.x;\n"
       
  2842     "ABS R0.w, R0.y;\n"
       
  2843     "ADD R0.w, R0, -R0.z;\n"
       
  2844     "ADD R1.x, R0.y, c[8];\n"
       
  2845     "ABS R0.w, R0;\n"
       
  2846     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  2847     "ABS R0.w, -R0.y;\n"
       
  2848     "MAX R1.x, R0.z, R0.w;\n"
       
  2849     "RCP R1.y, R1.x;\n"
       
  2850     "MIN R1.x, R0.z, R0.w;\n"
       
  2851     "MUL R1.x, R1, R1.y;\n"
       
  2852     "MUL R1.y, R1.x, R1.x;\n"
       
  2853     "MAD R1.z, R1.y, c[8].y, c[8];\n"
       
  2854     "MAD R1.z, R1, R1.y, -c[8].w;\n"
       
  2855     "MAD R1.z, R1, R1.y, c[9].x;\n"
       
  2856     "MAD R1.z, R1, R1.y, -c[9].y;\n"
       
  2857     "MAD R1.y, R1.z, R1, c[9].z;\n"
       
  2858     "MUL R1.x, R1.y, R1;\n"
       
  2859     "ADD R0.z, -R0, R0.w;\n"
       
  2860     "ADD R1.y, -R1.x, c[9].w;\n"
       
  2861     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2862     "ADD R0.w, -R0.z, c[10].x;\n"
       
  2863     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2864     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2865     "ADD R0.x, R0, c[0];\n"
       
  2866     "MUL R0.x, R0, c[10].y;\n"
       
  2867     "FLR R0.y, R0.x;\n"
       
  2868     "ADD R0.x, R0, -R0.y;\n"
       
  2869     "TEX R0, R0, texture[2], 1D;\n"
       
  2870     "MUL R1.xy, fragment.position, c[5];\n"
       
  2871     "TEX R1, R1, texture[0], 2D;\n"
       
  2872     "ADD R2.w, -R1, c[10];\n"
       
  2873     "ADD R3.xyz, R0.w, -R0;\n"
       
  2874     "ADD R2.xyz, R1.w, -R1;\n"
       
  2875     "MUL R2.xyz, R2, R3;\n"
       
  2876     "MUL R2.xyz, R2, c[10].z;\n"
       
  2877     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  2878     "MUL R4.xyz, R0, R2.w;\n"
       
  2879     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  2880     "MUL R3.xyz, R0, R1;\n"
       
  2881     "ADD R2.w, -R0, c[10];\n"
       
  2882     "MAD R3.xyz, R3, c[10].z, R4;\n"
       
  2883     "MUL R0.xyz, R0, c[10].z;\n"
       
  2884     "SGE R0.xyz, R0, R0.w;\n"
       
  2885     "MAD R3.xyz, R1, R2.w, R3;\n"
       
  2886     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  2887     "ADD R2.xyz, R2, -R3;\n"
       
  2888     "MAD R2.xyz, R0, R2, R3;\n"
       
  2889     "ADD R0.z, R0.w, R1.w;\n"
       
  2890     "MAD R2.w, -R0, R1, R0.z;\n"
       
  2891     "ADD R0.xy, fragment.position, c[6];\n"
       
  2892     "MUL R0.xy, R0, c[4];\n"
       
  2893     "TEX R0, R0, texture[1], 2D;\n"
       
  2894     "ADD R2, R2, -R1;\n"
       
  2895     "DP4 R0.x, R0, c[7];\n"
       
  2896     "MAD result.color, R0.x, R2, R1;\n"
       
  2897     "END\n"
       
  2898     ;
       
  2899 
       
  2900 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT =
       
  2901     "!!ARBfp1.0\n"
       
  2902     "PARAM c[12] = { program.local[0..7],\n"
       
  2903     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  2904     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  2905     "		{ 3.141593, 0.15915494, 1, 2 },\n"
       
  2906     "		{ 9.9999997e-006, 8, 3 } };\n"
       
  2907     "TEMP R0;\n"
       
  2908     "TEMP R1;\n"
       
  2909     "TEMP R2;\n"
       
  2910     "TEMP R3;\n"
       
  2911     "TEMP R4;\n"
       
  2912     "TEMP R5;\n"
       
  2913     "TEMP R6;\n"
       
  2914     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  2915     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  2916     "ADD R0.xyz, R0, c[3];\n"
       
  2917     "RCP R0.z, R0.z;\n"
       
  2918     "MUL R0.xy, R0, R0.z;\n"
       
  2919     "ABS R0.w, R0.x;\n"
       
  2920     "ABS R0.z, R0.y;\n"
       
  2921     "ADD R0.z, R0, -R0.w;\n"
       
  2922     "ADD R1.x, R0.y, c[8];\n"
       
  2923     "ABS R0.z, R0;\n"
       
  2924     "CMP R0.y, -R0.z, R0, R1.x;\n"
       
  2925     "ABS R0.z, -R0.y;\n"
       
  2926     "MAX R1.x, R0.w, R0.z;\n"
       
  2927     "RCP R1.y, R1.x;\n"
       
  2928     "MIN R1.x, R0.w, R0.z;\n"
       
  2929     "MUL R1.x, R1, R1.y;\n"
       
  2930     "MUL R1.y, R1.x, R1.x;\n"
       
  2931     "MAD R1.z, R1.y, c[8].y, c[8];\n"
       
  2932     "MAD R1.z, R1, R1.y, -c[8].w;\n"
       
  2933     "MAD R1.z, R1, R1.y, c[9].x;\n"
       
  2934     "MAD R1.z, R1, R1.y, -c[9].y;\n"
       
  2935     "MAD R1.y, R1.z, R1, c[9].z;\n"
       
  2936     "MUL R1.x, R1.y, R1;\n"
       
  2937     "ADD R1.y, -R1.x, c[9].w;\n"
       
  2938     "ADD R0.z, -R0.w, R0;\n"
       
  2939     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  2940     "ADD R0.w, -R0.z, c[10].x;\n"
       
  2941     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  2942     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  2943     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  2944     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  2945     "MAX R0.y, R1.w, c[11].x;\n"
       
  2946     "RCP R2.w, R0.y;\n"
       
  2947     "MUL R5.xyz, R1, R2.w;\n"
       
  2948     "RSQ R2.x, R5.x;\n"
       
  2949     "RSQ R2.z, R5.z;\n"
       
  2950     "RSQ R2.y, R5.y;\n"
       
  2951     "ADD R0.x, R0, c[0];\n"
       
  2952     "MUL R0.x, R0, c[10].y;\n"
       
  2953     "FLR R0.y, R0.x;\n"
       
  2954     "ADD R0.x, R0, -R0.y;\n"
       
  2955     "TEX R0, R0, texture[2], 1D;\n"
       
  2956     "MAD R3.xyz, R0, c[10].w, -R0.w;\n"
       
  2957     "MAD R6.xyz, -R5, c[11].y, c[11].z;\n"
       
  2958     "RCP R2.x, R2.x;\n"
       
  2959     "RCP R2.z, R2.z;\n"
       
  2960     "RCP R2.y, R2.y;\n"
       
  2961     "MAD R2.xyz, R1.w, R2, -R1;\n"
       
  2962     "MUL R2.xyz, R3, R2;\n"
       
  2963     "MAD R4.xyz, R0.w, R1, R2;\n"
       
  2964     "MAD R2.xyz, -R1, R2.w, c[10].z;\n"
       
  2965     "MUL R5.xyz, R2, R3;\n"
       
  2966     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  2967     "MAD R5.xyz, -R1, R6, R4;\n"
       
  2968     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  2969     "MUL R3.xyz, R0, c[10].w;\n"
       
  2970     "MUL R4.xyz, R1, c[11].y;\n"
       
  2971     "SGE R3.xyz, R3, R0.w;\n"
       
  2972     "ADD R2.w, -R1, c[10].z;\n"
       
  2973     "MUL R6.xyz, R1, R6;\n"
       
  2974     "SGE R4.xyz, R4, R1.w;\n"
       
  2975     "MAD R4.xyz, R4, R5, R6;\n"
       
  2976     "MAD R4.xyz, -R1, R2, R4;\n"
       
  2977     "MUL R2.xyz, R1, R2;\n"
       
  2978     "MAD R2.xyz, R3, R4, R2;\n"
       
  2979     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  2980     "ADD R0.x, -R0.w, c[10].z;\n"
       
  2981     "MAD R2.xyz, R1, R0.x, R2;\n"
       
  2982     "ADD R0.z, R0.w, R1.w;\n"
       
  2983     "MAD R2.w, -R0, R1, R0.z;\n"
       
  2984     "ADD R0.xy, fragment.position, c[6];\n"
       
  2985     "MUL R0.xy, R0, c[4];\n"
       
  2986     "TEX R0, R0, texture[1], 2D;\n"
       
  2987     "ADD R2, R2, -R1;\n"
       
  2988     "DP4 R0.x, R0, c[7];\n"
       
  2989     "MAD result.color, R0.x, R2, R1;\n"
       
  2990     "END\n"
       
  2991     ;
       
  2992 
       
  2993 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE =
       
  2994     "!!ARBfp1.0\n"
       
  2995     "PARAM c[11] = { program.local[0..7],\n"
       
  2996     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  2997     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  2998     "		{ 0.33299461, 0.99999559, 2 } };\n"
       
  2999     "TEMP R0;\n"
       
  3000     "TEMP R1;\n"
       
  3001     "TEMP R2;\n"
       
  3002     "TEMP R3;\n"
       
  3003     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3004     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3005     "ADD R0.xyz, R0, c[3];\n"
       
  3006     "RCP R0.z, R0.z;\n"
       
  3007     "MUL R0.xy, R0, R0.z;\n"
       
  3008     "ABS R0.z, R0.x;\n"
       
  3009     "ABS R0.w, R0.y;\n"
       
  3010     "ADD R0.w, R0, -R0.z;\n"
       
  3011     "ADD R1.x, R0.y, c[8].y;\n"
       
  3012     "ABS R0.w, R0;\n"
       
  3013     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3014     "ABS R0.w, -R0.y;\n"
       
  3015     "MAX R1.x, R0.z, R0.w;\n"
       
  3016     "RCP R1.y, R1.x;\n"
       
  3017     "MIN R1.x, R0.z, R0.w;\n"
       
  3018     "MUL R1.x, R1, R1.y;\n"
       
  3019     "MUL R1.y, R1.x, R1.x;\n"
       
  3020     "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
       
  3021     "MAD R1.z, R1, R1.y, -c[9];\n"
       
  3022     "MAD R1.z, R1, R1.y, c[9].w;\n"
       
  3023     "MAD R1.z, R1, R1.y, -c[10].x;\n"
       
  3024     "MAD R1.y, R1.z, R1, c[10];\n"
       
  3025     "MUL R1.x, R1.y, R1;\n"
       
  3026     "ADD R1.y, -R1.x, c[8].w;\n"
       
  3027     "ADD R0.z, -R0, R0.w;\n"
       
  3028     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3029     "ADD R0.w, -R0.z, c[8].z;\n"
       
  3030     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3031     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3032     "ADD R0.x, R0, c[0];\n"
       
  3033     "MUL R0.z, R0.x, c[8].x;\n"
       
  3034     "FLR R0.w, R0.z;\n"
       
  3035     "ADD R1.x, R0.z, -R0.w;\n"
       
  3036     "MUL R0.xy, fragment.position, c[5];\n"
       
  3037     "TEX R0, R0, texture[0], 2D;\n"
       
  3038     "TEX R1, R1, texture[2], 1D;\n"
       
  3039     "ADD R2.xyz, R1, R0;\n"
       
  3040     "MUL R3.xyz, R1.w, R0;\n"
       
  3041     "MUL R1.xyz, R1, R0.w;\n"
       
  3042     "MIN R1.xyz, R1, R3;\n"
       
  3043     "MAD R2.xyz, -R1, c[10].z, R2;\n"
       
  3044     "ADD R1.z, R1.w, R0.w;\n"
       
  3045     "MAD R2.w, -R1, R0, R1.z;\n"
       
  3046     "ADD R1.xy, fragment.position, c[6];\n"
       
  3047     "MUL R1.xy, R1, c[4];\n"
       
  3048     "TEX R1, R1, texture[1], 2D;\n"
       
  3049     "ADD R2, R2, -R0;\n"
       
  3050     "DP4 R1.x, R1, c[7];\n"
       
  3051     "MAD result.color, R1.x, R2, R0;\n"
       
  3052     "END\n"
       
  3053     ;
       
  3054 
       
  3055 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION =
       
  3056     "!!ARBfp1.0\n"
       
  3057     "PARAM c[11] = { program.local[0..7],\n"
       
  3058     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3059     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3060     "		{ 0.33299461, 0.99999559, 2, 1 } };\n"
       
  3061     "TEMP R0;\n"
       
  3062     "TEMP R1;\n"
       
  3063     "TEMP R2;\n"
       
  3064     "TEMP R3;\n"
       
  3065     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3066     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3067     "ADD R0.xyz, R0, c[3];\n"
       
  3068     "RCP R0.z, R0.z;\n"
       
  3069     "MUL R0.xy, R0, R0.z;\n"
       
  3070     "ABS R0.z, R0.x;\n"
       
  3071     "ABS R0.w, R0.y;\n"
       
  3072     "ADD R0.w, R0, -R0.z;\n"
       
  3073     "ADD R1.x, R0.y, c[8].y;\n"
       
  3074     "ABS R0.w, R0;\n"
       
  3075     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3076     "ABS R0.w, -R0.y;\n"
       
  3077     "MAX R1.x, R0.z, R0.w;\n"
       
  3078     "RCP R1.y, R1.x;\n"
       
  3079     "MIN R1.x, R0.z, R0.w;\n"
       
  3080     "MUL R1.x, R1, R1.y;\n"
       
  3081     "MUL R1.y, R1.x, R1.x;\n"
       
  3082     "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
       
  3083     "MAD R1.z, R1, R1.y, -c[9];\n"
       
  3084     "MAD R1.z, R1, R1.y, c[9].w;\n"
       
  3085     "MAD R1.z, R1, R1.y, -c[10].x;\n"
       
  3086     "MAD R1.y, R1.z, R1, c[10];\n"
       
  3087     "MUL R1.x, R1.y, R1;\n"
       
  3088     "ADD R1.y, -R1.x, c[8].w;\n"
       
  3089     "ADD R0.z, -R0, R0.w;\n"
       
  3090     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3091     "ADD R0.w, -R0.z, c[8].z;\n"
       
  3092     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3093     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3094     "ADD R0.x, R0, c[0];\n"
       
  3095     "MUL R0.z, R0.x, c[8].x;\n"
       
  3096     "FLR R0.w, R0.z;\n"
       
  3097     "ADD R1.x, R0.z, -R0.w;\n"
       
  3098     "MUL R0.xy, fragment.position, c[5];\n"
       
  3099     "TEX R0, R0, texture[0], 2D;\n"
       
  3100     "TEX R1, R1, texture[2], 1D;\n"
       
  3101     "MUL R2.xyz, R1.w, R0;\n"
       
  3102     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  3103     "MUL R2.xyz, R1, R0;\n"
       
  3104     "MAD R2.xyz, -R2, c[10].z, R3;\n"
       
  3105     "ADD R2.w, -R0, c[10];\n"
       
  3106     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  3107     "ADD R2.x, -R1.w, c[10].w;\n"
       
  3108     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  3109     "ADD R1.z, R1.w, R0.w;\n"
       
  3110     "MAD R2.w, -R1, R0, R1.z;\n"
       
  3111     "ADD R1.xy, fragment.position, c[6];\n"
       
  3112     "MUL R1.xy, R1, c[4];\n"
       
  3113     "TEX R1, R1, texture[1], 2D;\n"
       
  3114     "ADD R2, R2, -R0;\n"
       
  3115     "DP4 R1.x, R1, c[7];\n"
       
  3116     "MAD result.color, R1.x, R2, R0;\n"
       
  3117     "END\n"
       
  3118     ;
       
  3119 
       
  3120 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
       
  3121     "!!ARBfp1.0\n"
       
  3122     "PARAM c[10] = { program.local[0..6],\n"
       
  3123     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3124     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3125     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  3126     "TEMP R0;\n"
       
  3127     "TEMP R1;\n"
       
  3128     "TEMP R2;\n"
       
  3129     "TEMP R3;\n"
       
  3130     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3131     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3132     "ADD R0.xyz, R0, c[3];\n"
       
  3133     "RCP R0.z, R0.z;\n"
       
  3134     "MUL R0.xy, R0, R0.z;\n"
       
  3135     "ABS R0.z, R0.x;\n"
       
  3136     "ABS R0.w, R0.y;\n"
       
  3137     "ADD R0.w, R0, -R0.z;\n"
       
  3138     "ADD R1.x, R0.y, c[7].y;\n"
       
  3139     "ABS R0.w, R0;\n"
       
  3140     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3141     "ABS R0.w, -R0.y;\n"
       
  3142     "MAX R1.x, R0.z, R0.w;\n"
       
  3143     "RCP R1.y, R1.x;\n"
       
  3144     "MIN R1.x, R0.z, R0.w;\n"
       
  3145     "MUL R1.x, R1, R1.y;\n"
       
  3146     "MUL R1.y, R1.x, R1.x;\n"
       
  3147     "MAD R1.z, R1.y, c[8].x, c[8].y;\n"
       
  3148     "MAD R1.z, R1, R1.y, -c[8];\n"
       
  3149     "MAD R1.z, R1, R1.y, c[8].w;\n"
       
  3150     "MAD R1.z, R1, R1.y, -c[9].x;\n"
       
  3151     "MAD R1.y, R1.z, R1, c[9];\n"
       
  3152     "MUL R1.x, R1.y, R1;\n"
       
  3153     "ADD R0.z, -R0, R0.w;\n"
       
  3154     "ADD R1.y, -R1.x, c[7].w;\n"
       
  3155     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3156     "ADD R0.w, -R0.z, c[7].z;\n"
       
  3157     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3158     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3159     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
       
  3160     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3161     "MUL R2.xyz, R1, c[4].y;\n"
       
  3162     "ADD R0.x, R0, c[0];\n"
       
  3163     "MUL R0.x, R0, c[7];\n"
       
  3164     "FLR R0.y, R0.x;\n"
       
  3165     "ADD R0.x, R0, -R0.y;\n"
       
  3166     "TEX R0, R0, texture[1], 1D;\n"
       
  3167     "MUL R3.xyz, R0.w, R2;\n"
       
  3168     "MUL R2.xyz, R0, c[4].x;\n"
       
  3169     "MAD R2.xyz, R1.w, R2, R3;\n"
       
  3170     "ADD R2.w, -R1, c[9].z;\n"
       
  3171     "MUL R0.xyz, R0, c[5].y;\n"
       
  3172     "MAD R0.xyz, R2.w, R0, R2;\n"
       
  3173     "ADD R2.x, -R0.w, c[9].z;\n"
       
  3174     "MUL R1.xyz, R1, c[5].z;\n"
       
  3175     "MAD result.color.xyz, R2.x, R1, R0;\n"
       
  3176     "MUL R0.x, R0.w, R1.w;\n"
       
  3177     "MUL R0.z, R1.w, R2.x;\n"
       
  3178     "MUL R0.y, R0.w, R2.w;\n"
       
  3179     "DP3 result.color.w, R0, c[5];\n"
       
  3180     "END\n"
       
  3181     ;
       
  3182 
       
  3183 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
       
  3184     "!!ARBfp1.0\n"
       
  3185     "PARAM c[8] = { program.local[0..4],\n"
       
  3186     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3187     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3188     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  3189     "TEMP R0;\n"
       
  3190     "TEMP R1;\n"
       
  3191     "TEMP R2;\n"
       
  3192     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3193     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3194     "ADD R0.xyz, R0, c[3];\n"
       
  3195     "RCP R0.z, R0.z;\n"
       
  3196     "MUL R0.xy, R0, R0.z;\n"
       
  3197     "ABS R0.z, R0.x;\n"
       
  3198     "ABS R0.w, R0.y;\n"
       
  3199     "ADD R0.w, R0, -R0.z;\n"
       
  3200     "ADD R1.x, R0.y, c[5].y;\n"
       
  3201     "ABS R0.w, R0;\n"
       
  3202     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3203     "ABS R0.w, -R0.y;\n"
       
  3204     "MAX R1.x, R0.z, R0.w;\n"
       
  3205     "RCP R1.y, R1.x;\n"
       
  3206     "MIN R1.x, R0.z, R0.w;\n"
       
  3207     "MUL R1.x, R1, R1.y;\n"
       
  3208     "MUL R1.y, R1.x, R1.x;\n"
       
  3209     "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
       
  3210     "MAD R1.z, R1, R1.y, -c[6];\n"
       
  3211     "MAD R1.z, R1, R1.y, c[6].w;\n"
       
  3212     "MAD R1.z, R1, R1.y, -c[7].x;\n"
       
  3213     "MAD R1.y, R1.z, R1, c[7];\n"
       
  3214     "MUL R1.x, R1.y, R1;\n"
       
  3215     "ADD R0.z, -R0, R0.w;\n"
       
  3216     "ADD R1.y, -R1.x, c[5].w;\n"
       
  3217     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3218     "ADD R0.w, -R0.z, c[5].z;\n"
       
  3219     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3220     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3221     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3222     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3223     "ADD R0.x, R0, c[0];\n"
       
  3224     "MUL R0.x, R0, c[5];\n"
       
  3225     "FLR R0.y, R0.x;\n"
       
  3226     "ADD R0.x, R0, -R0.y;\n"
       
  3227     "TEX R0, R0, texture[1], 1D;\n"
       
  3228     "ADD R2.x, -R1.w, c[7].z;\n"
       
  3229     "MUL R2.xyz, R0, R2.x;\n"
       
  3230     "MAD R0.xyz, R0, R1, R2;\n"
       
  3231     "ADD R2.x, R0.w, R1.w;\n"
       
  3232     "ADD R2.y, -R0.w, c[7].z;\n"
       
  3233     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  3234     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  3235     "END\n"
       
  3236     ;
       
  3237 
       
  3238 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK =
       
  3239     "!!ARBfp1.0\n"
       
  3240     "PARAM c[8] = { program.local[0..4],\n"
       
  3241     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3242     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3243     "		{ 0.33299461, 0.99999559 } };\n"
       
  3244     "TEMP R0;\n"
       
  3245     "TEMP R1;\n"
       
  3246     "TEMP R2;\n"
       
  3247     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3248     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3249     "ADD R0.xyz, R0, c[3];\n"
       
  3250     "RCP R0.z, R0.z;\n"
       
  3251     "MUL R0.xy, R0, R0.z;\n"
       
  3252     "ABS R0.z, R0.x;\n"
       
  3253     "ABS R0.w, R0.y;\n"
       
  3254     "ADD R0.w, R0, -R0.z;\n"
       
  3255     "ADD R1.x, R0.y, c[5].y;\n"
       
  3256     "ABS R0.w, R0;\n"
       
  3257     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3258     "ABS R0.w, -R0.y;\n"
       
  3259     "MAX R1.x, R0.z, R0.w;\n"
       
  3260     "RCP R1.y, R1.x;\n"
       
  3261     "MIN R1.x, R0.z, R0.w;\n"
       
  3262     "MUL R1.x, R1, R1.y;\n"
       
  3263     "MUL R1.y, R1.x, R1.x;\n"
       
  3264     "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
       
  3265     "MAD R1.z, R1, R1.y, -c[6];\n"
       
  3266     "MAD R1.z, R1, R1.y, c[6].w;\n"
       
  3267     "MAD R1.z, R1, R1.y, -c[7].x;\n"
       
  3268     "MAD R1.y, R1.z, R1, c[7];\n"
       
  3269     "MUL R1.x, R1.y, R1;\n"
       
  3270     "ADD R0.z, -R0, R0.w;\n"
       
  3271     "ADD R1.y, -R1.x, c[5].w;\n"
       
  3272     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3273     "ADD R0.w, -R0.z, c[5].z;\n"
       
  3274     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3275     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3276     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3277     "ADD R0.x, R0, c[0];\n"
       
  3278     "MUL R0.x, R0, c[5];\n"
       
  3279     "FLR R0.y, R0.x;\n"
       
  3280     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3281     "ADD R0.x, R0, -R0.y;\n"
       
  3282     "TEX R0, R0, texture[1], 1D;\n"
       
  3283     "ADD R2, R0, R1;\n"
       
  3284     "MAD result.color, -R0, R1, R2;\n"
       
  3285     "END\n"
       
  3286     ;
       
  3287 
       
  3288 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK =
       
  3289     "!!ARBfp1.0\n"
       
  3290     "PARAM c[8] = { program.local[0..4],\n"
       
  3291     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  3292     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  3293     "		{ 3.141593, 0.15915494, 2, 1 } };\n"
       
  3294     "TEMP R0;\n"
       
  3295     "TEMP R1;\n"
       
  3296     "TEMP R2;\n"
       
  3297     "TEMP R3;\n"
       
  3298     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3299     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3300     "ADD R0.xyz, R0, c[3];\n"
       
  3301     "RCP R0.z, R0.z;\n"
       
  3302     "MUL R0.xy, R0, R0.z;\n"
       
  3303     "ABS R0.z, R0.x;\n"
       
  3304     "ABS R0.w, R0.y;\n"
       
  3305     "ADD R0.w, R0, -R0.z;\n"
       
  3306     "ADD R1.x, R0.y, c[5];\n"
       
  3307     "ABS R0.w, R0;\n"
       
  3308     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3309     "ABS R0.w, -R0.y;\n"
       
  3310     "MAX R1.x, R0.z, R0.w;\n"
       
  3311     "RCP R1.y, R1.x;\n"
       
  3312     "MIN R1.x, R0.z, R0.w;\n"
       
  3313     "MUL R1.x, R1, R1.y;\n"
       
  3314     "MUL R1.y, R1.x, R1.x;\n"
       
  3315     "MAD R1.z, R1.y, c[5].y, c[5];\n"
       
  3316     "MAD R1.z, R1, R1.y, -c[5].w;\n"
       
  3317     "MAD R1.z, R1, R1.y, c[6].x;\n"
       
  3318     "MAD R1.z, R1, R1.y, -c[6].y;\n"
       
  3319     "MAD R1.y, R1.z, R1, c[6].z;\n"
       
  3320     "MUL R1.x, R1.y, R1;\n"
       
  3321     "ADD R0.z, -R0, R0.w;\n"
       
  3322     "ADD R1.y, -R1.x, c[6].w;\n"
       
  3323     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3324     "ADD R0.w, -R0.z, c[7].x;\n"
       
  3325     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3326     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3327     "ADD R0.x, R0, c[0];\n"
       
  3328     "MUL R0.x, R0, c[7].y;\n"
       
  3329     "FLR R0.y, R0.x;\n"
       
  3330     "ADD R0.x, R0, -R0.y;\n"
       
  3331     "TEX R0, R0, texture[1], 1D;\n"
       
  3332     "MUL R1.xy, fragment.position, c[4];\n"
       
  3333     "TEX R1, R1, texture[0], 2D;\n"
       
  3334     "ADD R3.xyz, R0.w, -R0;\n"
       
  3335     "ADD R2.xyz, R1.w, -R1;\n"
       
  3336     "MUL R2.xyz, R2, R3;\n"
       
  3337     "ADD R2.w, -R1, c[7];\n"
       
  3338     "MUL R2.xyz, R2, c[7].z;\n"
       
  3339     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  3340     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  3341     "MUL R3.xyz, R0, R2.w;\n"
       
  3342     "MUL R0.xyz, R0, R1;\n"
       
  3343     "ADD R2.w, -R0, c[7];\n"
       
  3344     "MAD R0.xyz, R0, c[7].z, R3;\n"
       
  3345     "MAD R0.xyz, R1, R2.w, R0;\n"
       
  3346     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  3347     "MUL R1.xyz, R1, c[7].z;\n"
       
  3348     "ADD R2.w, R0, R1;\n"
       
  3349     "ADD R2.xyz, R2, -R0;\n"
       
  3350     "SGE R1.xyz, R1, R1.w;\n"
       
  3351     "MAD result.color.xyz, R1, R2, R0;\n"
       
  3352     "MAD result.color.w, -R0, R1, R2;\n"
       
  3353     "END\n"
       
  3354     ;
       
  3355 
       
  3356 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK =
       
  3357     "!!ARBfp1.0\n"
       
  3358     "PARAM c[8] = { program.local[0..4],\n"
       
  3359     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3360     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3361     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  3362     "TEMP R0;\n"
       
  3363     "TEMP R1;\n"
       
  3364     "TEMP R2;\n"
       
  3365     "TEMP R3;\n"
       
  3366     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3367     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3368     "ADD R0.xyz, R0, c[3];\n"
       
  3369     "RCP R0.z, R0.z;\n"
       
  3370     "MUL R0.xy, R0, R0.z;\n"
       
  3371     "ABS R0.z, R0.x;\n"
       
  3372     "ABS R0.w, R0.y;\n"
       
  3373     "ADD R0.w, R0, -R0.z;\n"
       
  3374     "ADD R1.x, R0.y, c[5].y;\n"
       
  3375     "ABS R0.w, R0;\n"
       
  3376     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3377     "ABS R0.w, -R0.y;\n"
       
  3378     "MAX R1.x, R0.z, R0.w;\n"
       
  3379     "RCP R1.y, R1.x;\n"
       
  3380     "MIN R1.x, R0.z, R0.w;\n"
       
  3381     "MUL R1.x, R1, R1.y;\n"
       
  3382     "MUL R1.y, R1.x, R1.x;\n"
       
  3383     "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
       
  3384     "MAD R1.z, R1, R1.y, -c[6];\n"
       
  3385     "MAD R1.z, R1, R1.y, c[6].w;\n"
       
  3386     "MAD R1.z, R1, R1.y, -c[7].x;\n"
       
  3387     "MAD R1.y, R1.z, R1, c[7];\n"
       
  3388     "MUL R1.x, R1.y, R1;\n"
       
  3389     "ADD R0.z, -R0, R0.w;\n"
       
  3390     "ADD R1.y, -R1.x, c[5].w;\n"
       
  3391     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3392     "ADD R0.w, -R0.z, c[5].z;\n"
       
  3393     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3394     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3395     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3396     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3397     "ADD R0.x, R0, c[0];\n"
       
  3398     "MUL R0.x, R0, c[5];\n"
       
  3399     "FLR R0.y, R0.x;\n"
       
  3400     "ADD R0.x, R0, -R0.y;\n"
       
  3401     "TEX R0, R0, texture[1], 1D;\n"
       
  3402     "MUL R2.xyz, R0, R1.w;\n"
       
  3403     "MUL R3.xyz, R0.w, R1;\n"
       
  3404     "MIN R2.xyz, R2, R3;\n"
       
  3405     "ADD R2.w, -R1, c[7].z;\n"
       
  3406     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  3407     "ADD R2.x, R0.w, R1.w;\n"
       
  3408     "ADD R2.y, -R0.w, c[7].z;\n"
       
  3409     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  3410     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  3411     "END\n"
       
  3412     ;
       
  3413 
       
  3414 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
       
  3415     "!!ARBfp1.0\n"
       
  3416     "PARAM c[8] = { program.local[0..4],\n"
       
  3417     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3418     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3419     "		{ 0.33299461, 0.99999559, 1 } };\n"
       
  3420     "TEMP R0;\n"
       
  3421     "TEMP R1;\n"
       
  3422     "TEMP R2;\n"
       
  3423     "TEMP R3;\n"
       
  3424     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3425     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3426     "ADD R0.xyz, R0, c[3];\n"
       
  3427     "RCP R0.z, R0.z;\n"
       
  3428     "MUL R0.xy, R0, R0.z;\n"
       
  3429     "ABS R0.z, R0.x;\n"
       
  3430     "ABS R0.w, R0.y;\n"
       
  3431     "ADD R0.w, R0, -R0.z;\n"
       
  3432     "ADD R1.x, R0.y, c[5].y;\n"
       
  3433     "ABS R0.w, R0;\n"
       
  3434     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3435     "ABS R0.w, -R0.y;\n"
       
  3436     "MAX R1.x, R0.z, R0.w;\n"
       
  3437     "RCP R1.y, R1.x;\n"
       
  3438     "MIN R1.x, R0.z, R0.w;\n"
       
  3439     "MUL R1.x, R1, R1.y;\n"
       
  3440     "MUL R1.y, R1.x, R1.x;\n"
       
  3441     "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
       
  3442     "MAD R1.z, R1, R1.y, -c[6];\n"
       
  3443     "MAD R1.z, R1, R1.y, c[6].w;\n"
       
  3444     "MAD R1.z, R1, R1.y, -c[7].x;\n"
       
  3445     "MAD R1.y, R1.z, R1, c[7];\n"
       
  3446     "MUL R1.x, R1.y, R1;\n"
       
  3447     "ADD R0.z, -R0, R0.w;\n"
       
  3448     "ADD R1.y, -R1.x, c[5].w;\n"
       
  3449     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3450     "ADD R0.w, -R0.z, c[5].z;\n"
       
  3451     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3452     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3453     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3454     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3455     "ADD R0.x, R0, c[0];\n"
       
  3456     "MUL R0.x, R0, c[5];\n"
       
  3457     "FLR R0.y, R0.x;\n"
       
  3458     "ADD R0.x, R0, -R0.y;\n"
       
  3459     "TEX R0, R0, texture[1], 1D;\n"
       
  3460     "MUL R2.xyz, R0, R1.w;\n"
       
  3461     "MUL R3.xyz, R0.w, R1;\n"
       
  3462     "MAX R2.xyz, R2, R3;\n"
       
  3463     "ADD R2.w, -R1, c[7].z;\n"
       
  3464     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  3465     "ADD R2.x, R0.w, R1.w;\n"
       
  3466     "ADD R2.y, -R0.w, c[7].z;\n"
       
  3467     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  3468     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  3469     "END\n"
       
  3470     ;
       
  3471 
       
  3472 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
       
  3473     "!!ARBfp1.0\n"
       
  3474     "PARAM c[8] = { program.local[0..4],\n"
       
  3475     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  3476     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  3477     "		{ 3.141593, 0.15915494, 1, 1e-006 } };\n"
       
  3478     "TEMP R0;\n"
       
  3479     "TEMP R1;\n"
       
  3480     "TEMP R2;\n"
       
  3481     "TEMP R3;\n"
       
  3482     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3483     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3484     "ADD R0.xyz, R0, c[3];\n"
       
  3485     "RCP R0.z, R0.z;\n"
       
  3486     "MUL R0.xy, R0, R0.z;\n"
       
  3487     "ABS R0.z, R0.x;\n"
       
  3488     "ABS R0.w, R0.y;\n"
       
  3489     "ADD R0.w, R0, -R0.z;\n"
       
  3490     "ADD R1.x, R0.y, c[5];\n"
       
  3491     "ABS R0.w, R0;\n"
       
  3492     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3493     "ABS R0.w, -R0.y;\n"
       
  3494     "MAX R1.x, R0.z, R0.w;\n"
       
  3495     "RCP R1.y, R1.x;\n"
       
  3496     "MIN R1.x, R0.z, R0.w;\n"
       
  3497     "MUL R1.x, R1, R1.y;\n"
       
  3498     "MUL R1.y, R1.x, R1.x;\n"
       
  3499     "MAD R1.z, R1.y, c[5].y, c[5];\n"
       
  3500     "MAD R1.z, R1, R1.y, -c[5].w;\n"
       
  3501     "MAD R1.z, R1, R1.y, c[6].x;\n"
       
  3502     "MAD R1.z, R1, R1.y, -c[6].y;\n"
       
  3503     "MAD R1.y, R1.z, R1, c[6].z;\n"
       
  3504     "MUL R1.x, R1.y, R1;\n"
       
  3505     "ADD R1.y, -R1.x, c[6].w;\n"
       
  3506     "ADD R0.z, -R0, R0.w;\n"
       
  3507     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3508     "ADD R0.w, -R0.z, c[7].x;\n"
       
  3509     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3510     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3511     "ADD R0.x, R0, c[0];\n"
       
  3512     "MUL R0.x, R0, c[7].y;\n"
       
  3513     "FLR R0.y, R0.x;\n"
       
  3514     "ADD R0.x, R0, -R0.y;\n"
       
  3515     "TEX R0, R0, texture[1], 1D;\n"
       
  3516     "MAX R1.x, R0.w, c[7].w;\n"
       
  3517     "RCP R1.x, R1.x;\n"
       
  3518     "MAD R1.xyz, -R0, R1.x, c[7].z;\n"
       
  3519     "MAX R2.xyz, R1, c[7].w;\n"
       
  3520     "MUL R1.xy, fragment.position, c[4];\n"
       
  3521     "TEX R1, R1, texture[0], 2D;\n"
       
  3522     "ADD R2.w, -R0, c[7].z;\n"
       
  3523     "MUL R3.xyz, R1, R2.w;\n"
       
  3524     "ADD R2.w, -R1, c[7].z;\n"
       
  3525     "MAD R3.xyz, R0, R2.w, R3;\n"
       
  3526     "MUL R1.xyz, R0.w, R1;\n"
       
  3527     "MAD R0.xyz, R0, R1.w, R1;\n"
       
  3528     "MUL R2.w, R0, R1;\n"
       
  3529     "RCP R2.x, R2.x;\n"
       
  3530     "RCP R2.y, R2.y;\n"
       
  3531     "RCP R2.z, R2.z;\n"
       
  3532     "MAD R2.xyz, R1, R2, R3;\n"
       
  3533     "MAD R3.xyz, R0.w, R1.w, R3;\n"
       
  3534     "ADD R1.x, R0.w, R1.w;\n"
       
  3535     "ADD R3.xyz, R3, -R2;\n"
       
  3536     "SGE R0.xyz, R0, R2.w;\n"
       
  3537     "MAD result.color.xyz, R0, R3, R2;\n"
       
  3538     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  3539     "END\n"
       
  3540     ;
       
  3541 
       
  3542 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK =
       
  3543     "!!ARBfp1.0\n"
       
  3544     "PARAM c[8] = { program.local[0..4],\n"
       
  3545     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  3546     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  3547     "		{ 3.141593, 0.15915494, 1, 9.9999997e-006 } };\n"
       
  3548     "TEMP R0;\n"
       
  3549     "TEMP R1;\n"
       
  3550     "TEMP R2;\n"
       
  3551     "TEMP R3;\n"
       
  3552     "TEMP R4;\n"
       
  3553     "TEMP R5;\n"
       
  3554     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3555     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3556     "ADD R0.xyz, R0, c[3];\n"
       
  3557     "RCP R0.z, R0.z;\n"
       
  3558     "MUL R0.xy, R0, R0.z;\n"
       
  3559     "ABS R0.w, R0.x;\n"
       
  3560     "ABS R0.z, R0.y;\n"
       
  3561     "ADD R0.z, R0, -R0.w;\n"
       
  3562     "ADD R1.x, R0.y, c[5];\n"
       
  3563     "ABS R0.z, R0;\n"
       
  3564     "CMP R0.y, -R0.z, R0, R1.x;\n"
       
  3565     "ABS R0.z, -R0.y;\n"
       
  3566     "MAX R1.x, R0.w, R0.z;\n"
       
  3567     "RCP R1.y, R1.x;\n"
       
  3568     "MIN R1.x, R0.w, R0.z;\n"
       
  3569     "MUL R1.x, R1, R1.y;\n"
       
  3570     "MUL R1.y, R1.x, R1.x;\n"
       
  3571     "MAD R1.z, R1.y, c[5].y, c[5];\n"
       
  3572     "MAD R1.z, R1, R1.y, -c[5].w;\n"
       
  3573     "MAD R1.z, R1, R1.y, c[6].x;\n"
       
  3574     "MAD R1.z, R1, R1.y, -c[6].y;\n"
       
  3575     "MAD R1.y, R1.z, R1, c[6].z;\n"
       
  3576     "MUL R1.x, R1.y, R1;\n"
       
  3577     "ADD R1.y, -R1.x, c[6].w;\n"
       
  3578     "ADD R0.z, -R0.w, R0;\n"
       
  3579     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3580     "ADD R0.w, -R0.z, c[7].x;\n"
       
  3581     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3582     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3583     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3584     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3585     "ADD R0.x, R0, c[0];\n"
       
  3586     "MUL R0.x, R0, c[7].y;\n"
       
  3587     "FLR R0.y, R0.x;\n"
       
  3588     "ADD R0.x, R0, -R0.y;\n"
       
  3589     "TEX R0, R0, texture[1], 1D;\n"
       
  3590     "MUL R2.xyz, R0.w, R1;\n"
       
  3591     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  3592     "ADD R2.w, -R1, c[7].z;\n"
       
  3593     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  3594     "MUL R4.xyz, R0.w, R2;\n"
       
  3595     "MAX R2.xyz, R0, c[7].w;\n"
       
  3596     "MUL R5.xyz, R0, R2.w;\n"
       
  3597     "ADD R3.w, -R0, c[7].z;\n"
       
  3598     "RCP R2.x, R2.x;\n"
       
  3599     "RCP R2.y, R2.y;\n"
       
  3600     "RCP R2.z, R2.z;\n"
       
  3601     "MAD R2.xyz, R4, R2, R5;\n"
       
  3602     "MUL R4.xyz, R1, R3.w;\n"
       
  3603     "MAD R1.xyz, R1, R3.w, R2;\n"
       
  3604     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  3605     "MUL R2.x, R0.w, R1.w;\n"
       
  3606     "ADD R2.w, R0, R1;\n"
       
  3607     "ADD R1.xyz, R1, -R0;\n"
       
  3608     "SGE R2.xyz, R3, R2.x;\n"
       
  3609     "MAD result.color.xyz, R2, R1, R0;\n"
       
  3610     "MAD result.color.w, -R0, R1, R2;\n"
       
  3611     "END\n"
       
  3612     ;
       
  3613 
       
  3614 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
       
  3615     "!!ARBfp1.0\n"
       
  3616     "PARAM c[8] = { program.local[0..4],\n"
       
  3617     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  3618     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  3619     "		{ 3.141593, 0.15915494, 2, 1 } };\n"
       
  3620     "TEMP R0;\n"
       
  3621     "TEMP R1;\n"
       
  3622     "TEMP R2;\n"
       
  3623     "TEMP R3;\n"
       
  3624     "TEMP R4;\n"
       
  3625     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3626     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3627     "ADD R0.xyz, R0, c[3];\n"
       
  3628     "RCP R0.z, R0.z;\n"
       
  3629     "MUL R0.xy, R0, R0.z;\n"
       
  3630     "ABS R0.z, R0.x;\n"
       
  3631     "ABS R0.w, R0.y;\n"
       
  3632     "ADD R0.w, R0, -R0.z;\n"
       
  3633     "ADD R1.x, R0.y, c[5];\n"
       
  3634     "ABS R0.w, R0;\n"
       
  3635     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3636     "ABS R0.w, -R0.y;\n"
       
  3637     "MAX R1.x, R0.z, R0.w;\n"
       
  3638     "RCP R1.y, R1.x;\n"
       
  3639     "MIN R1.x, R0.z, R0.w;\n"
       
  3640     "MUL R1.x, R1, R1.y;\n"
       
  3641     "MUL R1.y, R1.x, R1.x;\n"
       
  3642     "MAD R1.z, R1.y, c[5].y, c[5];\n"
       
  3643     "MAD R1.z, R1, R1.y, -c[5].w;\n"
       
  3644     "MAD R1.z, R1, R1.y, c[6].x;\n"
       
  3645     "MAD R1.z, R1, R1.y, -c[6].y;\n"
       
  3646     "MAD R1.y, R1.z, R1, c[6].z;\n"
       
  3647     "MUL R1.x, R1.y, R1;\n"
       
  3648     "ADD R0.z, -R0, R0.w;\n"
       
  3649     "ADD R1.y, -R1.x, c[6].w;\n"
       
  3650     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3651     "ADD R0.w, -R0.z, c[7].x;\n"
       
  3652     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3653     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3654     "ADD R0.x, R0, c[0];\n"
       
  3655     "MUL R0.x, R0, c[7].y;\n"
       
  3656     "FLR R0.y, R0.x;\n"
       
  3657     "ADD R0.x, R0, -R0.y;\n"
       
  3658     "TEX R0, R0, texture[1], 1D;\n"
       
  3659     "MUL R1.xy, fragment.position, c[4];\n"
       
  3660     "TEX R1, R1, texture[0], 2D;\n"
       
  3661     "ADD R2.w, -R1, c[7];\n"
       
  3662     "ADD R3.xyz, R0.w, -R0;\n"
       
  3663     "ADD R2.xyz, R1.w, -R1;\n"
       
  3664     "MUL R2.xyz, R2, R3;\n"
       
  3665     "MUL R2.xyz, R2, c[7].z;\n"
       
  3666     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  3667     "MUL R4.xyz, R0, R2.w;\n"
       
  3668     "MUL R3.xyz, R0, R1;\n"
       
  3669     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  3670     "ADD R2.w, -R0, c[7];\n"
       
  3671     "MUL R0.xyz, R0, c[7].z;\n"
       
  3672     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  3673     "MAD R3.xyz, R3, c[7].z, R4;\n"
       
  3674     "MAD R1.xyz, R1, R2.w, R3;\n"
       
  3675     "ADD R2.w, R0, R1;\n"
       
  3676     "ADD R2.xyz, R2, -R1;\n"
       
  3677     "SGE R0.xyz, R0, R0.w;\n"
       
  3678     "MAD result.color.xyz, R0, R2, R1;\n"
       
  3679     "MAD result.color.w, -R0, R1, R2;\n"
       
  3680     "END\n"
       
  3681     ;
       
  3682 
       
  3683 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
       
  3684     "!!ARBfp1.0\n"
       
  3685     "PARAM c[9] = { program.local[0..4],\n"
       
  3686     "		{ 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
       
  3687     "		{ 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
       
  3688     "		{ 3.141593, 0.15915494, 1, 2 },\n"
       
  3689     "		{ 9.9999997e-006, 8, 3 } };\n"
       
  3690     "TEMP R0;\n"
       
  3691     "TEMP R1;\n"
       
  3692     "TEMP R2;\n"
       
  3693     "TEMP R3;\n"
       
  3694     "TEMP R4;\n"
       
  3695     "TEMP R5;\n"
       
  3696     "TEMP R6;\n"
       
  3697     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3698     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3699     "ADD R0.xyz, R0, c[3];\n"
       
  3700     "RCP R0.z, R0.z;\n"
       
  3701     "MUL R0.xy, R0, R0.z;\n"
       
  3702     "ABS R0.w, R0.x;\n"
       
  3703     "ABS R0.z, R0.y;\n"
       
  3704     "ADD R0.z, R0, -R0.w;\n"
       
  3705     "ADD R1.x, R0.y, c[5];\n"
       
  3706     "ABS R0.z, R0;\n"
       
  3707     "CMP R0.y, -R0.z, R0, R1.x;\n"
       
  3708     "ABS R0.z, -R0.y;\n"
       
  3709     "MAX R1.x, R0.w, R0.z;\n"
       
  3710     "RCP R1.y, R1.x;\n"
       
  3711     "MIN R1.x, R0.w, R0.z;\n"
       
  3712     "MUL R1.x, R1, R1.y;\n"
       
  3713     "MUL R1.y, R1.x, R1.x;\n"
       
  3714     "MAD R1.z, R1.y, c[5].y, c[5];\n"
       
  3715     "MAD R1.z, R1, R1.y, -c[5].w;\n"
       
  3716     "MAD R1.z, R1, R1.y, c[6].x;\n"
       
  3717     "MAD R1.z, R1, R1.y, -c[6].y;\n"
       
  3718     "MAD R1.y, R1.z, R1, c[6].z;\n"
       
  3719     "MUL R1.x, R1.y, R1;\n"
       
  3720     "ADD R1.y, -R1.x, c[6].w;\n"
       
  3721     "ADD R0.z, -R0.w, R0;\n"
       
  3722     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3723     "ADD R0.w, -R0.z, c[7].x;\n"
       
  3724     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3725     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3726     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3727     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3728     "MAX R0.y, R1.w, c[8].x;\n"
       
  3729     "RCP R2.w, R0.y;\n"
       
  3730     "MUL R5.xyz, R1, R2.w;\n"
       
  3731     "RSQ R2.x, R5.x;\n"
       
  3732     "RSQ R2.z, R5.z;\n"
       
  3733     "RSQ R2.y, R5.y;\n"
       
  3734     "ADD R0.x, R0, c[0];\n"
       
  3735     "MUL R0.x, R0, c[7].y;\n"
       
  3736     "FLR R0.y, R0.x;\n"
       
  3737     "ADD R0.x, R0, -R0.y;\n"
       
  3738     "TEX R0, R0, texture[1], 1D;\n"
       
  3739     "MAD R3.xyz, R0, c[7].w, -R0.w;\n"
       
  3740     "MAD R6.xyz, -R5, c[8].y, c[8].z;\n"
       
  3741     "RCP R2.x, R2.x;\n"
       
  3742     "RCP R2.z, R2.z;\n"
       
  3743     "RCP R2.y, R2.y;\n"
       
  3744     "MAD R2.xyz, R1.w, R2, -R1;\n"
       
  3745     "MUL R2.xyz, R3, R2;\n"
       
  3746     "MAD R4.xyz, R0.w, R1, R2;\n"
       
  3747     "MAD R2.xyz, -R1, R2.w, c[7].z;\n"
       
  3748     "MUL R5.xyz, R2, R3;\n"
       
  3749     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  3750     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  3751     "MAD R5.xyz, -R1, R6, R4;\n"
       
  3752     "MUL R3.xyz, R0, c[7].w;\n"
       
  3753     "MUL R4.xyz, R1, c[8].y;\n"
       
  3754     "MUL R6.xyz, R1, R6;\n"
       
  3755     "SGE R4.xyz, R4, R1.w;\n"
       
  3756     "MAD R4.xyz, R4, R5, R6;\n"
       
  3757     "MAD R4.xyz, -R1, R2, R4;\n"
       
  3758     "MUL R2.xyz, R1, R2;\n"
       
  3759     "SGE R3.xyz, R3, R0.w;\n"
       
  3760     "MAD R2.xyz, R3, R4, R2;\n"
       
  3761     "ADD R2.w, -R1, c[7].z;\n"
       
  3762     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  3763     "ADD R0.x, R0.w, R1.w;\n"
       
  3764     "ADD R0.y, -R0.w, c[7].z;\n"
       
  3765     "MAD result.color.xyz, R1, R0.y, R2;\n"
       
  3766     "MAD result.color.w, -R0, R1, R0.x;\n"
       
  3767     "END\n"
       
  3768     ;
       
  3769 
       
  3770 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
       
  3771     "!!ARBfp1.0\n"
       
  3772     "PARAM c[8] = { program.local[0..4],\n"
       
  3773     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3774     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3775     "		{ 0.33299461, 0.99999559, 2 } };\n"
       
  3776     "TEMP R0;\n"
       
  3777     "TEMP R1;\n"
       
  3778     "TEMP R2;\n"
       
  3779     "TEMP R3;\n"
       
  3780     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3781     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3782     "ADD R0.xyz, R0, c[3];\n"
       
  3783     "RCP R0.z, R0.z;\n"
       
  3784     "MUL R0.xy, R0, R0.z;\n"
       
  3785     "ABS R0.z, R0.x;\n"
       
  3786     "ABS R0.w, R0.y;\n"
       
  3787     "ADD R0.w, R0, -R0.z;\n"
       
  3788     "ADD R1.x, R0.y, c[5].y;\n"
       
  3789     "ABS R0.w, R0;\n"
       
  3790     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3791     "ABS R0.w, -R0.y;\n"
       
  3792     "MAX R1.x, R0.z, R0.w;\n"
       
  3793     "RCP R1.y, R1.x;\n"
       
  3794     "MIN R1.x, R0.z, R0.w;\n"
       
  3795     "MUL R1.x, R1, R1.y;\n"
       
  3796     "MUL R1.y, R1.x, R1.x;\n"
       
  3797     "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
       
  3798     "MAD R1.z, R1, R1.y, -c[6];\n"
       
  3799     "MAD R1.z, R1, R1.y, c[6].w;\n"
       
  3800     "MAD R1.z, R1, R1.y, -c[7].x;\n"
       
  3801     "MAD R1.y, R1.z, R1, c[7];\n"
       
  3802     "MUL R1.x, R1.y, R1;\n"
       
  3803     "ADD R0.z, -R0, R0.w;\n"
       
  3804     "ADD R1.y, -R1.x, c[5].w;\n"
       
  3805     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3806     "ADD R0.w, -R0.z, c[5].z;\n"
       
  3807     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3808     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3809     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3810     "ADD R0.x, R0, c[0];\n"
       
  3811     "MUL R0.x, R0, c[5];\n"
       
  3812     "FLR R0.y, R0.x;\n"
       
  3813     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3814     "ADD R0.x, R0, -R0.y;\n"
       
  3815     "TEX R0, R0, texture[1], 1D;\n"
       
  3816     "MUL R2.xyz, R0, R1.w;\n"
       
  3817     "MUL R3.xyz, R0.w, R1;\n"
       
  3818     "ADD R0.xyz, R0, R1;\n"
       
  3819     "MIN R2.xyz, R2, R3;\n"
       
  3820     "ADD R1.x, R0.w, R1.w;\n"
       
  3821     "MAD result.color.xyz, -R2, c[7].z, R0;\n"
       
  3822     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  3823     "END\n"
       
  3824     ;
       
  3825 
       
  3826 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
       
  3827     "!!ARBfp1.0\n"
       
  3828     "PARAM c[8] = { program.local[0..4],\n"
       
  3829     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3830     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3831     "		{ 0.33299461, 0.99999559, 2, 1 } };\n"
       
  3832     "TEMP R0;\n"
       
  3833     "TEMP R1;\n"
       
  3834     "TEMP R2;\n"
       
  3835     "TEMP R3;\n"
       
  3836     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3837     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3838     "ADD R0.xyz, R0, c[3];\n"
       
  3839     "RCP R0.z, R0.z;\n"
       
  3840     "MUL R0.xy, R0, R0.z;\n"
       
  3841     "ABS R0.z, R0.x;\n"
       
  3842     "ABS R0.w, R0.y;\n"
       
  3843     "ADD R0.w, R0, -R0.z;\n"
       
  3844     "ADD R1.x, R0.y, c[5].y;\n"
       
  3845     "ABS R0.w, R0;\n"
       
  3846     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3847     "ABS R0.w, -R0.y;\n"
       
  3848     "MAX R1.x, R0.z, R0.w;\n"
       
  3849     "RCP R1.y, R1.x;\n"
       
  3850     "MIN R1.x, R0.z, R0.w;\n"
       
  3851     "MUL R1.x, R1, R1.y;\n"
       
  3852     "MUL R1.y, R1.x, R1.x;\n"
       
  3853     "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
       
  3854     "MAD R1.z, R1, R1.y, -c[6];\n"
       
  3855     "MAD R1.z, R1, R1.y, c[6].w;\n"
       
  3856     "MAD R1.z, R1, R1.y, -c[7].x;\n"
       
  3857     "MAD R1.y, R1.z, R1, c[7];\n"
       
  3858     "MUL R1.x, R1.y, R1;\n"
       
  3859     "ADD R0.z, -R0, R0.w;\n"
       
  3860     "ADD R1.y, -R1.x, c[5].w;\n"
       
  3861     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3862     "ADD R0.w, -R0.z, c[5].z;\n"
       
  3863     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3864     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3865     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  3866     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  3867     "ADD R0.x, R0, c[0];\n"
       
  3868     "MUL R0.x, R0, c[5];\n"
       
  3869     "FLR R0.y, R0.x;\n"
       
  3870     "ADD R0.x, R0, -R0.y;\n"
       
  3871     "TEX R0, R0, texture[1], 1D;\n"
       
  3872     "MUL R2.xyz, R0.w, R1;\n"
       
  3873     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  3874     "MUL R2.xyz, R0, R1;\n"
       
  3875     "MAD R2.xyz, -R2, c[7].z, R3;\n"
       
  3876     "ADD R2.w, -R1, c[7];\n"
       
  3877     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  3878     "ADD R2.x, R0.w, R1.w;\n"
       
  3879     "ADD R2.y, -R0.w, c[7].w;\n"
       
  3880     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  3881     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  3882     "END\n"
       
  3883     ;
       
  3884 
       
  3885 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK =
       
  3886     "!!ARBfp1.0\n"
       
  3887     "PARAM c[10] = { program.local[0..6],\n"
       
  3888     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3889     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3890     "		{ 0.33299461, 0.99999559 } };\n"
       
  3891     "TEMP R0;\n"
       
  3892     "TEMP R1;\n"
       
  3893     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3894     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3895     "ADD R0.xyz, R0, c[3];\n"
       
  3896     "RCP R0.z, R0.z;\n"
       
  3897     "MUL R0.xy, R0, R0.z;\n"
       
  3898     "ABS R0.z, R0.x;\n"
       
  3899     "ABS R0.w, R0.y;\n"
       
  3900     "ADD R0.w, R0, -R0.z;\n"
       
  3901     "ADD R1.x, R0.y, c[7].y;\n"
       
  3902     "ABS R0.w, R0;\n"
       
  3903     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3904     "ABS R0.w, -R0.y;\n"
       
  3905     "MAX R1.x, R0.z, R0.w;\n"
       
  3906     "RCP R1.y, R1.x;\n"
       
  3907     "MIN R1.x, R0.z, R0.w;\n"
       
  3908     "MUL R1.x, R1, R1.y;\n"
       
  3909     "MUL R1.y, R1.x, R1.x;\n"
       
  3910     "MAD R1.z, R1.y, c[8].x, c[8].y;\n"
       
  3911     "MAD R1.z, R1, R1.y, -c[8];\n"
       
  3912     "MAD R1.z, R1, R1.y, c[8].w;\n"
       
  3913     "MAD R1.z, R1, R1.y, -c[9].x;\n"
       
  3914     "MAD R1.y, R1.z, R1, c[9];\n"
       
  3915     "MUL R1.x, R1.y, R1;\n"
       
  3916     "ADD R1.y, -R1.x, c[7].w;\n"
       
  3917     "ADD R0.z, -R0, R0.w;\n"
       
  3918     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3919     "ADD R0.w, -R0.z, c[7].z;\n"
       
  3920     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3921     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3922     "ADD R0.x, R0, c[0];\n"
       
  3923     "MUL R1.x, R0, c[7];\n"
       
  3924     "FLR R1.y, R1.x;\n"
       
  3925     "ADD R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  3926     "MUL R0.xy, R0.zwzw, c[4];\n"
       
  3927     "TEX R0, R0, texture[0], 2D;\n"
       
  3928     "ADD R1.x, R1, -R1.y;\n"
       
  3929     "DP4 R1.y, R0, c[6];\n"
       
  3930     "TEX R0, R1, texture[1], 1D;\n"
       
  3931     "MUL result.color, R0, R1.y;\n"
       
  3932     "END\n"
       
  3933     ;
       
  3934 
       
  3935 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
       
  3936     "!!ARBfp1.0\n"
       
  3937     "PARAM c[7] = { program.local[0..3],\n"
       
  3938     "		{ 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
       
  3939     "		{ -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
       
  3940     "		{ 0.33299461, 0.99999559 } };\n"
       
  3941     "TEMP R0;\n"
       
  3942     "TEMP R1;\n"
       
  3943     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3944     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3945     "ADD R0.xyz, R0, c[3];\n"
       
  3946     "RCP R0.z, R0.z;\n"
       
  3947     "MUL R0.xy, R0, R0.z;\n"
       
  3948     "ABS R0.z, R0.x;\n"
       
  3949     "ABS R0.w, R0.y;\n"
       
  3950     "ADD R0.w, R0, -R0.z;\n"
       
  3951     "ADD R1.x, R0.y, c[4].y;\n"
       
  3952     "ABS R0.w, R0;\n"
       
  3953     "CMP R0.y, -R0.w, R0, R1.x;\n"
       
  3954     "ABS R0.w, -R0.y;\n"
       
  3955     "MAX R1.x, R0.z, R0.w;\n"
       
  3956     "RCP R1.y, R1.x;\n"
       
  3957     "MIN R1.x, R0.z, R0.w;\n"
       
  3958     "MUL R1.x, R1, R1.y;\n"
       
  3959     "MUL R1.y, R1.x, R1.x;\n"
       
  3960     "MAD R1.z, R1.y, c[5].x, c[5].y;\n"
       
  3961     "MAD R1.z, R1, R1.y, -c[5];\n"
       
  3962     "MAD R1.z, R1, R1.y, c[5].w;\n"
       
  3963     "MAD R1.z, R1, R1.y, -c[6].x;\n"
       
  3964     "MAD R1.y, R1.z, R1, c[6];\n"
       
  3965     "MUL R1.x, R1.y, R1;\n"
       
  3966     "ADD R0.z, -R0, R0.w;\n"
       
  3967     "ADD R1.y, -R1.x, c[4].w;\n"
       
  3968     "CMP R0.z, -R0, R1.y, R1.x;\n"
       
  3969     "ADD R0.w, -R0.z, c[4].z;\n"
       
  3970     "CMP R0.x, R0, R0.w, R0.z;\n"
       
  3971     "CMP R0.x, -R0.y, -R0, R0;\n"
       
  3972     "ADD R0.x, R0, c[0];\n"
       
  3973     "MUL R0.x, R0, c[4];\n"
       
  3974     "FLR R0.y, R0.x;\n"
       
  3975     "ADD R0.x, R0, -R0.y;\n"
       
  3976     "TEX result.color, R0, texture[0], 1D;\n"
       
  3977     "END\n"
       
  3978     ;
       
  3979 
       
  3980 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
       
  3981     "!!ARBfp1.0\n"
       
  3982     "PARAM c[11] = { program.local[0..9],\n"
       
  3983     "		{ 1 } };\n"
       
  3984     "TEMP R0;\n"
       
  3985     "TEMP R1;\n"
       
  3986     "TEMP R2;\n"
       
  3987     "TEMP R3;\n"
       
  3988     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  3989     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  3990     "ADD R0.xyz, R0, c[3];\n"
       
  3991     "RCP R0.z, R0.z;\n"
       
  3992     "MUL R0.xy, R0, R0.z;\n"
       
  3993     "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
       
  3994     "ADD R1.x, R0.z, R0.w;\n"
       
  3995     "MUL R0.xy, fragment.position, c[7];\n"
       
  3996     "TEX R0, R0, texture[0], 2D;\n"
       
  3997     "MUL R1.x, R1, c[0].z;\n"
       
  3998     "TEX R1, R1, texture[2], 1D;\n"
       
  3999     "MUL R2.xyz, R0, c[4].y;\n"
       
  4000     "MUL R3.xyz, R1.w, R2;\n"
       
  4001     "MUL R2.xyz, R1, c[4].x;\n"
       
  4002     "MAD R2.xyz, R0.w, R2, R3;\n"
       
  4003     "ADD R3.xy, fragment.position, c[8];\n"
       
  4004     "ADD R2.w, -R0, c[10].x;\n"
       
  4005     "MUL R1.xyz, R1, c[5].y;\n"
       
  4006     "MAD R2.xyz, R2.w, R1, R2;\n"
       
  4007     "MUL R1.xyz, R0, c[5].z;\n"
       
  4008     "ADD R3.z, -R1.w, c[10].x;\n"
       
  4009     "MAD R2.xyz, R3.z, R1, R2;\n"
       
  4010     "MUL R1.y, R1.w, R2.w;\n"
       
  4011     "MUL R1.x, R1.w, R0.w;\n"
       
  4012     "MUL R1.z, R0.w, R3;\n"
       
  4013     "DP3 R2.w, R1, c[5];\n"
       
  4014     "MUL R3.xy, R3, c[6];\n"
       
  4015     "TEX R1, R3, texture[1], 2D;\n"
       
  4016     "ADD R2, R2, -R0;\n"
       
  4017     "DP4 R1.x, R1, c[9];\n"
       
  4018     "MAD result.color, R1.x, R2, R0;\n"
       
  4019     "END\n"
       
  4020     ;
       
  4021 
       
  4022 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY =
       
  4023     "!!ARBfp1.0\n"
       
  4024     "PARAM c[9] = { program.local[0..7],\n"
       
  4025     "		{ 1 } };\n"
       
  4026     "TEMP R0;\n"
       
  4027     "TEMP R1;\n"
       
  4028     "TEMP R2;\n"
       
  4029     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4030     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4031     "ADD R0.xyz, R0, c[3];\n"
       
  4032     "RCP R0.z, R0.z;\n"
       
  4033     "MUL R0.xy, R0, R0.z;\n"
       
  4034     "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
       
  4035     "ADD R1.x, R0.z, R0.w;\n"
       
  4036     "MUL R0.xy, fragment.position, c[5];\n"
       
  4037     "TEX R0, R0, texture[0], 2D;\n"
       
  4038     "MUL R1.x, R1, c[0].z;\n"
       
  4039     "TEX R1, R1, texture[2], 1D;\n"
       
  4040     "ADD R2.x, -R0.w, c[8];\n"
       
  4041     "MUL R2.xyz, R1, R2.x;\n"
       
  4042     "MAD R1.xyz, R1, R0, R2;\n"
       
  4043     "ADD R2.x, -R1.w, c[8];\n"
       
  4044     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  4045     "ADD R1.z, R1.w, R0.w;\n"
       
  4046     "MAD R2.w, -R1, R0, R1.z;\n"
       
  4047     "ADD R1.xy, fragment.position, c[6];\n"
       
  4048     "MUL R1.xy, R1, c[4];\n"
       
  4049     "TEX R1, R1, texture[1], 2D;\n"
       
  4050     "ADD R2, R2, -R0;\n"
       
  4051     "DP4 R1.x, R1, c[7];\n"
       
  4052     "MAD result.color, R1.x, R2, R0;\n"
       
  4053     "END\n"
       
  4054     ;
       
  4055 
       
  4056 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN =
       
  4057     "!!ARBfp1.0\n"
       
  4058     "PARAM c[8] = { program.local[0..7] };\n"
       
  4059     "TEMP R0;\n"
       
  4060     "TEMP R1;\n"
       
  4061     "TEMP R2;\n"
       
  4062     "TEMP R3;\n"
       
  4063     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4064     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4065     "ADD R0.xyz, R0, c[3];\n"
       
  4066     "RCP R0.z, R0.z;\n"
       
  4067     "MUL R0.xy, R0, R0.z;\n"
       
  4068     "MUL R0.xy, R0, c[0];\n"
       
  4069     "ADD R0.x, R0, R0.y;\n"
       
  4070     "MUL R0.z, R0.x, c[0];\n"
       
  4071     "ADD R3.xy, fragment.position, c[6];\n"
       
  4072     "TEX R1, R0.z, texture[2], 1D;\n"
       
  4073     "MUL R0.xy, fragment.position, c[5];\n"
       
  4074     "TEX R0, R0, texture[0], 2D;\n"
       
  4075     "ADD R2, R1, R0;\n"
       
  4076     "MAD R2, -R1, R0, R2;\n"
       
  4077     "MUL R3.xy, R3, c[4];\n"
       
  4078     "TEX R1, R3, texture[1], 2D;\n"
       
  4079     "ADD R2, R2, -R0;\n"
       
  4080     "DP4 R1.x, R1, c[7];\n"
       
  4081     "MAD result.color, R1.x, R2, R0;\n"
       
  4082     "END\n"
       
  4083     ;
       
  4084 
       
  4085 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY =
       
  4086     "!!ARBfp1.0\n"
       
  4087     "PARAM c[9] = { program.local[0..7],\n"
       
  4088     "		{ 2, 1 } };\n"
       
  4089     "TEMP R0;\n"
       
  4090     "TEMP R1;\n"
       
  4091     "TEMP R2;\n"
       
  4092     "TEMP R3;\n"
       
  4093     "TEMP R4;\n"
       
  4094     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4095     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4096     "ADD R0.xyz, R0, c[3];\n"
       
  4097     "RCP R0.z, R0.z;\n"
       
  4098     "MUL R0.xy, R0, R0.z;\n"
       
  4099     "MUL R0.xy, R0, c[0];\n"
       
  4100     "ADD R0.x, R0, R0.y;\n"
       
  4101     "MUL R0.x, R0, c[0].z;\n"
       
  4102     "TEX R0, R0, texture[2], 1D;\n"
       
  4103     "MUL R1.xy, fragment.position, c[5];\n"
       
  4104     "TEX R1, R1, texture[0], 2D;\n"
       
  4105     "ADD R2.w, -R1, c[8].y;\n"
       
  4106     "ADD R3.xyz, R0.w, -R0;\n"
       
  4107     "ADD R2.xyz, R1.w, -R1;\n"
       
  4108     "MUL R2.xyz, R2, R3;\n"
       
  4109     "MUL R2.xyz, R2, c[8].x;\n"
       
  4110     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  4111     "MUL R4.xyz, R0, R2.w;\n"
       
  4112     "MUL R3.xyz, R0, R1;\n"
       
  4113     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  4114     "ADD R2.x, -R0.w, c[8].y;\n"
       
  4115     "MAD R3.xyz, R3, c[8].x, R4;\n"
       
  4116     "MAD R3.xyz, R1, R2.x, R3;\n"
       
  4117     "MAD R0.xyz, R1, R2.x, R0;\n"
       
  4118     "MUL R2.xyz, R1, c[8].x;\n"
       
  4119     "ADD R0.xyz, R0, -R3;\n"
       
  4120     "SGE R2.xyz, R2, R1.w;\n"
       
  4121     "MAD R2.xyz, R2, R0, R3;\n"
       
  4122     "ADD R0.z, R0.w, R1.w;\n"
       
  4123     "MAD R2.w, -R0, R1, R0.z;\n"
       
  4124     "ADD R0.xy, fragment.position, c[6];\n"
       
  4125     "MUL R0.xy, R0, c[4];\n"
       
  4126     "TEX R0, R0, texture[1], 2D;\n"
       
  4127     "ADD R2, R2, -R1;\n"
       
  4128     "DP4 R0.x, R0, c[7];\n"
       
  4129     "MAD result.color, R0.x, R2, R1;\n"
       
  4130     "END\n"
       
  4131     ;
       
  4132 
       
  4133 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN =
       
  4134     "!!ARBfp1.0\n"
       
  4135     "PARAM c[9] = { program.local[0..7],\n"
       
  4136     "		{ 1 } };\n"
       
  4137     "TEMP R0;\n"
       
  4138     "TEMP R1;\n"
       
  4139     "TEMP R2;\n"
       
  4140     "TEMP R3;\n"
       
  4141     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4142     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4143     "ADD R0.xyz, R0, c[3];\n"
       
  4144     "RCP R0.z, R0.z;\n"
       
  4145     "MUL R0.xy, R0, R0.z;\n"
       
  4146     "MUL R0.xy, R0, c[0];\n"
       
  4147     "ADD R0.z, R0.x, R0.y;\n"
       
  4148     "MUL R1.x, R0.z, c[0].z;\n"
       
  4149     "MUL R0.xy, fragment.position, c[5];\n"
       
  4150     "TEX R0, R0, texture[0], 2D;\n"
       
  4151     "TEX R1, R1, texture[2], 1D;\n"
       
  4152     "MUL R3.xyz, R1.w, R0;\n"
       
  4153     "MUL R2.xyz, R1, R0.w;\n"
       
  4154     "MIN R2.xyz, R2, R3;\n"
       
  4155     "ADD R2.w, -R0, c[8].x;\n"
       
  4156     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  4157     "ADD R2.x, -R1.w, c[8];\n"
       
  4158     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  4159     "ADD R1.z, R1.w, R0.w;\n"
       
  4160     "MAD R2.w, -R1, R0, R1.z;\n"
       
  4161     "ADD R1.xy, fragment.position, c[6];\n"
       
  4162     "MUL R1.xy, R1, c[4];\n"
       
  4163     "TEX R1, R1, texture[1], 2D;\n"
       
  4164     "ADD R2, R2, -R0;\n"
       
  4165     "DP4 R1.x, R1, c[7];\n"
       
  4166     "MAD result.color, R1.x, R2, R0;\n"
       
  4167     "END\n"
       
  4168     ;
       
  4169 
       
  4170 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN =
       
  4171     "!!ARBfp1.0\n"
       
  4172     "PARAM c[9] = { program.local[0..7],\n"
       
  4173     "		{ 1 } };\n"
       
  4174     "TEMP R0;\n"
       
  4175     "TEMP R1;\n"
       
  4176     "TEMP R2;\n"
       
  4177     "TEMP R3;\n"
       
  4178     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4179     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4180     "ADD R0.xyz, R0, c[3];\n"
       
  4181     "RCP R0.z, R0.z;\n"
       
  4182     "MUL R0.xy, R0, R0.z;\n"
       
  4183     "MUL R0.xy, R0, c[0];\n"
       
  4184     "ADD R0.z, R0.x, R0.y;\n"
       
  4185     "MUL R1.x, R0.z, c[0].z;\n"
       
  4186     "MUL R0.xy, fragment.position, c[5];\n"
       
  4187     "TEX R0, R0, texture[0], 2D;\n"
       
  4188     "TEX R1, R1, texture[2], 1D;\n"
       
  4189     "MUL R3.xyz, R1.w, R0;\n"
       
  4190     "MUL R2.xyz, R1, R0.w;\n"
       
  4191     "MAX R2.xyz, R2, R3;\n"
       
  4192     "ADD R2.w, -R0, c[8].x;\n"
       
  4193     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  4194     "ADD R2.x, -R1.w, c[8];\n"
       
  4195     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  4196     "ADD R1.z, R1.w, R0.w;\n"
       
  4197     "MAD R2.w, -R1, R0, R1.z;\n"
       
  4198     "ADD R1.xy, fragment.position, c[6];\n"
       
  4199     "MUL R1.xy, R1, c[4];\n"
       
  4200     "TEX R1, R1, texture[1], 2D;\n"
       
  4201     "ADD R2, R2, -R0;\n"
       
  4202     "DP4 R1.x, R1, c[7];\n"
       
  4203     "MAD result.color, R1.x, R2, R0;\n"
       
  4204     "END\n"
       
  4205     ;
       
  4206 
       
  4207 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE =
       
  4208     "!!ARBfp1.0\n"
       
  4209     "PARAM c[9] = { program.local[0..7],\n"
       
  4210     "		{ 1, 1e-006 } };\n"
       
  4211     "TEMP R0;\n"
       
  4212     "TEMP R1;\n"
       
  4213     "TEMP R2;\n"
       
  4214     "TEMP R3;\n"
       
  4215     "TEMP R4;\n"
       
  4216     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4217     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4218     "ADD R0.xyz, R0, c[3];\n"
       
  4219     "RCP R0.z, R0.z;\n"
       
  4220     "MUL R0.xy, R0, R0.z;\n"
       
  4221     "MUL R0.xy, R0, c[0];\n"
       
  4222     "ADD R0.x, R0, R0.y;\n"
       
  4223     "MUL R0.x, R0, c[0].z;\n"
       
  4224     "TEX R0, R0, texture[2], 1D;\n"
       
  4225     "MAX R1.x, R0.w, c[8].y;\n"
       
  4226     "RCP R1.x, R1.x;\n"
       
  4227     "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
       
  4228     "MAX R2.xyz, R2, c[8].y;\n"
       
  4229     "MUL R1.xy, fragment.position, c[5];\n"
       
  4230     "TEX R1, R1, texture[0], 2D;\n"
       
  4231     "ADD R2.w, -R0, c[8].x;\n"
       
  4232     "MUL R3.xyz, R1, R2.w;\n"
       
  4233     "ADD R2.w, -R1, c[8].x;\n"
       
  4234     "MAD R4.xyz, R0, R2.w, R3;\n"
       
  4235     "MUL R3.xyz, R0.w, R1;\n"
       
  4236     "MUL R2.w, R0, R1;\n"
       
  4237     "MAD R0.xyz, R0, R1.w, R3;\n"
       
  4238     "SGE R0.xyz, R0, R2.w;\n"
       
  4239     "RCP R2.x, R2.x;\n"
       
  4240     "RCP R2.y, R2.y;\n"
       
  4241     "RCP R2.z, R2.z;\n"
       
  4242     "MAD R2.xyz, R3, R2, R4;\n"
       
  4243     "MAD R4.xyz, R0.w, R1.w, R4;\n"
       
  4244     "ADD R4.xyz, R4, -R2;\n"
       
  4245     "MAD R2.xyz, R0, R4, R2;\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[6];\n"
       
  4249     "MUL R0.xy, R0, c[4];\n"
       
  4250     "TEX R0, R0, texture[1], 2D;\n"
       
  4251     "ADD R2, R2, -R1;\n"
       
  4252     "DP4 R0.x, R0, c[7];\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_COLORBURN =
       
  4258     "!!ARBfp1.0\n"
       
  4259     "PARAM c[9] = { program.local[0..7],\n"
       
  4260     "		{ 1, 9.9999997e-006 } };\n"
       
  4261     "TEMP R0;\n"
       
  4262     "TEMP R1;\n"
       
  4263     "TEMP R2;\n"
       
  4264     "TEMP R3;\n"
       
  4265     "TEMP R4;\n"
       
  4266     "TEMP R5;\n"
       
  4267     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4268     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4269     "ADD R0.xyz, R0, c[3];\n"
       
  4270     "RCP R0.z, R0.z;\n"
       
  4271     "MUL R0.xy, R0, R0.z;\n"
       
  4272     "MUL R0.xy, R0, c[0];\n"
       
  4273     "ADD R0.x, R0, R0.y;\n"
       
  4274     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  4275     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4276     "MUL R0.x, R0, c[0].z;\n"
       
  4277     "TEX R0, R0, texture[2], 1D;\n"
       
  4278     "MUL R2.xyz, R0.w, R1;\n"
       
  4279     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  4280     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  4281     "MUL R4.xyz, R0.w, R2;\n"
       
  4282     "MAX R2.xyz, R0, c[8].y;\n"
       
  4283     "ADD R2.w, -R1, c[8].x;\n"
       
  4284     "MUL R5.xyz, R0, R2.w;\n"
       
  4285     "ADD R3.w, -R0, c[8].x;\n"
       
  4286     "RCP R2.x, R2.x;\n"
       
  4287     "RCP R2.y, R2.y;\n"
       
  4288     "RCP R2.z, R2.z;\n"
       
  4289     "MAD R2.xyz, R4, R2, R5;\n"
       
  4290     "MUL R4.xyz, R1, R3.w;\n"
       
  4291     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  4292     "MUL R2.w, R0, R1;\n"
       
  4293     "MAD R2.xyz, R1, R3.w, R2;\n"
       
  4294     "ADD R2.xyz, R2, -R0;\n"
       
  4295     "SGE R3.xyz, R3, R2.w;\n"
       
  4296     "MAD R2.xyz, R3, R2, R0;\n"
       
  4297     "ADD R0.z, R0.w, R1.w;\n"
       
  4298     "MAD R2.w, -R0, R1, R0.z;\n"
       
  4299     "ADD R0.xy, fragment.position, c[6];\n"
       
  4300     "MUL R0.xy, R0, c[4];\n"
       
  4301     "TEX R0, R0, texture[1], 2D;\n"
       
  4302     "ADD R2, R2, -R1;\n"
       
  4303     "DP4 R0.x, R0, c[7];\n"
       
  4304     "MAD result.color, R0.x, R2, R1;\n"
       
  4305     "END\n"
       
  4306     ;
       
  4307 
       
  4308 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT =
       
  4309     "!!ARBfp1.0\n"
       
  4310     "PARAM c[9] = { program.local[0..7],\n"
       
  4311     "		{ 2, 1 } };\n"
       
  4312     "TEMP R0;\n"
       
  4313     "TEMP R1;\n"
       
  4314     "TEMP R2;\n"
       
  4315     "TEMP R3;\n"
       
  4316     "TEMP R4;\n"
       
  4317     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4318     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4319     "ADD R0.xyz, R0, c[3];\n"
       
  4320     "RCP R0.z, R0.z;\n"
       
  4321     "MUL R0.xy, R0, R0.z;\n"
       
  4322     "MUL R0.xy, R0, c[0];\n"
       
  4323     "ADD R0.x, R0, R0.y;\n"
       
  4324     "MUL R0.x, R0, c[0].z;\n"
       
  4325     "TEX R0, R0, texture[2], 1D;\n"
       
  4326     "MUL R1.xy, fragment.position, c[5];\n"
       
  4327     "TEX R1, R1, texture[0], 2D;\n"
       
  4328     "ADD R2.w, -R1, c[8].y;\n"
       
  4329     "ADD R3.xyz, R0.w, -R0;\n"
       
  4330     "ADD R2.xyz, R1.w, -R1;\n"
       
  4331     "MUL R2.xyz, R2, R3;\n"
       
  4332     "MUL R2.xyz, R2, c[8].x;\n"
       
  4333     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  4334     "MUL R4.xyz, R0, R2.w;\n"
       
  4335     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  4336     "MUL R3.xyz, R0, R1;\n"
       
  4337     "ADD R2.w, -R0, c[8].y;\n"
       
  4338     "MAD R3.xyz, R3, c[8].x, R4;\n"
       
  4339     "MUL R0.xyz, R0, c[8].x;\n"
       
  4340     "SGE R0.xyz, R0, R0.w;\n"
       
  4341     "MAD R3.xyz, R1, R2.w, R3;\n"
       
  4342     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  4343     "ADD R2.xyz, R2, -R3;\n"
       
  4344     "MAD R2.xyz, R0, R2, R3;\n"
       
  4345     "ADD R0.z, R0.w, R1.w;\n"
       
  4346     "MAD R2.w, -R0, R1, R0.z;\n"
       
  4347     "ADD R0.xy, fragment.position, c[6];\n"
       
  4348     "MUL R0.xy, R0, c[4];\n"
       
  4349     "TEX R0, R0, texture[1], 2D;\n"
       
  4350     "ADD R2, R2, -R1;\n"
       
  4351     "DP4 R0.x, R0, c[7];\n"
       
  4352     "MAD result.color, R0.x, R2, R1;\n"
       
  4353     "END\n"
       
  4354     ;
       
  4355 
       
  4356 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT =
       
  4357     "!!ARBfp1.0\n"
       
  4358     "PARAM c[10] = { program.local[0..7],\n"
       
  4359     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
  4360     "		{ 3 } };\n"
       
  4361     "TEMP R0;\n"
       
  4362     "TEMP R1;\n"
       
  4363     "TEMP R2;\n"
       
  4364     "TEMP R3;\n"
       
  4365     "TEMP R4;\n"
       
  4366     "TEMP R5;\n"
       
  4367     "TEMP R6;\n"
       
  4368     "MUL R0.xy, fragment.position, c[5];\n"
       
  4369     "TEX R1, R0, texture[0], 2D;\n"
       
  4370     "MAX R0.w, R1, c[8].z;\n"
       
  4371     "RCP R2.w, R0.w;\n"
       
  4372     "MUL R2.xyz, R1, R2.w;\n"
       
  4373     "RSQ R0.w, R2.x;\n"
       
  4374     "MUL R5.xyz, -R2, c[8].w;\n"
       
  4375     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4376     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4377     "ADD R0.xyz, R0, c[3];\n"
       
  4378     "RCP R0.z, R0.z;\n"
       
  4379     "MUL R0.xy, R0, R0.z;\n"
       
  4380     "MUL R0.xy, R0, c[0];\n"
       
  4381     "ADD R0.x, R0, R0.y;\n"
       
  4382     "RSQ R0.z, R2.y;\n"
       
  4383     "RSQ R0.y, R2.z;\n"
       
  4384     "MAD R2.xyz, -R1, R2.w, c[8].x;\n"
       
  4385     "RCP R3.x, R0.w;\n"
       
  4386     "RCP R3.y, R0.z;\n"
       
  4387     "RCP R3.z, R0.y;\n"
       
  4388     "MUL R0.x, R0, c[0].z;\n"
       
  4389     "TEX R0, R0, texture[2], 1D;\n"
       
  4390     "MAD R4.xyz, R1.w, R3, -R1;\n"
       
  4391     "MAD R3.xyz, R0, c[8].y, -R0.w;\n"
       
  4392     "MUL R4.xyz, R3, R4;\n"
       
  4393     "ADD R6.xyz, R5, c[9].x;\n"
       
  4394     "MUL R5.xyz, R2, R3;\n"
       
  4395     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  4396     "MUL R3.xyz, R0, c[8].y;\n"
       
  4397     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  4398     "MAD R4.xyz, R0.w, R1, R4;\n"
       
  4399     "MAD R5.xyz, -R1, R6, R4;\n"
       
  4400     "MUL R4.xyz, R1, c[8].w;\n"
       
  4401     "SGE R3.xyz, R3, R0.w;\n"
       
  4402     "ADD R2.w, -R1, c[8].x;\n"
       
  4403     "MUL R6.xyz, R1, R6;\n"
       
  4404     "SGE R4.xyz, R4, R1.w;\n"
       
  4405     "MAD R4.xyz, R4, R5, R6;\n"
       
  4406     "MAD R4.xyz, -R1, R2, R4;\n"
       
  4407     "MUL R2.xyz, R1, R2;\n"
       
  4408     "MAD R2.xyz, R3, R4, R2;\n"
       
  4409     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  4410     "ADD R0.x, -R0.w, c[8];\n"
       
  4411     "MAD R2.xyz, R1, R0.x, R2;\n"
       
  4412     "ADD R0.z, R0.w, R1.w;\n"
       
  4413     "MAD R2.w, -R0, R1, R0.z;\n"
       
  4414     "ADD R0.xy, fragment.position, c[6];\n"
       
  4415     "MUL R0.xy, R0, c[4];\n"
       
  4416     "TEX R0, R0, texture[1], 2D;\n"
       
  4417     "ADD R2, R2, -R1;\n"
       
  4418     "DP4 R0.x, R0, c[7];\n"
       
  4419     "MAD result.color, R0.x, R2, R1;\n"
       
  4420     "END\n"
       
  4421     ;
       
  4422 
       
  4423 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE =
       
  4424     "!!ARBfp1.0\n"
       
  4425     "PARAM c[9] = { program.local[0..7],\n"
       
  4426     "		{ 2 } };\n"
       
  4427     "TEMP R0;\n"
       
  4428     "TEMP R1;\n"
       
  4429     "TEMP R2;\n"
       
  4430     "TEMP R3;\n"
       
  4431     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4432     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4433     "ADD R0.xyz, R0, c[3];\n"
       
  4434     "RCP R0.z, R0.z;\n"
       
  4435     "MUL R0.xy, R0, R0.z;\n"
       
  4436     "MUL R0.xy, R0, c[0];\n"
       
  4437     "ADD R0.z, R0.x, R0.y;\n"
       
  4438     "MUL R1.x, R0.z, c[0].z;\n"
       
  4439     "MUL R0.xy, fragment.position, c[5];\n"
       
  4440     "TEX R0, R0, texture[0], 2D;\n"
       
  4441     "TEX R1, R1, texture[2], 1D;\n"
       
  4442     "ADD R2.xyz, R1, R0;\n"
       
  4443     "MUL R3.xyz, R1.w, R0;\n"
       
  4444     "MUL R1.xyz, R1, R0.w;\n"
       
  4445     "MIN R1.xyz, R1, R3;\n"
       
  4446     "MAD R2.xyz, -R1, c[8].x, R2;\n"
       
  4447     "ADD R1.z, R1.w, R0.w;\n"
       
  4448     "MAD R2.w, -R1, R0, R1.z;\n"
       
  4449     "ADD R1.xy, fragment.position, c[6];\n"
       
  4450     "MUL R1.xy, R1, c[4];\n"
       
  4451     "TEX R1, R1, texture[1], 2D;\n"
       
  4452     "ADD R2, R2, -R0;\n"
       
  4453     "DP4 R1.x, R1, c[7];\n"
       
  4454     "MAD result.color, R1.x, R2, R0;\n"
       
  4455     "END\n"
       
  4456     ;
       
  4457 
       
  4458 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION =
       
  4459     "!!ARBfp1.0\n"
       
  4460     "PARAM c[9] = { program.local[0..7],\n"
       
  4461     "		{ 2, 1 } };\n"
       
  4462     "TEMP R0;\n"
       
  4463     "TEMP R1;\n"
       
  4464     "TEMP R2;\n"
       
  4465     "TEMP R3;\n"
       
  4466     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4467     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4468     "ADD R0.xyz, R0, c[3];\n"
       
  4469     "RCP R0.z, R0.z;\n"
       
  4470     "MUL R0.xy, R0, R0.z;\n"
       
  4471     "MUL R0.xy, R0, c[0];\n"
       
  4472     "ADD R0.z, R0.x, R0.y;\n"
       
  4473     "MUL R1.x, R0.z, c[0].z;\n"
       
  4474     "MUL R0.xy, fragment.position, c[5];\n"
       
  4475     "TEX R0, R0, texture[0], 2D;\n"
       
  4476     "TEX R1, R1, texture[2], 1D;\n"
       
  4477     "MUL R2.xyz, R1.w, R0;\n"
       
  4478     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  4479     "MUL R2.xyz, R1, R0;\n"
       
  4480     "MAD R2.xyz, -R2, c[8].x, R3;\n"
       
  4481     "ADD R2.w, -R0, c[8].y;\n"
       
  4482     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  4483     "ADD R2.x, -R1.w, c[8].y;\n"
       
  4484     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  4485     "ADD R1.z, R1.w, R0.w;\n"
       
  4486     "MAD R2.w, -R1, R0, R1.z;\n"
       
  4487     "ADD R1.xy, fragment.position, c[6];\n"
       
  4488     "MUL R1.xy, R1, c[4];\n"
       
  4489     "TEX R1, R1, texture[1], 2D;\n"
       
  4490     "ADD R2, R2, -R0;\n"
       
  4491     "DP4 R1.x, R1, c[7];\n"
       
  4492     "MAD result.color, R1.x, R2, R0;\n"
       
  4493     "END\n"
       
  4494     ;
       
  4495 
       
  4496 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
       
  4497     "!!ARBfp1.0\n"
       
  4498     "PARAM c[8] = { program.local[0..6],\n"
       
  4499     "		{ 1 } };\n"
       
  4500     "TEMP R0;\n"
       
  4501     "TEMP R1;\n"
       
  4502     "TEMP R2;\n"
       
  4503     "TEMP R3;\n"
       
  4504     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4505     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4506     "ADD R0.xyz, R0, c[3];\n"
       
  4507     "RCP R0.z, R0.z;\n"
       
  4508     "MUL R0.xy, R0, R0.z;\n"
       
  4509     "MUL R0.xy, R0, c[0];\n"
       
  4510     "ADD R0.x, R0, R0.y;\n"
       
  4511     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
       
  4512     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4513     "MUL R2.xyz, R1, c[4].y;\n"
       
  4514     "MUL R0.x, R0, c[0].z;\n"
       
  4515     "TEX R0, R0, texture[1], 1D;\n"
       
  4516     "MUL R3.xyz, R0.w, R2;\n"
       
  4517     "MUL R2.xyz, R0, c[4].x;\n"
       
  4518     "MAD R2.xyz, R1.w, R2, R3;\n"
       
  4519     "ADD R2.w, -R1, c[7].x;\n"
       
  4520     "MUL R0.xyz, R0, c[5].y;\n"
       
  4521     "MAD R0.xyz, R2.w, R0, R2;\n"
       
  4522     "ADD R2.x, -R0.w, c[7];\n"
       
  4523     "MUL R1.xyz, R1, c[5].z;\n"
       
  4524     "MAD result.color.xyz, R2.x, R1, R0;\n"
       
  4525     "MUL R0.x, R0.w, R1.w;\n"
       
  4526     "MUL R0.z, R1.w, R2.x;\n"
       
  4527     "MUL R0.y, R0.w, R2.w;\n"
       
  4528     "DP3 result.color.w, R0, c[5];\n"
       
  4529     "END\n"
       
  4530     ;
       
  4531 
       
  4532 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK =
       
  4533     "!!ARBfp1.0\n"
       
  4534     "PARAM c[6] = { program.local[0..4],\n"
       
  4535     "		{ 1 } };\n"
       
  4536     "TEMP R0;\n"
       
  4537     "TEMP R1;\n"
       
  4538     "TEMP R2;\n"
       
  4539     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4540     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4541     "ADD R0.xyz, R0, c[3];\n"
       
  4542     "RCP R0.z, R0.z;\n"
       
  4543     "MUL R0.xy, R0, R0.z;\n"
       
  4544     "MUL R0.xy, R0, c[0];\n"
       
  4545     "ADD R0.x, R0, R0.y;\n"
       
  4546     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4547     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4548     "MUL R0.x, R0, c[0].z;\n"
       
  4549     "TEX R0, R0, texture[1], 1D;\n"
       
  4550     "ADD R2.x, -R1.w, c[5];\n"
       
  4551     "MUL R2.xyz, R0, R2.x;\n"
       
  4552     "MAD R0.xyz, R0, R1, R2;\n"
       
  4553     "ADD R2.x, R0.w, R1.w;\n"
       
  4554     "ADD R2.y, -R0.w, c[5].x;\n"
       
  4555     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  4556     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  4557     "END\n"
       
  4558     ;
       
  4559 
       
  4560 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK =
       
  4561     "!!ARBfp1.0\n"
       
  4562     "PARAM c[5] = { program.local[0..4] };\n"
       
  4563     "TEMP R0;\n"
       
  4564     "TEMP R1;\n"
       
  4565     "TEMP R2;\n"
       
  4566     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4567     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4568     "ADD R0.xyz, R0, c[3];\n"
       
  4569     "RCP R0.z, R0.z;\n"
       
  4570     "MUL R0.xy, R0, R0.z;\n"
       
  4571     "MUL R0.xy, R0, c[0];\n"
       
  4572     "ADD R0.x, R0, R0.y;\n"
       
  4573     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4574     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4575     "MUL R0.x, R0, c[0].z;\n"
       
  4576     "TEX R0, R0, texture[1], 1D;\n"
       
  4577     "ADD R2, R0, R1;\n"
       
  4578     "MAD result.color, -R0, R1, R2;\n"
       
  4579     "END\n"
       
  4580     ;
       
  4581 
       
  4582 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK =
       
  4583     "!!ARBfp1.0\n"
       
  4584     "PARAM c[6] = { program.local[0..4],\n"
       
  4585     "		{ 2, 1 } };\n"
       
  4586     "TEMP R0;\n"
       
  4587     "TEMP R1;\n"
       
  4588     "TEMP R2;\n"
       
  4589     "TEMP R3;\n"
       
  4590     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4591     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4592     "ADD R0.xyz, R0, c[3];\n"
       
  4593     "RCP R0.z, R0.z;\n"
       
  4594     "MUL R0.xy, R0, R0.z;\n"
       
  4595     "MUL R0.xy, R0, c[0];\n"
       
  4596     "ADD R0.x, R0, R0.y;\n"
       
  4597     "MUL R0.x, R0, c[0].z;\n"
       
  4598     "TEX R0, R0, texture[1], 1D;\n"
       
  4599     "MUL R1.xy, fragment.position, c[4];\n"
       
  4600     "TEX R1, R1, texture[0], 2D;\n"
       
  4601     "ADD R3.xyz, R0.w, -R0;\n"
       
  4602     "ADD R2.xyz, R1.w, -R1;\n"
       
  4603     "MUL R2.xyz, R2, R3;\n"
       
  4604     "ADD R2.w, -R1, c[5].y;\n"
       
  4605     "MUL R2.xyz, R2, c[5].x;\n"
       
  4606     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  4607     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  4608     "MUL R3.xyz, R0, R2.w;\n"
       
  4609     "MUL R0.xyz, R0, R1;\n"
       
  4610     "ADD R2.w, -R0, c[5].y;\n"
       
  4611     "MAD R0.xyz, R0, c[5].x, R3;\n"
       
  4612     "MAD R0.xyz, R1, R2.w, R0;\n"
       
  4613     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  4614     "MUL R1.xyz, R1, c[5].x;\n"
       
  4615     "ADD R2.w, R0, R1;\n"
       
  4616     "ADD R2.xyz, R2, -R0;\n"
       
  4617     "SGE R1.xyz, R1, R1.w;\n"
       
  4618     "MAD result.color.xyz, R1, R2, R0;\n"
       
  4619     "MAD result.color.w, -R0, R1, R2;\n"
       
  4620     "END\n"
       
  4621     ;
       
  4622 
       
  4623 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK =
       
  4624     "!!ARBfp1.0\n"
       
  4625     "PARAM c[6] = { program.local[0..4],\n"
       
  4626     "		{ 1 } };\n"
       
  4627     "TEMP R0;\n"
       
  4628     "TEMP R1;\n"
       
  4629     "TEMP R2;\n"
       
  4630     "TEMP R3;\n"
       
  4631     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4632     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4633     "ADD R0.xyz, R0, c[3];\n"
       
  4634     "RCP R0.z, R0.z;\n"
       
  4635     "MUL R0.xy, R0, R0.z;\n"
       
  4636     "MUL R0.xy, R0, c[0];\n"
       
  4637     "ADD R0.x, R0, R0.y;\n"
       
  4638     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4639     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4640     "MUL R0.x, R0, c[0].z;\n"
       
  4641     "TEX R0, R0, texture[1], 1D;\n"
       
  4642     "MUL R2.xyz, R0, R1.w;\n"
       
  4643     "MUL R3.xyz, R0.w, R1;\n"
       
  4644     "MIN R2.xyz, R2, R3;\n"
       
  4645     "ADD R2.w, -R1, c[5].x;\n"
       
  4646     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  4647     "ADD R2.x, R0.w, R1.w;\n"
       
  4648     "ADD R2.y, -R0.w, c[5].x;\n"
       
  4649     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  4650     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  4651     "END\n"
       
  4652     ;
       
  4653 
       
  4654 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK =
       
  4655     "!!ARBfp1.0\n"
       
  4656     "PARAM c[6] = { program.local[0..4],\n"
       
  4657     "		{ 1 } };\n"
       
  4658     "TEMP R0;\n"
       
  4659     "TEMP R1;\n"
       
  4660     "TEMP R2;\n"
       
  4661     "TEMP R3;\n"
       
  4662     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4663     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4664     "ADD R0.xyz, R0, c[3];\n"
       
  4665     "RCP R0.z, R0.z;\n"
       
  4666     "MUL R0.xy, R0, R0.z;\n"
       
  4667     "MUL R0.xy, R0, c[0];\n"
       
  4668     "ADD R0.x, R0, R0.y;\n"
       
  4669     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4670     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4671     "MUL R0.x, R0, c[0].z;\n"
       
  4672     "TEX R0, R0, texture[1], 1D;\n"
       
  4673     "MUL R2.xyz, R0, R1.w;\n"
       
  4674     "MUL R3.xyz, R0.w, R1;\n"
       
  4675     "MAX R2.xyz, R2, R3;\n"
       
  4676     "ADD R2.w, -R1, c[5].x;\n"
       
  4677     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  4678     "ADD R2.x, R0.w, R1.w;\n"
       
  4679     "ADD R2.y, -R0.w, c[5].x;\n"
       
  4680     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  4681     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  4682     "END\n"
       
  4683     ;
       
  4684 
       
  4685 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK =
       
  4686     "!!ARBfp1.0\n"
       
  4687     "PARAM c[6] = { program.local[0..4],\n"
       
  4688     "		{ 1, 1e-006 } };\n"
       
  4689     "TEMP R0;\n"
       
  4690     "TEMP R1;\n"
       
  4691     "TEMP R2;\n"
       
  4692     "TEMP R3;\n"
       
  4693     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4694     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4695     "ADD R0.xyz, R0, c[3];\n"
       
  4696     "RCP R0.z, R0.z;\n"
       
  4697     "MUL R0.xy, R0, R0.z;\n"
       
  4698     "MUL R0.xy, R0, c[0];\n"
       
  4699     "ADD R0.x, R0, R0.y;\n"
       
  4700     "MUL R0.x, R0, c[0].z;\n"
       
  4701     "TEX R0, R0, texture[1], 1D;\n"
       
  4702     "MAX R1.x, R0.w, c[5].y;\n"
       
  4703     "RCP R1.x, R1.x;\n"
       
  4704     "MAD R3.xyz, -R0, R1.x, c[5].x;\n"
       
  4705     "MAX R3.xyz, R3, c[5].y;\n"
       
  4706     "MUL R1.xy, fragment.position, c[4];\n"
       
  4707     "TEX R1, R1, texture[0], 2D;\n"
       
  4708     "ADD R2.x, -R0.w, c[5];\n"
       
  4709     "MUL R2.xyz, R1, R2.x;\n"
       
  4710     "ADD R2.w, -R1, c[5].x;\n"
       
  4711     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  4712     "MUL R1.xyz, R0.w, R1;\n"
       
  4713     "MAD R0.xyz, R0, R1.w, R1;\n"
       
  4714     "MUL R2.w, R0, R1;\n"
       
  4715     "RCP R3.x, R3.x;\n"
       
  4716     "RCP R3.y, R3.y;\n"
       
  4717     "RCP R3.z, R3.z;\n"
       
  4718     "MAD R3.xyz, R1, R3, R2;\n"
       
  4719     "MAD R2.xyz, R0.w, R1.w, R2;\n"
       
  4720     "ADD R1.x, R0.w, R1.w;\n"
       
  4721     "ADD R2.xyz, R2, -R3;\n"
       
  4722     "SGE R0.xyz, R0, R2.w;\n"
       
  4723     "MAD result.color.xyz, R0, R2, R3;\n"
       
  4724     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  4725     "END\n"
       
  4726     ;
       
  4727 
       
  4728 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK =
       
  4729     "!!ARBfp1.0\n"
       
  4730     "PARAM c[6] = { program.local[0..4],\n"
       
  4731     "		{ 1, 9.9999997e-006 } };\n"
       
  4732     "TEMP R0;\n"
       
  4733     "TEMP R1;\n"
       
  4734     "TEMP R2;\n"
       
  4735     "TEMP R3;\n"
       
  4736     "TEMP R4;\n"
       
  4737     "TEMP R5;\n"
       
  4738     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4739     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4740     "ADD R0.xyz, R0, c[3];\n"
       
  4741     "RCP R0.z, R0.z;\n"
       
  4742     "MUL R0.xy, R0, R0.z;\n"
       
  4743     "MUL R0.xy, R0, c[0];\n"
       
  4744     "ADD R0.x, R0, R0.y;\n"
       
  4745     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4746     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4747     "MUL R0.x, R0, c[0].z;\n"
       
  4748     "TEX R0, R0, texture[1], 1D;\n"
       
  4749     "MUL R2.xyz, R0.w, R1;\n"
       
  4750     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  4751     "ADD R2.w, -R1, c[5].x;\n"
       
  4752     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  4753     "MUL R4.xyz, R0.w, R2;\n"
       
  4754     "MAX R2.xyz, R0, c[5].y;\n"
       
  4755     "MUL R5.xyz, R0, R2.w;\n"
       
  4756     "ADD R3.w, -R0, c[5].x;\n"
       
  4757     "RCP R2.x, R2.x;\n"
       
  4758     "RCP R2.y, R2.y;\n"
       
  4759     "RCP R2.z, R2.z;\n"
       
  4760     "MAD R2.xyz, R4, R2, R5;\n"
       
  4761     "MUL R4.xyz, R1, R3.w;\n"
       
  4762     "MAD R1.xyz, R1, R3.w, R2;\n"
       
  4763     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  4764     "MUL R2.x, R0.w, R1.w;\n"
       
  4765     "ADD R2.w, R0, R1;\n"
       
  4766     "ADD R1.xyz, R1, -R0;\n"
       
  4767     "SGE R2.xyz, R3, R2.x;\n"
       
  4768     "MAD result.color.xyz, R2, R1, R0;\n"
       
  4769     "MAD result.color.w, -R0, R1, R2;\n"
       
  4770     "END\n"
       
  4771     ;
       
  4772 
       
  4773 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK =
       
  4774     "!!ARBfp1.0\n"
       
  4775     "PARAM c[6] = { program.local[0..4],\n"
       
  4776     "		{ 2, 1 } };\n"
       
  4777     "TEMP R0;\n"
       
  4778     "TEMP R1;\n"
       
  4779     "TEMP R2;\n"
       
  4780     "TEMP R3;\n"
       
  4781     "TEMP R4;\n"
       
  4782     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4783     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4784     "ADD R0.xyz, R0, c[3];\n"
       
  4785     "RCP R0.z, R0.z;\n"
       
  4786     "MUL R0.xy, R0, R0.z;\n"
       
  4787     "MUL R0.xy, R0, c[0];\n"
       
  4788     "ADD R0.x, R0, R0.y;\n"
       
  4789     "MUL R0.x, R0, c[0].z;\n"
       
  4790     "TEX R0, R0, texture[1], 1D;\n"
       
  4791     "MUL R1.xy, fragment.position, c[4];\n"
       
  4792     "TEX R1, R1, texture[0], 2D;\n"
       
  4793     "ADD R2.w, -R1, c[5].y;\n"
       
  4794     "ADD R3.xyz, R0.w, -R0;\n"
       
  4795     "ADD R2.xyz, R1.w, -R1;\n"
       
  4796     "MUL R2.xyz, R2, R3;\n"
       
  4797     "MUL R2.xyz, R2, c[5].x;\n"
       
  4798     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  4799     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  4800     "MUL R4.xyz, R0, R2.w;\n"
       
  4801     "MUL R3.xyz, R0, R1;\n"
       
  4802     "MUL R0.xyz, R0, c[5].x;\n"
       
  4803     "ADD R2.w, -R0, c[5].y;\n"
       
  4804     "MAD R3.xyz, R3, c[5].x, R4;\n"
       
  4805     "MAD R3.xyz, R1, R2.w, R3;\n"
       
  4806     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  4807     "ADD R2.x, R0.w, R1.w;\n"
       
  4808     "ADD R1.xyz, R1, -R3;\n"
       
  4809     "SGE R0.xyz, R0, R0.w;\n"
       
  4810     "MAD result.color.xyz, R0, R1, R3;\n"
       
  4811     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  4812     "END\n"
       
  4813     ;
       
  4814 
       
  4815 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
       
  4816     "!!ARBfp1.0\n"
       
  4817     "PARAM c[7] = { program.local[0..4],\n"
       
  4818     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
  4819     "		{ 3 } };\n"
       
  4820     "TEMP R0;\n"
       
  4821     "TEMP R1;\n"
       
  4822     "TEMP R2;\n"
       
  4823     "TEMP R3;\n"
       
  4824     "TEMP R4;\n"
       
  4825     "TEMP R5;\n"
       
  4826     "TEMP R6;\n"
       
  4827     "MUL R0.xy, fragment.position, c[4];\n"
       
  4828     "TEX R1, R0, texture[0], 2D;\n"
       
  4829     "MAX R0.w, R1, c[5].z;\n"
       
  4830     "RCP R2.w, R0.w;\n"
       
  4831     "MUL R2.xyz, R1, R2.w;\n"
       
  4832     "RSQ R0.w, R2.x;\n"
       
  4833     "MUL R5.xyz, -R2, c[5].w;\n"
       
  4834     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4835     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4836     "ADD R0.xyz, R0, c[3];\n"
       
  4837     "RCP R0.z, R0.z;\n"
       
  4838     "MUL R0.xy, R0, R0.z;\n"
       
  4839     "MUL R0.xy, R0, c[0];\n"
       
  4840     "ADD R0.x, R0, R0.y;\n"
       
  4841     "RSQ R0.z, R2.y;\n"
       
  4842     "RSQ R0.y, R2.z;\n"
       
  4843     "MAD R2.xyz, -R1, R2.w, c[5].x;\n"
       
  4844     "RCP R3.x, R0.w;\n"
       
  4845     "RCP R3.y, R0.z;\n"
       
  4846     "RCP R3.z, R0.y;\n"
       
  4847     "MUL R0.x, R0, c[0].z;\n"
       
  4848     "TEX R0, R0, texture[1], 1D;\n"
       
  4849     "MAD R4.xyz, R1.w, R3, -R1;\n"
       
  4850     "MAD R3.xyz, R0, c[5].y, -R0.w;\n"
       
  4851     "MUL R4.xyz, R3, R4;\n"
       
  4852     "ADD R6.xyz, R5, c[6].x;\n"
       
  4853     "MUL R5.xyz, R2, R3;\n"
       
  4854     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  4855     "MUL R3.xyz, R0, c[5].y;\n"
       
  4856     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  4857     "MAD R4.xyz, R0.w, R1, R4;\n"
       
  4858     "MAD R5.xyz, -R1, R6, R4;\n"
       
  4859     "MUL R4.xyz, R1, c[5].w;\n"
       
  4860     "MUL R6.xyz, R1, R6;\n"
       
  4861     "SGE R4.xyz, R4, R1.w;\n"
       
  4862     "MAD R4.xyz, R4, R5, R6;\n"
       
  4863     "MAD R4.xyz, -R1, R2, R4;\n"
       
  4864     "MUL R2.xyz, R1, R2;\n"
       
  4865     "SGE R3.xyz, R3, R0.w;\n"
       
  4866     "MAD R2.xyz, R3, R4, R2;\n"
       
  4867     "ADD R2.w, -R1, c[5].x;\n"
       
  4868     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  4869     "ADD R0.x, R0.w, R1.w;\n"
       
  4870     "ADD R0.y, -R0.w, c[5].x;\n"
       
  4871     "MAD result.color.xyz, R1, R0.y, R2;\n"
       
  4872     "MAD result.color.w, -R0, R1, R0.x;\n"
       
  4873     "END\n"
       
  4874     ;
       
  4875 
       
  4876 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK =
       
  4877     "!!ARBfp1.0\n"
       
  4878     "PARAM c[6] = { program.local[0..4],\n"
       
  4879     "		{ 2 } };\n"
       
  4880     "TEMP R0;\n"
       
  4881     "TEMP R1;\n"
       
  4882     "TEMP R2;\n"
       
  4883     "TEMP R3;\n"
       
  4884     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4885     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4886     "ADD R0.xyz, R0, c[3];\n"
       
  4887     "RCP R0.z, R0.z;\n"
       
  4888     "MUL R0.xy, R0, R0.z;\n"
       
  4889     "MUL R0.xy, R0, c[0];\n"
       
  4890     "ADD R0.x, R0, R0.y;\n"
       
  4891     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4892     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4893     "MUL R0.x, R0, c[0].z;\n"
       
  4894     "TEX R0, R0, texture[1], 1D;\n"
       
  4895     "MUL R2.xyz, R0, R1.w;\n"
       
  4896     "MUL R3.xyz, R0.w, R1;\n"
       
  4897     "ADD R0.xyz, R0, R1;\n"
       
  4898     "MIN R2.xyz, R2, R3;\n"
       
  4899     "ADD R1.x, R0.w, R1.w;\n"
       
  4900     "MAD result.color.xyz, -R2, c[5].x, R0;\n"
       
  4901     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  4902     "END\n"
       
  4903     ;
       
  4904 
       
  4905 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK =
       
  4906     "!!ARBfp1.0\n"
       
  4907     "PARAM c[6] = { program.local[0..4],\n"
       
  4908     "		{ 2, 1 } };\n"
       
  4909     "TEMP R0;\n"
       
  4910     "TEMP R1;\n"
       
  4911     "TEMP R2;\n"
       
  4912     "TEMP R3;\n"
       
  4913     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4914     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4915     "ADD R0.xyz, R0, c[3];\n"
       
  4916     "RCP R0.z, R0.z;\n"
       
  4917     "MUL R0.xy, R0, R0.z;\n"
       
  4918     "MUL R0.xy, R0, c[0];\n"
       
  4919     "ADD R0.x, R0, R0.y;\n"
       
  4920     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  4921     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  4922     "MUL R0.x, R0, c[0].z;\n"
       
  4923     "TEX R0, R0, texture[1], 1D;\n"
       
  4924     "MUL R2.xyz, R0.w, R1;\n"
       
  4925     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  4926     "MUL R2.xyz, R0, R1;\n"
       
  4927     "MAD R2.xyz, -R2, c[5].x, R3;\n"
       
  4928     "ADD R2.w, -R1, c[5].y;\n"
       
  4929     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  4930     "ADD R2.x, R0.w, R1.w;\n"
       
  4931     "ADD R2.y, -R0.w, c[5];\n"
       
  4932     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  4933     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  4934     "END\n"
       
  4935     ;
       
  4936 
       
  4937 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK =
       
  4938     "!!ARBfp1.0\n"
       
  4939     "PARAM c[7] = { program.local[0..6] };\n"
       
  4940     "TEMP R0;\n"
       
  4941     "TEMP R1;\n"
       
  4942     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4943     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4944     "ADD R0.xyz, R0, c[3];\n"
       
  4945     "RCP R0.z, R0.z;\n"
       
  4946     "MUL R0.zw, R0.xyxy, R0.z;\n"
       
  4947     "MUL R0.zw, R0, c[0].xyxy;\n"
       
  4948     "ADD R1.x, R0.z, R0.w;\n"
       
  4949     "ADD R0.xy, fragment.position, c[5];\n"
       
  4950     "MUL R0.xy, R0, c[4];\n"
       
  4951     "TEX R0, R0, texture[0], 2D;\n"
       
  4952     "DP4 R1.y, R0, c[6];\n"
       
  4953     "MUL R1.x, R1, c[0].z;\n"
       
  4954     "TEX R0, R1, texture[1], 1D;\n"
       
  4955     "MUL result.color, R0, R1.y;\n"
       
  4956     "END\n"
       
  4957     ;
       
  4958 
       
  4959 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK =
       
  4960     "!!ARBfp1.0\n"
       
  4961     "PARAM c[4] = { program.local[0..3] };\n"
       
  4962     "TEMP R0;\n"
       
  4963     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4964     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4965     "ADD R0.xyz, R0, c[3];\n"
       
  4966     "RCP R0.z, R0.z;\n"
       
  4967     "MUL R0.xy, R0, R0.z;\n"
       
  4968     "MUL R0.xy, R0, c[0];\n"
       
  4969     "ADD R0.x, R0, R0.y;\n"
       
  4970     "MUL R0.x, R0, c[0].z;\n"
       
  4971     "TEX result.color, R0, texture[0], 1D;\n"
       
  4972     "END\n"
       
  4973     ;
       
  4974 
       
  4975 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
       
  4976     "!!ARBfp1.0\n"
       
  4977     "PARAM c[11] = { program.local[0..9],\n"
       
  4978     "		{ 1 } };\n"
       
  4979     "TEMP R0;\n"
       
  4980     "TEMP R1;\n"
       
  4981     "TEMP R2;\n"
       
  4982     "TEMP R3;\n"
       
  4983     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  4984     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  4985     "ADD R1.xyz, R0, c[3];\n"
       
  4986     "RCP R0.z, R1.z;\n"
       
  4987     "MUL R1.xy, R1, R0.z;\n"
       
  4988     "MUL R0.xy, fragment.position, c[7];\n"
       
  4989     "TEX R0, R0, texture[0], 2D;\n"
       
  4990     "MUL R1.xy, R1, c[0];\n"
       
  4991     "TEX R1, R1, texture[2], 2D;\n"
       
  4992     "MUL R2.xyz, R0, c[4].y;\n"
       
  4993     "MUL R3.xyz, R1.w, R2;\n"
       
  4994     "MUL R2.xyz, R1, c[4].x;\n"
       
  4995     "MAD R2.xyz, R0.w, R2, R3;\n"
       
  4996     "ADD R3.xy, fragment.position, c[8];\n"
       
  4997     "ADD R2.w, -R0, c[10].x;\n"
       
  4998     "MUL R1.xyz, R1, c[5].y;\n"
       
  4999     "MAD R2.xyz, R2.w, R1, R2;\n"
       
  5000     "MUL R1.xyz, R0, c[5].z;\n"
       
  5001     "ADD R3.z, -R1.w, c[10].x;\n"
       
  5002     "MAD R2.xyz, R3.z, R1, R2;\n"
       
  5003     "MUL R1.y, R1.w, R2.w;\n"
       
  5004     "MUL R1.x, R1.w, R0.w;\n"
       
  5005     "MUL R1.z, R0.w, R3;\n"
       
  5006     "DP3 R2.w, R1, c[5];\n"
       
  5007     "MUL R3.xy, R3, c[6];\n"
       
  5008     "TEX R1, R3, texture[1], 2D;\n"
       
  5009     "ADD R2, R2, -R0;\n"
       
  5010     "DP4 R1.x, R1, c[9];\n"
       
  5011     "MAD result.color, R1.x, R2, R0;\n"
       
  5012     "END\n"
       
  5013     ;
       
  5014 
       
  5015 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY =
       
  5016     "!!ARBfp1.0\n"
       
  5017     "PARAM c[9] = { program.local[0..7],\n"
       
  5018     "		{ 1 } };\n"
       
  5019     "TEMP R0;\n"
       
  5020     "TEMP R1;\n"
       
  5021     "TEMP R2;\n"
       
  5022     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5023     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5024     "ADD R1.xyz, R0, c[3];\n"
       
  5025     "RCP R0.z, R1.z;\n"
       
  5026     "MUL R1.xy, R1, R0.z;\n"
       
  5027     "MUL R0.xy, fragment.position, c[5];\n"
       
  5028     "TEX R0, R0, texture[0], 2D;\n"
       
  5029     "MUL R1.xy, R1, c[0];\n"
       
  5030     "TEX R1, R1, texture[2], 2D;\n"
       
  5031     "ADD R2.x, -R0.w, c[8];\n"
       
  5032     "MUL R2.xyz, R1, R2.x;\n"
       
  5033     "MAD R1.xyz, R1, R0, R2;\n"
       
  5034     "ADD R2.x, -R1.w, c[8];\n"
       
  5035     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  5036     "ADD R1.z, R1.w, R0.w;\n"
       
  5037     "MAD R2.w, -R1, R0, R1.z;\n"
       
  5038     "ADD R1.xy, fragment.position, c[6];\n"
       
  5039     "MUL R1.xy, R1, c[4];\n"
       
  5040     "TEX R1, R1, texture[1], 2D;\n"
       
  5041     "ADD R2, R2, -R0;\n"
       
  5042     "DP4 R1.x, R1, c[7];\n"
       
  5043     "MAD result.color, R1.x, R2, R0;\n"
       
  5044     "END\n"
       
  5045     ;
       
  5046 
       
  5047 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN =
       
  5048     "!!ARBfp1.0\n"
       
  5049     "PARAM c[8] = { program.local[0..7] };\n"
       
  5050     "TEMP R0;\n"
       
  5051     "TEMP R1;\n"
       
  5052     "TEMP R2;\n"
       
  5053     "TEMP R3;\n"
       
  5054     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5055     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5056     "ADD R0.xyz, R0, c[3];\n"
       
  5057     "RCP R0.z, R0.z;\n"
       
  5058     "MUL R0.xy, R0, R0.z;\n"
       
  5059     "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
       
  5060     "ADD R3.xy, fragment.position, c[6];\n"
       
  5061     "TEX R1, R0.zwzw, texture[2], 2D;\n"
       
  5062     "MUL R0.xy, fragment.position, c[5];\n"
       
  5063     "TEX R0, R0, texture[0], 2D;\n"
       
  5064     "ADD R2, R1, R0;\n"
       
  5065     "MAD R2, -R1, R0, R2;\n"
       
  5066     "MUL R3.xy, R3, c[4];\n"
       
  5067     "TEX R1, R3, texture[1], 2D;\n"
       
  5068     "ADD R2, R2, -R0;\n"
       
  5069     "DP4 R1.x, R1, c[7];\n"
       
  5070     "MAD result.color, R1.x, R2, R0;\n"
       
  5071     "END\n"
       
  5072     ;
       
  5073 
       
  5074 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY =
       
  5075     "!!ARBfp1.0\n"
       
  5076     "PARAM c[9] = { program.local[0..7],\n"
       
  5077     "		{ 2, 1 } };\n"
       
  5078     "TEMP R0;\n"
       
  5079     "TEMP R1;\n"
       
  5080     "TEMP R2;\n"
       
  5081     "TEMP R3;\n"
       
  5082     "TEMP R4;\n"
       
  5083     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5084     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5085     "ADD R0.xyz, R0, c[3];\n"
       
  5086     "RCP R0.z, R0.z;\n"
       
  5087     "MUL R0.xy, R0, R0.z;\n"
       
  5088     "MUL R0.xy, R0, c[0];\n"
       
  5089     "TEX R0, R0, texture[2], 2D;\n"
       
  5090     "MUL R1.xy, fragment.position, c[5];\n"
       
  5091     "TEX R1, R1, texture[0], 2D;\n"
       
  5092     "ADD R2.w, -R1, c[8].y;\n"
       
  5093     "ADD R3.xyz, R0.w, -R0;\n"
       
  5094     "ADD R2.xyz, R1.w, -R1;\n"
       
  5095     "MUL R2.xyz, R2, R3;\n"
       
  5096     "MUL R2.xyz, R2, c[8].x;\n"
       
  5097     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  5098     "MUL R4.xyz, R0, R2.w;\n"
       
  5099     "MUL R3.xyz, R0, R1;\n"
       
  5100     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  5101     "ADD R2.x, -R0.w, c[8].y;\n"
       
  5102     "MAD R3.xyz, R3, c[8].x, R4;\n"
       
  5103     "MAD R3.xyz, R1, R2.x, R3;\n"
       
  5104     "MAD R0.xyz, R1, R2.x, R0;\n"
       
  5105     "MUL R2.xyz, R1, c[8].x;\n"
       
  5106     "ADD R0.xyz, R0, -R3;\n"
       
  5107     "SGE R2.xyz, R2, R1.w;\n"
       
  5108     "MAD R2.xyz, R2, R0, R3;\n"
       
  5109     "ADD R0.z, R0.w, R1.w;\n"
       
  5110     "MAD R2.w, -R0, R1, R0.z;\n"
       
  5111     "ADD R0.xy, fragment.position, c[6];\n"
       
  5112     "MUL R0.xy, R0, c[4];\n"
       
  5113     "TEX R0, R0, texture[1], 2D;\n"
       
  5114     "ADD R2, R2, -R1;\n"
       
  5115     "DP4 R0.x, R0, c[7];\n"
       
  5116     "MAD result.color, R0.x, R2, R1;\n"
       
  5117     "END\n"
       
  5118     ;
       
  5119 
       
  5120 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN =
       
  5121     "!!ARBfp1.0\n"
       
  5122     "PARAM c[9] = { program.local[0..7],\n"
       
  5123     "		{ 1 } };\n"
       
  5124     "TEMP R0;\n"
       
  5125     "TEMP R1;\n"
       
  5126     "TEMP R2;\n"
       
  5127     "TEMP R3;\n"
       
  5128     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5129     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5130     "ADD R0.xyz, R0, c[3];\n"
       
  5131     "RCP R0.z, R0.z;\n"
       
  5132     "MUL R0.zw, R0.xyxy, R0.z;\n"
       
  5133     "MUL R1.xy, R0.zwzw, c[0];\n"
       
  5134     "MUL R0.xy, fragment.position, c[5];\n"
       
  5135     "TEX R0, R0, texture[0], 2D;\n"
       
  5136     "TEX R1, R1, texture[2], 2D;\n"
       
  5137     "MUL R3.xyz, R1.w, R0;\n"
       
  5138     "MUL R2.xyz, R1, R0.w;\n"
       
  5139     "MIN R2.xyz, R2, R3;\n"
       
  5140     "ADD R2.w, -R0, c[8].x;\n"
       
  5141     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  5142     "ADD R2.x, -R1.w, c[8];\n"
       
  5143     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  5144     "ADD R1.z, R1.w, R0.w;\n"
       
  5145     "MAD R2.w, -R1, R0, R1.z;\n"
       
  5146     "ADD R1.xy, fragment.position, c[6];\n"
       
  5147     "MUL R1.xy, R1, c[4];\n"
       
  5148     "TEX R1, R1, texture[1], 2D;\n"
       
  5149     "ADD R2, R2, -R0;\n"
       
  5150     "DP4 R1.x, R1, c[7];\n"
       
  5151     "MAD result.color, R1.x, R2, R0;\n"
       
  5152     "END\n"
       
  5153     ;
       
  5154 
       
  5155 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN =
       
  5156     "!!ARBfp1.0\n"
       
  5157     "PARAM c[9] = { program.local[0..7],\n"
       
  5158     "		{ 1 } };\n"
       
  5159     "TEMP R0;\n"
       
  5160     "TEMP R1;\n"
       
  5161     "TEMP R2;\n"
       
  5162     "TEMP R3;\n"
       
  5163     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5164     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5165     "ADD R0.xyz, R0, c[3];\n"
       
  5166     "RCP R0.z, R0.z;\n"
       
  5167     "MUL R0.zw, R0.xyxy, R0.z;\n"
       
  5168     "MUL R1.xy, R0.zwzw, c[0];\n"
       
  5169     "MUL R0.xy, fragment.position, c[5];\n"
       
  5170     "TEX R0, R0, texture[0], 2D;\n"
       
  5171     "TEX R1, R1, texture[2], 2D;\n"
       
  5172     "MUL R3.xyz, R1.w, R0;\n"
       
  5173     "MUL R2.xyz, R1, R0.w;\n"
       
  5174     "MAX R2.xyz, R2, R3;\n"
       
  5175     "ADD R2.w, -R0, c[8].x;\n"
       
  5176     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  5177     "ADD R2.x, -R1.w, c[8];\n"
       
  5178     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  5179     "ADD R1.z, R1.w, R0.w;\n"
       
  5180     "MAD R2.w, -R1, R0, R1.z;\n"
       
  5181     "ADD R1.xy, fragment.position, c[6];\n"
       
  5182     "MUL R1.xy, R1, c[4];\n"
       
  5183     "TEX R1, R1, texture[1], 2D;\n"
       
  5184     "ADD R2, R2, -R0;\n"
       
  5185     "DP4 R1.x, R1, c[7];\n"
       
  5186     "MAD result.color, R1.x, R2, R0;\n"
       
  5187     "END\n"
       
  5188     ;
       
  5189 
       
  5190 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE =
       
  5191     "!!ARBfp1.0\n"
       
  5192     "PARAM c[9] = { program.local[0..7],\n"
       
  5193     "		{ 1, 1e-006 } };\n"
       
  5194     "TEMP R0;\n"
       
  5195     "TEMP R1;\n"
       
  5196     "TEMP R2;\n"
       
  5197     "TEMP R3;\n"
       
  5198     "TEMP R4;\n"
       
  5199     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5200     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5201     "ADD R0.xyz, R0, c[3];\n"
       
  5202     "RCP R0.z, R0.z;\n"
       
  5203     "MUL R0.xy, R0, R0.z;\n"
       
  5204     "MUL R0.xy, R0, c[0];\n"
       
  5205     "TEX R0, R0, texture[2], 2D;\n"
       
  5206     "MAX R1.x, R0.w, c[8].y;\n"
       
  5207     "RCP R1.x, R1.x;\n"
       
  5208     "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
       
  5209     "MAX R2.xyz, R2, c[8].y;\n"
       
  5210     "MUL R1.xy, fragment.position, c[5];\n"
       
  5211     "TEX R1, R1, texture[0], 2D;\n"
       
  5212     "ADD R2.w, -R0, c[8].x;\n"
       
  5213     "MUL R3.xyz, R1, R2.w;\n"
       
  5214     "ADD R2.w, -R1, c[8].x;\n"
       
  5215     "MAD R4.xyz, R0, R2.w, R3;\n"
       
  5216     "MUL R3.xyz, R0.w, R1;\n"
       
  5217     "MUL R2.w, R0, R1;\n"
       
  5218     "MAD R0.xyz, R0, R1.w, R3;\n"
       
  5219     "SGE R0.xyz, R0, R2.w;\n"
       
  5220     "RCP R2.x, R2.x;\n"
       
  5221     "RCP R2.y, R2.y;\n"
       
  5222     "RCP R2.z, R2.z;\n"
       
  5223     "MAD R2.xyz, R3, R2, R4;\n"
       
  5224     "MAD R4.xyz, R0.w, R1.w, R4;\n"
       
  5225     "ADD R4.xyz, R4, -R2;\n"
       
  5226     "MAD R2.xyz, R0, R4, R2;\n"
       
  5227     "ADD R0.z, R0.w, R1.w;\n"
       
  5228     "MAD R2.w, -R0, R1, R0.z;\n"
       
  5229     "ADD R0.xy, fragment.position, c[6];\n"
       
  5230     "MUL R0.xy, R0, c[4];\n"
       
  5231     "TEX R0, R0, texture[1], 2D;\n"
       
  5232     "ADD R2, R2, -R1;\n"
       
  5233     "DP4 R0.x, R0, c[7];\n"
       
  5234     "MAD result.color, R0.x, R2, R1;\n"
       
  5235     "END\n"
       
  5236     ;
       
  5237 
       
  5238 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN =
       
  5239     "!!ARBfp1.0\n"
       
  5240     "PARAM c[9] = { program.local[0..7],\n"
       
  5241     "		{ 1, 9.9999997e-006 } };\n"
       
  5242     "TEMP R0;\n"
       
  5243     "TEMP R1;\n"
       
  5244     "TEMP R2;\n"
       
  5245     "TEMP R3;\n"
       
  5246     "TEMP R4;\n"
       
  5247     "TEMP R5;\n"
       
  5248     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5249     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5250     "ADD R0.xyz, R0, c[3];\n"
       
  5251     "RCP R0.z, R0.z;\n"
       
  5252     "MUL R0.xy, R0, R0.z;\n"
       
  5253     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  5254     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5255     "MUL R0.xy, R0, c[0];\n"
       
  5256     "TEX R0, R0, texture[2], 2D;\n"
       
  5257     "MUL R2.xyz, R0.w, R1;\n"
       
  5258     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  5259     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  5260     "MUL R4.xyz, R0.w, R2;\n"
       
  5261     "MAX R2.xyz, R0, c[8].y;\n"
       
  5262     "ADD R2.w, -R1, c[8].x;\n"
       
  5263     "MUL R5.xyz, R0, R2.w;\n"
       
  5264     "ADD R3.w, -R0, c[8].x;\n"
       
  5265     "RCP R2.x, R2.x;\n"
       
  5266     "RCP R2.y, R2.y;\n"
       
  5267     "RCP R2.z, R2.z;\n"
       
  5268     "MAD R2.xyz, R4, R2, R5;\n"
       
  5269     "MUL R4.xyz, R1, R3.w;\n"
       
  5270     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  5271     "MUL R2.w, R0, R1;\n"
       
  5272     "MAD R2.xyz, R1, R3.w, R2;\n"
       
  5273     "ADD R2.xyz, R2, -R0;\n"
       
  5274     "SGE R3.xyz, R3, R2.w;\n"
       
  5275     "MAD R2.xyz, R3, R2, R0;\n"
       
  5276     "ADD R0.z, R0.w, R1.w;\n"
       
  5277     "MAD R2.w, -R0, R1, R0.z;\n"
       
  5278     "ADD R0.xy, fragment.position, c[6];\n"
       
  5279     "MUL R0.xy, R0, c[4];\n"
       
  5280     "TEX R0, R0, texture[1], 2D;\n"
       
  5281     "ADD R2, R2, -R1;\n"
       
  5282     "DP4 R0.x, R0, c[7];\n"
       
  5283     "MAD result.color, R0.x, R2, R1;\n"
       
  5284     "END\n"
       
  5285     ;
       
  5286 
       
  5287 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT =
       
  5288     "!!ARBfp1.0\n"
       
  5289     "PARAM c[9] = { program.local[0..7],\n"
       
  5290     "		{ 2, 1 } };\n"
       
  5291     "TEMP R0;\n"
       
  5292     "TEMP R1;\n"
       
  5293     "TEMP R2;\n"
       
  5294     "TEMP R3;\n"
       
  5295     "TEMP R4;\n"
       
  5296     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5297     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5298     "ADD R0.xyz, R0, c[3];\n"
       
  5299     "RCP R0.z, R0.z;\n"
       
  5300     "MUL R0.xy, R0, R0.z;\n"
       
  5301     "MUL R0.xy, R0, c[0];\n"
       
  5302     "TEX R0, R0, texture[2], 2D;\n"
       
  5303     "MUL R1.xy, fragment.position, c[5];\n"
       
  5304     "TEX R1, R1, texture[0], 2D;\n"
       
  5305     "ADD R2.w, -R1, c[8].y;\n"
       
  5306     "ADD R3.xyz, R0.w, -R0;\n"
       
  5307     "ADD R2.xyz, R1.w, -R1;\n"
       
  5308     "MUL R2.xyz, R2, R3;\n"
       
  5309     "MUL R2.xyz, R2, c[8].x;\n"
       
  5310     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  5311     "MUL R4.xyz, R0, R2.w;\n"
       
  5312     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  5313     "MUL R3.xyz, R0, R1;\n"
       
  5314     "ADD R2.w, -R0, c[8].y;\n"
       
  5315     "MAD R3.xyz, R3, c[8].x, R4;\n"
       
  5316     "MUL R0.xyz, R0, c[8].x;\n"
       
  5317     "SGE R0.xyz, R0, R0.w;\n"
       
  5318     "MAD R3.xyz, R1, R2.w, R3;\n"
       
  5319     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  5320     "ADD R2.xyz, R2, -R3;\n"
       
  5321     "MAD R2.xyz, R0, R2, R3;\n"
       
  5322     "ADD R0.z, R0.w, R1.w;\n"
       
  5323     "MAD R2.w, -R0, R1, R0.z;\n"
       
  5324     "ADD R0.xy, fragment.position, c[6];\n"
       
  5325     "MUL R0.xy, R0, c[4];\n"
       
  5326     "TEX R0, R0, texture[1], 2D;\n"
       
  5327     "ADD R2, R2, -R1;\n"
       
  5328     "DP4 R0.x, R0, c[7];\n"
       
  5329     "MAD result.color, R0.x, R2, R1;\n"
       
  5330     "END\n"
       
  5331     ;
       
  5332 
       
  5333 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT =
       
  5334     "!!ARBfp1.0\n"
       
  5335     "PARAM c[10] = { program.local[0..7],\n"
       
  5336     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
  5337     "		{ 3 } };\n"
       
  5338     "TEMP R0;\n"
       
  5339     "TEMP R1;\n"
       
  5340     "TEMP R2;\n"
       
  5341     "TEMP R3;\n"
       
  5342     "TEMP R4;\n"
       
  5343     "TEMP R5;\n"
       
  5344     "TEMP R6;\n"
       
  5345     "MUL R0.xy, fragment.position, c[5];\n"
       
  5346     "TEX R1, R0, texture[0], 2D;\n"
       
  5347     "MAX R0.x, R1.w, c[8].z;\n"
       
  5348     "RCP R2.w, R0.x;\n"
       
  5349     "MUL R2.xyz, R1, R2.w;\n"
       
  5350     "RSQ R0.w, R2.x;\n"
       
  5351     "RCP R3.x, R0.w;\n"
       
  5352     "RSQ R0.w, R2.y;\n"
       
  5353     "MUL R5.xyz, -R2, c[8].w;\n"
       
  5354     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5355     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5356     "ADD R0.xyz, R0, c[3];\n"
       
  5357     "RCP R0.z, R0.z;\n"
       
  5358     "MUL R0.xy, R0, R0.z;\n"
       
  5359     "RSQ R0.z, R2.z;\n"
       
  5360     "MAD R2.xyz, -R1, R2.w, c[8].x;\n"
       
  5361     "RCP R3.y, R0.w;\n"
       
  5362     "RCP R3.z, R0.z;\n"
       
  5363     "MUL R0.xy, R0, c[0];\n"
       
  5364     "TEX R0, R0, texture[2], 2D;\n"
       
  5365     "MAD R4.xyz, R1.w, R3, -R1;\n"
       
  5366     "MAD R3.xyz, R0, c[8].y, -R0.w;\n"
       
  5367     "MUL R4.xyz, R3, R4;\n"
       
  5368     "ADD R6.xyz, R5, c[9].x;\n"
       
  5369     "MUL R5.xyz, R2, R3;\n"
       
  5370     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  5371     "MUL R3.xyz, R0, c[8].y;\n"
       
  5372     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  5373     "MAD R4.xyz, R0.w, R1, R4;\n"
       
  5374     "MAD R5.xyz, -R1, R6, R4;\n"
       
  5375     "MUL R4.xyz, R1, c[8].w;\n"
       
  5376     "SGE R3.xyz, R3, R0.w;\n"
       
  5377     "ADD R2.w, -R1, c[8].x;\n"
       
  5378     "MUL R6.xyz, R1, R6;\n"
       
  5379     "SGE R4.xyz, R4, R1.w;\n"
       
  5380     "MAD R4.xyz, R4, R5, R6;\n"
       
  5381     "MAD R4.xyz, -R1, R2, R4;\n"
       
  5382     "MUL R2.xyz, R1, R2;\n"
       
  5383     "MAD R2.xyz, R3, R4, R2;\n"
       
  5384     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  5385     "ADD R0.x, -R0.w, c[8];\n"
       
  5386     "MAD R2.xyz, R1, R0.x, R2;\n"
       
  5387     "ADD R0.z, R0.w, R1.w;\n"
       
  5388     "MAD R2.w, -R0, R1, R0.z;\n"
       
  5389     "ADD R0.xy, fragment.position, c[6];\n"
       
  5390     "MUL R0.xy, R0, c[4];\n"
       
  5391     "TEX R0, R0, texture[1], 2D;\n"
       
  5392     "ADD R2, R2, -R1;\n"
       
  5393     "DP4 R0.x, R0, c[7];\n"
       
  5394     "MAD result.color, R0.x, R2, R1;\n"
       
  5395     "END\n"
       
  5396     ;
       
  5397 
       
  5398 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE =
       
  5399     "!!ARBfp1.0\n"
       
  5400     "PARAM c[9] = { program.local[0..7],\n"
       
  5401     "		{ 2 } };\n"
       
  5402     "TEMP R0;\n"
       
  5403     "TEMP R1;\n"
       
  5404     "TEMP R2;\n"
       
  5405     "TEMP R3;\n"
       
  5406     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5407     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5408     "ADD R0.xyz, R0, c[3];\n"
       
  5409     "RCP R0.z, R0.z;\n"
       
  5410     "MUL R0.zw, R0.xyxy, R0.z;\n"
       
  5411     "MUL R1.xy, R0.zwzw, c[0];\n"
       
  5412     "MUL R0.xy, fragment.position, c[5];\n"
       
  5413     "TEX R0, R0, texture[0], 2D;\n"
       
  5414     "TEX R1, R1, texture[2], 2D;\n"
       
  5415     "ADD R2.xyz, R1, R0;\n"
       
  5416     "MUL R3.xyz, R1.w, R0;\n"
       
  5417     "MUL R1.xyz, R1, R0.w;\n"
       
  5418     "MIN R1.xyz, R1, R3;\n"
       
  5419     "MAD R2.xyz, -R1, c[8].x, R2;\n"
       
  5420     "ADD R1.z, R1.w, R0.w;\n"
       
  5421     "MAD R2.w, -R1, R0, R1.z;\n"
       
  5422     "ADD R1.xy, fragment.position, c[6];\n"
       
  5423     "MUL R1.xy, R1, c[4];\n"
       
  5424     "TEX R1, R1, texture[1], 2D;\n"
       
  5425     "ADD R2, R2, -R0;\n"
       
  5426     "DP4 R1.x, R1, c[7];\n"
       
  5427     "MAD result.color, R1.x, R2, R0;\n"
       
  5428     "END\n"
       
  5429     ;
       
  5430 
       
  5431 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION =
       
  5432     "!!ARBfp1.0\n"
       
  5433     "PARAM c[9] = { program.local[0..7],\n"
       
  5434     "		{ 2, 1 } };\n"
       
  5435     "TEMP R0;\n"
       
  5436     "TEMP R1;\n"
       
  5437     "TEMP R2;\n"
       
  5438     "TEMP R3;\n"
       
  5439     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5440     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5441     "ADD R0.xyz, R0, c[3];\n"
       
  5442     "RCP R0.z, R0.z;\n"
       
  5443     "MUL R0.zw, R0.xyxy, R0.z;\n"
       
  5444     "MUL R1.xy, R0.zwzw, c[0];\n"
       
  5445     "MUL R0.xy, fragment.position, c[5];\n"
       
  5446     "TEX R0, R0, texture[0], 2D;\n"
       
  5447     "TEX R1, R1, texture[2], 2D;\n"
       
  5448     "MUL R2.xyz, R1.w, R0;\n"
       
  5449     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  5450     "MUL R2.xyz, R1, R0;\n"
       
  5451     "MAD R2.xyz, -R2, c[8].x, R3;\n"
       
  5452     "ADD R2.w, -R0, c[8].y;\n"
       
  5453     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  5454     "ADD R2.x, -R1.w, c[8].y;\n"
       
  5455     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  5456     "ADD R1.z, R1.w, R0.w;\n"
       
  5457     "MAD R2.w, -R1, R0, R1.z;\n"
       
  5458     "ADD R1.xy, fragment.position, c[6];\n"
       
  5459     "MUL R1.xy, R1, c[4];\n"
       
  5460     "TEX R1, R1, texture[1], 2D;\n"
       
  5461     "ADD R2, R2, -R0;\n"
       
  5462     "DP4 R1.x, R1, c[7];\n"
       
  5463     "MAD result.color, R1.x, R2, R0;\n"
       
  5464     "END\n"
       
  5465     ;
       
  5466 
       
  5467 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
       
  5468     "!!ARBfp1.0\n"
       
  5469     "PARAM c[8] = { program.local[0..6],\n"
       
  5470     "		{ 1 } };\n"
       
  5471     "TEMP R0;\n"
       
  5472     "TEMP R1;\n"
       
  5473     "TEMP R2;\n"
       
  5474     "TEMP R3;\n"
       
  5475     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5476     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5477     "ADD R0.xyz, R0, c[3];\n"
       
  5478     "RCP R0.z, R0.z;\n"
       
  5479     "MUL R0.xy, R0, R0.z;\n"
       
  5480     "MUL R1.xy, fragment.position, c[6];\n"
       
  5481     "TEX R1, R1, texture[0], 2D;\n"
       
  5482     "MUL R2.xyz, R1, c[4].y;\n"
       
  5483     "MUL R0.xy, R0, c[0];\n"
       
  5484     "TEX R0, R0, texture[1], 2D;\n"
       
  5485     "MUL R3.xyz, R0.w, R2;\n"
       
  5486     "MUL R2.xyz, R0, c[4].x;\n"
       
  5487     "MAD R2.xyz, R1.w, R2, R3;\n"
       
  5488     "ADD R2.w, -R1, c[7].x;\n"
       
  5489     "MUL R0.xyz, R0, c[5].y;\n"
       
  5490     "MAD R0.xyz, R2.w, R0, R2;\n"
       
  5491     "ADD R2.x, -R0.w, c[7];\n"
       
  5492     "MUL R1.xyz, R1, c[5].z;\n"
       
  5493     "MAD result.color.xyz, R2.x, R1, R0;\n"
       
  5494     "MUL R0.x, R0.w, R1.w;\n"
       
  5495     "MUL R0.z, R1.w, R2.x;\n"
       
  5496     "MUL R0.y, R0.w, R2.w;\n"
       
  5497     "DP3 result.color.w, R0, c[5];\n"
       
  5498     "END\n"
       
  5499     ;
       
  5500 
       
  5501 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK =
       
  5502     "!!ARBfp1.0\n"
       
  5503     "PARAM c[6] = { program.local[0..4],\n"
       
  5504     "		{ 1 } };\n"
       
  5505     "TEMP R0;\n"
       
  5506     "TEMP R1;\n"
       
  5507     "TEMP R2;\n"
       
  5508     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5509     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5510     "ADD R0.xyz, R0, c[3];\n"
       
  5511     "RCP R0.z, R0.z;\n"
       
  5512     "MUL R0.xy, R0, R0.z;\n"
       
  5513     "MUL R1.xy, fragment.position, c[4];\n"
       
  5514     "TEX R1, R1, texture[0], 2D;\n"
       
  5515     "MUL R0.xy, R0, c[0];\n"
       
  5516     "TEX R0, R0, texture[1], 2D;\n"
       
  5517     "ADD R2.x, -R1.w, c[5];\n"
       
  5518     "MUL R2.xyz, R0, R2.x;\n"
       
  5519     "MAD R0.xyz, R0, R1, R2;\n"
       
  5520     "ADD R2.x, R0.w, R1.w;\n"
       
  5521     "ADD R2.y, -R0.w, c[5].x;\n"
       
  5522     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  5523     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  5524     "END\n"
       
  5525     ;
       
  5526 
       
  5527 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK =
       
  5528     "!!ARBfp1.0\n"
       
  5529     "PARAM c[5] = { program.local[0..4] };\n"
       
  5530     "TEMP R0;\n"
       
  5531     "TEMP R1;\n"
       
  5532     "TEMP R2;\n"
       
  5533     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5534     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5535     "ADD R0.xyz, R0, c[3];\n"
       
  5536     "RCP R0.z, R0.z;\n"
       
  5537     "MUL R0.xy, R0, R0.z;\n"
       
  5538     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  5539     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5540     "MUL R0.xy, R0, c[0];\n"
       
  5541     "TEX R0, R0, texture[1], 2D;\n"
       
  5542     "ADD R2, R0, R1;\n"
       
  5543     "MAD result.color, -R0, R1, R2;\n"
       
  5544     "END\n"
       
  5545     ;
       
  5546 
       
  5547 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK =
       
  5548     "!!ARBfp1.0\n"
       
  5549     "PARAM c[6] = { program.local[0..4],\n"
       
  5550     "		{ 2, 1 } };\n"
       
  5551     "TEMP R0;\n"
       
  5552     "TEMP R1;\n"
       
  5553     "TEMP R2;\n"
       
  5554     "TEMP R3;\n"
       
  5555     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5556     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5557     "ADD R0.xyz, R0, c[3];\n"
       
  5558     "RCP R0.z, R0.z;\n"
       
  5559     "MUL R0.xy, R0, R0.z;\n"
       
  5560     "MUL R0.xy, R0, c[0];\n"
       
  5561     "TEX R0, R0, texture[1], 2D;\n"
       
  5562     "MUL R1.xy, fragment.position, c[4];\n"
       
  5563     "TEX R1, R1, texture[0], 2D;\n"
       
  5564     "ADD R3.xyz, R0.w, -R0;\n"
       
  5565     "ADD R2.xyz, R1.w, -R1;\n"
       
  5566     "MUL R2.xyz, R2, R3;\n"
       
  5567     "ADD R2.w, -R1, c[5].y;\n"
       
  5568     "MUL R2.xyz, R2, c[5].x;\n"
       
  5569     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  5570     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  5571     "MUL R3.xyz, R0, R2.w;\n"
       
  5572     "MUL R0.xyz, R0, R1;\n"
       
  5573     "ADD R2.w, -R0, c[5].y;\n"
       
  5574     "MAD R0.xyz, R0, c[5].x, R3;\n"
       
  5575     "MAD R0.xyz, R1, R2.w, R0;\n"
       
  5576     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  5577     "MUL R1.xyz, R1, c[5].x;\n"
       
  5578     "ADD R2.w, R0, R1;\n"
       
  5579     "ADD R2.xyz, R2, -R0;\n"
       
  5580     "SGE R1.xyz, R1, R1.w;\n"
       
  5581     "MAD result.color.xyz, R1, R2, R0;\n"
       
  5582     "MAD result.color.w, -R0, R1, R2;\n"
       
  5583     "END\n"
       
  5584     ;
       
  5585 
       
  5586 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK =
       
  5587     "!!ARBfp1.0\n"
       
  5588     "PARAM c[6] = { program.local[0..4],\n"
       
  5589     "		{ 1 } };\n"
       
  5590     "TEMP R0;\n"
       
  5591     "TEMP R1;\n"
       
  5592     "TEMP R2;\n"
       
  5593     "TEMP R3;\n"
       
  5594     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5595     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5596     "ADD R0.xyz, R0, c[3];\n"
       
  5597     "RCP R0.z, R0.z;\n"
       
  5598     "MUL R0.xy, R0, R0.z;\n"
       
  5599     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  5600     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5601     "MUL R0.xy, R0, c[0];\n"
       
  5602     "TEX R0, R0, texture[1], 2D;\n"
       
  5603     "MUL R2.xyz, R0, R1.w;\n"
       
  5604     "MUL R3.xyz, R0.w, R1;\n"
       
  5605     "MIN R2.xyz, R2, R3;\n"
       
  5606     "ADD R2.w, -R1, c[5].x;\n"
       
  5607     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  5608     "ADD R2.x, R0.w, R1.w;\n"
       
  5609     "ADD R2.y, -R0.w, c[5].x;\n"
       
  5610     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  5611     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  5612     "END\n"
       
  5613     ;
       
  5614 
       
  5615 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK =
       
  5616     "!!ARBfp1.0\n"
       
  5617     "PARAM c[6] = { program.local[0..4],\n"
       
  5618     "		{ 1 } };\n"
       
  5619     "TEMP R0;\n"
       
  5620     "TEMP R1;\n"
       
  5621     "TEMP R2;\n"
       
  5622     "TEMP R3;\n"
       
  5623     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5624     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5625     "ADD R0.xyz, R0, c[3];\n"
       
  5626     "RCP R0.z, R0.z;\n"
       
  5627     "MUL R0.xy, R0, R0.z;\n"
       
  5628     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  5629     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5630     "MUL R0.xy, R0, c[0];\n"
       
  5631     "TEX R0, R0, texture[1], 2D;\n"
       
  5632     "MUL R2.xyz, R0, R1.w;\n"
       
  5633     "MUL R3.xyz, R0.w, R1;\n"
       
  5634     "MAX R2.xyz, R2, R3;\n"
       
  5635     "ADD R2.w, -R1, c[5].x;\n"
       
  5636     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  5637     "ADD R2.x, R0.w, R1.w;\n"
       
  5638     "ADD R2.y, -R0.w, c[5].x;\n"
       
  5639     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  5640     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  5641     "END\n"
       
  5642     ;
       
  5643 
       
  5644 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK =
       
  5645     "!!ARBfp1.0\n"
       
  5646     "PARAM c[6] = { program.local[0..4],\n"
       
  5647     "		{ 1, 1e-006 } };\n"
       
  5648     "TEMP R0;\n"
       
  5649     "TEMP R1;\n"
       
  5650     "TEMP R2;\n"
       
  5651     "TEMP R3;\n"
       
  5652     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5653     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5654     "ADD R0.xyz, R0, c[3];\n"
       
  5655     "RCP R0.z, R0.z;\n"
       
  5656     "MUL R0.xy, R0, R0.z;\n"
       
  5657     "MUL R0.xy, R0, c[0];\n"
       
  5658     "TEX R0, R0, texture[1], 2D;\n"
       
  5659     "MAX R1.x, R0.w, c[5].y;\n"
       
  5660     "RCP R1.x, R1.x;\n"
       
  5661     "MAD R3.xyz, -R0, R1.x, c[5].x;\n"
       
  5662     "MAX R3.xyz, R3, c[5].y;\n"
       
  5663     "MUL R1.xy, fragment.position, c[4];\n"
       
  5664     "TEX R1, R1, texture[0], 2D;\n"
       
  5665     "ADD R2.x, -R0.w, c[5];\n"
       
  5666     "MUL R2.xyz, R1, R2.x;\n"
       
  5667     "ADD R2.w, -R1, c[5].x;\n"
       
  5668     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  5669     "MUL R1.xyz, R0.w, R1;\n"
       
  5670     "MAD R0.xyz, R0, R1.w, R1;\n"
       
  5671     "MUL R2.w, R0, R1;\n"
       
  5672     "RCP R3.x, R3.x;\n"
       
  5673     "RCP R3.y, R3.y;\n"
       
  5674     "RCP R3.z, R3.z;\n"
       
  5675     "MAD R3.xyz, R1, R3, R2;\n"
       
  5676     "MAD R2.xyz, R0.w, R1.w, R2;\n"
       
  5677     "ADD R1.x, R0.w, R1.w;\n"
       
  5678     "ADD R2.xyz, R2, -R3;\n"
       
  5679     "SGE R0.xyz, R0, R2.w;\n"
       
  5680     "MAD result.color.xyz, R0, R2, R3;\n"
       
  5681     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  5682     "END\n"
       
  5683     ;
       
  5684 
       
  5685 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK =
       
  5686     "!!ARBfp1.0\n"
       
  5687     "PARAM c[6] = { program.local[0..4],\n"
       
  5688     "		{ 1, 9.9999997e-006 } };\n"
       
  5689     "TEMP R0;\n"
       
  5690     "TEMP R1;\n"
       
  5691     "TEMP R2;\n"
       
  5692     "TEMP R3;\n"
       
  5693     "TEMP R4;\n"
       
  5694     "TEMP R5;\n"
       
  5695     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5696     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5697     "ADD R0.xyz, R0, c[3];\n"
       
  5698     "RCP R0.z, R0.z;\n"
       
  5699     "MUL R0.xy, R0, R0.z;\n"
       
  5700     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  5701     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5702     "MUL R0.xy, R0, c[0];\n"
       
  5703     "TEX R0, R0, texture[1], 2D;\n"
       
  5704     "MUL R2.xyz, R0.w, R1;\n"
       
  5705     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  5706     "ADD R2.w, -R1, c[5].x;\n"
       
  5707     "MAD R2.xyz, -R0.w, R1.w, R3;\n"
       
  5708     "MUL R4.xyz, R0.w, R2;\n"
       
  5709     "MAX R2.xyz, R0, c[5].y;\n"
       
  5710     "MUL R5.xyz, R0, R2.w;\n"
       
  5711     "ADD R3.w, -R0, c[5].x;\n"
       
  5712     "RCP R2.x, R2.x;\n"
       
  5713     "RCP R2.y, R2.y;\n"
       
  5714     "RCP R2.z, R2.z;\n"
       
  5715     "MAD R2.xyz, R4, R2, R5;\n"
       
  5716     "MUL R4.xyz, R1, R3.w;\n"
       
  5717     "MAD R1.xyz, R1, R3.w, R2;\n"
       
  5718     "MAD R0.xyz, R0, R2.w, R4;\n"
       
  5719     "MUL R2.x, R0.w, R1.w;\n"
       
  5720     "ADD R2.w, R0, R1;\n"
       
  5721     "ADD R1.xyz, R1, -R0;\n"
       
  5722     "SGE R2.xyz, R3, R2.x;\n"
       
  5723     "MAD result.color.xyz, R2, R1, R0;\n"
       
  5724     "MAD result.color.w, -R0, R1, R2;\n"
       
  5725     "END\n"
       
  5726     ;
       
  5727 
       
  5728 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK =
       
  5729     "!!ARBfp1.0\n"
       
  5730     "PARAM c[6] = { program.local[0..4],\n"
       
  5731     "		{ 2, 1 } };\n"
       
  5732     "TEMP R0;\n"
       
  5733     "TEMP R1;\n"
       
  5734     "TEMP R2;\n"
       
  5735     "TEMP R3;\n"
       
  5736     "TEMP R4;\n"
       
  5737     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5738     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5739     "ADD R0.xyz, R0, c[3];\n"
       
  5740     "RCP R0.z, R0.z;\n"
       
  5741     "MUL R0.xy, R0, R0.z;\n"
       
  5742     "MUL R0.xy, R0, c[0];\n"
       
  5743     "TEX R0, R0, texture[1], 2D;\n"
       
  5744     "MUL R1.xy, fragment.position, c[4];\n"
       
  5745     "TEX R1, R1, texture[0], 2D;\n"
       
  5746     "ADD R2.w, -R1, c[5].y;\n"
       
  5747     "ADD R3.xyz, R0.w, -R0;\n"
       
  5748     "ADD R2.xyz, R1.w, -R1;\n"
       
  5749     "MUL R2.xyz, R2, R3;\n"
       
  5750     "MUL R2.xyz, R2, c[5].x;\n"
       
  5751     "MAD R2.xyz, R0.w, R1.w, -R2;\n"
       
  5752     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  5753     "MUL R4.xyz, R0, R2.w;\n"
       
  5754     "MUL R3.xyz, R0, R1;\n"
       
  5755     "MUL R0.xyz, R0, c[5].x;\n"
       
  5756     "ADD R2.w, -R0, c[5].y;\n"
       
  5757     "MAD R3.xyz, R3, c[5].x, R4;\n"
       
  5758     "MAD R3.xyz, R1, R2.w, R3;\n"
       
  5759     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  5760     "ADD R2.x, R0.w, R1.w;\n"
       
  5761     "ADD R1.xyz, R1, -R3;\n"
       
  5762     "SGE R0.xyz, R0, R0.w;\n"
       
  5763     "MAD result.color.xyz, R0, R1, R3;\n"
       
  5764     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  5765     "END\n"
       
  5766     ;
       
  5767 
       
  5768 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
       
  5769     "!!ARBfp1.0\n"
       
  5770     "PARAM c[7] = { program.local[0..4],\n"
       
  5771     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
  5772     "		{ 3 } };\n"
       
  5773     "TEMP R0;\n"
       
  5774     "TEMP R1;\n"
       
  5775     "TEMP R2;\n"
       
  5776     "TEMP R3;\n"
       
  5777     "TEMP R4;\n"
       
  5778     "TEMP R5;\n"
       
  5779     "TEMP R6;\n"
       
  5780     "MUL R0.xy, fragment.position, c[4];\n"
       
  5781     "TEX R1, R0, texture[0], 2D;\n"
       
  5782     "MAX R0.x, R1.w, c[5].z;\n"
       
  5783     "RCP R2.w, R0.x;\n"
       
  5784     "MUL R2.xyz, R1, R2.w;\n"
       
  5785     "RSQ R0.w, R2.x;\n"
       
  5786     "RCP R3.x, R0.w;\n"
       
  5787     "RSQ R0.w, R2.y;\n"
       
  5788     "MUL R5.xyz, -R2, c[5].w;\n"
       
  5789     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5790     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5791     "ADD R0.xyz, R0, c[3];\n"
       
  5792     "RCP R0.z, R0.z;\n"
       
  5793     "MUL R0.xy, R0, R0.z;\n"
       
  5794     "RSQ R0.z, R2.z;\n"
       
  5795     "MAD R2.xyz, -R1, R2.w, c[5].x;\n"
       
  5796     "RCP R3.y, R0.w;\n"
       
  5797     "RCP R3.z, R0.z;\n"
       
  5798     "MUL R0.xy, R0, c[0];\n"
       
  5799     "TEX R0, R0, texture[1], 2D;\n"
       
  5800     "MAD R4.xyz, R1.w, R3, -R1;\n"
       
  5801     "MAD R3.xyz, R0, c[5].y, -R0.w;\n"
       
  5802     "MUL R4.xyz, R3, R4;\n"
       
  5803     "ADD R6.xyz, R5, c[6].x;\n"
       
  5804     "MUL R5.xyz, R2, R3;\n"
       
  5805     "MAD R2.xyz, -R2, R3, R0.w;\n"
       
  5806     "MUL R3.xyz, R0, c[5].y;\n"
       
  5807     "MAD R6.xyz, -R5, R6, R0.w;\n"
       
  5808     "MAD R4.xyz, R0.w, R1, R4;\n"
       
  5809     "MAD R5.xyz, -R1, R6, R4;\n"
       
  5810     "MUL R4.xyz, R1, c[5].w;\n"
       
  5811     "MUL R6.xyz, R1, R6;\n"
       
  5812     "SGE R4.xyz, R4, R1.w;\n"
       
  5813     "MAD R4.xyz, R4, R5, R6;\n"
       
  5814     "MAD R4.xyz, -R1, R2, R4;\n"
       
  5815     "MUL R2.xyz, R1, R2;\n"
       
  5816     "SGE R3.xyz, R3, R0.w;\n"
       
  5817     "MAD R2.xyz, R3, R4, R2;\n"
       
  5818     "ADD R2.w, -R1, c[5].x;\n"
       
  5819     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  5820     "ADD R0.x, R0.w, R1.w;\n"
       
  5821     "ADD R0.y, -R0.w, c[5].x;\n"
       
  5822     "MAD result.color.xyz, R1, R0.y, R2;\n"
       
  5823     "MAD result.color.w, -R0, R1, R0.x;\n"
       
  5824     "END\n"
       
  5825     ;
       
  5826 
       
  5827 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK =
       
  5828     "!!ARBfp1.0\n"
       
  5829     "PARAM c[6] = { program.local[0..4],\n"
       
  5830     "		{ 2 } };\n"
       
  5831     "TEMP R0;\n"
       
  5832     "TEMP R1;\n"
       
  5833     "TEMP R2;\n"
       
  5834     "TEMP R3;\n"
       
  5835     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5836     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5837     "ADD R0.xyz, R0, c[3];\n"
       
  5838     "RCP R0.z, R0.z;\n"
       
  5839     "MUL R0.xy, R0, R0.z;\n"
       
  5840     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  5841     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5842     "MUL R0.xy, R0, c[0];\n"
       
  5843     "TEX R0, R0, texture[1], 2D;\n"
       
  5844     "MUL R2.xyz, R0, R1.w;\n"
       
  5845     "MUL R3.xyz, R0.w, R1;\n"
       
  5846     "ADD R0.xyz, R0, R1;\n"
       
  5847     "MIN R2.xyz, R2, R3;\n"
       
  5848     "ADD R1.x, R0.w, R1.w;\n"
       
  5849     "MAD result.color.xyz, -R2, c[5].x, R0;\n"
       
  5850     "MAD result.color.w, -R0, R1, R1.x;\n"
       
  5851     "END\n"
       
  5852     ;
       
  5853 
       
  5854 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK =
       
  5855     "!!ARBfp1.0\n"
       
  5856     "PARAM c[6] = { program.local[0..4],\n"
       
  5857     "		{ 2, 1 } };\n"
       
  5858     "TEMP R0;\n"
       
  5859     "TEMP R1;\n"
       
  5860     "TEMP R2;\n"
       
  5861     "TEMP R3;\n"
       
  5862     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5863     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5864     "ADD R0.xyz, R0, c[3];\n"
       
  5865     "RCP R0.z, R0.z;\n"
       
  5866     "MUL R0.xy, R0, R0.z;\n"
       
  5867     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  5868     "TEX R1, R0.zwzw, texture[0], 2D;\n"
       
  5869     "MUL R0.xy, R0, c[0];\n"
       
  5870     "TEX R0, R0, texture[1], 2D;\n"
       
  5871     "MUL R2.xyz, R0.w, R1;\n"
       
  5872     "MAD R3.xyz, R0, R1.w, R2;\n"
       
  5873     "MUL R2.xyz, R0, R1;\n"
       
  5874     "MAD R2.xyz, -R2, c[5].x, R3;\n"
       
  5875     "ADD R2.w, -R1, c[5].y;\n"
       
  5876     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  5877     "ADD R2.x, R0.w, R1.w;\n"
       
  5878     "ADD R2.y, -R0.w, c[5];\n"
       
  5879     "MAD result.color.xyz, R1, R2.y, R0;\n"
       
  5880     "MAD result.color.w, -R0, R1, R2.x;\n"
       
  5881     "END\n"
       
  5882     ;
       
  5883 
       
  5884 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK =
       
  5885     "!!ARBfp1.0\n"
       
  5886     "PARAM c[7] = { program.local[0..6] };\n"
       
  5887     "TEMP R0;\n"
       
  5888     "TEMP R1;\n"
       
  5889     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5890     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5891     "ADD R1.xyz, R0, c[3];\n"
       
  5892     "RCP R0.z, R1.z;\n"
       
  5893     "MUL R1.xy, R1, R0.z;\n"
       
  5894     "ADD R0.xy, fragment.position, c[5];\n"
       
  5895     "MUL R0.xy, R0, c[4];\n"
       
  5896     "TEX R0, R0, texture[0], 2D;\n"
       
  5897     "DP4 R1.z, R0, c[6];\n"
       
  5898     "MUL R1.xy, R1, c[0];\n"
       
  5899     "TEX R0, R1, texture[1], 2D;\n"
       
  5900     "MUL result.color, R0, R1.z;\n"
       
  5901     "END\n"
       
  5902     ;
       
  5903 
       
  5904 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK =
       
  5905     "!!ARBfp1.0\n"
       
  5906     "PARAM c[4] = { program.local[0..3] };\n"
       
  5907     "TEMP R0;\n"
       
  5908     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5909     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5910     "ADD R0.xyz, R0, c[3];\n"
       
  5911     "RCP R0.z, R0.z;\n"
       
  5912     "MUL R0.xy, R0, R0.z;\n"
       
  5913     "MUL R0.xy, R0, c[0];\n"
       
  5914     "TEX result.color, R0, texture[0], 2D;\n"
       
  5915     "END\n"
       
  5916     ;
       
  5917 
       
  5918 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
       
  5919     "!!ARBfp1.0\n"
       
  5920     "PARAM c[11] = { program.local[0..9],\n"
       
  5921     "		{ 1 } };\n"
       
  5922     "TEMP R0;\n"
       
  5923     "TEMP R1;\n"
       
  5924     "TEMP R2;\n"
       
  5925     "TEMP R3;\n"
       
  5926     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5927     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5928     "ADD R0.xyz, R0, c[3];\n"
       
  5929     "RCP R0.z, R0.z;\n"
       
  5930     "MUL R0.xy, R0, R0.z;\n"
       
  5931     "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
       
  5932     "TEX R1.x, R0.zwzw, texture[2], 2D;\n"
       
  5933     "MUL R0.xy, fragment.position, c[7];\n"
       
  5934     "TEX R0, R0, texture[0], 2D;\n"
       
  5935     "ADD R1.x, -R1, c[10];\n"
       
  5936     "MUL R1, fragment.color.primary, R1.x;\n"
       
  5937     "MUL R2.xyz, R0, c[4].y;\n"
       
  5938     "MUL R3.xyz, R1.w, R2;\n"
       
  5939     "MUL R2.xyz, R1, c[4].x;\n"
       
  5940     "MAD R2.xyz, R0.w, R2, R3;\n"
       
  5941     "ADD R3.xy, fragment.position, c[8];\n"
       
  5942     "ADD R2.w, -R0, c[10].x;\n"
       
  5943     "MUL R1.xyz, R1, c[5].y;\n"
       
  5944     "MAD R2.xyz, R2.w, R1, R2;\n"
       
  5945     "MUL R1.xyz, R0, c[5].z;\n"
       
  5946     "ADD R3.z, -R1.w, c[10].x;\n"
       
  5947     "MAD R2.xyz, R3.z, R1, R2;\n"
       
  5948     "MUL R1.y, R1.w, R2.w;\n"
       
  5949     "MUL R1.x, R1.w, R0.w;\n"
       
  5950     "MUL R1.z, R0.w, R3;\n"
       
  5951     "DP3 R2.w, R1, c[5];\n"
       
  5952     "MUL R3.xy, R3, c[6];\n"
       
  5953     "TEX R1, R3, texture[1], 2D;\n"
       
  5954     "ADD R2, R2, -R0;\n"
       
  5955     "DP4 R1.x, R1, c[9];\n"
       
  5956     "MAD result.color, R1.x, R2, R0;\n"
       
  5957     "END\n"
       
  5958     ;
       
  5959 
       
  5960 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY =
       
  5961     "!!ARBfp1.0\n"
       
  5962     "PARAM c[9] = { program.local[0..7],\n"
       
  5963     "		{ 1 } };\n"
       
  5964     "TEMP R0;\n"
       
  5965     "TEMP R1;\n"
       
  5966     "TEMP R2;\n"
       
  5967     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  5968     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  5969     "ADD R0.xyz, R0, c[3];\n"
       
  5970     "RCP R0.z, R0.z;\n"
       
  5971     "MUL R0.xy, R0, R0.z;\n"
       
  5972     "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
       
  5973     "TEX R1.x, R0.zwzw, texture[2], 2D;\n"
       
  5974     "MUL R0.xy, fragment.position, c[5];\n"
       
  5975     "TEX R0, R0, texture[0], 2D;\n"
       
  5976     "ADD R1.x, -R1, c[8];\n"
       
  5977     "MUL R1, fragment.color.primary, R1.x;\n"
       
  5978     "ADD R2.x, -R0.w, c[8];\n"
       
  5979     "MUL R2.xyz, R1, R2.x;\n"
       
  5980     "MAD R1.xyz, R1, R0, R2;\n"
       
  5981     "ADD R2.x, -R1.w, c[8];\n"
       
  5982     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  5983     "ADD R1.z, R1.w, R0.w;\n"
       
  5984     "MAD R2.w, -R1, R0, R1.z;\n"
       
  5985     "ADD R1.xy, fragment.position, c[6];\n"
       
  5986     "MUL R1.xy, R1, c[4];\n"
       
  5987     "TEX R1, R1, texture[1], 2D;\n"
       
  5988     "ADD R2, R2, -R0;\n"
       
  5989     "DP4 R1.x, R1, c[7];\n"
       
  5990     "MAD result.color, R1.x, R2, R0;\n"
       
  5991     "END\n"
       
  5992     ;
       
  5993 
       
  5994 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN =
       
  5995     "!!ARBfp1.0\n"
       
  5996     "PARAM c[9] = { program.local[0..7],\n"
       
  5997     "		{ 1 } };\n"
       
  5998     "TEMP R0;\n"
       
  5999     "TEMP R1;\n"
       
  6000     "TEMP R2;\n"
       
  6001     "TEMP R3;\n"
       
  6002     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6003     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6004     "ADD R0.xyz, R0, c[3];\n"
       
  6005     "RCP R0.z, R0.z;\n"
       
  6006     "MUL R0.xy, R0, R0.z;\n"
       
  6007     "MUL R0.xy, R0, c[0];\n"
       
  6008     "TEX R0.x, R0, texture[2], 2D;\n"
       
  6009     "ADD R0.z, -R0.x, c[8].x;\n"
       
  6010     "ADD R3.xy, fragment.position, c[6];\n"
       
  6011     "MUL R1, fragment.color.primary, R0.z;\n"
       
  6012     "MUL R0.xy, fragment.position, c[5];\n"
       
  6013     "TEX R0, R0, texture[0], 2D;\n"
       
  6014     "ADD R2, R1, R0;\n"
       
  6015     "MAD R2, -R1, R0, R2;\n"
       
  6016     "MUL R3.xy, R3, c[4];\n"
       
  6017     "TEX R1, R3, texture[1], 2D;\n"
       
  6018     "ADD R2, R2, -R0;\n"
       
  6019     "DP4 R1.x, R1, c[7];\n"
       
  6020     "MAD result.color, R1.x, R2, R0;\n"
       
  6021     "END\n"
       
  6022     ;
       
  6023 
       
  6024 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY =
       
  6025     "!!ARBfp1.0\n"
       
  6026     "PARAM c[9] = { program.local[0..7],\n"
       
  6027     "		{ 1, 2 } };\n"
       
  6028     "TEMP R0;\n"
       
  6029     "TEMP R1;\n"
       
  6030     "TEMP R2;\n"
       
  6031     "TEMP R3;\n"
       
  6032     "TEMP R4;\n"
       
  6033     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6034     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6035     "ADD R0.xyz, R0, c[3];\n"
       
  6036     "RCP R0.z, R0.z;\n"
       
  6037     "MUL R0.xy, R0, R0.z;\n"
       
  6038     "MUL R0.xy, R0, c[0];\n"
       
  6039     "TEX R0.x, R0, texture[2], 2D;\n"
       
  6040     "ADD R0.x, -R0, c[8];\n"
       
  6041     "MUL R1, fragment.color.primary, R0.x;\n"
       
  6042     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  6043     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6044     "ADD R2.w, -R0, c[8].x;\n"
       
  6045     "ADD R3.xyz, R1.w, -R1;\n"
       
  6046     "ADD R2.xyz, R0.w, -R0;\n"
       
  6047     "MUL R2.xyz, R2, R3;\n"
       
  6048     "MUL R2.xyz, R2, c[8].y;\n"
       
  6049     "MAD R2.xyz, R1.w, R0.w, -R2;\n"
       
  6050     "MUL R4.xyz, R1, R2.w;\n"
       
  6051     "MUL R3.xyz, R1, R0;\n"
       
  6052     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6053     "ADD R2.x, -R1.w, c[8];\n"
       
  6054     "MAD R3.xyz, R3, c[8].y, R4;\n"
       
  6055     "MAD R3.xyz, R0, R2.x, R3;\n"
       
  6056     "MAD R1.xyz, R0, R2.x, R1;\n"
       
  6057     "MUL R2.xyz, R0, c[8].y;\n"
       
  6058     "ADD R1.xyz, R1, -R3;\n"
       
  6059     "SGE R2.xyz, R2, R0.w;\n"
       
  6060     "MAD R2.xyz, R2, R1, R3;\n"
       
  6061     "ADD R1.z, R1.w, R0.w;\n"
       
  6062     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6063     "ADD R1.xy, fragment.position, c[6];\n"
       
  6064     "MUL R1.xy, R1, c[4];\n"
       
  6065     "TEX R1, R1, texture[1], 2D;\n"
       
  6066     "ADD R2, R2, -R0;\n"
       
  6067     "DP4 R1.x, R1, c[7];\n"
       
  6068     "MAD result.color, R1.x, R2, R0;\n"
       
  6069     "END\n"
       
  6070     ;
       
  6071 
       
  6072 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN =
       
  6073     "!!ARBfp1.0\n"
       
  6074     "PARAM c[9] = { program.local[0..7],\n"
       
  6075     "		{ 1 } };\n"
       
  6076     "TEMP R0;\n"
       
  6077     "TEMP R1;\n"
       
  6078     "TEMP R2;\n"
       
  6079     "TEMP R3;\n"
       
  6080     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6081     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6082     "ADD R0.xyz, R0, c[3];\n"
       
  6083     "RCP R0.z, R0.z;\n"
       
  6084     "MUL R0.xy, R0, R0.z;\n"
       
  6085     "MUL R0.xy, R0, c[0];\n"
       
  6086     "TEX R1.x, R0, texture[2], 2D;\n"
       
  6087     "MUL R0.xy, fragment.position, c[5];\n"
       
  6088     "TEX R0, R0, texture[0], 2D;\n"
       
  6089     "ADD R1.x, -R1, c[8];\n"
       
  6090     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6091     "MUL R3.xyz, R1.w, R0;\n"
       
  6092     "MUL R2.xyz, R1, R0.w;\n"
       
  6093     "MIN R2.xyz, R2, R3;\n"
       
  6094     "ADD R2.w, -R0, c[8].x;\n"
       
  6095     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6096     "ADD R2.x, -R1.w, c[8];\n"
       
  6097     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  6098     "ADD R1.z, R1.w, R0.w;\n"
       
  6099     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6100     "ADD R1.xy, fragment.position, c[6];\n"
       
  6101     "MUL R1.xy, R1, c[4];\n"
       
  6102     "TEX R1, R1, texture[1], 2D;\n"
       
  6103     "ADD R2, R2, -R0;\n"
       
  6104     "DP4 R1.x, R1, c[7];\n"
       
  6105     "MAD result.color, R1.x, R2, R0;\n"
       
  6106     "END\n"
       
  6107     ;
       
  6108 
       
  6109 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN =
       
  6110     "!!ARBfp1.0\n"
       
  6111     "PARAM c[9] = { program.local[0..7],\n"
       
  6112     "		{ 1 } };\n"
       
  6113     "TEMP R0;\n"
       
  6114     "TEMP R1;\n"
       
  6115     "TEMP R2;\n"
       
  6116     "TEMP R3;\n"
       
  6117     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6118     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6119     "ADD R0.xyz, R0, c[3];\n"
       
  6120     "RCP R0.z, R0.z;\n"
       
  6121     "MUL R0.xy, R0, R0.z;\n"
       
  6122     "MUL R0.xy, R0, c[0];\n"
       
  6123     "TEX R1.x, R0, texture[2], 2D;\n"
       
  6124     "MUL R0.xy, fragment.position, c[5];\n"
       
  6125     "TEX R0, R0, texture[0], 2D;\n"
       
  6126     "ADD R1.x, -R1, c[8];\n"
       
  6127     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6128     "MUL R3.xyz, R1.w, R0;\n"
       
  6129     "MUL R2.xyz, R1, R0.w;\n"
       
  6130     "MAX R2.xyz, R2, R3;\n"
       
  6131     "ADD R2.w, -R0, c[8].x;\n"
       
  6132     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6133     "ADD R2.x, -R1.w, c[8];\n"
       
  6134     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  6135     "ADD R1.z, R1.w, R0.w;\n"
       
  6136     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6137     "ADD R1.xy, fragment.position, c[6];\n"
       
  6138     "MUL R1.xy, R1, c[4];\n"
       
  6139     "TEX R1, R1, texture[1], 2D;\n"
       
  6140     "ADD R2, R2, -R0;\n"
       
  6141     "DP4 R1.x, R1, c[7];\n"
       
  6142     "MAD result.color, R1.x, R2, R0;\n"
       
  6143     "END\n"
       
  6144     ;
       
  6145 
       
  6146 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE =
       
  6147     "!!ARBfp1.0\n"
       
  6148     "PARAM c[9] = { program.local[0..7],\n"
       
  6149     "		{ 1, 1e-006 } };\n"
       
  6150     "TEMP R0;\n"
       
  6151     "TEMP R1;\n"
       
  6152     "TEMP R2;\n"
       
  6153     "TEMP R3;\n"
       
  6154     "TEMP R4;\n"
       
  6155     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6156     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6157     "ADD R0.xyz, R0, c[3];\n"
       
  6158     "RCP R0.z, R0.z;\n"
       
  6159     "MUL R0.xy, R0, R0.z;\n"
       
  6160     "MUL R0.xy, R0, c[0];\n"
       
  6161     "TEX R0.x, R0, texture[2], 2D;\n"
       
  6162     "ADD R0.x, -R0, c[8];\n"
       
  6163     "MUL R1, fragment.color.primary, R0.x;\n"
       
  6164     "MAX R0.x, R1.w, c[8].y;\n"
       
  6165     "RCP R0.x, R0.x;\n"
       
  6166     "MAD R2.xyz, -R1, R0.x, c[8].x;\n"
       
  6167     "MAX R2.xyz, R2, c[8].y;\n"
       
  6168     "MUL R0.xy, fragment.position, c[5];\n"
       
  6169     "TEX R0, R0, texture[0], 2D;\n"
       
  6170     "ADD R2.w, -R1, c[8].x;\n"
       
  6171     "MUL R3.xyz, R0, R2.w;\n"
       
  6172     "ADD R2.w, -R0, c[8].x;\n"
       
  6173     "MAD R4.xyz, R1, R2.w, R3;\n"
       
  6174     "MUL R3.xyz, R1.w, R0;\n"
       
  6175     "MUL R2.w, R1, R0;\n"
       
  6176     "MAD R1.xyz, R1, R0.w, R3;\n"
       
  6177     "SGE R1.xyz, R1, R2.w;\n"
       
  6178     "RCP R2.x, R2.x;\n"
       
  6179     "RCP R2.y, R2.y;\n"
       
  6180     "RCP R2.z, R2.z;\n"
       
  6181     "MAD R2.xyz, R3, R2, R4;\n"
       
  6182     "MAD R4.xyz, R1.w, R0.w, R4;\n"
       
  6183     "ADD R4.xyz, R4, -R2;\n"
       
  6184     "MAD R2.xyz, R1, R4, R2;\n"
       
  6185     "ADD R1.z, R1.w, R0.w;\n"
       
  6186     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6187     "ADD R1.xy, fragment.position, c[6];\n"
       
  6188     "MUL R1.xy, R1, c[4];\n"
       
  6189     "TEX R1, R1, texture[1], 2D;\n"
       
  6190     "ADD R2, R2, -R0;\n"
       
  6191     "DP4 R1.x, R1, c[7];\n"
       
  6192     "MAD result.color, R1.x, R2, R0;\n"
       
  6193     "END\n"
       
  6194     ;
       
  6195 
       
  6196 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN =
       
  6197     "!!ARBfp1.0\n"
       
  6198     "PARAM c[9] = { program.local[0..7],\n"
       
  6199     "		{ 1, 9.9999997e-006 } };\n"
       
  6200     "TEMP R0;\n"
       
  6201     "TEMP R1;\n"
       
  6202     "TEMP R2;\n"
       
  6203     "TEMP R3;\n"
       
  6204     "TEMP R4;\n"
       
  6205     "TEMP R5;\n"
       
  6206     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6207     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6208     "ADD R0.xyz, R0, c[3];\n"
       
  6209     "RCP R0.z, R0.z;\n"
       
  6210     "MUL R0.xy, R0, R0.z;\n"
       
  6211     "MUL R0.xy, R0, c[0];\n"
       
  6212     "TEX R0.x, R0, texture[2], 2D;\n"
       
  6213     "ADD R1.x, -R0, c[8];\n"
       
  6214     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6215     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  6216     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6217     "MUL R2.xyz, R1.w, R0;\n"
       
  6218     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  6219     "MAD R2.xyz, -R1.w, R0.w, R3;\n"
       
  6220     "MUL R4.xyz, R1.w, R2;\n"
       
  6221     "MAX R2.xyz, R1, c[8].y;\n"
       
  6222     "ADD R2.w, -R0, c[8].x;\n"
       
  6223     "MUL R5.xyz, R1, R2.w;\n"
       
  6224     "ADD R3.w, -R1, c[8].x;\n"
       
  6225     "RCP R2.x, R2.x;\n"
       
  6226     "RCP R2.y, R2.y;\n"
       
  6227     "RCP R2.z, R2.z;\n"
       
  6228     "MAD R2.xyz, R4, R2, R5;\n"
       
  6229     "MUL R4.xyz, R0, R3.w;\n"
       
  6230     "MAD R1.xyz, R1, R2.w, R4;\n"
       
  6231     "MUL R2.w, R1, R0;\n"
       
  6232     "MAD R2.xyz, R0, R3.w, R2;\n"
       
  6233     "ADD R2.xyz, R2, -R1;\n"
       
  6234     "SGE R3.xyz, R3, R2.w;\n"
       
  6235     "MAD R2.xyz, R3, R2, R1;\n"
       
  6236     "ADD R1.z, R1.w, R0.w;\n"
       
  6237     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6238     "ADD R1.xy, fragment.position, c[6];\n"
       
  6239     "MUL R1.xy, R1, c[4];\n"
       
  6240     "TEX R1, R1, texture[1], 2D;\n"
       
  6241     "ADD R2, R2, -R0;\n"
       
  6242     "DP4 R1.x, R1, c[7];\n"
       
  6243     "MAD result.color, R1.x, R2, R0;\n"
       
  6244     "END\n"
       
  6245     ;
       
  6246 
       
  6247 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT =
       
  6248     "!!ARBfp1.0\n"
       
  6249     "PARAM c[9] = { program.local[0..7],\n"
       
  6250     "		{ 1, 2 } };\n"
       
  6251     "TEMP R0;\n"
       
  6252     "TEMP R1;\n"
       
  6253     "TEMP R2;\n"
       
  6254     "TEMP R3;\n"
       
  6255     "TEMP R4;\n"
       
  6256     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6257     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6258     "ADD R0.xyz, R0, c[3];\n"
       
  6259     "RCP R0.z, R0.z;\n"
       
  6260     "MUL R0.xy, R0, R0.z;\n"
       
  6261     "MUL R0.xy, R0, c[0];\n"
       
  6262     "TEX R0.x, R0, texture[2], 2D;\n"
       
  6263     "ADD R0.x, -R0, c[8];\n"
       
  6264     "MUL R1, fragment.color.primary, R0.x;\n"
       
  6265     "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
       
  6266     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6267     "ADD R2.w, -R0, c[8].x;\n"
       
  6268     "ADD R3.xyz, R1.w, -R1;\n"
       
  6269     "ADD R2.xyz, R0.w, -R0;\n"
       
  6270     "MUL R2.xyz, R2, R3;\n"
       
  6271     "MUL R2.xyz, R2, c[8].y;\n"
       
  6272     "MAD R2.xyz, R1.w, R0.w, -R2;\n"
       
  6273     "MUL R4.xyz, R1, R2.w;\n"
       
  6274     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  6275     "MUL R3.xyz, R1, R0;\n"
       
  6276     "ADD R2.w, -R1, c[8].x;\n"
       
  6277     "MAD R3.xyz, R3, c[8].y, R4;\n"
       
  6278     "MUL R1.xyz, R1, c[8].y;\n"
       
  6279     "SGE R1.xyz, R1, R1.w;\n"
       
  6280     "MAD R3.xyz, R0, R2.w, R3;\n"
       
  6281     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  6282     "ADD R2.xyz, R2, -R3;\n"
       
  6283     "MAD R2.xyz, R1, R2, R3;\n"
       
  6284     "ADD R1.z, R1.w, R0.w;\n"
       
  6285     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6286     "ADD R1.xy, fragment.position, c[6];\n"
       
  6287     "MUL R1.xy, R1, c[4];\n"
       
  6288     "TEX R1, R1, texture[1], 2D;\n"
       
  6289     "ADD R2, R2, -R0;\n"
       
  6290     "DP4 R1.x, R1, c[7];\n"
       
  6291     "MAD result.color, R1.x, R2, R0;\n"
       
  6292     "END\n"
       
  6293     ;
       
  6294 
       
  6295 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT =
       
  6296     "!!ARBfp1.0\n"
       
  6297     "PARAM c[10] = { program.local[0..7],\n"
       
  6298     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
  6299     "		{ 3 } };\n"
       
  6300     "TEMP R0;\n"
       
  6301     "TEMP R1;\n"
       
  6302     "TEMP R2;\n"
       
  6303     "TEMP R3;\n"
       
  6304     "TEMP R4;\n"
       
  6305     "TEMP R5;\n"
       
  6306     "TEMP R6;\n"
       
  6307     "MUL R0.xy, fragment.position, c[5];\n"
       
  6308     "TEX R0, R0, texture[0], 2D;\n"
       
  6309     "MAX R1.w, R0, c[8].z;\n"
       
  6310     "RCP R2.w, R1.w;\n"
       
  6311     "MUL R2.xyz, R0, R2.w;\n"
       
  6312     "RSQ R1.w, R2.x;\n"
       
  6313     "MUL R5.xyz, -R2, c[8].w;\n"
       
  6314     "MUL R1.xyz, fragment.position.y, c[2];\n"
       
  6315     "MAD R1.xyz, fragment.position.x, c[1], R1;\n"
       
  6316     "ADD R1.xyz, R1, c[3];\n"
       
  6317     "RCP R1.z, R1.z;\n"
       
  6318     "MUL R1.xy, R1, R1.z;\n"
       
  6319     "MUL R1.xy, R1, c[0];\n"
       
  6320     "TEX R1.x, R1, texture[2], 2D;\n"
       
  6321     "RSQ R1.z, R2.y;\n"
       
  6322     "RSQ R1.y, R2.z;\n"
       
  6323     "MAD R2.xyz, -R0, R2.w, c[8].x;\n"
       
  6324     "RCP R3.x, R1.w;\n"
       
  6325     "RCP R3.y, R1.z;\n"
       
  6326     "RCP R3.z, R1.y;\n"
       
  6327     "ADD R1.x, -R1, c[8];\n"
       
  6328     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6329     "MAD R4.xyz, R0.w, R3, -R0;\n"
       
  6330     "MAD R3.xyz, R1, c[8].y, -R1.w;\n"
       
  6331     "MUL R4.xyz, R3, R4;\n"
       
  6332     "ADD R6.xyz, R5, c[9].x;\n"
       
  6333     "MUL R5.xyz, R2, R3;\n"
       
  6334     "MAD R2.xyz, -R2, R3, R1.w;\n"
       
  6335     "MUL R3.xyz, R1, c[8].y;\n"
       
  6336     "MAD R6.xyz, -R5, R6, R1.w;\n"
       
  6337     "MAD R4.xyz, R1.w, R0, R4;\n"
       
  6338     "MAD R5.xyz, -R0, R6, R4;\n"
       
  6339     "MUL R4.xyz, R0, c[8].w;\n"
       
  6340     "SGE R3.xyz, R3, R1.w;\n"
       
  6341     "ADD R2.w, -R0, c[8].x;\n"
       
  6342     "MUL R6.xyz, R0, R6;\n"
       
  6343     "SGE R4.xyz, R4, R0.w;\n"
       
  6344     "MAD R4.xyz, R4, R5, R6;\n"
       
  6345     "MAD R4.xyz, -R0, R2, R4;\n"
       
  6346     "MUL R2.xyz, R0, R2;\n"
       
  6347     "MAD R2.xyz, R3, R4, R2;\n"
       
  6348     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  6349     "ADD R1.x, -R1.w, c[8];\n"
       
  6350     "MAD R2.xyz, R0, R1.x, R2;\n"
       
  6351     "ADD R1.z, R1.w, R0.w;\n"
       
  6352     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6353     "ADD R1.xy, fragment.position, c[6];\n"
       
  6354     "MUL R1.xy, R1, c[4];\n"
       
  6355     "TEX R1, R1, texture[1], 2D;\n"
       
  6356     "ADD R2, R2, -R0;\n"
       
  6357     "DP4 R1.x, R1, c[7];\n"
       
  6358     "MAD result.color, R1.x, R2, R0;\n"
       
  6359     "END\n"
       
  6360     ;
       
  6361 
       
  6362 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE =
       
  6363     "!!ARBfp1.0\n"
       
  6364     "PARAM c[9] = { program.local[0..7],\n"
       
  6365     "		{ 1, 2 } };\n"
       
  6366     "TEMP R0;\n"
       
  6367     "TEMP R1;\n"
       
  6368     "TEMP R2;\n"
       
  6369     "TEMP R3;\n"
       
  6370     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6371     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6372     "ADD R0.xyz, R0, c[3];\n"
       
  6373     "RCP R0.z, R0.z;\n"
       
  6374     "MUL R0.xy, R0, R0.z;\n"
       
  6375     "MUL R0.xy, R0, c[0];\n"
       
  6376     "TEX R1.x, R0, texture[2], 2D;\n"
       
  6377     "MUL R0.xy, fragment.position, c[5];\n"
       
  6378     "ADD R1.x, -R1, c[8];\n"
       
  6379     "TEX R0, R0, texture[0], 2D;\n"
       
  6380     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6381     "ADD R2.xyz, R1, R0;\n"
       
  6382     "MUL R3.xyz, R1.w, R0;\n"
       
  6383     "MUL R1.xyz, R1, R0.w;\n"
       
  6384     "MIN R1.xyz, R1, R3;\n"
       
  6385     "MAD R2.xyz, -R1, c[8].y, R2;\n"
       
  6386     "ADD R1.z, R1.w, R0.w;\n"
       
  6387     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6388     "ADD R1.xy, fragment.position, c[6];\n"
       
  6389     "MUL R1.xy, R1, c[4];\n"
       
  6390     "TEX R1, R1, texture[1], 2D;\n"
       
  6391     "ADD R2, R2, -R0;\n"
       
  6392     "DP4 R1.x, R1, c[7];\n"
       
  6393     "MAD result.color, R1.x, R2, R0;\n"
       
  6394     "END\n"
       
  6395     ;
       
  6396 
       
  6397 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION =
       
  6398     "!!ARBfp1.0\n"
       
  6399     "PARAM c[9] = { program.local[0..7],\n"
       
  6400     "		{ 1, 2 } };\n"
       
  6401     "TEMP R0;\n"
       
  6402     "TEMP R1;\n"
       
  6403     "TEMP R2;\n"
       
  6404     "TEMP R3;\n"
       
  6405     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6406     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6407     "ADD R0.xyz, R0, c[3];\n"
       
  6408     "RCP R0.z, R0.z;\n"
       
  6409     "MUL R0.xy, R0, R0.z;\n"
       
  6410     "MUL R0.xy, R0, c[0];\n"
       
  6411     "TEX R1.x, R0, texture[2], 2D;\n"
       
  6412     "MUL R0.xy, fragment.position, c[5];\n"
       
  6413     "TEX R0, R0, texture[0], 2D;\n"
       
  6414     "ADD R1.x, -R1, c[8];\n"
       
  6415     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6416     "MUL R2.xyz, R1.w, R0;\n"
       
  6417     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  6418     "MUL R2.xyz, R1, R0;\n"
       
  6419     "MAD R2.xyz, -R2, c[8].y, R3;\n"
       
  6420     "ADD R2.w, -R0, c[8].x;\n"
       
  6421     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6422     "ADD R2.x, -R1.w, c[8];\n"
       
  6423     "MAD R2.xyz, R0, R2.x, R1;\n"
       
  6424     "ADD R1.z, R1.w, R0.w;\n"
       
  6425     "MAD R2.w, -R1, R0, R1.z;\n"
       
  6426     "ADD R1.xy, fragment.position, c[6];\n"
       
  6427     "MUL R1.xy, R1, c[4];\n"
       
  6428     "TEX R1, R1, texture[1], 2D;\n"
       
  6429     "ADD R2, R2, -R0;\n"
       
  6430     "DP4 R1.x, R1, c[7];\n"
       
  6431     "MAD result.color, R1.x, R2, R0;\n"
       
  6432     "END\n"
       
  6433     ;
       
  6434 
       
  6435 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
       
  6436     "!!ARBfp1.0\n"
       
  6437     "PARAM c[8] = { program.local[0..6],\n"
       
  6438     "		{ 1 } };\n"
       
  6439     "TEMP R0;\n"
       
  6440     "TEMP R1;\n"
       
  6441     "TEMP R2;\n"
       
  6442     "TEMP R3;\n"
       
  6443     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6444     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6445     "ADD R0.xyz, R0, c[3];\n"
       
  6446     "RCP R0.z, R0.z;\n"
       
  6447     "MUL R0.xy, R0, R0.z;\n"
       
  6448     "MUL R0.xy, R0, c[0];\n"
       
  6449     "TEX R1.x, R0, texture[1], 2D;\n"
       
  6450     "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
       
  6451     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6452     "MUL R2.xyz, R0, c[4].y;\n"
       
  6453     "ADD R1.x, -R1, c[7];\n"
       
  6454     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6455     "MUL R3.xyz, R1.w, R2;\n"
       
  6456     "MUL R2.xyz, R1, c[4].x;\n"
       
  6457     "MUL R0.xyz, R0, c[5].z;\n"
       
  6458     "MAD R2.xyz, R0.w, R2, R3;\n"
       
  6459     "ADD R2.w, -R0, c[7].x;\n"
       
  6460     "MUL R1.xyz, R1, c[5].y;\n"
       
  6461     "MAD R1.xyz, R2.w, R1, R2;\n"
       
  6462     "ADD R2.x, -R1.w, c[7];\n"
       
  6463     "MAD result.color.xyz, R2.x, R0, R1;\n"
       
  6464     "MUL R0.x, R1.w, R0.w;\n"
       
  6465     "MUL R0.z, R0.w, R2.x;\n"
       
  6466     "MUL R0.y, R1.w, R2.w;\n"
       
  6467     "DP3 result.color.w, R0, c[5];\n"
       
  6468     "END\n"
       
  6469     ;
       
  6470 
       
  6471 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK =
       
  6472     "!!ARBfp1.0\n"
       
  6473     "PARAM c[6] = { program.local[0..4],\n"
       
  6474     "		{ 1 } };\n"
       
  6475     "TEMP R0;\n"
       
  6476     "TEMP R1;\n"
       
  6477     "TEMP R2;\n"
       
  6478     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6479     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6480     "ADD R0.xyz, R0, c[3];\n"
       
  6481     "RCP R0.z, R0.z;\n"
       
  6482     "MUL R0.xy, R0, R0.z;\n"
       
  6483     "MUL R0.xy, R0, c[0];\n"
       
  6484     "TEX R1.x, R0, texture[1], 2D;\n"
       
  6485     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6486     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6487     "ADD R1.x, -R1, c[5];\n"
       
  6488     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6489     "ADD R2.x, -R0.w, c[5];\n"
       
  6490     "MUL R2.xyz, R1, R2.x;\n"
       
  6491     "MAD R1.xyz, R1, R0, R2;\n"
       
  6492     "ADD R2.x, R1.w, R0.w;\n"
       
  6493     "ADD R2.y, -R1.w, c[5].x;\n"
       
  6494     "MAD result.color.xyz, R0, R2.y, R1;\n"
       
  6495     "MAD result.color.w, -R1, R0, R2.x;\n"
       
  6496     "END\n"
       
  6497     ;
       
  6498 
       
  6499 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK =
       
  6500     "!!ARBfp1.0\n"
       
  6501     "PARAM c[6] = { program.local[0..4],\n"
       
  6502     "		{ 1 } };\n"
       
  6503     "TEMP R0;\n"
       
  6504     "TEMP R1;\n"
       
  6505     "TEMP R2;\n"
       
  6506     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6507     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6508     "ADD R0.xyz, R0, c[3];\n"
       
  6509     "RCP R0.z, R0.z;\n"
       
  6510     "MUL R0.xy, R0, R0.z;\n"
       
  6511     "MUL R0.xy, R0, c[0];\n"
       
  6512     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6513     "ADD R1.x, -R0, c[5];\n"
       
  6514     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6515     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6516     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6517     "ADD R2, R1, R0;\n"
       
  6518     "MAD result.color, -R1, R0, R2;\n"
       
  6519     "END\n"
       
  6520     ;
       
  6521 
       
  6522 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK =
       
  6523     "!!ARBfp1.0\n"
       
  6524     "PARAM c[6] = { program.local[0..4],\n"
       
  6525     "		{ 1, 2 } };\n"
       
  6526     "TEMP R0;\n"
       
  6527     "TEMP R1;\n"
       
  6528     "TEMP R2;\n"
       
  6529     "TEMP R3;\n"
       
  6530     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6531     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6532     "ADD R0.xyz, R0, c[3];\n"
       
  6533     "RCP R0.z, R0.z;\n"
       
  6534     "MUL R0.xy, R0, R0.z;\n"
       
  6535     "MUL R0.xy, R0, c[0];\n"
       
  6536     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6537     "ADD R0.x, -R0, c[5];\n"
       
  6538     "MUL R1, fragment.color.primary, R0.x;\n"
       
  6539     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6540     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6541     "ADD R3.xyz, R1.w, -R1;\n"
       
  6542     "ADD R2.xyz, R0.w, -R0;\n"
       
  6543     "MUL R2.xyz, R2, R3;\n"
       
  6544     "ADD R2.w, -R0, c[5].x;\n"
       
  6545     "MUL R2.xyz, R2, c[5].y;\n"
       
  6546     "MAD R2.xyz, R1.w, R0.w, -R2;\n"
       
  6547     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  6548     "MUL R3.xyz, R1, R2.w;\n"
       
  6549     "MUL R1.xyz, R1, R0;\n"
       
  6550     "ADD R2.w, -R1, c[5].x;\n"
       
  6551     "MAD R1.xyz, R1, c[5].y, R3;\n"
       
  6552     "MAD R1.xyz, R0, R2.w, R1;\n"
       
  6553     "MAD R2.xyz, R0, R2.w, R2;\n"
       
  6554     "MUL R0.xyz, R0, c[5].y;\n"
       
  6555     "ADD R2.w, R1, R0;\n"
       
  6556     "ADD R2.xyz, R2, -R1;\n"
       
  6557     "SGE R0.xyz, R0, R0.w;\n"
       
  6558     "MAD result.color.xyz, R0, R2, R1;\n"
       
  6559     "MAD result.color.w, -R1, R0, R2;\n"
       
  6560     "END\n"
       
  6561     ;
       
  6562 
       
  6563 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK =
       
  6564     "!!ARBfp1.0\n"
       
  6565     "PARAM c[6] = { program.local[0..4],\n"
       
  6566     "		{ 1 } };\n"
       
  6567     "TEMP R0;\n"
       
  6568     "TEMP R1;\n"
       
  6569     "TEMP R2;\n"
       
  6570     "TEMP R3;\n"
       
  6571     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6572     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6573     "ADD R0.xyz, R0, c[3];\n"
       
  6574     "RCP R0.z, R0.z;\n"
       
  6575     "MUL R0.xy, R0, R0.z;\n"
       
  6576     "MUL R0.xy, R0, c[0];\n"
       
  6577     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6578     "ADD R1.x, -R0, c[5];\n"
       
  6579     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6580     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6581     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6582     "MUL R2.xyz, R1, R0.w;\n"
       
  6583     "MUL R3.xyz, R1.w, R0;\n"
       
  6584     "MIN R2.xyz, R2, R3;\n"
       
  6585     "ADD R2.w, -R0, c[5].x;\n"
       
  6586     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6587     "ADD R2.x, R1.w, R0.w;\n"
       
  6588     "ADD R2.y, -R1.w, c[5].x;\n"
       
  6589     "MAD result.color.xyz, R0, R2.y, R1;\n"
       
  6590     "MAD result.color.w, -R1, R0, R2.x;\n"
       
  6591     "END\n"
       
  6592     ;
       
  6593 
       
  6594 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK =
       
  6595     "!!ARBfp1.0\n"
       
  6596     "PARAM c[6] = { program.local[0..4],\n"
       
  6597     "		{ 1 } };\n"
       
  6598     "TEMP R0;\n"
       
  6599     "TEMP R1;\n"
       
  6600     "TEMP R2;\n"
       
  6601     "TEMP R3;\n"
       
  6602     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6603     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6604     "ADD R0.xyz, R0, c[3];\n"
       
  6605     "RCP R0.z, R0.z;\n"
       
  6606     "MUL R0.xy, R0, R0.z;\n"
       
  6607     "MUL R0.xy, R0, c[0];\n"
       
  6608     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6609     "ADD R1.x, -R0, c[5];\n"
       
  6610     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6611     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6612     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6613     "MUL R2.xyz, R1, R0.w;\n"
       
  6614     "MUL R3.xyz, R1.w, R0;\n"
       
  6615     "MAX R2.xyz, R2, R3;\n"
       
  6616     "ADD R2.w, -R0, c[5].x;\n"
       
  6617     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6618     "ADD R2.x, R1.w, R0.w;\n"
       
  6619     "ADD R2.y, -R1.w, c[5].x;\n"
       
  6620     "MAD result.color.xyz, R0, R2.y, R1;\n"
       
  6621     "MAD result.color.w, -R1, R0, R2.x;\n"
       
  6622     "END\n"
       
  6623     ;
       
  6624 
       
  6625 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK =
       
  6626     "!!ARBfp1.0\n"
       
  6627     "PARAM c[6] = { program.local[0..4],\n"
       
  6628     "		{ 1, 1e-006 } };\n"
       
  6629     "TEMP R0;\n"
       
  6630     "TEMP R1;\n"
       
  6631     "TEMP R2;\n"
       
  6632     "TEMP R3;\n"
       
  6633     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6634     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6635     "ADD R0.xyz, R0, c[3];\n"
       
  6636     "RCP R0.z, R0.z;\n"
       
  6637     "MUL R0.xy, R0, R0.z;\n"
       
  6638     "MUL R0.xy, R0, c[0];\n"
       
  6639     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6640     "ADD R0.x, -R0, c[5];\n"
       
  6641     "MUL R1, fragment.color.primary, R0.x;\n"
       
  6642     "MAX R0.x, R1.w, c[5].y;\n"
       
  6643     "RCP R0.x, R0.x;\n"
       
  6644     "MAD R3.xyz, -R1, R0.x, c[5].x;\n"
       
  6645     "MAX R3.xyz, R3, c[5].y;\n"
       
  6646     "MUL R0.xy, fragment.position, c[4];\n"
       
  6647     "TEX R0, R0, texture[0], 2D;\n"
       
  6648     "ADD R2.x, -R1.w, c[5];\n"
       
  6649     "MUL R2.xyz, R0, R2.x;\n"
       
  6650     "ADD R2.w, -R0, c[5].x;\n"
       
  6651     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  6652     "MUL R0.xyz, R1.w, R0;\n"
       
  6653     "RCP R3.x, R3.x;\n"
       
  6654     "RCP R3.y, R3.y;\n"
       
  6655     "RCP R3.z, R3.z;\n"
       
  6656     "MAD R3.xyz, R0, R3, R2;\n"
       
  6657     "MAD R0.xyz, R1, R0.w, R0;\n"
       
  6658     "MAD R2.xyz, R1.w, R0.w, R2;\n"
       
  6659     "MUL R2.w, R1, R0;\n"
       
  6660     "ADD R1.x, R1.w, R0.w;\n"
       
  6661     "ADD R2.xyz, R2, -R3;\n"
       
  6662     "SGE R0.xyz, R0, R2.w;\n"
       
  6663     "MAD result.color.xyz, R0, R2, R3;\n"
       
  6664     "MAD result.color.w, -R1, R0, R1.x;\n"
       
  6665     "END\n"
       
  6666     ;
       
  6667 
       
  6668 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK =
       
  6669     "!!ARBfp1.0\n"
       
  6670     "PARAM c[6] = { program.local[0..4],\n"
       
  6671     "		{ 1, 9.9999997e-006 } };\n"
       
  6672     "TEMP R0;\n"
       
  6673     "TEMP R1;\n"
       
  6674     "TEMP R2;\n"
       
  6675     "TEMP R3;\n"
       
  6676     "TEMP R4;\n"
       
  6677     "TEMP R5;\n"
       
  6678     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6679     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6680     "ADD R0.xyz, R0, c[3];\n"
       
  6681     "RCP R0.z, R0.z;\n"
       
  6682     "MUL R0.xy, R0, R0.z;\n"
       
  6683     "MUL R0.xy, R0, c[0];\n"
       
  6684     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6685     "ADD R1.x, -R0, c[5];\n"
       
  6686     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6687     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6688     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6689     "MUL R2.xyz, R1.w, R0;\n"
       
  6690     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  6691     "ADD R2.w, -R0, c[5].x;\n"
       
  6692     "MAD R2.xyz, -R1.w, R0.w, R3;\n"
       
  6693     "MUL R4.xyz, R1.w, R2;\n"
       
  6694     "MAX R2.xyz, R1, c[5].y;\n"
       
  6695     "MUL R5.xyz, R1, R2.w;\n"
       
  6696     "ADD R3.w, -R1, c[5].x;\n"
       
  6697     "RCP R2.x, R2.x;\n"
       
  6698     "RCP R2.y, R2.y;\n"
       
  6699     "RCP R2.z, R2.z;\n"
       
  6700     "MAD R2.xyz, R4, R2, R5;\n"
       
  6701     "MUL R4.xyz, R0, R3.w;\n"
       
  6702     "MAD R0.xyz, R0, R3.w, R2;\n"
       
  6703     "MAD R1.xyz, R1, R2.w, R4;\n"
       
  6704     "MUL R2.x, R1.w, R0.w;\n"
       
  6705     "ADD R2.w, R1, R0;\n"
       
  6706     "ADD R0.xyz, R0, -R1;\n"
       
  6707     "SGE R2.xyz, R3, R2.x;\n"
       
  6708     "MAD result.color.xyz, R2, R0, R1;\n"
       
  6709     "MAD result.color.w, -R1, R0, R2;\n"
       
  6710     "END\n"
       
  6711     ;
       
  6712 
       
  6713 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK =
       
  6714     "!!ARBfp1.0\n"
       
  6715     "PARAM c[6] = { program.local[0..4],\n"
       
  6716     "		{ 1, 2 } };\n"
       
  6717     "TEMP R0;\n"
       
  6718     "TEMP R1;\n"
       
  6719     "TEMP R2;\n"
       
  6720     "TEMP R3;\n"
       
  6721     "TEMP R4;\n"
       
  6722     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6723     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6724     "ADD R0.xyz, R0, c[3];\n"
       
  6725     "RCP R0.z, R0.z;\n"
       
  6726     "MUL R0.xy, R0, R0.z;\n"
       
  6727     "MUL R0.xy, R0, c[0];\n"
       
  6728     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6729     "ADD R0.x, -R0, c[5];\n"
       
  6730     "MUL R1, fragment.color.primary, R0.x;\n"
       
  6731     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6732     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6733     "ADD R2.w, -R0, c[5].x;\n"
       
  6734     "ADD R3.xyz, R1.w, -R1;\n"
       
  6735     "ADD R2.xyz, R0.w, -R0;\n"
       
  6736     "MUL R2.xyz, R2, R3;\n"
       
  6737     "MUL R2.xyz, R2, c[5].y;\n"
       
  6738     "MAD R2.xyz, R1.w, R0.w, -R2;\n"
       
  6739     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  6740     "MUL R4.xyz, R1, R2.w;\n"
       
  6741     "MUL R3.xyz, R1, R0;\n"
       
  6742     "MUL R1.xyz, R1, c[5].y;\n"
       
  6743     "ADD R2.w, -R1, c[5].x;\n"
       
  6744     "MAD R3.xyz, R3, c[5].y, R4;\n"
       
  6745     "MAD R3.xyz, R0, R2.w, R3;\n"
       
  6746     "MAD R0.xyz, R0, R2.w, R2;\n"
       
  6747     "ADD R2.x, R1.w, R0.w;\n"
       
  6748     "ADD R0.xyz, R0, -R3;\n"
       
  6749     "SGE R1.xyz, R1, R1.w;\n"
       
  6750     "MAD result.color.xyz, R1, R0, R3;\n"
       
  6751     "MAD result.color.w, -R1, R0, R2.x;\n"
       
  6752     "END\n"
       
  6753     ;
       
  6754 
       
  6755 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
       
  6756     "!!ARBfp1.0\n"
       
  6757     "PARAM c[7] = { program.local[0..4],\n"
       
  6758     "		{ 1, 2, 9.9999997e-006, 8 },\n"
       
  6759     "		{ 3 } };\n"
       
  6760     "TEMP R0;\n"
       
  6761     "TEMP R1;\n"
       
  6762     "TEMP R2;\n"
       
  6763     "TEMP R3;\n"
       
  6764     "TEMP R4;\n"
       
  6765     "TEMP R5;\n"
       
  6766     "TEMP R6;\n"
       
  6767     "MUL R0.xy, fragment.position, c[4];\n"
       
  6768     "TEX R0, R0, texture[0], 2D;\n"
       
  6769     "MAX R1.w, R0, c[5].z;\n"
       
  6770     "RCP R2.w, R1.w;\n"
       
  6771     "MUL R2.xyz, R0, R2.w;\n"
       
  6772     "RSQ R1.w, R2.x;\n"
       
  6773     "MUL R5.xyz, -R2, c[5].w;\n"
       
  6774     "MUL R1.xyz, fragment.position.y, c[2];\n"
       
  6775     "MAD R1.xyz, fragment.position.x, c[1], R1;\n"
       
  6776     "ADD R1.xyz, R1, c[3];\n"
       
  6777     "RCP R1.z, R1.z;\n"
       
  6778     "MUL R1.xy, R1, R1.z;\n"
       
  6779     "MUL R1.xy, R1, c[0];\n"
       
  6780     "TEX R1.x, R1, texture[1], 2D;\n"
       
  6781     "RSQ R1.z, R2.y;\n"
       
  6782     "RSQ R1.y, R2.z;\n"
       
  6783     "MAD R2.xyz, -R0, R2.w, c[5].x;\n"
       
  6784     "RCP R3.x, R1.w;\n"
       
  6785     "RCP R3.y, R1.z;\n"
       
  6786     "RCP R3.z, R1.y;\n"
       
  6787     "ADD R1.x, -R1, c[5];\n"
       
  6788     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6789     "MAD R4.xyz, R0.w, R3, -R0;\n"
       
  6790     "MAD R3.xyz, R1, c[5].y, -R1.w;\n"
       
  6791     "MUL R4.xyz, R3, R4;\n"
       
  6792     "ADD R6.xyz, R5, c[6].x;\n"
       
  6793     "MUL R5.xyz, R2, R3;\n"
       
  6794     "MAD R2.xyz, -R2, R3, R1.w;\n"
       
  6795     "MUL R3.xyz, R1, c[5].y;\n"
       
  6796     "MAD R6.xyz, -R5, R6, R1.w;\n"
       
  6797     "MAD R4.xyz, R1.w, R0, R4;\n"
       
  6798     "MAD R5.xyz, -R0, R6, R4;\n"
       
  6799     "MUL R4.xyz, R0, c[5].w;\n"
       
  6800     "MUL R6.xyz, R0, R6;\n"
       
  6801     "SGE R4.xyz, R4, R0.w;\n"
       
  6802     "MAD R4.xyz, R4, R5, R6;\n"
       
  6803     "MAD R4.xyz, -R0, R2, R4;\n"
       
  6804     "MUL R2.xyz, R0, R2;\n"
       
  6805     "SGE R3.xyz, R3, R1.w;\n"
       
  6806     "MAD R2.xyz, R3, R4, R2;\n"
       
  6807     "ADD R2.w, -R0, c[5].x;\n"
       
  6808     "MAD R2.xyz, R1, R2.w, R2;\n"
       
  6809     "ADD R1.x, R1.w, R0.w;\n"
       
  6810     "ADD R1.y, -R1.w, c[5].x;\n"
       
  6811     "MAD result.color.xyz, R0, R1.y, R2;\n"
       
  6812     "MAD result.color.w, -R1, R0, R1.x;\n"
       
  6813     "END\n"
       
  6814     ;
       
  6815 
       
  6816 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK =
       
  6817     "!!ARBfp1.0\n"
       
  6818     "PARAM c[6] = { program.local[0..4],\n"
       
  6819     "		{ 1, 2 } };\n"
       
  6820     "TEMP R0;\n"
       
  6821     "TEMP R1;\n"
       
  6822     "TEMP R2;\n"
       
  6823     "TEMP R3;\n"
       
  6824     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6825     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6826     "ADD R0.xyz, R0, c[3];\n"
       
  6827     "RCP R0.z, R0.z;\n"
       
  6828     "MUL R0.xy, R0, R0.z;\n"
       
  6829     "MUL R0.xy, R0, c[0];\n"
       
  6830     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6831     "ADD R1.x, -R0, c[5];\n"
       
  6832     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6833     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6834     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6835     "MUL R3.xyz, R1.w, R0;\n"
       
  6836     "MUL R2.xyz, R1, R0.w;\n"
       
  6837     "ADD R0.xyz, R1, R0;\n"
       
  6838     "MIN R2.xyz, R2, R3;\n"
       
  6839     "ADD R1.x, R1.w, R0.w;\n"
       
  6840     "MAD result.color.xyz, -R2, c[5].y, R0;\n"
       
  6841     "MAD result.color.w, -R1, R0, R1.x;\n"
       
  6842     "END\n"
       
  6843     ;
       
  6844 
       
  6845 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK =
       
  6846     "!!ARBfp1.0\n"
       
  6847     "PARAM c[6] = { program.local[0..4],\n"
       
  6848     "		{ 1, 2 } };\n"
       
  6849     "TEMP R0;\n"
       
  6850     "TEMP R1;\n"
       
  6851     "TEMP R2;\n"
       
  6852     "TEMP R3;\n"
       
  6853     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6854     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6855     "ADD R0.xyz, R0, c[3];\n"
       
  6856     "RCP R0.z, R0.z;\n"
       
  6857     "MUL R0.xy, R0, R0.z;\n"
       
  6858     "MUL R0.xy, R0, c[0];\n"
       
  6859     "TEX R0.x, R0, texture[1], 2D;\n"
       
  6860     "ADD R1.x, -R0, c[5];\n"
       
  6861     "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
       
  6862     "TEX R0, R0.zwzw, texture[0], 2D;\n"
       
  6863     "MUL R1, fragment.color.primary, R1.x;\n"
       
  6864     "MUL R2.xyz, R1.w, R0;\n"
       
  6865     "MAD R3.xyz, R1, R0.w, R2;\n"
       
  6866     "MUL R2.xyz, R1, R0;\n"
       
  6867     "MAD R2.xyz, -R2, c[5].y, R3;\n"
       
  6868     "ADD R2.w, -R0, c[5].x;\n"
       
  6869     "MAD R1.xyz, R1, R2.w, R2;\n"
       
  6870     "ADD R2.x, R1.w, R0.w;\n"
       
  6871     "ADD R2.y, -R1.w, c[5].x;\n"
       
  6872     "MAD result.color.xyz, R0, R2.y, R1;\n"
       
  6873     "MAD result.color.w, -R1, R0, R2.x;\n"
       
  6874     "END\n"
       
  6875     ;
       
  6876 
       
  6877 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK =
       
  6878     "!!ARBfp1.0\n"
       
  6879     "PARAM c[8] = { program.local[0..6],\n"
       
  6880     "		{ 1 } };\n"
       
  6881     "TEMP R0;\n"
       
  6882     "TEMP R1;\n"
       
  6883     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6884     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6885     "ADD R0.xyz, R0, c[3];\n"
       
  6886     "RCP R0.z, R0.z;\n"
       
  6887     "MUL R0.zw, R0.xyxy, R0.z;\n"
       
  6888     "MUL R0.zw, R0, c[0].xyxy;\n"
       
  6889     "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
       
  6890     "ADD R0.xy, fragment.position, c[5];\n"
       
  6891     "MUL R0.xy, R0, c[4];\n"
       
  6892     "TEX R0, R0, texture[0], 2D;\n"
       
  6893     "DP4 R1.y, R0, c[6];\n"
       
  6894     "ADD R1.x, -R1, c[7];\n"
       
  6895     "MUL R0, fragment.color.primary, R1.x;\n"
       
  6896     "MUL result.color, R0, R1.y;\n"
       
  6897     "END\n"
       
  6898     ;
       
  6899 
       
  6900 static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK =
       
  6901     "!!ARBfp1.0\n"
       
  6902     "PARAM c[5] = { program.local[0..3],\n"
       
  6903     "		{ 1 } };\n"
       
  6904     "TEMP R0;\n"
       
  6905     "MUL R0.xyz, fragment.position.y, c[2];\n"
       
  6906     "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
       
  6907     "ADD R0.xyz, R0, c[3];\n"
       
  6908     "RCP R0.z, R0.z;\n"
       
  6909     "MUL R0.xy, R0, R0.z;\n"
       
  6910     "MUL R0.xy, R0, c[0];\n"
       
  6911     "TEX R0.x, R0, texture[0], 2D;\n"
       
  6912     "ADD R0.x, -R0, c[4];\n"
       
  6913     "MUL result.color, fragment.color.primary, R0.x;\n"
       
  6914     "END\n"
       
  6915     ;
       
  6916 
       
  6917 static const char *mask_fragment_program_sources[num_fragment_masks] = {
       
  6918     FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
       
  6919     FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA,
       
  6920 };
       
  6921 
       
  6922 static const char *painter_fragment_program_sources[num_fragment_brushes][num_fragment_composition_modes] = {
       
  6923     {
       
  6924         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
  6925         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY,
       
  6926         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN,
       
  6927         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY,
       
  6928         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN,
       
  6929         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN,
       
  6930         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE,
       
  6931         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN,
       
  6932         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT,
       
  6933         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT,
       
  6934         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE,
       
  6935         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION,
       
  6936         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
  6937         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK,
       
  6938         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK,
       
  6939         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK,
       
  6940         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK,
       
  6941         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK,
       
  6942         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK,
       
  6943         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK,
       
  6944         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
  6945         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
  6946         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
  6947         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK,
       
  6948         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK,
       
  6949         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK,
       
  6950     },
       
  6951     {
       
  6952         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
  6953         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY,
       
  6954         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN,
       
  6955         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY,
       
  6956         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN,
       
  6957         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN,
       
  6958         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE,
       
  6959         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN,
       
  6960         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT,
       
  6961         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT,
       
  6962         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE,
       
  6963         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION,
       
  6964         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
  6965         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK,
       
  6966         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK,
       
  6967         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK,
       
  6968         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK,
       
  6969         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK,
       
  6970         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK,
       
  6971         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK,
       
  6972         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
  6973         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
  6974         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
  6975         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK,
       
  6976         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK,
       
  6977         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK,
       
  6978     },
       
  6979     {
       
  6980         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
  6981         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY,
       
  6982         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN,
       
  6983         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY,
       
  6984         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN,
       
  6985         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN,
       
  6986         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE,
       
  6987         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN,
       
  6988         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT,
       
  6989         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT,
       
  6990         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE,
       
  6991         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION,
       
  6992         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
  6993         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK,
       
  6994         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK,
       
  6995         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK,
       
  6996         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK,
       
  6997         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK,
       
  6998         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK,
       
  6999         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK,
       
  7000         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
  7001         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
  7002         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
  7003         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK,
       
  7004         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK,
       
  7005         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK,
       
  7006     },
       
  7007     {
       
  7008         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
  7009         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY,
       
  7010         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN,
       
  7011         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY,
       
  7012         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN,
       
  7013         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN,
       
  7014         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE,
       
  7015         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN,
       
  7016         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT,
       
  7017         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT,
       
  7018         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE,
       
  7019         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION,
       
  7020         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
  7021         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK,
       
  7022         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK,
       
  7023         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK,
       
  7024         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK,
       
  7025         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK,
       
  7026         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK,
       
  7027         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK,
       
  7028         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
  7029         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
  7030         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
  7031         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK,
       
  7032         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK,
       
  7033         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK,
       
  7034     },
       
  7035     {
       
  7036         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
  7037         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY,
       
  7038         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN,
       
  7039         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY,
       
  7040         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN,
       
  7041         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN,
       
  7042         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE,
       
  7043         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN,
       
  7044         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT,
       
  7045         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT,
       
  7046         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE,
       
  7047         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION,
       
  7048         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
  7049         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK,
       
  7050         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK,
       
  7051         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK,
       
  7052         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK,
       
  7053         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK,
       
  7054         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK,
       
  7055         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK,
       
  7056         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
  7057         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
  7058         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
  7059         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK,
       
  7060         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK,
       
  7061         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK,
       
  7062     },
       
  7063     {
       
  7064         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
       
  7065         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY,
       
  7066         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN,
       
  7067         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY,
       
  7068         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN,
       
  7069         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN,
       
  7070         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE,
       
  7071         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN,
       
  7072         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT,
       
  7073         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT,
       
  7074         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE,
       
  7075         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION,
       
  7076         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
       
  7077         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK,
       
  7078         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK,
       
  7079         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK,
       
  7080         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK,
       
  7081         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK,
       
  7082         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK,
       
  7083         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK,
       
  7084         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK,
       
  7085         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
       
  7086         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK,
       
  7087         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK,
       
  7088         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK,
       
  7089         FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK,
       
  7090     },
       
  7091 };
       
  7092 
       
  7093 static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = {
       
  7094     {
       
  7095         { -1, -1, -1, 2, -1, 0, 5, -1, 1, 3, 1, 0, -1, 4, -1, -1, -1, -1, -1, },
       
  7096         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7097         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7098         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7099         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7100         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7101         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7102         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7103         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7104         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7105         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7106         { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
       
  7107         { -1, -1, -1, -1, -1, 0, -1, -1, 1, 2, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7108         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7109         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7110         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7111         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7112         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7113         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7114         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7115         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7116         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7117         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7118         { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
       
  7119         { -1, -1, -1, 0, -1, -1, 2, -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, -1, -1, },
       
  7120         { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
       
  7121     },
       
  7122     {
       
  7123         { -1, -1, 3, 7, 4, 5, 10, -1, 6, 8, 1, 0, 2, 9, -1, 1, 0, 2, -1, },
       
  7124         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7125         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7126         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7127         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7128         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7129         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7130         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7131         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7132         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7133         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7134         { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
       
  7135         { -1, -1, 3, -1, 4, 5, -1, -1, 6, 7, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7136         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7137         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7138         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7139         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7140         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7141         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7142         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7143         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7144         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7145         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7146         { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
       
  7147         { -1, -1, 3, 5, 4, -1, 7, -1, -1, -1, 0, -1, 1, 6, -1, 1, 0, 2, -1, },
       
  7148         { -1, -1, 3, -1, 4, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, 0, 2, -1, },
       
  7149     },
       
  7150     {
       
  7151         { -1, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, 0, },
       
  7152         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7153         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7154         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7155         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7156         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7157         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7158         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7159         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7160         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7161         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7162         { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
       
  7163         { -1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7164         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7165         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7166         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7167         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7168         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7169         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7170         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7171         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7172         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7173         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7174         { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
       
  7175         { -1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, 0, },
       
  7176         { -1, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, 0, },
       
  7177     },
       
  7178     {
       
  7179         { -1, 0, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, -1, },
       
  7180         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7181         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7182         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7183         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7184         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7185         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7186         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7187         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7188         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7189         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7190         { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
       
  7191         { -1, 0, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7192         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7193         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7194         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7195         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7196         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7197         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7198         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7199         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7200         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7201         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7202         { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
       
  7203         { -1, 0, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, -1, },
       
  7204         { -1, 0, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, -1, },
       
  7205     },
       
  7206     {
       
  7207         { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, },
       
  7208         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7209         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7210         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7211         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7212         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7213         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7214         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7215         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7216         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7217         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7218         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7219         { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7220         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7221         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7222         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7223         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7224         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7225         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7226         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7227         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7228         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7229         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7230         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7231         { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, },
       
  7232         { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, },
       
  7233     },
       
  7234     {
       
  7235         { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, },
       
  7236         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7237         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7238         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7239         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7240         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7241         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7242         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7243         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7244         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7245         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7246         { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
       
  7247         { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7248         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7249         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7250         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7251         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7252         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7253         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7254         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7255         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7256         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7257         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7258         { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
       
  7259         { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, },
       
  7260         { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, },
       
  7261     },
       
  7262 };
       
  7263 
       
  7264 static int mask_variable_locations[num_fragment_masks][num_fragment_variables] = {
       
  7265     { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
       
  7266     { -1, -1, 1, -1, 2, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, },
       
  7267 };
       
  7268 
       
  7269 #endif