source: trunk/src/opengl/util/fragmentprograms_p.h@ 591

Last change on this file since 591 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

File size: 240.8 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtOpenGL module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
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** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
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
56enum 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
78enum 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
87enum 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
116enum FragmentMaskType {
117 FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
118 FRAGMENT_PROGRAM_MASK_ELLIPSE_AA
119};
120
121static const unsigned int num_fragment_variables = 19;
122
123static const unsigned int num_fragment_brushes = 6;
124static const unsigned int num_fragment_composition_modes = 26;
125static const unsigned int num_fragment_masks = 2;
126
127static 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
190static 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
231static 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
264static 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
289static 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
308static 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
346static 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
373static 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
400static 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
440static 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
481static 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
519static 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, 4 },\n"
523 " { 16, 12, 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.x, R1.x;\n"
534 "MUL R2.xyz, R0, R1.x;\n"
535 "MAD R1.xyz, R2, c[5].x, -c[5].y;\n"
536 "MAD R3.xyz, R2, R1, c[5].z;\n"
537 "MAD R1.xyz, fragment.color.primary, c[4].y, -fragment.color.primary.w;\n"
538 "MUL R4.xyz, R0.w, R1;\n"
539 "MUL R5.xyz, R4, R3;\n"
540 "RSQ R1.w, R2.x;\n"
541 "RSQ R2.w, R2.z;\n"
542 "RCP R3.x, R1.w;\n"
543 "RSQ R1.w, R2.y;\n"
544 "MUL R5.xyz, R2, R5;\n"
545 "RCP R3.z, R2.w;\n"
546 "RCP R3.y, R1.w;\n"
547 "ADD R3.xyz, -R2, R3;\n"
548 "MUL R3.xyz, R4, R3;\n"
549 "ADD R2.xyz, -R2, c[4].x;\n"
550 "MAD R1.xyz, R1, R2, fragment.color.primary.w;\n"
551 "MUL R2.xyz, fragment.color.primary, c[4].y;\n"
552 "MAD R4.xyz, fragment.color.primary.w, R0, R5;\n"
553 "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n"
554 "ADD R5.xyz, R3, -R4;\n"
555 "MUL R3.xyz, R0, c[4].w;\n"
556 "SGE R3.xyz, R3, R0.w;\n"
557 "MAD R3.xyz, R3, R5, R4;\n"
558 "MAD R3.xyz, -R0, R1, R3;\n"
559 "MUL R1.xyz, R0, R1;\n"
560 "SGE R2.xyz, R2, fragment.color.primary.w;\n"
561 "MAD R2.xyz, R2, R3, R1;\n"
562 "ADD R1.x, -R0.w, c[4];\n"
563 "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n"
564 "ADD R1.x, -fragment.color.primary.w, c[4];\n"
565 "MAD R2.xyz, R0, R1.x, R2;\n"
566 "ADD R1.z, fragment.color.primary.w, R0.w;\n"
567 "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
568 "ADD R1.xy, fragment.position, c[2];\n"
569 "MUL R1.xy, R1, c[0];\n"
570 "TEX R1, R1, texture[1], 2D;\n"
571 "ADD R2, R2, -R0;\n"
572 "DP4 R1.x, R1, c[3];\n"
573 "MAD result.color, R1.x, R2, R0;\n"
574 "END\n"
575 ;
576
577static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE =
578 "!!ARBfp1.0\n"
579 "PARAM c[5] = { program.local[0..3],\n"
580 " { 2 } };\n"
581 "TEMP R0;\n"
582 "TEMP R1;\n"
583 "TEMP R2;\n"
584 "TEMP R3;\n"
585 "MUL R0.xy, fragment.position, c[1];\n"
586 "TEX R0, R0, texture[0], 2D;\n"
587 "ADD R1.xyz, fragment.color.primary, R0;\n"
588 "MUL R3.xyz, fragment.color.primary.w, R0;\n"
589 "MUL R2.xyz, fragment.color.primary, R0.w;\n"
590 "MIN R2.xyz, R2, R3;\n"
591 "MAD R2.xyz, -R2, c[4].x, R1;\n"
592 "ADD R1.z, fragment.color.primary.w, R0.w;\n"
593 "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
594 "ADD R1.xy, fragment.position, c[2];\n"
595 "MUL R1.xy, R1, c[0];\n"
596 "TEX R1, R1, texture[1], 2D;\n"
597 "ADD R2, R2, -R0;\n"
598 "DP4 R1.x, R1, c[3];\n"
599 "MAD result.color, R1.x, R2, R0;\n"
600 "END\n"
601 ;
602
603static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION =
604 "!!ARBfp1.0\n"
605 "PARAM c[5] = { program.local[0..3],\n"
606 " { 2, 1 } };\n"
607 "TEMP R0;\n"
608 "TEMP R1;\n"
609 "TEMP R2;\n"
610 "MUL R0.xy, fragment.position, c[1];\n"
611 "TEX R0, R0, texture[0], 2D;\n"
612 "MUL R1.xyz, fragment.color.primary.w, R0;\n"
613 "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
614 "MUL R1.xyz, fragment.color.primary, R0;\n"
615 "MAD R1.xyz, -R1, c[4].x, R2;\n"
616 "ADD R1.w, -R0, c[4].y;\n"
617 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
618 "ADD R1.w, -fragment.color.primary, c[4].y;\n"
619 "MAD R2.xyz, R0, R1.w, R1;\n"
620 "ADD R1.z, fragment.color.primary.w, R0.w;\n"
621 "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
622 "ADD R1.xy, fragment.position, c[2];\n"
623 "MUL R1.xy, R1, c[0];\n"
624 "TEX R1, R1, texture[1], 2D;\n"
625 "ADD R2, R2, -R0;\n"
626 "DP4 R1.x, R1, c[3];\n"
627 "MAD result.color, R1.x, R2, R0;\n"
628 "END\n"
629 ;
630
631static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
632 "!!ARBfp1.0\n"
633 "PARAM c[4] = { program.local[0..2],\n"
634 " { 1 } };\n"
635 "TEMP R0;\n"
636 "TEMP R1;\n"
637 "TEMP R2;\n"
638 "MUL R0.xy, fragment.position, c[2];\n"
639 "TEX R0, R0, texture[0], 2D;\n"
640 "MUL R1.xyz, R0, c[0].y;\n"
641 "MUL R2.xyz, fragment.color.primary.w, R1;\n"
642 "MUL R1.xyz, fragment.color.primary, c[0].x;\n"
643 "MAD R2.xyz, R0.w, R1, R2;\n"
644 "MUL R0.xyz, R0, c[1].z;\n"
645 "ADD R1.w, -R0, c[3].x;\n"
646 "MUL R1.xyz, fragment.color.primary, c[1].y;\n"
647 "MAD R1.xyz, R1.w, R1, R2;\n"
648 "ADD R2.x, -fragment.color.primary.w, c[3];\n"
649 "MAD result.color.xyz, R2.x, R0, R1;\n"
650 "MUL R0.x, fragment.color.primary.w, R0.w;\n"
651 "MUL R0.z, R0.w, R2.x;\n"
652 "MUL R0.y, fragment.color.primary.w, R1.w;\n"
653 "DP3 result.color.w, R0, c[1];\n"
654 "END\n"
655 ;
656
657static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK =
658 "!!ARBfp1.0\n"
659 "PARAM c[2] = { program.local[0],\n"
660 " { 1 } };\n"
661 "TEMP R0;\n"
662 "TEMP R1;\n"
663 "TEMP R2;\n"
664 "MUL R0.xy, fragment.position, c[0];\n"
665 "TEX R0, R0, texture[0], 2D;\n"
666 "ADD R1.x, -R0.w, c[1];\n"
667 "MUL R1.xyz, fragment.color.primary, R1.x;\n"
668 "ADD R1.w, fragment.color.primary, R0;\n"
669 "MAD R1.xyz, fragment.color.primary, R0, R1;\n"
670 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
671 "MAD result.color.xyz, R0, R2.x, R1;\n"
672 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
673 "END\n"
674 ;
675
676static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK =
677 "!!ARBfp1.0\n"
678 "PARAM c[1] = { program.local[0] };\n"
679 "TEMP R0;\n"
680 "TEMP R1;\n"
681 "MUL R0.xy, fragment.position, c[0];\n"
682 "TEX R0, R0, texture[0], 2D;\n"
683 "ADD R1, fragment.color.primary, R0;\n"
684 "MAD result.color, -fragment.color.primary, R0, R1;\n"
685 "END\n"
686 ;
687
688static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK =
689 "!!ARBfp1.0\n"
690 "PARAM c[2] = { program.local[0],\n"
691 " { 2, 1 } };\n"
692 "TEMP R0;\n"
693 "TEMP R1;\n"
694 "TEMP R2;\n"
695 "TEMP R3;\n"
696 "MUL R0.xy, fragment.position, c[0];\n"
697 "TEX R0, R0, texture[0], 2D;\n"
698 "ADD R1.w, -R0, c[1].y;\n"
699 "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
700 "ADD R1.xyz, R0.w, -R0;\n"
701 "MUL R1.xyz, R1, R2;\n"
702 "MUL R1.xyz, R1, c[1].x;\n"
703 "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n"
704 "MUL R3.xyz, fragment.color.primary, R1.w;\n"
705 "MUL R2.xyz, fragment.color.primary, R0;\n"
706 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
707 "ADD R1.w, -fragment.color.primary, c[1].y;\n"
708 "MAD R2.xyz, R2, c[1].x, R3;\n"
709 "MAD R2.xyz, R0, R1.w, R2;\n"
710 "MAD R1.xyz, R0, R1.w, R1;\n"
711 "MUL R0.xyz, R0, c[1].x;\n"
712 "ADD R1.w, fragment.color.primary, R0;\n"
713 "ADD R1.xyz, R1, -R2;\n"
714 "SGE R0.xyz, R0, R0.w;\n"
715 "MAD result.color.xyz, R0, R1, R2;\n"
716 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
717 "END\n"
718 ;
719
720static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK =
721 "!!ARBfp1.0\n"
722 "PARAM c[2] = { program.local[0],\n"
723 " { 1 } };\n"
724 "TEMP R0;\n"
725 "TEMP R1;\n"
726 "TEMP R2;\n"
727 "MUL R0.xy, fragment.position, c[0];\n"
728 "TEX R0, R0, texture[0], 2D;\n"
729 "MUL R2.xyz, fragment.color.primary.w, R0;\n"
730 "MUL R1.xyz, fragment.color.primary, R0.w;\n"
731 "MIN R1.xyz, R1, R2;\n"
732 "ADD R1.w, -R0, c[1].x;\n"
733 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
734 "ADD R1.w, fragment.color.primary, R0;\n"
735 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
736 "MAD result.color.xyz, R0, R2.x, R1;\n"
737 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
738 "END\n"
739 ;
740
741static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK =
742 "!!ARBfp1.0\n"
743 "PARAM c[2] = { program.local[0],\n"
744 " { 1 } };\n"
745 "TEMP R0;\n"
746 "TEMP R1;\n"
747 "TEMP R2;\n"
748 "MUL R0.xy, fragment.position, c[0];\n"
749 "TEX R0, R0, texture[0], 2D;\n"
750 "MUL R2.xyz, fragment.color.primary.w, R0;\n"
751 "MUL R1.xyz, fragment.color.primary, R0.w;\n"
752 "MAX R1.xyz, R1, R2;\n"
753 "ADD R1.w, -R0, c[1].x;\n"
754 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
755 "ADD R1.w, fragment.color.primary, R0;\n"
756 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
757 "MAD result.color.xyz, R0, R2.x, R1;\n"
758 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
759 "END\n"
760 ;
761
762static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK =
763 "!!ARBfp1.0\n"
764 "PARAM c[2] = { program.local[0],\n"
765 " { 1, 1e-006 } };\n"
766 "TEMP R0;\n"
767 "TEMP R1;\n"
768 "TEMP R2;\n"
769 "MAX R1.y, fragment.color.primary.w, c[1];\n"
770 "RCP R2.x, R1.y;\n"
771 "MUL R0.xy, fragment.position, c[0];\n"
772 "TEX R0, R0, texture[0], 2D;\n"
773 "ADD R1.x, -fragment.color.primary.w, c[1];\n"
774 "MUL R1.xyz, R0, R1.x;\n"
775 "ADD R1.w, -R0, c[1].x;\n"
776 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
777 "MAD R2.xyz, -fragment.color.primary, R2.x, c[1].x;\n"
778 "MAX R2.xyz, R2, c[1].y;\n"
779 "MUL R0.xyz, fragment.color.primary.w, R0;\n"
780 "MUL R1.w, fragment.color.primary, R0;\n"
781 "RCP R2.x, R2.x;\n"
782 "RCP R2.y, R2.y;\n"
783 "RCP R2.z, R2.z;\n"
784 "MAD R2.xyz, R0, R2, R1;\n"
785 "MAD R1.xyz, fragment.color.primary.w, R0.w, R1;\n"
786 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
787 "SGE R0.xyz, R0, R1.w;\n"
788 "ADD R1.xyz, R1, -R2;\n"
789 "ADD R1.w, fragment.color.primary, R0;\n"
790 "MAD result.color.xyz, R0, R1, R2;\n"
791 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
792 "END\n"
793 ;
794
795static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK =
796 "!!ARBfp1.0\n"
797 "PARAM c[2] = { program.local[0],\n"
798 " { 1, 9.9999997e-006 } };\n"
799 "TEMP R0;\n"
800 "TEMP R1;\n"
801 "TEMP R2;\n"
802 "TEMP R3;\n"
803 "TEMP R4;\n"
804 "MUL R0.xy, fragment.position, c[0];\n"
805 "TEX R0, R0, texture[0], 2D;\n"
806 "MUL R1.xyz, fragment.color.primary.w, R0;\n"
807 "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
808 "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
809 "MUL R3.xyz, fragment.color.primary.w, R1;\n"
810 "MAX R1.xyz, fragment.color.primary, c[1].y;\n"
811 "ADD R1.w, -R0, c[1].x;\n"
812 "MUL R4.xyz, fragment.color.primary, R1.w;\n"
813 "ADD R2.w, -fragment.color.primary, c[1].x;\n"
814 "RCP R1.x, R1.x;\n"
815 "RCP R1.y, R1.y;\n"
816 "RCP R1.z, R1.z;\n"
817 "MAD R1.xyz, R3, R1, R4;\n"
818 "MUL R3.xyz, R0, R2.w;\n"
819 "MAD R0.xyz, R0, R2.w, R1;\n"
820 "MAD R1.xyz, fragment.color.primary, R1.w, R3;\n"
821 "MUL R1.w, fragment.color.primary, R0;\n"
822 "SGE R2.xyz, R2, R1.w;\n"
823 "ADD R0.xyz, R0, -R1;\n"
824 "ADD R1.w, fragment.color.primary, R0;\n"
825 "MAD result.color.xyz, R2, R0, R1;\n"
826 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
827 "END\n"
828 ;
829
830static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK =
831 "!!ARBfp1.0\n"
832 "PARAM c[2] = { program.local[0],\n"
833 " { 2, 1 } };\n"
834 "TEMP R0;\n"
835 "TEMP R1;\n"
836 "TEMP R2;\n"
837 "TEMP R3;\n"
838 "MUL R0.xy, fragment.position, c[0];\n"
839 "TEX R0, R0, texture[0], 2D;\n"
840 "ADD R1.w, -R0, c[1].y;\n"
841 "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
842 "ADD R1.xyz, R0.w, -R0;\n"
843 "MUL R1.xyz, R1, R2;\n"
844 "MUL R1.xyz, R1, c[1].x;\n"
845 "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n"
846 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
847 "MUL R3.xyz, fragment.color.primary, R1.w;\n"
848 "MUL R2.xyz, fragment.color.primary, R0;\n"
849 "ADD R1.w, -fragment.color.primary, c[1].y;\n"
850 "MAD R2.xyz, R2, c[1].x, R3;\n"
851 "MAD R2.xyz, R0, R1.w, R2;\n"
852 "MAD R0.xyz, R0, R1.w, R1;\n"
853 "ADD R1.xyz, R0, -R2;\n"
854 "MUL R0.xyz, fragment.color.primary, c[1].x;\n"
855 "ADD R1.w, fragment.color.primary, R0;\n"
856 "SGE R0.xyz, R0, fragment.color.primary.w;\n"
857 "MAD result.color.xyz, R0, R1, R2;\n"
858 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
859 "END\n"
860 ;
861
862static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
863 "!!ARBfp1.0\n"
864 "PARAM c[3] = { program.local[0],\n"
865 " { 1, 2, 9.9999997e-006, 4 },\n"
866 " { 16, 12, 3 } };\n"
867 "TEMP R0;\n"
868 "TEMP R1;\n"
869 "TEMP R2;\n"
870 "TEMP R3;\n"
871 "TEMP R4;\n"
872 "TEMP R5;\n"
873 "MUL R0.xy, fragment.position, c[0];\n"
874 "TEX R0, R0, texture[0], 2D;\n"
875 "MAX R1.x, R0.w, c[1].z;\n"
876 "RCP R1.x, R1.x;\n"
877 "MUL R2.xyz, R0, R1.x;\n"
878 "MAD R1.xyz, R2, c[2].x, -c[2].y;\n"
879 "MAD R3.xyz, R2, R1, c[2].z;\n"
880 "MAD R1.xyz, fragment.color.primary, c[1].y, -fragment.color.primary.w;\n"
881 "MUL R4.xyz, R0.w, R1;\n"
882 "MUL R5.xyz, R4, R3;\n"
883 "RSQ R1.w, R2.x;\n"
884 "RCP R3.x, R1.w;\n"
885 "RSQ R2.w, R2.z;\n"
886 "RSQ R1.w, R2.y;\n"
887 "MUL R5.xyz, R2, R5;\n"
888 "RCP R3.z, R2.w;\n"
889 "RCP R3.y, R1.w;\n"
890 "ADD R3.xyz, -R2, R3;\n"
891 "MUL R3.xyz, R4, R3;\n"
892 "ADD R2.xyz, -R2, c[1].x;\n"
893 "MAD R1.xyz, R1, R2, fragment.color.primary.w;\n"
894 "MUL R2.xyz, fragment.color.primary, c[1].y;\n"
895 "MAD R4.xyz, fragment.color.primary.w, R0, R5;\n"
896 "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n"
897 "ADD R5.xyz, R3, -R4;\n"
898 "MUL R3.xyz, R0, c[1].w;\n"
899 "SGE R3.xyz, R3, R0.w;\n"
900 "MAD R3.xyz, R3, R5, R4;\n"
901 "MAD R3.xyz, -R0, R1, R3;\n"
902 "MUL R1.xyz, R0, R1;\n"
903 "SGE R2.xyz, R2, fragment.color.primary.w;\n"
904 "MAD R2.xyz, R2, R3, R1;\n"
905 "ADD R1.x, -R0.w, c[1];\n"
906 "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n"
907 "ADD R1.x, fragment.color.primary.w, R0.w;\n"
908 "ADD R1.y, -fragment.color.primary.w, c[1].x;\n"
909 "MAD result.color.xyz, R0, R1.y, R2;\n"
910 "MAD result.color.w, -fragment.color.primary, R0, R1.x;\n"
911 "END\n"
912 ;
913
914static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK =
915 "!!ARBfp1.0\n"
916 "PARAM c[2] = { program.local[0],\n"
917 " { 2 } };\n"
918 "TEMP R0;\n"
919 "TEMP R1;\n"
920 "TEMP R2;\n"
921 "MUL R0.xy, fragment.position, c[0];\n"
922 "TEX R0, R0, texture[0], 2D;\n"
923 "MUL R2.xyz, fragment.color.primary.w, R0;\n"
924 "MUL R1.xyz, fragment.color.primary, R0.w;\n"
925 "ADD R1.w, fragment.color.primary, R0;\n"
926 "MIN R1.xyz, R1, R2;\n"
927 "ADD R0.xyz, fragment.color.primary, R0;\n"
928 "MAD result.color.xyz, -R1, c[1].x, R0;\n"
929 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
930 "END\n"
931 ;
932
933static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK =
934 "!!ARBfp1.0\n"
935 "PARAM c[2] = { program.local[0],\n"
936 " { 2, 1 } };\n"
937 "TEMP R0;\n"
938 "TEMP R1;\n"
939 "TEMP R2;\n"
940 "MUL R0.xy, fragment.position, c[0];\n"
941 "TEX R0, R0, texture[0], 2D;\n"
942 "MUL R1.xyz, fragment.color.primary.w, R0;\n"
943 "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
944 "MUL R1.xyz, fragment.color.primary, R0;\n"
945 "MAD R1.xyz, -R1, c[1].x, R2;\n"
946 "ADD R1.w, -R0, c[1].y;\n"
947 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
948 "ADD R1.w, fragment.color.primary, R0;\n"
949 "ADD R2.x, -fragment.color.primary.w, c[1].y;\n"
950 "MAD result.color.xyz, R0, R2.x, R1;\n"
951 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
952 "END\n"
953 ;
954
955static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK =
956 "!!ARBfp1.0\n"
957 "PARAM c[3] = { program.local[0..2] };\n"
958 "TEMP R0;\n"
959 "ADD R0.xy, fragment.position, c[1];\n"
960 "MUL R0.xy, R0, c[0];\n"
961 "TEX R0, R0, texture[0], 2D;\n"
962 "DP4 R0.x, R0, c[2];\n"
963 "MUL result.color, fragment.color.primary, R0.x;\n"
964 "END\n"
965 ;
966
967static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK =
968 "!!ARBfp1.0\n"
969 "MOV result.color, fragment.color.primary;\n"
970 "END\n"
971 ;
972
973static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
974 "!!ARBfp1.0\n"
975 "PARAM c[12] = { program.local[0..10],\n"
976 " { 2, 4, 1 } };\n"
977 "TEMP R0;\n"
978 "TEMP R1;\n"
979 "TEMP R2;\n"
980 "TEMP R3;\n"
981 "MUL R0.xyz, fragment.position.y, c[3];\n"
982 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
983 "ADD R0.xyz, R0, c[4];\n"
984 "RCP R0.z, R0.z;\n"
985 "MUL R0.xy, R0, R0.z;\n"
986 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
987 "ADD R0.z, R0, R0.w;\n"
988 "MUL R0.xy, R0, c[0];\n"
989 "ADD R0.x, R0, R0.y;\n"
990 "MUL R0.z, -R0, c[1].x;\n"
991 "MUL R0.y, R0.x, c[11].x;\n"
992 "MUL R0.z, R0, c[11].y;\n"
993 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
994 "RSQ R0.x, R0.x;\n"
995 "RCP R0.z, R0.x;\n"
996 "ADD R1.x, -R0.y, R0.z;\n"
997 "MOV R0.x, c[11];\n"
998 "MUL R0.z, R0.x, c[1].x;\n"
999 "RCP R1.y, R0.z;\n"
1000 "MUL R0.xy, fragment.position, c[8];\n"
1001 "TEX R0, R0, texture[0], 2D;\n"
1002 "MUL R1.x, R1, R1.y;\n"
1003 "TEX R1, R1, texture[2], 1D;\n"
1004 "MUL R2.xyz, R0, c[5].y;\n"
1005 "MUL R3.xyz, R1.w, R2;\n"
1006 "MUL R2.xyz, R1, c[5].x;\n"
1007 "MAD R2.xyz, R0.w, R2, R3;\n"
1008 "ADD R3.xy, fragment.position, c[9];\n"
1009 "ADD R2.w, -R0, c[11].z;\n"
1010 "MUL R1.xyz, R1, c[6].y;\n"
1011 "MAD R2.xyz, R2.w, R1, R2;\n"
1012 "MUL R1.xyz, R0, c[6].z;\n"
1013 "ADD R3.z, -R1.w, c[11];\n"
1014 "MAD R2.xyz, R3.z, R1, R2;\n"
1015 "MUL R1.y, R1.w, R2.w;\n"
1016 "MUL R1.x, R1.w, R0.w;\n"
1017 "MUL R1.z, R0.w, R3;\n"
1018 "DP3 R2.w, R1, c[6];\n"
1019 "MUL R3.xy, R3, c[7];\n"
1020 "TEX R1, R3, texture[1], 2D;\n"
1021 "ADD R2, R2, -R0;\n"
1022 "DP4 R1.x, R1, c[10];\n"
1023 "MAD result.color, R1.x, R2, R0;\n"
1024 "END\n"
1025 ;
1026
1027static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY =
1028 "!!ARBfp1.0\n"
1029 "PARAM c[10] = { program.local[0..8],\n"
1030 " { 2, 4, 1 } };\n"
1031 "TEMP R0;\n"
1032 "TEMP R1;\n"
1033 "TEMP R2;\n"
1034 "MUL R0.xyz, fragment.position.y, c[3];\n"
1035 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1036 "ADD R0.xyz, R0, c[4];\n"
1037 "RCP R0.z, R0.z;\n"
1038 "MUL R0.xy, R0, R0.z;\n"
1039 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1040 "ADD R0.z, R0, R0.w;\n"
1041 "MUL R0.xy, R0, c[0];\n"
1042 "ADD R0.x, R0, R0.y;\n"
1043 "MUL R0.z, -R0, c[1].x;\n"
1044 "MUL R0.y, R0.x, c[9].x;\n"
1045 "MUL R0.z, R0, c[9].y;\n"
1046 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1047 "RSQ R0.x, R0.x;\n"
1048 "RCP R0.z, R0.x;\n"
1049 "ADD R1.x, -R0.y, R0.z;\n"
1050 "MOV R0.x, c[9];\n"
1051 "MUL R0.z, R0.x, c[1].x;\n"
1052 "RCP R1.y, R0.z;\n"
1053 "MUL R0.xy, fragment.position, c[6];\n"
1054 "TEX R0, R0, texture[0], 2D;\n"
1055 "MUL R1.x, R1, R1.y;\n"
1056 "TEX R1, R1, texture[2], 1D;\n"
1057 "ADD R2.x, -R0.w, c[9].z;\n"
1058 "MUL R2.xyz, R1, R2.x;\n"
1059 "MAD R1.xyz, R1, R0, R2;\n"
1060 "ADD R2.x, -R1.w, c[9].z;\n"
1061 "MAD R2.xyz, R0, R2.x, R1;\n"
1062 "ADD R1.z, R1.w, R0.w;\n"
1063 "MAD R2.w, -R1, R0, R1.z;\n"
1064 "ADD R1.xy, fragment.position, c[7];\n"
1065 "MUL R1.xy, R1, c[5];\n"
1066 "TEX R1, R1, texture[1], 2D;\n"
1067 "ADD R2, R2, -R0;\n"
1068 "DP4 R1.x, R1, c[8];\n"
1069 "MAD result.color, R1.x, R2, R0;\n"
1070 "END\n"
1071 ;
1072
1073static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN =
1074 "!!ARBfp1.0\n"
1075 "PARAM c[10] = { program.local[0..8],\n"
1076 " { 2, 4 } };\n"
1077 "TEMP R0;\n"
1078 "TEMP R1;\n"
1079 "TEMP R2;\n"
1080 "TEMP R3;\n"
1081 "MUL R0.xyz, fragment.position.y, c[3];\n"
1082 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1083 "ADD R0.xyz, R0, c[4];\n"
1084 "RCP R0.z, R0.z;\n"
1085 "MUL R0.xy, R0, R0.z;\n"
1086 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1087 "ADD R0.z, R0, R0.w;\n"
1088 "MUL R0.xy, R0, c[0];\n"
1089 "ADD R0.x, R0, R0.y;\n"
1090 "MUL R0.y, R0.x, c[9].x;\n"
1091 "MOV R0.x, c[9];\n"
1092 "MUL R0.z, -R0, c[1].x;\n"
1093 "MUL R0.z, R0, c[9].y;\n"
1094 "MAD R0.z, R0.y, R0.y, -R0;\n"
1095 "ADD R3.xy, fragment.position, c[7];\n"
1096 "MUL R0.w, R0.x, c[1].x;\n"
1097 "RSQ R0.z, R0.z;\n"
1098 "RCP R0.x, R0.z;\n"
1099 "RCP R0.z, R0.w;\n"
1100 "ADD R0.x, -R0.y, R0;\n"
1101 "MUL R0.z, R0.x, R0;\n"
1102 "TEX R1, R0.z, texture[2], 1D;\n"
1103 "MUL R0.xy, fragment.position, c[6];\n"
1104 "TEX R0, R0, texture[0], 2D;\n"
1105 "ADD R2, R1, R0;\n"
1106 "MAD R2, -R1, R0, R2;\n"
1107 "MUL R3.xy, R3, c[5];\n"
1108 "TEX R1, R3, texture[1], 2D;\n"
1109 "ADD R2, R2, -R0;\n"
1110 "DP4 R1.x, R1, c[8];\n"
1111 "MAD result.color, R1.x, R2, R0;\n"
1112 "END\n"
1113 ;
1114
1115static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY =
1116 "!!ARBfp1.0\n"
1117 "PARAM c[10] = { program.local[0..8],\n"
1118 " { 2, 4, 1 } };\n"
1119 "TEMP R0;\n"
1120 "TEMP R1;\n"
1121 "TEMP R2;\n"
1122 "TEMP R3;\n"
1123 "TEMP R4;\n"
1124 "MUL R0.xyz, fragment.position.y, c[3];\n"
1125 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1126 "ADD R0.xyz, R0, c[4];\n"
1127 "RCP R0.z, R0.z;\n"
1128 "MUL R0.xy, R0, R0.z;\n"
1129 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1130 "ADD R0.z, R0, R0.w;\n"
1131 "MUL R0.xy, R0, c[0];\n"
1132 "ADD R0.x, R0, R0.y;\n"
1133 "MUL R0.y, R0.x, c[9].x;\n"
1134 "MOV R0.x, c[9];\n"
1135 "MUL R0.z, -R0, c[1].x;\n"
1136 "MUL R0.z, R0, c[9].y;\n"
1137 "MAD R0.z, R0.y, R0.y, -R0;\n"
1138 "MUL R1.xy, fragment.position, c[6];\n"
1139 "TEX R1, R1, texture[0], 2D;\n"
1140 "MUL R0.w, R0.x, c[1].x;\n"
1141 "RSQ R0.z, R0.z;\n"
1142 "RCP R0.x, R0.z;\n"
1143 "ADD R2.w, -R1, c[9].z;\n"
1144 "RCP R0.z, R0.w;\n"
1145 "ADD R0.x, -R0.y, R0;\n"
1146 "MUL R0.x, R0, R0.z;\n"
1147 "TEX R0, R0, texture[2], 1D;\n"
1148 "ADD R3.xyz, R0.w, -R0;\n"
1149 "ADD R2.xyz, R1.w, -R1;\n"
1150 "MUL R2.xyz, R2, R3;\n"
1151 "MUL R2.xyz, R2, c[9].x;\n"
1152 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
1153 "MUL R4.xyz, R0, R2.w;\n"
1154 "MUL R3.xyz, R0, R1;\n"
1155 "MAD R0.xyz, R0, R2.w, R2;\n"
1156 "ADD R2.x, -R0.w, c[9].z;\n"
1157 "MAD R3.xyz, R3, c[9].x, R4;\n"
1158 "MAD R3.xyz, R1, R2.x, R3;\n"
1159 "MAD R0.xyz, R1, R2.x, R0;\n"
1160 "MUL R2.xyz, R1, c[9].x;\n"
1161 "ADD R0.xyz, R0, -R3;\n"
1162 "SGE R2.xyz, R2, R1.w;\n"
1163 "MAD R2.xyz, R2, R0, R3;\n"
1164 "ADD R0.z, R0.w, R1.w;\n"
1165 "MAD R2.w, -R0, R1, R0.z;\n"
1166 "ADD R0.xy, fragment.position, c[7];\n"
1167 "MUL R0.xy, R0, c[5];\n"
1168 "TEX R0, R0, texture[1], 2D;\n"
1169 "ADD R2, R2, -R1;\n"
1170 "DP4 R0.x, R0, c[8];\n"
1171 "MAD result.color, R0.x, R2, R1;\n"
1172 "END\n"
1173 ;
1174
1175static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN =
1176 "!!ARBfp1.0\n"
1177 "PARAM c[10] = { program.local[0..8],\n"
1178 " { 2, 4, 1 } };\n"
1179 "TEMP R0;\n"
1180 "TEMP R1;\n"
1181 "TEMP R2;\n"
1182 "TEMP R3;\n"
1183 "MUL R0.xyz, fragment.position.y, c[3];\n"
1184 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1185 "ADD R0.xyz, R0, c[4];\n"
1186 "RCP R0.z, R0.z;\n"
1187 "MUL R0.xy, R0, R0.z;\n"
1188 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1189 "ADD R0.z, R0, R0.w;\n"
1190 "MUL R0.xy, R0, c[0];\n"
1191 "ADD R0.x, R0, R0.y;\n"
1192 "MUL R0.z, -R0, c[1].x;\n"
1193 "MUL R0.y, R0.x, c[9].x;\n"
1194 "MUL R0.z, R0, c[9].y;\n"
1195 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1196 "RSQ R0.z, R0.x;\n"
1197 "MOV R0.x, c[9];\n"
1198 "MUL R0.x, R0, c[1];\n"
1199 "RCP R0.z, R0.z;\n"
1200 "ADD R0.z, -R0.y, R0;\n"
1201 "RCP R0.w, R0.x;\n"
1202 "MUL R1.x, R0.z, R0.w;\n"
1203 "MUL R0.xy, fragment.position, c[6];\n"
1204 "TEX R0, R0, texture[0], 2D;\n"
1205 "TEX R1, R1, texture[2], 1D;\n"
1206 "MUL R3.xyz, R1.w, R0;\n"
1207 "MUL R2.xyz, R1, R0.w;\n"
1208 "MIN R2.xyz, R2, R3;\n"
1209 "ADD R2.w, -R0, c[9].z;\n"
1210 "MAD R1.xyz, R1, R2.w, R2;\n"
1211 "ADD R2.x, -R1.w, c[9].z;\n"
1212 "MAD R2.xyz, R0, R2.x, R1;\n"
1213 "ADD R1.z, R1.w, R0.w;\n"
1214 "MAD R2.w, -R1, R0, R1.z;\n"
1215 "ADD R1.xy, fragment.position, c[7];\n"
1216 "MUL R1.xy, R1, c[5];\n"
1217 "TEX R1, R1, texture[1], 2D;\n"
1218 "ADD R2, R2, -R0;\n"
1219 "DP4 R1.x, R1, c[8];\n"
1220 "MAD result.color, R1.x, R2, R0;\n"
1221 "END\n"
1222 ;
1223
1224static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN =
1225 "!!ARBfp1.0\n"
1226 "PARAM c[10] = { program.local[0..8],\n"
1227 " { 2, 4, 1 } };\n"
1228 "TEMP R0;\n"
1229 "TEMP R1;\n"
1230 "TEMP R2;\n"
1231 "TEMP R3;\n"
1232 "MUL R0.xyz, fragment.position.y, c[3];\n"
1233 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1234 "ADD R0.xyz, R0, c[4];\n"
1235 "RCP R0.z, R0.z;\n"
1236 "MUL R0.xy, R0, R0.z;\n"
1237 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1238 "ADD R0.z, R0, R0.w;\n"
1239 "MUL R0.xy, R0, c[0];\n"
1240 "ADD R0.x, R0, R0.y;\n"
1241 "MUL R0.z, -R0, c[1].x;\n"
1242 "MUL R0.y, R0.x, c[9].x;\n"
1243 "MUL R0.z, R0, c[9].y;\n"
1244 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1245 "RSQ R0.z, R0.x;\n"
1246 "MOV R0.x, c[9];\n"
1247 "MUL R0.x, R0, c[1];\n"
1248 "RCP R0.z, R0.z;\n"
1249 "ADD R0.z, -R0.y, R0;\n"
1250 "RCP R0.w, R0.x;\n"
1251 "MUL R1.x, R0.z, R0.w;\n"
1252 "MUL R0.xy, fragment.position, c[6];\n"
1253 "TEX R0, R0, texture[0], 2D;\n"
1254 "TEX R1, R1, texture[2], 1D;\n"
1255 "MUL R3.xyz, R1.w, R0;\n"
1256 "MUL R2.xyz, R1, R0.w;\n"
1257 "MAX R2.xyz, R2, R3;\n"
1258 "ADD R2.w, -R0, c[9].z;\n"
1259 "MAD R1.xyz, R1, R2.w, R2;\n"
1260 "ADD R2.x, -R1.w, c[9].z;\n"
1261 "MAD R2.xyz, R0, R2.x, R1;\n"
1262 "ADD R1.z, R1.w, R0.w;\n"
1263 "MAD R2.w, -R1, R0, R1.z;\n"
1264 "ADD R1.xy, fragment.position, c[7];\n"
1265 "MUL R1.xy, R1, c[5];\n"
1266 "TEX R1, R1, texture[1], 2D;\n"
1267 "ADD R2, R2, -R0;\n"
1268 "DP4 R1.x, R1, c[8];\n"
1269 "MAD result.color, R1.x, R2, R0;\n"
1270 "END\n"
1271 ;
1272
1273static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE =
1274 "!!ARBfp1.0\n"
1275 "PARAM c[10] = { program.local[0..8],\n"
1276 " { 2, 4, 1, 1e-006 } };\n"
1277 "TEMP R0;\n"
1278 "TEMP R1;\n"
1279 "TEMP R2;\n"
1280 "TEMP R3;\n"
1281 "TEMP R4;\n"
1282 "MUL R0.xyz, fragment.position.y, c[3];\n"
1283 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1284 "ADD R0.xyz, R0, c[4];\n"
1285 "RCP R0.z, R0.z;\n"
1286 "MUL R0.xy, R0, R0.z;\n"
1287 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1288 "ADD R0.z, R0, R0.w;\n"
1289 "MUL R0.xy, R0, c[0];\n"
1290 "ADD R0.x, R0, R0.y;\n"
1291 "MUL R0.y, R0.x, c[9].x;\n"
1292 "MOV R0.x, c[9];\n"
1293 "MUL R0.z, -R0, c[1].x;\n"
1294 "MUL R0.z, R0, c[9].y;\n"
1295 "MAD R0.z, R0.y, R0.y, -R0;\n"
1296 "MUL R0.w, R0.x, c[1].x;\n"
1297 "RSQ R0.z, R0.z;\n"
1298 "RCP R0.x, R0.z;\n"
1299 "RCP R0.z, R0.w;\n"
1300 "ADD R0.x, -R0.y, R0;\n"
1301 "MUL R0.x, R0, R0.z;\n"
1302 "TEX R0, R0, texture[2], 1D;\n"
1303 "MAX R1.x, R0.w, c[9].w;\n"
1304 "RCP R1.x, R1.x;\n"
1305 "MAD R1.xyz, -R0, R1.x, c[9].z;\n"
1306 "MAX R2.xyz, R1, c[9].w;\n"
1307 "MUL R1.xy, fragment.position, c[6];\n"
1308 "TEX R1, R1, texture[0], 2D;\n"
1309 "ADD R2.w, -R0, c[9].z;\n"
1310 "MUL R3.xyz, R1, R2.w;\n"
1311 "ADD R2.w, -R1, c[9].z;\n"
1312 "MAD R4.xyz, R0, R2.w, R3;\n"
1313 "MUL R3.xyz, R0.w, R1;\n"
1314 "MUL R2.w, R0, R1;\n"
1315 "MAD R0.xyz, R0, R1.w, R3;\n"
1316 "SGE R0.xyz, R0, R2.w;\n"
1317 "RCP R2.x, R2.x;\n"
1318 "RCP R2.y, R2.y;\n"
1319 "RCP R2.z, R2.z;\n"
1320 "MAD R2.xyz, R3, R2, R4;\n"
1321 "MAD R4.xyz, R0.w, R1.w, R4;\n"
1322 "ADD R4.xyz, R4, -R2;\n"
1323 "MAD R2.xyz, R0, R4, R2;\n"
1324 "ADD R0.z, R0.w, R1.w;\n"
1325 "MAD R2.w, -R0, R1, R0.z;\n"
1326 "ADD R0.xy, fragment.position, c[7];\n"
1327 "MUL R0.xy, R0, c[5];\n"
1328 "TEX R0, R0, texture[1], 2D;\n"
1329 "ADD R2, R2, -R1;\n"
1330 "DP4 R0.x, R0, c[8];\n"
1331 "MAD result.color, R0.x, R2, R1;\n"
1332 "END\n"
1333 ;
1334
1335static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN =
1336 "!!ARBfp1.0\n"
1337 "PARAM c[10] = { program.local[0..8],\n"
1338 " { 2, 4, 1, 9.9999997e-006 } };\n"
1339 "TEMP R0;\n"
1340 "TEMP R1;\n"
1341 "TEMP R2;\n"
1342 "TEMP R3;\n"
1343 "TEMP R4;\n"
1344 "TEMP R5;\n"
1345 "MUL R0.xyz, fragment.position.y, c[3];\n"
1346 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1347 "ADD R0.xyz, R0, c[4];\n"
1348 "RCP R0.z, R0.z;\n"
1349 "MUL R0.xy, R0, R0.z;\n"
1350 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1351 "ADD R0.z, R0, R0.w;\n"
1352 "MUL R0.xy, R0, c[0];\n"
1353 "ADD R0.x, R0, R0.y;\n"
1354 "MUL R0.z, -R0, c[1].x;\n"
1355 "MUL R0.y, R0.x, c[9].x;\n"
1356 "MUL R0.z, R0, c[9].y;\n"
1357 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1358 "RSQ R0.z, R0.x;\n"
1359 "MOV R0.x, c[9];\n"
1360 "MUL R0.w, R0.x, c[1].x;\n"
1361 "RCP R0.z, R0.z;\n"
1362 "ADD R0.x, -R0.y, R0.z;\n"
1363 "RCP R0.y, R0.w;\n"
1364 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
1365 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1366 "MUL R0.x, R0, R0.y;\n"
1367 "TEX R0, R0, texture[2], 1D;\n"
1368 "MUL R2.xyz, R0.w, R1;\n"
1369 "MAD R3.xyz, R0, R1.w, R2;\n"
1370 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
1371 "MUL R4.xyz, R0.w, R2;\n"
1372 "MAX R2.xyz, R0, c[9].w;\n"
1373 "ADD R2.w, -R1, c[9].z;\n"
1374 "MUL R5.xyz, R0, R2.w;\n"
1375 "ADD R3.w, -R0, c[9].z;\n"
1376 "RCP R2.x, R2.x;\n"
1377 "RCP R2.y, R2.y;\n"
1378 "RCP R2.z, R2.z;\n"
1379 "MAD R2.xyz, R4, R2, R5;\n"
1380 "MUL R4.xyz, R1, R3.w;\n"
1381 "MAD R0.xyz, R0, R2.w, R4;\n"
1382 "MUL R2.w, R0, R1;\n"
1383 "MAD R2.xyz, R1, R3.w, R2;\n"
1384 "ADD R2.xyz, R2, -R0;\n"
1385 "SGE R3.xyz, R3, R2.w;\n"
1386 "MAD R2.xyz, R3, R2, R0;\n"
1387 "ADD R0.z, R0.w, R1.w;\n"
1388 "MAD R2.w, -R0, R1, R0.z;\n"
1389 "ADD R0.xy, fragment.position, c[7];\n"
1390 "MUL R0.xy, R0, c[5];\n"
1391 "TEX R0, R0, texture[1], 2D;\n"
1392 "ADD R2, R2, -R1;\n"
1393 "DP4 R0.x, R0, c[8];\n"
1394 "MAD result.color, R0.x, R2, R1;\n"
1395 "END\n"
1396 ;
1397
1398static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT =
1399 "!!ARBfp1.0\n"
1400 "PARAM c[10] = { program.local[0..8],\n"
1401 " { 2, 4, 1 } };\n"
1402 "TEMP R0;\n"
1403 "TEMP R1;\n"
1404 "TEMP R2;\n"
1405 "TEMP R3;\n"
1406 "TEMP R4;\n"
1407 "MUL R0.xyz, fragment.position.y, c[3];\n"
1408 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1409 "ADD R0.xyz, R0, c[4];\n"
1410 "RCP R0.z, R0.z;\n"
1411 "MUL R0.xy, R0, R0.z;\n"
1412 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1413 "ADD R0.z, R0, R0.w;\n"
1414 "MUL R0.xy, R0, c[0];\n"
1415 "ADD R0.x, R0, R0.y;\n"
1416 "MUL R0.y, R0.x, c[9].x;\n"
1417 "MOV R0.x, c[9];\n"
1418 "MUL R0.z, -R0, c[1].x;\n"
1419 "MUL R0.z, R0, c[9].y;\n"
1420 "MAD R0.z, R0.y, R0.y, -R0;\n"
1421 "MUL R1.xy, fragment.position, c[6];\n"
1422 "TEX R1, R1, texture[0], 2D;\n"
1423 "MUL R0.w, R0.x, c[1].x;\n"
1424 "RSQ R0.z, R0.z;\n"
1425 "RCP R0.x, R0.z;\n"
1426 "ADD R2.w, -R1, c[9].z;\n"
1427 "RCP R0.z, R0.w;\n"
1428 "ADD R0.x, -R0.y, R0;\n"
1429 "MUL R0.x, R0, R0.z;\n"
1430 "TEX R0, R0, texture[2], 1D;\n"
1431 "ADD R3.xyz, R0.w, -R0;\n"
1432 "ADD R2.xyz, R1.w, -R1;\n"
1433 "MUL R2.xyz, R2, R3;\n"
1434 "MUL R2.xyz, R2, c[9].x;\n"
1435 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
1436 "MUL R4.xyz, R0, R2.w;\n"
1437 "MAD R2.xyz, R0, R2.w, R2;\n"
1438 "MUL R3.xyz, R0, R1;\n"
1439 "ADD R2.w, -R0, c[9].z;\n"
1440 "MAD R3.xyz, R3, c[9].x, R4;\n"
1441 "MUL R0.xyz, R0, c[9].x;\n"
1442 "SGE R0.xyz, R0, R0.w;\n"
1443 "MAD R3.xyz, R1, R2.w, R3;\n"
1444 "MAD R2.xyz, R1, R2.w, R2;\n"
1445 "ADD R2.xyz, R2, -R3;\n"
1446 "MAD R2.xyz, R0, R2, R3;\n"
1447 "ADD R0.z, R0.w, R1.w;\n"
1448 "MAD R2.w, -R0, R1, R0.z;\n"
1449 "ADD R0.xy, fragment.position, c[7];\n"
1450 "MUL R0.xy, R0, c[5];\n"
1451 "TEX R0, R0, texture[1], 2D;\n"
1452 "ADD R2, R2, -R1;\n"
1453 "DP4 R0.x, R0, c[8];\n"
1454 "MAD result.color, R0.x, R2, R1;\n"
1455 "END\n"
1456 ;
1457
1458static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT =
1459 "!!ARBfp1.0\n"
1460 "PARAM c[11] = { program.local[0..8],\n"
1461 " { 2, 4, 1, 9.9999997e-006 },\n"
1462 " { 16, 12, 3 } };\n"
1463 "TEMP R0;\n"
1464 "TEMP R1;\n"
1465 "TEMP R2;\n"
1466 "TEMP R3;\n"
1467 "TEMP R4;\n"
1468 "TEMP R5;\n"
1469 "TEMP R6;\n"
1470 "MUL R0.xyz, fragment.position.y, c[3];\n"
1471 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1472 "ADD R0.xyz, R0, c[4];\n"
1473 "RCP R0.z, R0.z;\n"
1474 "MUL R0.xy, R0, R0.z;\n"
1475 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1476 "ADD R0.z, R0, R0.w;\n"
1477 "MUL R0.xy, R0, c[0];\n"
1478 "ADD R0.x, R0, R0.y;\n"
1479 "MUL R0.z, -R0, c[1].x;\n"
1480 "MUL R0.y, R0.z, c[9];\n"
1481 "MUL R0.x, R0, c[9];\n"
1482 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
1483 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1484 "MAD R0.y, R0.x, R0.x, -R0;\n"
1485 "RSQ R0.y, R0.y;\n"
1486 "RCP R0.y, R0.y;\n"
1487 "ADD R0.y, -R0.x, R0;\n"
1488 "MOV R0.x, c[9];\n"
1489 "MUL R0.x, R0, c[1];\n"
1490 "MAX R0.z, R1.w, c[9].w;\n"
1491 "RCP R0.z, R0.z;\n"
1492 "MUL R3.xyz, R1, R0.z;\n"
1493 "MAD R4.xyz, R3, c[10].x, -c[10].y;\n"
1494 "RCP R0.x, R0.x;\n"
1495 "MUL R0.x, R0.y, R0;\n"
1496 "TEX R0, R0, texture[2], 1D;\n"
1497 "MAD R2.xyz, R0, c[9].x, -R0.w;\n"
1498 "MAD R4.xyz, R3, R4, c[10].z;\n"
1499 "MUL R5.xyz, R1.w, R2;\n"
1500 "MUL R6.xyz, R5, R4;\n"
1501 "RSQ R2.w, R3.x;\n"
1502 "RCP R4.x, R2.w;\n"
1503 "RSQ R2.w, R3.y;\n"
1504 "RSQ R3.w, R3.z;\n"
1505 "RCP R4.y, R2.w;\n"
1506 "RCP R4.z, R3.w;\n"
1507 "ADD R4.xyz, -R3, R4;\n"
1508 "MUL R6.xyz, R3, R6;\n"
1509 "MUL R4.xyz, R5, R4;\n"
1510 "ADD R3.xyz, -R3, c[9].z;\n"
1511 "MAD R2.xyz, R2, R3, R0.w;\n"
1512 "MUL R3.xyz, R0, c[9].x;\n"
1513 "MAD R5.xyz, R0.w, R1, R6;\n"
1514 "MAD R4.xyz, R0.w, R1, R4;\n"
1515 "ADD R6.xyz, R4, -R5;\n"
1516 "MUL R4.xyz, R1, c[9].y;\n"
1517 "SGE R4.xyz, R4, R1.w;\n"
1518 "MAD R4.xyz, R4, R6, R5;\n"
1519 "MAD R4.xyz, -R1, R2, R4;\n"
1520 "SGE R3.xyz, R3, R0.w;\n"
1521 "MUL R2.xyz, R1, R2;\n"
1522 "ADD R2.w, -R1, c[9].z;\n"
1523 "MAD R2.xyz, R3, R4, R2;\n"
1524 "MAD R2.xyz, R0, R2.w, R2;\n"
1525 "ADD R0.x, -R0.w, c[9].z;\n"
1526 "MAD R2.xyz, R1, R0.x, R2;\n"
1527 "ADD R0.z, R0.w, R1.w;\n"
1528 "MAD R2.w, -R0, R1, R0.z;\n"
1529 "ADD R0.xy, fragment.position, c[7];\n"
1530 "MUL R0.xy, R0, c[5];\n"
1531 "TEX R0, R0, texture[1], 2D;\n"
1532 "ADD R2, R2, -R1;\n"
1533 "DP4 R0.x, R0, c[8];\n"
1534 "MAD result.color, R0.x, R2, R1;\n"
1535 "END\n"
1536 ;
1537
1538static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE =
1539 "!!ARBfp1.0\n"
1540 "PARAM c[10] = { program.local[0..8],\n"
1541 " { 2, 4 } };\n"
1542 "TEMP R0;\n"
1543 "TEMP R1;\n"
1544 "TEMP R2;\n"
1545 "TEMP R3;\n"
1546 "MUL R0.xyz, fragment.position.y, c[3];\n"
1547 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1548 "ADD R0.xyz, R0, c[4];\n"
1549 "RCP R0.z, R0.z;\n"
1550 "MUL R0.xy, R0, R0.z;\n"
1551 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1552 "ADD R0.z, R0, R0.w;\n"
1553 "MUL R0.xy, R0, c[0];\n"
1554 "ADD R0.x, R0, R0.y;\n"
1555 "MUL R0.z, -R0, c[1].x;\n"
1556 "MUL R0.y, R0.x, c[9].x;\n"
1557 "MUL R0.z, R0, c[9].y;\n"
1558 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1559 "RSQ R0.z, R0.x;\n"
1560 "MOV R0.x, c[9];\n"
1561 "MUL R0.x, R0, c[1];\n"
1562 "RCP R0.z, R0.z;\n"
1563 "ADD R0.z, -R0.y, R0;\n"
1564 "RCP R0.w, R0.x;\n"
1565 "MUL R1.x, R0.z, R0.w;\n"
1566 "MUL R0.xy, fragment.position, c[6];\n"
1567 "TEX R0, R0, texture[0], 2D;\n"
1568 "TEX R1, R1, texture[2], 1D;\n"
1569 "ADD R2.xyz, R1, R0;\n"
1570 "MUL R3.xyz, R1.w, R0;\n"
1571 "MUL R1.xyz, R1, R0.w;\n"
1572 "MIN R1.xyz, R1, R3;\n"
1573 "MAD R2.xyz, -R1, c[9].x, R2;\n"
1574 "ADD R1.z, R1.w, R0.w;\n"
1575 "MAD R2.w, -R1, R0, R1.z;\n"
1576 "ADD R1.xy, fragment.position, c[7];\n"
1577 "MUL R1.xy, R1, c[5];\n"
1578 "TEX R1, R1, texture[1], 2D;\n"
1579 "ADD R2, R2, -R0;\n"
1580 "DP4 R1.x, R1, c[8];\n"
1581 "MAD result.color, R1.x, R2, R0;\n"
1582 "END\n"
1583 ;
1584
1585static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION =
1586 "!!ARBfp1.0\n"
1587 "PARAM c[10] = { program.local[0..8],\n"
1588 " { 2, 4, 1 } };\n"
1589 "TEMP R0;\n"
1590 "TEMP R1;\n"
1591 "TEMP R2;\n"
1592 "TEMP R3;\n"
1593 "MUL R0.xyz, fragment.position.y, c[3];\n"
1594 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1595 "ADD R0.xyz, R0, c[4];\n"
1596 "RCP R0.z, R0.z;\n"
1597 "MUL R0.xy, R0, R0.z;\n"
1598 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1599 "ADD R0.z, R0, R0.w;\n"
1600 "MUL R0.xy, R0, c[0];\n"
1601 "ADD R0.x, R0, R0.y;\n"
1602 "MUL R0.z, -R0, c[1].x;\n"
1603 "MUL R0.y, R0.x, c[9].x;\n"
1604 "MUL R0.z, R0, c[9].y;\n"
1605 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1606 "RSQ R0.z, R0.x;\n"
1607 "MOV R0.x, c[9];\n"
1608 "MUL R0.x, R0, c[1];\n"
1609 "RCP R0.z, R0.z;\n"
1610 "ADD R0.z, -R0.y, R0;\n"
1611 "RCP R0.w, R0.x;\n"
1612 "MUL R1.x, R0.z, R0.w;\n"
1613 "MUL R0.xy, fragment.position, c[6];\n"
1614 "TEX R0, R0, texture[0], 2D;\n"
1615 "TEX R1, R1, texture[2], 1D;\n"
1616 "MUL R2.xyz, R1.w, R0;\n"
1617 "MAD R3.xyz, R1, R0.w, R2;\n"
1618 "MUL R2.xyz, R1, R0;\n"
1619 "MAD R2.xyz, -R2, c[9].x, R3;\n"
1620 "ADD R2.w, -R0, c[9].z;\n"
1621 "MAD R1.xyz, R1, R2.w, R2;\n"
1622 "ADD R2.x, -R1.w, c[9].z;\n"
1623 "MAD R2.xyz, R0, R2.x, R1;\n"
1624 "ADD R1.z, R1.w, R0.w;\n"
1625 "MAD R2.w, -R1, R0, R1.z;\n"
1626 "ADD R1.xy, fragment.position, c[7];\n"
1627 "MUL R1.xy, R1, c[5];\n"
1628 "TEX R1, R1, texture[1], 2D;\n"
1629 "ADD R2, R2, -R0;\n"
1630 "DP4 R1.x, R1, c[8];\n"
1631 "MAD result.color, R1.x, R2, R0;\n"
1632 "END\n"
1633 ;
1634
1635static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
1636 "!!ARBfp1.0\n"
1637 "PARAM c[9] = { program.local[0..7],\n"
1638 " { 2, 4, 1 } };\n"
1639 "TEMP R0;\n"
1640 "TEMP R1;\n"
1641 "TEMP R2;\n"
1642 "TEMP R3;\n"
1643 "MUL R0.xyz, fragment.position.y, c[3];\n"
1644 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1645 "ADD R0.xyz, R0, c[4];\n"
1646 "RCP R0.z, R0.z;\n"
1647 "MUL R0.xy, R0, R0.z;\n"
1648 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1649 "ADD R0.z, R0, R0.w;\n"
1650 "MUL R0.xy, R0, c[0];\n"
1651 "ADD R0.x, R0, R0.y;\n"
1652 "MUL R0.z, -R0, c[1].x;\n"
1653 "MUL R0.y, R0.x, c[8].x;\n"
1654 "MUL R0.z, R0, c[8].y;\n"
1655 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1656 "RSQ R0.x, R0.x;\n"
1657 "RCP R0.z, R0.x;\n"
1658 "ADD R0.y, -R0, R0.z;\n"
1659 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
1660 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1661 "MUL R2.xyz, R1, c[5].y;\n"
1662 "MOV R0.x, c[8];\n"
1663 "MUL R0.x, R0, c[1];\n"
1664 "RCP R0.x, R0.x;\n"
1665 "MUL R0.x, R0.y, R0;\n"
1666 "TEX R0, R0, texture[1], 1D;\n"
1667 "MUL R3.xyz, R0.w, R2;\n"
1668 "MUL R2.xyz, R0, c[5].x;\n"
1669 "MAD R2.xyz, R1.w, R2, R3;\n"
1670 "ADD R2.w, -R1, c[8].z;\n"
1671 "MUL R0.xyz, R0, c[6].y;\n"
1672 "MAD R0.xyz, R2.w, R0, R2;\n"
1673 "ADD R2.x, -R0.w, c[8].z;\n"
1674 "MUL R1.xyz, R1, c[6].z;\n"
1675 "MAD result.color.xyz, R2.x, R1, R0;\n"
1676 "MUL R0.x, R0.w, R1.w;\n"
1677 "MUL R0.z, R1.w, R2.x;\n"
1678 "MUL R0.y, R0.w, R2.w;\n"
1679 "DP3 result.color.w, R0, c[6];\n"
1680 "END\n"
1681 ;
1682
1683static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
1684 "!!ARBfp1.0\n"
1685 "PARAM c[7] = { program.local[0..5],\n"
1686 " { 2, 4, 1 } };\n"
1687 "TEMP R0;\n"
1688 "TEMP R1;\n"
1689 "TEMP R2;\n"
1690 "MUL R0.xyz, fragment.position.y, c[3];\n"
1691 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1692 "ADD R0.xyz, R0, c[4];\n"
1693 "RCP R0.z, R0.z;\n"
1694 "MUL R0.xy, R0, R0.z;\n"
1695 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1696 "ADD R0.z, R0, R0.w;\n"
1697 "MUL R0.xy, R0, c[0];\n"
1698 "ADD R0.x, R0, R0.y;\n"
1699 "MUL R0.z, -R0, c[1].x;\n"
1700 "MUL R0.y, R0.x, c[6].x;\n"
1701 "MUL R0.z, R0, c[6].y;\n"
1702 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1703 "RSQ R0.x, R0.x;\n"
1704 "RCP R0.z, R0.x;\n"
1705 "ADD R0.y, -R0, R0.z;\n"
1706 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
1707 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1708 "MOV R0.x, c[6];\n"
1709 "MUL R0.x, R0, c[1];\n"
1710 "RCP R0.x, R0.x;\n"
1711 "MUL R0.x, R0.y, R0;\n"
1712 "TEX R0, R0, texture[1], 1D;\n"
1713 "ADD R2.x, -R1.w, c[6].z;\n"
1714 "MUL R2.xyz, R0, R2.x;\n"
1715 "MAD R0.xyz, R0, R1, R2;\n"
1716 "ADD R2.x, R0.w, R1.w;\n"
1717 "ADD R2.y, -R0.w, c[6].z;\n"
1718 "MAD result.color.xyz, R1, R2.y, R0;\n"
1719 "MAD result.color.w, -R0, R1, R2.x;\n"
1720 "END\n"
1721 ;
1722
1723static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK =
1724 "!!ARBfp1.0\n"
1725 "PARAM c[7] = { program.local[0..5],\n"
1726 " { 2, 4 } };\n"
1727 "TEMP R0;\n"
1728 "TEMP R1;\n"
1729 "TEMP R2;\n"
1730 "MUL R0.xyz, fragment.position.y, c[3];\n"
1731 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1732 "ADD R0.xyz, R0, c[4];\n"
1733 "RCP R0.z, R0.z;\n"
1734 "MUL R0.xy, R0, R0.z;\n"
1735 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1736 "ADD R0.z, R0, R0.w;\n"
1737 "MUL R0.xy, R0, c[0];\n"
1738 "ADD R0.x, R0, R0.y;\n"
1739 "MUL R0.z, -R0, c[1].x;\n"
1740 "MUL R0.y, R0.x, c[6].x;\n"
1741 "MUL R0.z, R0, c[6].y;\n"
1742 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1743 "RSQ R0.z, R0.x;\n"
1744 "MOV R0.x, c[6];\n"
1745 "MUL R0.w, R0.x, c[1].x;\n"
1746 "RCP R0.z, R0.z;\n"
1747 "ADD R0.x, -R0.y, R0.z;\n"
1748 "RCP R0.y, R0.w;\n"
1749 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
1750 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1751 "MUL R0.x, R0, R0.y;\n"
1752 "TEX R0, R0, texture[1], 1D;\n"
1753 "ADD R2, R0, R1;\n"
1754 "MAD result.color, -R0, R1, R2;\n"
1755 "END\n"
1756 ;
1757
1758static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK =
1759 "!!ARBfp1.0\n"
1760 "PARAM c[7] = { program.local[0..5],\n"
1761 " { 2, 4, 1 } };\n"
1762 "TEMP R0;\n"
1763 "TEMP R1;\n"
1764 "TEMP R2;\n"
1765 "TEMP R3;\n"
1766 "MUL R0.xyz, fragment.position.y, c[3];\n"
1767 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1768 "ADD R0.xyz, R0, c[4];\n"
1769 "RCP R0.z, R0.z;\n"
1770 "MUL R0.xy, R0, R0.z;\n"
1771 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1772 "ADD R0.z, R0, R0.w;\n"
1773 "MUL R0.xy, R0, c[0];\n"
1774 "ADD R0.x, R0, R0.y;\n"
1775 "MUL R0.y, R0.x, c[6].x;\n"
1776 "MOV R0.x, c[6];\n"
1777 "MUL R0.z, -R0, c[1].x;\n"
1778 "MUL R0.z, R0, c[6].y;\n"
1779 "MAD R0.z, R0.y, R0.y, -R0;\n"
1780 "MUL R1.xy, fragment.position, c[5];\n"
1781 "TEX R1, R1, texture[0], 2D;\n"
1782 "MUL R0.w, R0.x, c[1].x;\n"
1783 "RSQ R0.z, R0.z;\n"
1784 "RCP R0.x, R0.z;\n"
1785 "ADD R2.w, -R1, c[6].z;\n"
1786 "RCP R0.z, R0.w;\n"
1787 "ADD R0.x, -R0.y, R0;\n"
1788 "MUL R0.x, R0, R0.z;\n"
1789 "TEX R0, R0, texture[1], 1D;\n"
1790 "ADD R3.xyz, R0.w, -R0;\n"
1791 "ADD R2.xyz, R1.w, -R1;\n"
1792 "MUL R2.xyz, R2, R3;\n"
1793 "MUL R2.xyz, R2, c[6].x;\n"
1794 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
1795 "MAD R2.xyz, R0, R2.w, R2;\n"
1796 "MUL R3.xyz, R0, R2.w;\n"
1797 "MUL R0.xyz, R0, R1;\n"
1798 "ADD R2.w, -R0, c[6].z;\n"
1799 "MAD R0.xyz, R0, c[6].x, R3;\n"
1800 "MAD R0.xyz, R1, R2.w, R0;\n"
1801 "MAD R2.xyz, R1, R2.w, R2;\n"
1802 "MUL R1.xyz, R1, c[6].x;\n"
1803 "ADD R2.w, R0, R1;\n"
1804 "ADD R2.xyz, R2, -R0;\n"
1805 "SGE R1.xyz, R1, R1.w;\n"
1806 "MAD result.color.xyz, R1, R2, R0;\n"
1807 "MAD result.color.w, -R0, R1, R2;\n"
1808 "END\n"
1809 ;
1810
1811static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK =
1812 "!!ARBfp1.0\n"
1813 "PARAM c[7] = { program.local[0..5],\n"
1814 " { 2, 4, 1 } };\n"
1815 "TEMP R0;\n"
1816 "TEMP R1;\n"
1817 "TEMP R2;\n"
1818 "TEMP R3;\n"
1819 "MUL R0.xyz, fragment.position.y, c[3];\n"
1820 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1821 "ADD R0.xyz, R0, c[4];\n"
1822 "RCP R0.z, R0.z;\n"
1823 "MUL R0.xy, R0, R0.z;\n"
1824 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1825 "ADD R0.z, R0, R0.w;\n"
1826 "MUL R0.xy, R0, c[0];\n"
1827 "ADD R0.x, R0, R0.y;\n"
1828 "MUL R0.z, -R0, c[1].x;\n"
1829 "MUL R0.y, R0.x, c[6].x;\n"
1830 "MUL R0.z, R0, c[6].y;\n"
1831 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1832 "RSQ R0.z, R0.x;\n"
1833 "MOV R0.x, c[6];\n"
1834 "MUL R0.w, R0.x, c[1].x;\n"
1835 "RCP R0.z, R0.z;\n"
1836 "ADD R0.x, -R0.y, R0.z;\n"
1837 "RCP R0.y, R0.w;\n"
1838 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
1839 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1840 "MUL R0.x, R0, R0.y;\n"
1841 "TEX R0, R0, texture[1], 1D;\n"
1842 "MUL R2.xyz, R0, R1.w;\n"
1843 "MUL R3.xyz, R0.w, R1;\n"
1844 "MIN R2.xyz, R2, R3;\n"
1845 "ADD R2.w, -R1, c[6].z;\n"
1846 "MAD R0.xyz, R0, R2.w, R2;\n"
1847 "ADD R2.x, R0.w, R1.w;\n"
1848 "ADD R2.y, -R0.w, c[6].z;\n"
1849 "MAD result.color.xyz, R1, R2.y, R0;\n"
1850 "MAD result.color.w, -R0, R1, R2.x;\n"
1851 "END\n"
1852 ;
1853
1854static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
1855 "!!ARBfp1.0\n"
1856 "PARAM c[7] = { program.local[0..5],\n"
1857 " { 2, 4, 1 } };\n"
1858 "TEMP R0;\n"
1859 "TEMP R1;\n"
1860 "TEMP R2;\n"
1861 "TEMP R3;\n"
1862 "MUL R0.xyz, fragment.position.y, c[3];\n"
1863 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1864 "ADD R0.xyz, R0, c[4];\n"
1865 "RCP R0.z, R0.z;\n"
1866 "MUL R0.xy, R0, R0.z;\n"
1867 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1868 "ADD R0.z, R0, R0.w;\n"
1869 "MUL R0.xy, R0, c[0];\n"
1870 "ADD R0.x, R0, R0.y;\n"
1871 "MUL R0.z, -R0, c[1].x;\n"
1872 "MUL R0.y, R0.x, c[6].x;\n"
1873 "MUL R0.z, R0, c[6].y;\n"
1874 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1875 "RSQ R0.z, R0.x;\n"
1876 "MOV R0.x, c[6];\n"
1877 "MUL R0.w, R0.x, c[1].x;\n"
1878 "RCP R0.z, R0.z;\n"
1879 "ADD R0.x, -R0.y, R0.z;\n"
1880 "RCP R0.y, R0.w;\n"
1881 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
1882 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1883 "MUL R0.x, R0, R0.y;\n"
1884 "TEX R0, R0, texture[1], 1D;\n"
1885 "MUL R2.xyz, R0, R1.w;\n"
1886 "MUL R3.xyz, R0.w, R1;\n"
1887 "MAX R2.xyz, R2, R3;\n"
1888 "ADD R2.w, -R1, c[6].z;\n"
1889 "MAD R0.xyz, R0, R2.w, R2;\n"
1890 "ADD R2.x, R0.w, R1.w;\n"
1891 "ADD R2.y, -R0.w, c[6].z;\n"
1892 "MAD result.color.xyz, R1, R2.y, R0;\n"
1893 "MAD result.color.w, -R0, R1, R2.x;\n"
1894 "END\n"
1895 ;
1896
1897static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
1898 "!!ARBfp1.0\n"
1899 "PARAM c[7] = { program.local[0..5],\n"
1900 " { 2, 4, 1, 1e-006 } };\n"
1901 "TEMP R0;\n"
1902 "TEMP R1;\n"
1903 "TEMP R2;\n"
1904 "TEMP R3;\n"
1905 "MUL R0.xyz, fragment.position.y, c[3];\n"
1906 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1907 "ADD R0.xyz, R0, c[4];\n"
1908 "RCP R0.z, R0.z;\n"
1909 "MUL R0.xy, R0, R0.z;\n"
1910 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1911 "ADD R0.z, R0, R0.w;\n"
1912 "MUL R0.xy, R0, c[0];\n"
1913 "ADD R0.x, R0, R0.y;\n"
1914 "MUL R0.y, R0.x, c[6].x;\n"
1915 "MOV R0.x, c[6];\n"
1916 "MUL R0.z, -R0, c[1].x;\n"
1917 "MUL R0.z, R0, c[6].y;\n"
1918 "MAD R0.z, R0.y, R0.y, -R0;\n"
1919 "MUL R0.w, R0.x, c[1].x;\n"
1920 "RSQ R0.z, R0.z;\n"
1921 "RCP R0.x, R0.z;\n"
1922 "RCP R0.z, R0.w;\n"
1923 "ADD R0.x, -R0.y, R0;\n"
1924 "MUL R0.x, R0, R0.z;\n"
1925 "TEX R0, R0, texture[1], 1D;\n"
1926 "MAX R1.x, R0.w, c[6].w;\n"
1927 "RCP R1.x, R1.x;\n"
1928 "MAD R1.xyz, -R0, R1.x, c[6].z;\n"
1929 "MAX R2.xyz, R1, c[6].w;\n"
1930 "MUL R1.xy, fragment.position, c[5];\n"
1931 "TEX R1, R1, texture[0], 2D;\n"
1932 "ADD R2.w, -R0, c[6].z;\n"
1933 "MUL R3.xyz, R1, R2.w;\n"
1934 "ADD R2.w, -R1, c[6].z;\n"
1935 "MAD R3.xyz, R0, R2.w, R3;\n"
1936 "MUL R1.xyz, R0.w, R1;\n"
1937 "MAD R0.xyz, R0, R1.w, R1;\n"
1938 "MUL R2.w, R0, R1;\n"
1939 "RCP R2.x, R2.x;\n"
1940 "RCP R2.y, R2.y;\n"
1941 "RCP R2.z, R2.z;\n"
1942 "MAD R2.xyz, R1, R2, R3;\n"
1943 "MAD R3.xyz, R0.w, R1.w, R3;\n"
1944 "ADD R1.x, R0.w, R1.w;\n"
1945 "ADD R3.xyz, R3, -R2;\n"
1946 "SGE R0.xyz, R0, R2.w;\n"
1947 "MAD result.color.xyz, R0, R3, R2;\n"
1948 "MAD result.color.w, -R0, R1, R1.x;\n"
1949 "END\n"
1950 ;
1951
1952static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK =
1953 "!!ARBfp1.0\n"
1954 "PARAM c[7] = { program.local[0..5],\n"
1955 " { 2, 4, 1, 9.9999997e-006 } };\n"
1956 "TEMP R0;\n"
1957 "TEMP R1;\n"
1958 "TEMP R2;\n"
1959 "TEMP R3;\n"
1960 "TEMP R4;\n"
1961 "TEMP R5;\n"
1962 "MUL R0.xyz, fragment.position.y, c[3];\n"
1963 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
1964 "ADD R0.xyz, R0, c[4];\n"
1965 "RCP R0.z, R0.z;\n"
1966 "MUL R0.xy, R0, R0.z;\n"
1967 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1968 "ADD R0.z, R0, R0.w;\n"
1969 "MUL R0.xy, R0, c[0];\n"
1970 "ADD R0.x, R0, R0.y;\n"
1971 "MUL R0.z, -R0, c[1].x;\n"
1972 "MUL R0.y, R0.x, c[6].x;\n"
1973 "MUL R0.z, R0, c[6].y;\n"
1974 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
1975 "RSQ R0.z, R0.x;\n"
1976 "MOV R0.x, c[6];\n"
1977 "MUL R0.w, R0.x, c[1].x;\n"
1978 "RCP R0.z, R0.z;\n"
1979 "ADD R0.x, -R0.y, R0.z;\n"
1980 "RCP R0.y, R0.w;\n"
1981 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
1982 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1983 "MUL R0.x, R0, R0.y;\n"
1984 "TEX R0, R0, texture[1], 1D;\n"
1985 "MUL R2.xyz, R0.w, R1;\n"
1986 "MAD R3.xyz, R0, R1.w, R2;\n"
1987 "ADD R2.w, -R1, c[6].z;\n"
1988 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
1989 "MUL R4.xyz, R0.w, R2;\n"
1990 "MAX R2.xyz, R0, c[6].w;\n"
1991 "MUL R5.xyz, R0, R2.w;\n"
1992 "ADD R3.w, -R0, c[6].z;\n"
1993 "RCP R2.x, R2.x;\n"
1994 "RCP R2.y, R2.y;\n"
1995 "RCP R2.z, R2.z;\n"
1996 "MAD R2.xyz, R4, R2, R5;\n"
1997 "MUL R4.xyz, R1, R3.w;\n"
1998 "MAD R1.xyz, R1, R3.w, R2;\n"
1999 "MAD R0.xyz, R0, R2.w, R4;\n"
2000 "MUL R2.x, R0.w, R1.w;\n"
2001 "ADD R2.w, R0, R1;\n"
2002 "ADD R1.xyz, R1, -R0;\n"
2003 "SGE R2.xyz, R3, R2.x;\n"
2004 "MAD result.color.xyz, R2, R1, R0;\n"
2005 "MAD result.color.w, -R0, R1, R2;\n"
2006 "END\n"
2007 ;
2008
2009static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
2010 "!!ARBfp1.0\n"
2011 "PARAM c[7] = { program.local[0..5],\n"
2012 " { 2, 4, 1 } };\n"
2013 "TEMP R0;\n"
2014 "TEMP R1;\n"
2015 "TEMP R2;\n"
2016 "TEMP R3;\n"
2017 "TEMP R4;\n"
2018 "MUL R0.xyz, fragment.position.y, c[3];\n"
2019 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
2020 "ADD R0.xyz, R0, c[4];\n"
2021 "RCP R0.z, R0.z;\n"
2022 "MUL R0.xy, R0, R0.z;\n"
2023 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2024 "ADD R0.z, R0, R0.w;\n"
2025 "MUL R0.xy, R0, c[0];\n"
2026 "ADD R0.x, R0, R0.y;\n"
2027 "MUL R0.y, R0.x, c[6].x;\n"
2028 "MOV R0.x, c[6];\n"
2029 "MUL R0.z, -R0, c[1].x;\n"
2030 "MUL R0.z, R0, c[6].y;\n"
2031 "MAD R0.z, R0.y, R0.y, -R0;\n"
2032 "MUL R1.xy, fragment.position, c[5];\n"
2033 "TEX R1, R1, texture[0], 2D;\n"
2034 "MUL R0.w, R0.x, c[1].x;\n"
2035 "RSQ R0.z, R0.z;\n"
2036 "RCP R0.x, R0.z;\n"
2037 "ADD R2.w, -R1, c[6].z;\n"
2038 "RCP R0.z, R0.w;\n"
2039 "ADD R0.x, -R0.y, R0;\n"
2040 "MUL R0.x, R0, R0.z;\n"
2041 "TEX R0, R0, texture[1], 1D;\n"
2042 "ADD R3.xyz, R0.w, -R0;\n"
2043 "ADD R2.xyz, R1.w, -R1;\n"
2044 "MUL R2.xyz, R2, R3;\n"
2045 "MUL R2.xyz, R2, c[6].x;\n"
2046 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
2047 "MUL R4.xyz, R0, R2.w;\n"
2048 "MUL R3.xyz, R0, R1;\n"
2049 "MAD R2.xyz, R0, R2.w, R2;\n"
2050 "ADD R2.w, -R0, c[6].z;\n"
2051 "MUL R0.xyz, R0, c[6].x;\n"
2052 "MAD R2.xyz, R1, R2.w, R2;\n"
2053 "MAD R3.xyz, R3, c[6].x, R4;\n"
2054 "MAD R1.xyz, R1, R2.w, R3;\n"
2055 "ADD R2.w, R0, R1;\n"
2056 "ADD R2.xyz, R2, -R1;\n"
2057 "SGE R0.xyz, R0, R0.w;\n"
2058 "MAD result.color.xyz, R0, R2, R1;\n"
2059 "MAD result.color.w, -R0, R1, R2;\n"
2060 "END\n"
2061 ;
2062
2063static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
2064 "!!ARBfp1.0\n"
2065 "PARAM c[8] = { program.local[0..5],\n"
2066 " { 2, 4, 1, 9.9999997e-006 },\n"
2067 " { 16, 12, 3 } };\n"
2068 "TEMP R0;\n"
2069 "TEMP R1;\n"
2070 "TEMP R2;\n"
2071 "TEMP R3;\n"
2072 "TEMP R4;\n"
2073 "TEMP R5;\n"
2074 "TEMP R6;\n"
2075 "MUL R0.xyz, fragment.position.y, c[3];\n"
2076 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
2077 "ADD R0.xyz, R0, c[4];\n"
2078 "RCP R0.z, R0.z;\n"
2079 "MUL R0.xy, R0, R0.z;\n"
2080 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2081 "ADD R0.z, R0, R0.w;\n"
2082 "MUL R0.xy, R0, c[0];\n"
2083 "ADD R0.x, R0, R0.y;\n"
2084 "MUL R0.z, -R0, c[1].x;\n"
2085 "MUL R0.y, R0.z, c[6];\n"
2086 "MUL R0.x, R0, c[6];\n"
2087 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
2088 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2089 "MAD R0.y, R0.x, R0.x, -R0;\n"
2090 "RSQ R0.y, R0.y;\n"
2091 "RCP R0.y, R0.y;\n"
2092 "ADD R0.y, -R0.x, R0;\n"
2093 "MOV R0.x, c[6];\n"
2094 "MUL R0.x, R0, c[1];\n"
2095 "MAX R0.z, R1.w, c[6].w;\n"
2096 "RCP R0.z, R0.z;\n"
2097 "MUL R3.xyz, R1, R0.z;\n"
2098 "MAD R4.xyz, R3, c[7].x, -c[7].y;\n"
2099 "RCP R0.x, R0.x;\n"
2100 "MUL R0.x, R0.y, R0;\n"
2101 "TEX R0, R0, texture[1], 1D;\n"
2102 "MAD R2.xyz, R0, c[6].x, -R0.w;\n"
2103 "MAD R4.xyz, R3, R4, c[7].z;\n"
2104 "MUL R5.xyz, R1.w, R2;\n"
2105 "MUL R6.xyz, R5, R4;\n"
2106 "RSQ R2.w, R3.x;\n"
2107 "RCP R4.x, R2.w;\n"
2108 "RSQ R2.w, R3.y;\n"
2109 "RSQ R3.w, R3.z;\n"
2110 "RCP R4.y, R2.w;\n"
2111 "RCP R4.z, R3.w;\n"
2112 "ADD R4.xyz, -R3, R4;\n"
2113 "MUL R6.xyz, R3, R6;\n"
2114 "MUL R4.xyz, R5, R4;\n"
2115 "ADD R3.xyz, -R3, c[6].z;\n"
2116 "MAD R2.xyz, R2, R3, R0.w;\n"
2117 "MUL R3.xyz, R0, c[6].x;\n"
2118 "MAD R5.xyz, R0.w, R1, R6;\n"
2119 "MAD R4.xyz, R0.w, R1, R4;\n"
2120 "ADD R6.xyz, R4, -R5;\n"
2121 "MUL R4.xyz, R1, c[6].y;\n"
2122 "SGE R4.xyz, R4, R1.w;\n"
2123 "MAD R4.xyz, R4, R6, R5;\n"
2124 "MAD R4.xyz, -R1, R2, R4;\n"
2125 "MUL R2.xyz, R1, R2;\n"
2126 "SGE R3.xyz, R3, R0.w;\n"
2127 "MAD R2.xyz, R3, R4, R2;\n"
2128 "ADD R2.w, -R1, c[6].z;\n"
2129 "MAD R2.xyz, R0, R2.w, R2;\n"
2130 "ADD R0.x, R0.w, R1.w;\n"
2131 "ADD R0.y, -R0.w, c[6].z;\n"
2132 "MAD result.color.xyz, R1, R0.y, R2;\n"
2133 "MAD result.color.w, -R0, R1, R0.x;\n"
2134 "END\n"
2135 ;
2136
2137static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
2138 "!!ARBfp1.0\n"
2139 "PARAM c[7] = { program.local[0..5],\n"
2140 " { 2, 4 } };\n"
2141 "TEMP R0;\n"
2142 "TEMP R1;\n"
2143 "TEMP R2;\n"
2144 "TEMP R3;\n"
2145 "MUL R0.xyz, fragment.position.y, c[3];\n"
2146 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
2147 "ADD R0.xyz, R0, c[4];\n"
2148 "RCP R0.z, R0.z;\n"
2149 "MUL R0.xy, R0, R0.z;\n"
2150 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2151 "ADD R0.z, R0, R0.w;\n"
2152 "MUL R0.xy, R0, c[0];\n"
2153 "ADD R0.x, R0, R0.y;\n"
2154 "MUL R0.z, -R0, c[1].x;\n"
2155 "MUL R0.y, R0.x, c[6].x;\n"
2156 "MUL R0.z, R0, c[6].y;\n"
2157 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
2158 "RSQ R0.z, R0.x;\n"
2159 "MOV R0.x, c[6];\n"
2160 "MUL R0.w, R0.x, c[1].x;\n"
2161 "RCP R0.z, R0.z;\n"
2162 "ADD R0.x, -R0.y, R0.z;\n"
2163 "RCP R0.y, R0.w;\n"
2164 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
2165 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2166 "MUL R0.x, R0, R0.y;\n"
2167 "TEX R0, R0, texture[1], 1D;\n"
2168 "MUL R2.xyz, R0, R1.w;\n"
2169 "MUL R3.xyz, R0.w, R1;\n"
2170 "ADD R0.xyz, R0, R1;\n"
2171 "MIN R2.xyz, R2, R3;\n"
2172 "ADD R1.x, R0.w, R1.w;\n"
2173 "MAD result.color.xyz, -R2, c[6].x, R0;\n"
2174 "MAD result.color.w, -R0, R1, R1.x;\n"
2175 "END\n"
2176 ;
2177
2178static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
2179 "!!ARBfp1.0\n"
2180 "PARAM c[7] = { program.local[0..5],\n"
2181 " { 2, 4, 1 } };\n"
2182 "TEMP R0;\n"
2183 "TEMP R1;\n"
2184 "TEMP R2;\n"
2185 "TEMP R3;\n"
2186 "MUL R0.xyz, fragment.position.y, c[3];\n"
2187 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
2188 "ADD R0.xyz, R0, c[4];\n"
2189 "RCP R0.z, R0.z;\n"
2190 "MUL R0.xy, R0, R0.z;\n"
2191 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2192 "ADD R0.z, R0, R0.w;\n"
2193 "MUL R0.xy, R0, c[0];\n"
2194 "ADD R0.x, R0, R0.y;\n"
2195 "MUL R0.z, -R0, c[1].x;\n"
2196 "MUL R0.y, R0.x, c[6].x;\n"
2197 "MUL R0.z, R0, c[6].y;\n"
2198 "MAD R0.x, R0.y, R0.y, -R0.z;\n"
2199 "RSQ R0.z, R0.x;\n"
2200 "MOV R0.x, c[6];\n"
2201 "MUL R0.w, R0.x, c[1].x;\n"
2202 "RCP R0.z, R0.z;\n"
2203 "ADD R0.x, -R0.y, R0.z;\n"
2204 "RCP R0.y, R0.w;\n"
2205 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
2206 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2207 "MUL R0.x, R0, R0.y;\n"
2208 "TEX R0, R0, texture[1], 1D;\n"
2209 "MUL R2.xyz, R0.w, R1;\n"
2210 "MAD R3.xyz, R0, R1.w, R2;\n"
2211 "MUL R2.xyz, R0, R1;\n"
2212 "MAD R2.xyz, -R2, c[6].x, R3;\n"
2213 "ADD R2.w, -R1, c[6].z;\n"
2214 "MAD R0.xyz, R0, R2.w, R2;\n"
2215 "ADD R2.x, R0.w, R1.w;\n"
2216 "ADD R2.y, -R0.w, c[6].z;\n"
2217 "MAD result.color.xyz, R1, R2.y, R0;\n"
2218 "MAD result.color.w, -R0, R1, R2.x;\n"
2219 "END\n"
2220 ;
2221
2222static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK =
2223 "!!ARBfp1.0\n"
2224 "PARAM c[9] = { program.local[0..7],\n"
2225 " { 2, 4 } };\n"
2226 "TEMP R0;\n"
2227 "TEMP R1;\n"
2228 "MUL R0.xyz, fragment.position.y, c[3];\n"
2229 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
2230 "ADD R0.xyz, R0, c[4];\n"
2231 "RCP R0.z, R0.z;\n"
2232 "MUL R0.xy, R0, R0.z;\n"
2233 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2234 "ADD R0.z, R0, R0.w;\n"
2235 "MUL R0.xy, R0, c[0];\n"
2236 "ADD R0.x, R0, R0.y;\n"
2237 "MUL R0.z, -R0, c[1].x;\n"
2238 "MUL R0.y, R0.z, c[8];\n"
2239 "MUL R0.x, R0, c[8];\n"
2240 "MAD R0.y, R0.x, R0.x, -R0;\n"
2241 "RSQ R0.y, R0.y;\n"
2242 "RCP R0.y, R0.y;\n"
2243 "ADD R1.x, -R0, R0.y;\n"
2244 "MOV R0.x, c[8];\n"
2245 "MUL R0.x, R0, c[1];\n"
2246 "RCP R1.y, R0.x;\n"
2247 "ADD R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
2248 "MUL R0.zw, R0, c[5].xyxy;\n"
2249 "TEX R0, R0.zwzw, texture[0], 2D;\n"
2250 "MUL R1.x, R1, R1.y;\n"
2251 "DP4 R1.y, R0, c[7];\n"
2252 "TEX R0, R1, texture[1], 1D;\n"
2253 "MUL result.color, R0, R1.y;\n"
2254 "END\n"
2255 ;
2256
2257static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
2258 "!!ARBfp1.0\n"
2259 "PARAM c[6] = { program.local[0..4],\n"
2260 " { 2, 4 } };\n"
2261 "TEMP R0;\n"
2262 "MUL R0.xyz, fragment.position.y, c[3];\n"
2263 "MAD R0.xyz, fragment.position.x, c[2], R0;\n"
2264 "ADD R0.xyz, R0, c[4];\n"
2265 "RCP R0.z, R0.z;\n"
2266 "MUL R0.xy, R0, R0.z;\n"
2267 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2268 "MUL R0.xy, R0, c[0];\n"
2269 "ADD R0.z, R0, R0.w;\n"
2270 "ADD R0.x, R0, R0.y;\n"
2271 "MUL R0.z, -R0, c[1].x;\n"
2272 "MUL R0.y, R0.z, c[5];\n"
2273 "MUL R0.x, R0, c[5];\n"
2274 "MAD R0.z, R0.x, R0.x, -R0.y;\n"
2275 "MOV R0.y, c[5].x;\n"
2276 "RSQ R0.z, R0.z;\n"
2277 "MUL R0.w, R0.y, c[1].x;\n"
2278 "RCP R0.y, R0.z;\n"
2279 "RCP R0.z, R0.w;\n"
2280 "ADD R0.x, -R0, R0.y;\n"
2281 "MUL R0.x, R0, R0.z;\n"
2282 "TEX result.color, R0, texture[0], 1D;\n"
2283 "END\n"
2284 ;
2285
2286static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
2287 "!!ARBfp1.0\n"
2288 "PARAM c[13] = { program.local[0..9],\n"
2289 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
2290 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
2291 " { 0.33299461, 0.99999559, 1 } };\n"
2292 "TEMP R0;\n"
2293 "TEMP R1;\n"
2294 "TEMP R2;\n"
2295 "TEMP R3;\n"
2296 "MUL R0.xyz, fragment.position.y, c[2];\n"
2297 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2298 "ADD R0.xyz, R0, c[3];\n"
2299 "RCP R0.z, R0.z;\n"
2300 "MUL R0.xy, R0, R0.z;\n"
2301 "ABS R0.z, R0.x;\n"
2302 "ABS R0.w, R0.y;\n"
2303 "ADD R0.w, R0, -R0.z;\n"
2304 "ADD R1.x, R0.y, c[10].y;\n"
2305 "ABS R0.w, R0;\n"
2306 "CMP R0.y, -R0.w, R0, R1.x;\n"
2307 "ABS R0.w, -R0.y;\n"
2308 "MAX R1.x, R0.z, R0.w;\n"
2309 "RCP R1.y, R1.x;\n"
2310 "MIN R1.x, R0.z, R0.w;\n"
2311 "MUL R1.x, R1, R1.y;\n"
2312 "MUL R1.y, R1.x, R1.x;\n"
2313 "MAD R1.z, R1.y, c[11].x, c[11].y;\n"
2314 "MAD R1.z, R1, R1.y, -c[11];\n"
2315 "MAD R1.z, R1, R1.y, c[11].w;\n"
2316 "MAD R1.z, R1, R1.y, -c[12].x;\n"
2317 "MAD R1.y, R1.z, R1, c[12];\n"
2318 "MUL R1.x, R1.y, R1;\n"
2319 "ADD R1.y, -R1.x, c[10].w;\n"
2320 "ADD R0.z, -R0, R0.w;\n"
2321 "CMP R0.z, -R0, R1.y, R1.x;\n"
2322 "ADD R0.w, -R0.z, c[10].z;\n"
2323 "CMP R0.x, R0, R0.w, R0.z;\n"
2324 "CMP R0.x, -R0.y, -R0, R0;\n"
2325 "ADD R0.x, R0, c[0];\n"
2326 "MUL R1.x, R0, c[10];\n"
2327 "FLR R1.y, R1.x;\n"
2328 "MUL R0.xy, fragment.position, c[7];\n"
2329 "TEX R0, R0, texture[0], 2D;\n"
2330 "ADD R1.x, R1, -R1.y;\n"
2331 "TEX R1, R1, texture[2], 1D;\n"
2332 "MUL R2.xyz, R0, c[4].y;\n"
2333 "MUL R3.xyz, R1.w, R2;\n"
2334 "MUL R2.xyz, R1, c[4].x;\n"
2335 "MAD R2.xyz, R0.w, R2, R3;\n"
2336 "ADD R3.xy, fragment.position, c[8];\n"
2337 "ADD R2.w, -R0, c[12].z;\n"
2338 "MUL R1.xyz, R1, c[5].y;\n"
2339 "MAD R2.xyz, R2.w, R1, R2;\n"
2340 "MUL R1.xyz, R0, c[5].z;\n"
2341 "ADD R3.z, -R1.w, c[12];\n"
2342 "MAD R2.xyz, R3.z, R1, R2;\n"
2343 "MUL R1.y, R1.w, R2.w;\n"
2344 "MUL R1.x, R1.w, R0.w;\n"
2345 "MUL R1.z, R0.w, R3;\n"
2346 "DP3 R2.w, R1, c[5];\n"
2347 "MUL R3.xy, R3, c[6];\n"
2348 "TEX R1, R3, texture[1], 2D;\n"
2349 "ADD R2, R2, -R0;\n"
2350 "DP4 R1.x, R1, c[9];\n"
2351 "MAD result.color, R1.x, R2, R0;\n"
2352 "END\n"
2353 ;
2354
2355static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY =
2356 "!!ARBfp1.0\n"
2357 "PARAM c[11] = { program.local[0..7],\n"
2358 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
2359 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
2360 " { 0.33299461, 0.99999559, 1 } };\n"
2361 "TEMP R0;\n"
2362 "TEMP R1;\n"
2363 "TEMP R2;\n"
2364 "MUL R0.xyz, fragment.position.y, c[2];\n"
2365 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2366 "ADD R0.xyz, R0, c[3];\n"
2367 "RCP R0.z, R0.z;\n"
2368 "MUL R0.xy, R0, R0.z;\n"
2369 "ABS R0.z, R0.x;\n"
2370 "ABS R0.w, R0.y;\n"
2371 "ADD R0.w, R0, -R0.z;\n"
2372 "ADD R1.x, R0.y, c[8].y;\n"
2373 "ABS R0.w, R0;\n"
2374 "CMP R0.y, -R0.w, R0, R1.x;\n"
2375 "ABS R0.w, -R0.y;\n"
2376 "MAX R1.x, R0.z, R0.w;\n"
2377 "RCP R1.y, R1.x;\n"
2378 "MIN R1.x, R0.z, R0.w;\n"
2379 "MUL R1.x, R1, R1.y;\n"
2380 "MUL R1.y, R1.x, R1.x;\n"
2381 "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
2382 "MAD R1.z, R1, R1.y, -c[9];\n"
2383 "MAD R1.z, R1, R1.y, c[9].w;\n"
2384 "MAD R1.z, R1, R1.y, -c[10].x;\n"
2385 "MAD R1.y, R1.z, R1, c[10];\n"
2386 "MUL R1.x, R1.y, R1;\n"
2387 "ADD R1.y, -R1.x, c[8].w;\n"
2388 "ADD R0.z, -R0, R0.w;\n"
2389 "CMP R0.z, -R0, R1.y, R1.x;\n"
2390 "ADD R0.w, -R0.z, c[8].z;\n"
2391 "CMP R0.x, R0, R0.w, R0.z;\n"
2392 "CMP R0.x, -R0.y, -R0, R0;\n"
2393 "ADD R0.x, R0, c[0];\n"
2394 "MUL R1.x, R0, c[8];\n"
2395 "FLR R1.y, R1.x;\n"
2396 "MUL R0.xy, fragment.position, c[5];\n"
2397 "TEX R0, R0, texture[0], 2D;\n"
2398 "ADD R1.x, R1, -R1.y;\n"
2399 "TEX R1, R1, texture[2], 1D;\n"
2400 "ADD R2.x, -R0.w, c[10].z;\n"
2401 "MUL R2.xyz, R1, R2.x;\n"
2402 "MAD R1.xyz, R1, R0, R2;\n"
2403 "ADD R2.x, -R1.w, c[10].z;\n"
2404 "MAD R2.xyz, R0, R2.x, R1;\n"
2405 "ADD R1.z, R1.w, R0.w;\n"
2406 "MAD R2.w, -R1, R0, R1.z;\n"
2407 "ADD R1.xy, fragment.position, c[6];\n"
2408 "MUL R1.xy, R1, c[4];\n"
2409 "TEX R1, R1, texture[1], 2D;\n"
2410 "ADD R2, R2, -R0;\n"
2411 "DP4 R1.x, R1, c[7];\n"
2412 "MAD result.color, R1.x, R2, R0;\n"
2413 "END\n"
2414 ;
2415
2416static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN =
2417 "!!ARBfp1.0\n"
2418 "PARAM c[11] = { program.local[0..7],\n"
2419 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
2420 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
2421 " { 0.33299461, 0.99999559 } };\n"
2422 "TEMP R0;\n"
2423 "TEMP R1;\n"
2424 "TEMP R2;\n"
2425 "TEMP R3;\n"
2426 "MUL R0.xyz, fragment.position.y, c[2];\n"
2427 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2428 "ADD R0.xyz, R0, c[3];\n"
2429 "RCP R0.z, R0.z;\n"
2430 "MUL R0.xy, R0, R0.z;\n"
2431 "ADD R3.xy, fragment.position, c[6];\n"
2432 "ABS R0.z, R0.x;\n"
2433 "ABS R0.w, R0.y;\n"
2434 "ADD R0.w, R0, -R0.z;\n"
2435 "ADD R1.x, R0.y, c[8].y;\n"
2436 "ABS R0.w, R0;\n"
2437 "CMP R0.y, -R0.w, R0, R1.x;\n"
2438 "ABS R0.w, -R0.y;\n"
2439 "MAX R1.x, R0.z, R0.w;\n"
2440 "RCP R1.y, R1.x;\n"
2441 "MIN R1.x, R0.z, R0.w;\n"
2442 "MUL R1.x, R1, R1.y;\n"
2443 "MUL R1.y, R1.x, R1.x;\n"
2444 "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
2445 "MAD R1.z, R1, R1.y, -c[9];\n"
2446 "MAD R1.z, R1, R1.y, c[9].w;\n"
2447 "MAD R1.z, R1, R1.y, -c[10].x;\n"
2448 "MAD R1.y, R1.z, R1, c[10];\n"
2449 "MUL R1.x, R1.y, R1;\n"
2450 "ADD R0.z, -R0, R0.w;\n"
2451 "ADD R1.y, -R1.x, c[8].w;\n"
2452 "CMP R0.z, -R0, R1.y, R1.x;\n"
2453 "ADD R0.w, -R0.z, c[8].z;\n"
2454 "CMP R0.x, R0, R0.w, R0.z;\n"
2455 "CMP R0.x, -R0.y, -R0, R0;\n"
2456 "ADD R0.x, R0, c[0];\n"
2457 "MUL R0.x, R0, c[8];\n"
2458 "FLR R0.y, R0.x;\n"
2459 "ADD R0.z, R0.x, -R0.y;\n"
2460 "TEX R1, R0.z, texture[2], 1D;\n"
2461 "MUL R0.xy, fragment.position, c[5];\n"
2462 "TEX R0, R0, texture[0], 2D;\n"
2463 "ADD R2, R1, R0;\n"
2464 "MAD R2, -R1, R0, R2;\n"
2465 "MUL R3.xy, R3, c[4];\n"
2466 "TEX R1, R3, texture[1], 2D;\n"
2467 "ADD R2, R2, -R0;\n"
2468 "DP4 R1.x, R1, c[7];\n"
2469 "MAD result.color, R1.x, R2, R0;\n"
2470 "END\n"
2471 ;
2472
2473static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY =
2474 "!!ARBfp1.0\n"
2475 "PARAM c[11] = { program.local[0..7],\n"
2476 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
2477 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
2478 " { 3.141593, 0.15915494, 2, 1 } };\n"
2479 "TEMP R0;\n"
2480 "TEMP R1;\n"
2481 "TEMP R2;\n"
2482 "TEMP R3;\n"
2483 "TEMP R4;\n"
2484 "MUL R0.xyz, fragment.position.y, c[2];\n"
2485 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2486 "ADD R0.xyz, R0, c[3];\n"
2487 "RCP R0.z, R0.z;\n"
2488 "MUL R0.xy, R0, R0.z;\n"
2489 "ABS R0.z, R0.x;\n"
2490 "ABS R0.w, R0.y;\n"
2491 "ADD R0.w, R0, -R0.z;\n"
2492 "ADD R1.x, R0.y, c[8];\n"
2493 "ABS R0.w, R0;\n"
2494 "CMP R0.y, -R0.w, R0, R1.x;\n"
2495 "ABS R0.w, -R0.y;\n"
2496 "MAX R1.x, R0.z, R0.w;\n"
2497 "RCP R1.y, R1.x;\n"
2498 "MIN R1.x, R0.z, R0.w;\n"
2499 "MUL R1.x, R1, R1.y;\n"
2500 "MUL R1.y, R1.x, R1.x;\n"
2501 "MAD R1.z, R1.y, c[8].y, c[8];\n"
2502 "MAD R1.z, R1, R1.y, -c[8].w;\n"
2503 "MAD R1.z, R1, R1.y, c[9].x;\n"
2504 "MAD R1.z, R1, R1.y, -c[9].y;\n"
2505 "MAD R1.y, R1.z, R1, c[9].z;\n"
2506 "MUL R1.x, R1.y, R1;\n"
2507 "ADD R0.z, -R0, R0.w;\n"
2508 "ADD R1.y, -R1.x, c[9].w;\n"
2509 "CMP R0.z, -R0, R1.y, R1.x;\n"
2510 "ADD R0.w, -R0.z, c[10].x;\n"
2511 "CMP R0.x, R0, R0.w, R0.z;\n"
2512 "CMP R0.x, -R0.y, -R0, R0;\n"
2513 "ADD R0.x, R0, c[0];\n"
2514 "MUL R0.x, R0, c[10].y;\n"
2515 "FLR R0.y, R0.x;\n"
2516 "ADD R0.x, R0, -R0.y;\n"
2517 "TEX R0, R0, texture[2], 1D;\n"
2518 "MUL R1.xy, fragment.position, c[5];\n"
2519 "TEX R1, R1, texture[0], 2D;\n"
2520 "ADD R2.w, -R1, c[10];\n"
2521 "ADD R3.xyz, R0.w, -R0;\n"
2522 "ADD R2.xyz, R1.w, -R1;\n"
2523 "MUL R2.xyz, R2, R3;\n"
2524 "MUL R2.xyz, R2, c[10].z;\n"
2525 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
2526 "MUL R4.xyz, R0, R2.w;\n"
2527 "MUL R3.xyz, R0, R1;\n"
2528 "MAD R0.xyz, R0, R2.w, R2;\n"
2529 "ADD R2.x, -R0.w, c[10].w;\n"
2530 "MAD R3.xyz, R3, c[10].z, R4;\n"
2531 "MAD R3.xyz, R1, R2.x, R3;\n"
2532 "MAD R0.xyz, R1, R2.x, R0;\n"
2533 "MUL R2.xyz, R1, c[10].z;\n"
2534 "ADD R0.xyz, R0, -R3;\n"
2535 "SGE R2.xyz, R2, R1.w;\n"
2536 "MAD R2.xyz, R2, R0, R3;\n"
2537 "ADD R0.z, R0.w, R1.w;\n"
2538 "MAD R2.w, -R0, R1, R0.z;\n"
2539 "ADD R0.xy, fragment.position, c[6];\n"
2540 "MUL R0.xy, R0, c[4];\n"
2541 "TEX R0, R0, texture[1], 2D;\n"
2542 "ADD R2, R2, -R1;\n"
2543 "DP4 R0.x, R0, c[7];\n"
2544 "MAD result.color, R0.x, R2, R1;\n"
2545 "END\n"
2546 ;
2547
2548static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN =
2549 "!!ARBfp1.0\n"
2550 "PARAM c[11] = { program.local[0..7],\n"
2551 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
2552 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
2553 " { 0.33299461, 0.99999559, 1 } };\n"
2554 "TEMP R0;\n"
2555 "TEMP R1;\n"
2556 "TEMP R2;\n"
2557 "TEMP R3;\n"
2558 "MUL R0.xyz, fragment.position.y, c[2];\n"
2559 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2560 "ADD R0.xyz, R0, c[3];\n"
2561 "RCP R0.z, R0.z;\n"
2562 "MUL R0.xy, R0, R0.z;\n"
2563 "ABS R0.z, R0.x;\n"
2564 "ABS R0.w, R0.y;\n"
2565 "ADD R0.w, R0, -R0.z;\n"
2566 "ADD R1.x, R0.y, c[8].y;\n"
2567 "ABS R0.w, R0;\n"
2568 "CMP R0.y, -R0.w, R0, R1.x;\n"
2569 "ABS R0.w, -R0.y;\n"
2570 "MAX R1.x, R0.z, R0.w;\n"
2571 "RCP R1.y, R1.x;\n"
2572 "MIN R1.x, R0.z, R0.w;\n"
2573 "MUL R1.x, R1, R1.y;\n"
2574 "MUL R1.y, R1.x, R1.x;\n"
2575 "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
2576 "MAD R1.z, R1, R1.y, -c[9];\n"
2577 "MAD R1.z, R1, R1.y, c[9].w;\n"
2578 "MAD R1.z, R1, R1.y, -c[10].x;\n"
2579 "MAD R1.y, R1.z, R1, c[10];\n"
2580 "MUL R1.x, R1.y, R1;\n"
2581 "ADD R1.y, -R1.x, c[8].w;\n"
2582 "ADD R0.z, -R0, R0.w;\n"
2583 "CMP R0.z, -R0, R1.y, R1.x;\n"
2584 "ADD R0.w, -R0.z, c[8].z;\n"
2585 "CMP R0.x, R0, R0.w, R0.z;\n"
2586 "CMP R0.x, -R0.y, -R0, R0;\n"
2587 "ADD R0.x, R0, c[0];\n"
2588 "MUL R0.z, R0.x, c[8].x;\n"
2589 "FLR R0.w, R0.z;\n"
2590 "ADD R1.x, R0.z, -R0.w;\n"
2591 "MUL R0.xy, fragment.position, c[5];\n"
2592 "TEX R0, R0, texture[0], 2D;\n"
2593 "TEX R1, R1, texture[2], 1D;\n"
2594 "MUL R3.xyz, R1.w, R0;\n"
2595 "MUL R2.xyz, R1, R0.w;\n"
2596 "MIN R2.xyz, R2, R3;\n"
2597 "ADD R2.w, -R0, c[10].z;\n"
2598 "MAD R1.xyz, R1, R2.w, R2;\n"
2599 "ADD R2.x, -R1.w, c[10].z;\n"
2600 "MAD R2.xyz, R0, R2.x, R1;\n"
2601 "ADD R1.z, R1.w, R0.w;\n"
2602 "MAD R2.w, -R1, R0, R1.z;\n"
2603 "ADD R1.xy, fragment.position, c[6];\n"
2604 "MUL R1.xy, R1, c[4];\n"
2605 "TEX R1, R1, texture[1], 2D;\n"
2606 "ADD R2, R2, -R0;\n"
2607 "DP4 R1.x, R1, c[7];\n"
2608 "MAD result.color, R1.x, R2, R0;\n"
2609 "END\n"
2610 ;
2611
2612static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN =
2613 "!!ARBfp1.0\n"
2614 "PARAM c[11] = { program.local[0..7],\n"
2615 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
2616 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
2617 " { 0.33299461, 0.99999559, 1 } };\n"
2618 "TEMP R0;\n"
2619 "TEMP R1;\n"
2620 "TEMP R2;\n"
2621 "TEMP R3;\n"
2622 "MUL R0.xyz, fragment.position.y, c[2];\n"
2623 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2624 "ADD R0.xyz, R0, c[3];\n"
2625 "RCP R0.z, R0.z;\n"
2626 "MUL R0.xy, R0, R0.z;\n"
2627 "ABS R0.z, R0.x;\n"
2628 "ABS R0.w, R0.y;\n"
2629 "ADD R0.w, R0, -R0.z;\n"
2630 "ADD R1.x, R0.y, c[8].y;\n"
2631 "ABS R0.w, R0;\n"
2632 "CMP R0.y, -R0.w, R0, R1.x;\n"
2633 "ABS R0.w, -R0.y;\n"
2634 "MAX R1.x, R0.z, R0.w;\n"
2635 "RCP R1.y, R1.x;\n"
2636 "MIN R1.x, R0.z, R0.w;\n"
2637 "MUL R1.x, R1, R1.y;\n"
2638 "MUL R1.y, R1.x, R1.x;\n"
2639 "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
2640 "MAD R1.z, R1, R1.y, -c[9];\n"
2641 "MAD R1.z, R1, R1.y, c[9].w;\n"
2642 "MAD R1.z, R1, R1.y, -c[10].x;\n"
2643 "MAD R1.y, R1.z, R1, c[10];\n"
2644 "MUL R1.x, R1.y, R1;\n"
2645 "ADD R1.y, -R1.x, c[8].w;\n"
2646 "ADD R0.z, -R0, R0.w;\n"
2647 "CMP R0.z, -R0, R1.y, R1.x;\n"
2648 "ADD R0.w, -R0.z, c[8].z;\n"
2649 "CMP R0.x, R0, R0.w, R0.z;\n"
2650 "CMP R0.x, -R0.y, -R0, R0;\n"
2651 "ADD R0.x, R0, c[0];\n"
2652 "MUL R0.z, R0.x, c[8].x;\n"
2653 "FLR R0.w, R0.z;\n"
2654 "ADD R1.x, R0.z, -R0.w;\n"
2655 "MUL R0.xy, fragment.position, c[5];\n"
2656 "TEX R0, R0, texture[0], 2D;\n"
2657 "TEX R1, R1, texture[2], 1D;\n"
2658 "MUL R3.xyz, R1.w, R0;\n"
2659 "MUL R2.xyz, R1, R0.w;\n"
2660 "MAX R2.xyz, R2, R3;\n"
2661 "ADD R2.w, -R0, c[10].z;\n"
2662 "MAD R1.xyz, R1, R2.w, R2;\n"
2663 "ADD R2.x, -R1.w, c[10].z;\n"
2664 "MAD R2.xyz, R0, R2.x, R1;\n"
2665 "ADD R1.z, R1.w, R0.w;\n"
2666 "MAD R2.w, -R1, R0, R1.z;\n"
2667 "ADD R1.xy, fragment.position, c[6];\n"
2668 "MUL R1.xy, R1, c[4];\n"
2669 "TEX R1, R1, texture[1], 2D;\n"
2670 "ADD R2, R2, -R0;\n"
2671 "DP4 R1.x, R1, c[7];\n"
2672 "MAD result.color, R1.x, R2, R0;\n"
2673 "END\n"
2674 ;
2675
2676static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE =
2677 "!!ARBfp1.0\n"
2678 "PARAM c[11] = { program.local[0..7],\n"
2679 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
2680 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
2681 " { 3.141593, 0.15915494, 1, 1e-006 } };\n"
2682 "TEMP R0;\n"
2683 "TEMP R1;\n"
2684 "TEMP R2;\n"
2685 "TEMP R3;\n"
2686 "TEMP R4;\n"
2687 "MUL R0.xyz, fragment.position.y, c[2];\n"
2688 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2689 "ADD R0.xyz, R0, c[3];\n"
2690 "RCP R0.z, R0.z;\n"
2691 "MUL R0.xy, R0, R0.z;\n"
2692 "ABS R0.z, R0.x;\n"
2693 "ABS R0.w, R0.y;\n"
2694 "ADD R0.w, R0, -R0.z;\n"
2695 "ADD R1.x, R0.y, c[8];\n"
2696 "ABS R0.w, R0;\n"
2697 "CMP R0.y, -R0.w, R0, R1.x;\n"
2698 "ABS R0.w, -R0.y;\n"
2699 "MAX R1.x, R0.z, R0.w;\n"
2700 "RCP R1.y, R1.x;\n"
2701 "MIN R1.x, R0.z, R0.w;\n"
2702 "MUL R1.x, R1, R1.y;\n"
2703 "MUL R1.y, R1.x, R1.x;\n"
2704 "MAD R1.z, R1.y, c[8].y, c[8];\n"
2705 "MAD R1.z, R1, R1.y, -c[8].w;\n"
2706 "MAD R1.z, R1, R1.y, c[9].x;\n"
2707 "MAD R1.z, R1, R1.y, -c[9].y;\n"
2708 "MAD R1.y, R1.z, R1, c[9].z;\n"
2709 "MUL R1.x, R1.y, R1;\n"
2710 "ADD R1.y, -R1.x, c[9].w;\n"
2711 "ADD R0.z, -R0, R0.w;\n"
2712 "CMP R0.z, -R0, R1.y, R1.x;\n"
2713 "ADD R0.w, -R0.z, c[10].x;\n"
2714 "CMP R0.x, R0, R0.w, R0.z;\n"
2715 "CMP R0.x, -R0.y, -R0, R0;\n"
2716 "ADD R0.x, R0, c[0];\n"
2717 "MUL R0.x, R0, c[10].y;\n"
2718 "FLR R0.y, R0.x;\n"
2719 "ADD R0.x, R0, -R0.y;\n"
2720 "TEX R0, R0, texture[2], 1D;\n"
2721 "MAX R1.x, R0.w, c[10].w;\n"
2722 "RCP R1.x, R1.x;\n"
2723 "MAD R1.xyz, -R0, R1.x, c[10].z;\n"
2724 "MAX R2.xyz, R1, c[10].w;\n"
2725 "MUL R1.xy, fragment.position, c[5];\n"
2726 "TEX R1, R1, texture[0], 2D;\n"
2727 "ADD R2.w, -R0, c[10].z;\n"
2728 "MUL R3.xyz, R1, R2.w;\n"
2729 "ADD R2.w, -R1, c[10].z;\n"
2730 "MAD R4.xyz, R0, R2.w, R3;\n"
2731 "MUL R3.xyz, R0.w, R1;\n"
2732 "MUL R2.w, R0, R1;\n"
2733 "MAD R0.xyz, R0, R1.w, R3;\n"
2734 "SGE R0.xyz, R0, R2.w;\n"
2735 "RCP R2.x, R2.x;\n"
2736 "RCP R2.y, R2.y;\n"
2737 "RCP R2.z, R2.z;\n"
2738 "MAD R2.xyz, R3, R2, R4;\n"
2739 "MAD R4.xyz, R0.w, R1.w, R4;\n"
2740 "ADD R4.xyz, R4, -R2;\n"
2741 "MAD R2.xyz, R0, R4, R2;\n"
2742 "ADD R0.z, R0.w, R1.w;\n"
2743 "MAD R2.w, -R0, R1, R0.z;\n"
2744 "ADD R0.xy, fragment.position, c[6];\n"
2745 "MUL R0.xy, R0, c[4];\n"
2746 "TEX R0, R0, texture[1], 2D;\n"
2747 "ADD R2, R2, -R1;\n"
2748 "DP4 R0.x, R0, c[7];\n"
2749 "MAD result.color, R0.x, R2, R1;\n"
2750 "END\n"
2751 ;
2752
2753static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN =
2754 "!!ARBfp1.0\n"
2755 "PARAM c[11] = { program.local[0..7],\n"
2756 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
2757 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
2758 " { 3.141593, 0.15915494, 1, 9.9999997e-006 } };\n"
2759 "TEMP R0;\n"
2760 "TEMP R1;\n"
2761 "TEMP R2;\n"
2762 "TEMP R3;\n"
2763 "TEMP R4;\n"
2764 "TEMP R5;\n"
2765 "MUL R0.xyz, fragment.position.y, c[2];\n"
2766 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2767 "ADD R0.xyz, R0, c[3];\n"
2768 "RCP R0.z, R0.z;\n"
2769 "MUL R0.xy, R0, R0.z;\n"
2770 "ABS R0.w, R0.x;\n"
2771 "ABS R0.z, R0.y;\n"
2772 "ADD R0.z, R0, -R0.w;\n"
2773 "ADD R1.x, R0.y, c[8];\n"
2774 "ABS R0.z, R0;\n"
2775 "CMP R0.y, -R0.z, R0, R1.x;\n"
2776 "ABS R0.z, -R0.y;\n"
2777 "MAX R1.x, R0.w, R0.z;\n"
2778 "RCP R1.y, R1.x;\n"
2779 "MIN R1.x, R0.w, R0.z;\n"
2780 "MUL R1.x, R1, R1.y;\n"
2781 "MUL R1.y, R1.x, R1.x;\n"
2782 "MAD R1.z, R1.y, c[8].y, c[8];\n"
2783 "MAD R1.z, R1, R1.y, -c[8].w;\n"
2784 "MAD R1.z, R1, R1.y, c[9].x;\n"
2785 "MAD R1.z, R1, R1.y, -c[9].y;\n"
2786 "MAD R1.y, R1.z, R1, c[9].z;\n"
2787 "MUL R1.x, R1.y, R1;\n"
2788 "ADD R1.y, -R1.x, c[9].w;\n"
2789 "ADD R0.z, -R0.w, R0;\n"
2790 "CMP R0.z, -R0, R1.y, R1.x;\n"
2791 "ADD R0.w, -R0.z, c[10].x;\n"
2792 "CMP R0.x, R0, R0.w, R0.z;\n"
2793 "CMP R0.x, -R0.y, -R0, R0;\n"
2794 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
2795 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2796 "ADD R0.x, R0, c[0];\n"
2797 "MUL R0.x, R0, c[10].y;\n"
2798 "FLR R0.y, R0.x;\n"
2799 "ADD R0.x, R0, -R0.y;\n"
2800 "TEX R0, R0, texture[2], 1D;\n"
2801 "MUL R2.xyz, R0.w, R1;\n"
2802 "MAD R3.xyz, R0, R1.w, R2;\n"
2803 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
2804 "MUL R4.xyz, R0.w, R2;\n"
2805 "MAX R2.xyz, R0, c[10].w;\n"
2806 "ADD R2.w, -R1, c[10].z;\n"
2807 "ADD R3.w, -R0, c[10].z;\n"
2808 "MUL R5.xyz, R0, R2.w;\n"
2809 "RCP R2.x, R2.x;\n"
2810 "RCP R2.y, R2.y;\n"
2811 "RCP R2.z, R2.z;\n"
2812 "MAD R2.xyz, R4, R2, R5;\n"
2813 "MUL R4.xyz, R1, R3.w;\n"
2814 "MAD R0.xyz, R0, R2.w, R4;\n"
2815 "MUL R2.w, R0, R1;\n"
2816 "MAD R2.xyz, R1, R3.w, R2;\n"
2817 "ADD R2.xyz, R2, -R0;\n"
2818 "SGE R3.xyz, R3, R2.w;\n"
2819 "MAD R2.xyz, R3, R2, R0;\n"
2820 "ADD R0.z, R0.w, R1.w;\n"
2821 "MAD R2.w, -R0, R1, R0.z;\n"
2822 "ADD R0.xy, fragment.position, c[6];\n"
2823 "MUL R0.xy, R0, c[4];\n"
2824 "TEX R0, R0, texture[1], 2D;\n"
2825 "ADD R2, R2, -R1;\n"
2826 "DP4 R0.x, R0, c[7];\n"
2827 "MAD result.color, R0.x, R2, R1;\n"
2828 "END\n"
2829 ;
2830
2831static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT =
2832 "!!ARBfp1.0\n"
2833 "PARAM c[11] = { program.local[0..7],\n"
2834 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
2835 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
2836 " { 3.141593, 0.15915494, 2, 1 } };\n"
2837 "TEMP R0;\n"
2838 "TEMP R1;\n"
2839 "TEMP R2;\n"
2840 "TEMP R3;\n"
2841 "TEMP R4;\n"
2842 "MUL R0.xyz, fragment.position.y, c[2];\n"
2843 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2844 "ADD R0.xyz, R0, c[3];\n"
2845 "RCP R0.z, R0.z;\n"
2846 "MUL R0.xy, R0, R0.z;\n"
2847 "ABS R0.z, R0.x;\n"
2848 "ABS R0.w, R0.y;\n"
2849 "ADD R0.w, R0, -R0.z;\n"
2850 "ADD R1.x, R0.y, c[8];\n"
2851 "ABS R0.w, R0;\n"
2852 "CMP R0.y, -R0.w, R0, R1.x;\n"
2853 "ABS R0.w, -R0.y;\n"
2854 "MAX R1.x, R0.z, R0.w;\n"
2855 "RCP R1.y, R1.x;\n"
2856 "MIN R1.x, R0.z, R0.w;\n"
2857 "MUL R1.x, R1, R1.y;\n"
2858 "MUL R1.y, R1.x, R1.x;\n"
2859 "MAD R1.z, R1.y, c[8].y, c[8];\n"
2860 "MAD R1.z, R1, R1.y, -c[8].w;\n"
2861 "MAD R1.z, R1, R1.y, c[9].x;\n"
2862 "MAD R1.z, R1, R1.y, -c[9].y;\n"
2863 "MAD R1.y, R1.z, R1, c[9].z;\n"
2864 "MUL R1.x, R1.y, R1;\n"
2865 "ADD R0.z, -R0, R0.w;\n"
2866 "ADD R1.y, -R1.x, c[9].w;\n"
2867 "CMP R0.z, -R0, R1.y, R1.x;\n"
2868 "ADD R0.w, -R0.z, c[10].x;\n"
2869 "CMP R0.x, R0, R0.w, R0.z;\n"
2870 "CMP R0.x, -R0.y, -R0, R0;\n"
2871 "ADD R0.x, R0, c[0];\n"
2872 "MUL R0.x, R0, c[10].y;\n"
2873 "FLR R0.y, R0.x;\n"
2874 "ADD R0.x, R0, -R0.y;\n"
2875 "TEX R0, R0, texture[2], 1D;\n"
2876 "MUL R1.xy, fragment.position, c[5];\n"
2877 "TEX R1, R1, texture[0], 2D;\n"
2878 "ADD R2.w, -R1, c[10];\n"
2879 "ADD R3.xyz, R0.w, -R0;\n"
2880 "ADD R2.xyz, R1.w, -R1;\n"
2881 "MUL R2.xyz, R2, R3;\n"
2882 "MUL R2.xyz, R2, c[10].z;\n"
2883 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
2884 "MUL R4.xyz, R0, R2.w;\n"
2885 "MAD R2.xyz, R0, R2.w, R2;\n"
2886 "MUL R3.xyz, R0, R1;\n"
2887 "ADD R2.w, -R0, c[10];\n"
2888 "MAD R3.xyz, R3, c[10].z, R4;\n"
2889 "MUL R0.xyz, R0, c[10].z;\n"
2890 "SGE R0.xyz, R0, R0.w;\n"
2891 "MAD R3.xyz, R1, R2.w, R3;\n"
2892 "MAD R2.xyz, R1, R2.w, R2;\n"
2893 "ADD R2.xyz, R2, -R3;\n"
2894 "MAD R2.xyz, R0, R2, R3;\n"
2895 "ADD R0.z, R0.w, R1.w;\n"
2896 "MAD R2.w, -R0, R1, R0.z;\n"
2897 "ADD R0.xy, fragment.position, c[6];\n"
2898 "MUL R0.xy, R0, c[4];\n"
2899 "TEX R0, R0, texture[1], 2D;\n"
2900 "ADD R2, R2, -R1;\n"
2901 "DP4 R0.x, R0, c[7];\n"
2902 "MAD result.color, R0.x, R2, R1;\n"
2903 "END\n"
2904 ;
2905
2906static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT =
2907 "!!ARBfp1.0\n"
2908 "PARAM c[13] = { program.local[0..7],\n"
2909 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
2910 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
2911 " { 3.141593, 0.15915494, 1, 2 },\n"
2912 " { 9.9999997e-006, 4, 16, 12 },\n"
2913 " { 3 } };\n"
2914 "TEMP R0;\n"
2915 "TEMP R1;\n"
2916 "TEMP R2;\n"
2917 "TEMP R3;\n"
2918 "TEMP R4;\n"
2919 "TEMP R5;\n"
2920 "TEMP R6;\n"
2921 "MUL R0.xyz, fragment.position.y, c[2];\n"
2922 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
2923 "ADD R0.xyz, R0, c[3];\n"
2924 "RCP R0.z, R0.z;\n"
2925 "MUL R0.xy, R0, R0.z;\n"
2926 "ABS R0.w, R0.x;\n"
2927 "ABS R0.z, R0.y;\n"
2928 "ADD R0.z, R0, -R0.w;\n"
2929 "ADD R1.x, R0.y, c[8];\n"
2930 "ABS R0.z, R0;\n"
2931 "CMP R0.y, -R0.z, R0, R1.x;\n"
2932 "ABS R0.z, -R0.y;\n"
2933 "MAX R1.x, R0.w, R0.z;\n"
2934 "RCP R1.y, R1.x;\n"
2935 "MIN R1.x, R0.w, R0.z;\n"
2936 "MUL R1.x, R1, R1.y;\n"
2937 "MUL R1.y, R1.x, R1.x;\n"
2938 "MAD R1.z, R1.y, c[8].y, c[8];\n"
2939 "MAD R1.z, R1, R1.y, -c[8].w;\n"
2940 "MAD R1.z, R1, R1.y, c[9].x;\n"
2941 "MAD R1.z, R1, R1.y, -c[9].y;\n"
2942 "MAD R1.y, R1.z, R1, c[9].z;\n"
2943 "MUL R1.x, R1.y, R1;\n"
2944 "ADD R1.y, -R1.x, c[9].w;\n"
2945 "ADD R0.z, -R0.w, R0;\n"
2946 "CMP R0.z, -R0, R1.y, R1.x;\n"
2947 "ADD R0.w, -R0.z, c[10].x;\n"
2948 "CMP R0.x, R0, R0.w, R0.z;\n"
2949 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
2950 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2951 "CMP R0.x, -R0.y, -R0, R0;\n"
2952 "MAX R0.z, R1.w, c[11].x;\n"
2953 "RCP R2.x, R0.z;\n"
2954 "MUL R3.xyz, R1, R2.x;\n"
2955 "MAD R4.xyz, R3, c[11].z, -c[11].w;\n"
2956 "ADD R0.x, R0, c[0];\n"
2957 "MUL R0.x, R0, c[10].y;\n"
2958 "FLR R0.y, R0.x;\n"
2959 "ADD R0.x, R0, -R0.y;\n"
2960 "TEX R0, R0, texture[2], 1D;\n"
2961 "MAD R2.xyz, R0, c[10].w, -R0.w;\n"
2962 "MAD R4.xyz, R3, R4, c[12].x;\n"
2963 "MUL R5.xyz, R1.w, R2;\n"
2964 "MUL R6.xyz, R5, R4;\n"
2965 "RSQ R2.w, R3.x;\n"
2966 "RCP R4.x, R2.w;\n"
2967 "RSQ R2.w, R3.y;\n"
2968 "RSQ R3.w, R3.z;\n"
2969 "RCP R4.y, R2.w;\n"
2970 "RCP R4.z, R3.w;\n"
2971 "ADD R4.xyz, -R3, R4;\n"
2972 "MUL R6.xyz, R3, R6;\n"
2973 "MUL R4.xyz, R5, R4;\n"
2974 "ADD R3.xyz, -R3, c[10].z;\n"
2975 "MAD R2.xyz, R2, R3, R0.w;\n"
2976 "MUL R3.xyz, R0, c[10].w;\n"
2977 "MAD R5.xyz, R0.w, R1, R6;\n"
2978 "MAD R4.xyz, R0.w, R1, R4;\n"
2979 "ADD R6.xyz, R4, -R5;\n"
2980 "MUL R4.xyz, R1, c[11].y;\n"
2981 "SGE R4.xyz, R4, R1.w;\n"
2982 "MAD R4.xyz, R4, R6, R5;\n"
2983 "MAD R4.xyz, -R1, R2, R4;\n"
2984 "SGE R3.xyz, R3, R0.w;\n"
2985 "MUL R2.xyz, R1, R2;\n"
2986 "ADD R2.w, -R1, c[10].z;\n"
2987 "MAD R2.xyz, R3, R4, R2;\n"
2988 "MAD R2.xyz, R0, R2.w, R2;\n"
2989 "ADD R0.x, -R0.w, c[10].z;\n"
2990 "MAD R2.xyz, R1, R0.x, R2;\n"
2991 "ADD R0.z, R0.w, R1.w;\n"
2992 "MAD R2.w, -R0, R1, R0.z;\n"
2993 "ADD R0.xy, fragment.position, c[6];\n"
2994 "MUL R0.xy, R0, c[4];\n"
2995 "TEX R0, R0, texture[1], 2D;\n"
2996 "ADD R2, R2, -R1;\n"
2997 "DP4 R0.x, R0, c[7];\n"
2998 "MAD result.color, R0.x, R2, R1;\n"
2999 "END\n"
3000 ;
3001
3002static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE =
3003 "!!ARBfp1.0\n"
3004 "PARAM c[11] = { program.local[0..7],\n"
3005 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3006 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3007 " { 0.33299461, 0.99999559, 2 } };\n"
3008 "TEMP R0;\n"
3009 "TEMP R1;\n"
3010 "TEMP R2;\n"
3011 "TEMP R3;\n"
3012 "MUL R0.xyz, fragment.position.y, c[2];\n"
3013 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3014 "ADD R0.xyz, R0, c[3];\n"
3015 "RCP R0.z, R0.z;\n"
3016 "MUL R0.xy, R0, R0.z;\n"
3017 "ABS R0.z, R0.x;\n"
3018 "ABS R0.w, R0.y;\n"
3019 "ADD R0.w, R0, -R0.z;\n"
3020 "ADD R1.x, R0.y, c[8].y;\n"
3021 "ABS R0.w, R0;\n"
3022 "CMP R0.y, -R0.w, R0, R1.x;\n"
3023 "ABS R0.w, -R0.y;\n"
3024 "MAX R1.x, R0.z, R0.w;\n"
3025 "RCP R1.y, R1.x;\n"
3026 "MIN R1.x, R0.z, R0.w;\n"
3027 "MUL R1.x, R1, R1.y;\n"
3028 "MUL R1.y, R1.x, R1.x;\n"
3029 "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
3030 "MAD R1.z, R1, R1.y, -c[9];\n"
3031 "MAD R1.z, R1, R1.y, c[9].w;\n"
3032 "MAD R1.z, R1, R1.y, -c[10].x;\n"
3033 "MAD R1.y, R1.z, R1, c[10];\n"
3034 "MUL R1.x, R1.y, R1;\n"
3035 "ADD R1.y, -R1.x, c[8].w;\n"
3036 "ADD R0.z, -R0, R0.w;\n"
3037 "CMP R0.z, -R0, R1.y, R1.x;\n"
3038 "ADD R0.w, -R0.z, c[8].z;\n"
3039 "CMP R0.x, R0, R0.w, R0.z;\n"
3040 "CMP R0.x, -R0.y, -R0, R0;\n"
3041 "ADD R0.x, R0, c[0];\n"
3042 "MUL R0.z, R0.x, c[8].x;\n"
3043 "FLR R0.w, R0.z;\n"
3044 "ADD R1.x, R0.z, -R0.w;\n"
3045 "MUL R0.xy, fragment.position, c[5];\n"
3046 "TEX R0, R0, texture[0], 2D;\n"
3047 "TEX R1, R1, texture[2], 1D;\n"
3048 "ADD R2.xyz, R1, R0;\n"
3049 "MUL R3.xyz, R1.w, R0;\n"
3050 "MUL R1.xyz, R1, R0.w;\n"
3051 "MIN R1.xyz, R1, R3;\n"
3052 "MAD R2.xyz, -R1, c[10].z, R2;\n"
3053 "ADD R1.z, R1.w, R0.w;\n"
3054 "MAD R2.w, -R1, R0, R1.z;\n"
3055 "ADD R1.xy, fragment.position, c[6];\n"
3056 "MUL R1.xy, R1, c[4];\n"
3057 "TEX R1, R1, texture[1], 2D;\n"
3058 "ADD R2, R2, -R0;\n"
3059 "DP4 R1.x, R1, c[7];\n"
3060 "MAD result.color, R1.x, R2, R0;\n"
3061 "END\n"
3062 ;
3063
3064static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION =
3065 "!!ARBfp1.0\n"
3066 "PARAM c[11] = { program.local[0..7],\n"
3067 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3068 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3069 " { 0.33299461, 0.99999559, 2, 1 } };\n"
3070 "TEMP R0;\n"
3071 "TEMP R1;\n"
3072 "TEMP R2;\n"
3073 "TEMP R3;\n"
3074 "MUL R0.xyz, fragment.position.y, c[2];\n"
3075 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3076 "ADD R0.xyz, R0, c[3];\n"
3077 "RCP R0.z, R0.z;\n"
3078 "MUL R0.xy, R0, R0.z;\n"
3079 "ABS R0.z, R0.x;\n"
3080 "ABS R0.w, R0.y;\n"
3081 "ADD R0.w, R0, -R0.z;\n"
3082 "ADD R1.x, R0.y, c[8].y;\n"
3083 "ABS R0.w, R0;\n"
3084 "CMP R0.y, -R0.w, R0, R1.x;\n"
3085 "ABS R0.w, -R0.y;\n"
3086 "MAX R1.x, R0.z, R0.w;\n"
3087 "RCP R1.y, R1.x;\n"
3088 "MIN R1.x, R0.z, R0.w;\n"
3089 "MUL R1.x, R1, R1.y;\n"
3090 "MUL R1.y, R1.x, R1.x;\n"
3091 "MAD R1.z, R1.y, c[9].x, c[9].y;\n"
3092 "MAD R1.z, R1, R1.y, -c[9];\n"
3093 "MAD R1.z, R1, R1.y, c[9].w;\n"
3094 "MAD R1.z, R1, R1.y, -c[10].x;\n"
3095 "MAD R1.y, R1.z, R1, c[10];\n"
3096 "MUL R1.x, R1.y, R1;\n"
3097 "ADD R1.y, -R1.x, c[8].w;\n"
3098 "ADD R0.z, -R0, R0.w;\n"
3099 "CMP R0.z, -R0, R1.y, R1.x;\n"
3100 "ADD R0.w, -R0.z, c[8].z;\n"
3101 "CMP R0.x, R0, R0.w, R0.z;\n"
3102 "CMP R0.x, -R0.y, -R0, R0;\n"
3103 "ADD R0.x, R0, c[0];\n"
3104 "MUL R0.z, R0.x, c[8].x;\n"
3105 "FLR R0.w, R0.z;\n"
3106 "ADD R1.x, R0.z, -R0.w;\n"
3107 "MUL R0.xy, fragment.position, c[5];\n"
3108 "TEX R0, R0, texture[0], 2D;\n"
3109 "TEX R1, R1, texture[2], 1D;\n"
3110 "MUL R2.xyz, R1.w, R0;\n"
3111 "MAD R3.xyz, R1, R0.w, R2;\n"
3112 "MUL R2.xyz, R1, R0;\n"
3113 "MAD R2.xyz, -R2, c[10].z, R3;\n"
3114 "ADD R2.w, -R0, c[10];\n"
3115 "MAD R1.xyz, R1, R2.w, R2;\n"
3116 "ADD R2.x, -R1.w, c[10].w;\n"
3117 "MAD R2.xyz, R0, R2.x, R1;\n"
3118 "ADD R1.z, R1.w, R0.w;\n"
3119 "MAD R2.w, -R1, R0, R1.z;\n"
3120 "ADD R1.xy, fragment.position, c[6];\n"
3121 "MUL R1.xy, R1, c[4];\n"
3122 "TEX R1, R1, texture[1], 2D;\n"
3123 "ADD R2, R2, -R0;\n"
3124 "DP4 R1.x, R1, c[7];\n"
3125 "MAD result.color, R1.x, R2, R0;\n"
3126 "END\n"
3127 ;
3128
3129static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
3130 "!!ARBfp1.0\n"
3131 "PARAM c[10] = { program.local[0..6],\n"
3132 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3133 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3134 " { 0.33299461, 0.99999559, 1 } };\n"
3135 "TEMP R0;\n"
3136 "TEMP R1;\n"
3137 "TEMP R2;\n"
3138 "TEMP R3;\n"
3139 "MUL R0.xyz, fragment.position.y, c[2];\n"
3140 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3141 "ADD R0.xyz, R0, c[3];\n"
3142 "RCP R0.z, R0.z;\n"
3143 "MUL R0.xy, R0, R0.z;\n"
3144 "ABS R0.z, R0.x;\n"
3145 "ABS R0.w, R0.y;\n"
3146 "ADD R0.w, R0, -R0.z;\n"
3147 "ADD R1.x, R0.y, c[7].y;\n"
3148 "ABS R0.w, R0;\n"
3149 "CMP R0.y, -R0.w, R0, R1.x;\n"
3150 "ABS R0.w, -R0.y;\n"
3151 "MAX R1.x, R0.z, R0.w;\n"
3152 "RCP R1.y, R1.x;\n"
3153 "MIN R1.x, R0.z, R0.w;\n"
3154 "MUL R1.x, R1, R1.y;\n"
3155 "MUL R1.y, R1.x, R1.x;\n"
3156 "MAD R1.z, R1.y, c[8].x, c[8].y;\n"
3157 "MAD R1.z, R1, R1.y, -c[8];\n"
3158 "MAD R1.z, R1, R1.y, c[8].w;\n"
3159 "MAD R1.z, R1, R1.y, -c[9].x;\n"
3160 "MAD R1.y, R1.z, R1, c[9];\n"
3161 "MUL R1.x, R1.y, R1;\n"
3162 "ADD R0.z, -R0, R0.w;\n"
3163 "ADD R1.y, -R1.x, c[7].w;\n"
3164 "CMP R0.z, -R0, R1.y, R1.x;\n"
3165 "ADD R0.w, -R0.z, c[7].z;\n"
3166 "CMP R0.x, R0, R0.w, R0.z;\n"
3167 "CMP R0.x, -R0.y, -R0, R0;\n"
3168 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
3169 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3170 "MUL R2.xyz, R1, c[4].y;\n"
3171 "ADD R0.x, R0, c[0];\n"
3172 "MUL R0.x, R0, c[7];\n"
3173 "FLR R0.y, R0.x;\n"
3174 "ADD R0.x, R0, -R0.y;\n"
3175 "TEX R0, R0, texture[1], 1D;\n"
3176 "MUL R3.xyz, R0.w, R2;\n"
3177 "MUL R2.xyz, R0, c[4].x;\n"
3178 "MAD R2.xyz, R1.w, R2, R3;\n"
3179 "ADD R2.w, -R1, c[9].z;\n"
3180 "MUL R0.xyz, R0, c[5].y;\n"
3181 "MAD R0.xyz, R2.w, R0, R2;\n"
3182 "ADD R2.x, -R0.w, c[9].z;\n"
3183 "MUL R1.xyz, R1, c[5].z;\n"
3184 "MAD result.color.xyz, R2.x, R1, R0;\n"
3185 "MUL R0.x, R0.w, R1.w;\n"
3186 "MUL R0.z, R1.w, R2.x;\n"
3187 "MUL R0.y, R0.w, R2.w;\n"
3188 "DP3 result.color.w, R0, c[5];\n"
3189 "END\n"
3190 ;
3191
3192static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
3193 "!!ARBfp1.0\n"
3194 "PARAM c[8] = { program.local[0..4],\n"
3195 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3196 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3197 " { 0.33299461, 0.99999559, 1 } };\n"
3198 "TEMP R0;\n"
3199 "TEMP R1;\n"
3200 "TEMP R2;\n"
3201 "MUL R0.xyz, fragment.position.y, c[2];\n"
3202 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3203 "ADD R0.xyz, R0, c[3];\n"
3204 "RCP R0.z, R0.z;\n"
3205 "MUL R0.xy, R0, R0.z;\n"
3206 "ABS R0.z, R0.x;\n"
3207 "ABS R0.w, R0.y;\n"
3208 "ADD R0.w, R0, -R0.z;\n"
3209 "ADD R1.x, R0.y, c[5].y;\n"
3210 "ABS R0.w, R0;\n"
3211 "CMP R0.y, -R0.w, R0, R1.x;\n"
3212 "ABS R0.w, -R0.y;\n"
3213 "MAX R1.x, R0.z, R0.w;\n"
3214 "RCP R1.y, R1.x;\n"
3215 "MIN R1.x, R0.z, R0.w;\n"
3216 "MUL R1.x, R1, R1.y;\n"
3217 "MUL R1.y, R1.x, R1.x;\n"
3218 "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
3219 "MAD R1.z, R1, R1.y, -c[6];\n"
3220 "MAD R1.z, R1, R1.y, c[6].w;\n"
3221 "MAD R1.z, R1, R1.y, -c[7].x;\n"
3222 "MAD R1.y, R1.z, R1, c[7];\n"
3223 "MUL R1.x, R1.y, R1;\n"
3224 "ADD R0.z, -R0, R0.w;\n"
3225 "ADD R1.y, -R1.x, c[5].w;\n"
3226 "CMP R0.z, -R0, R1.y, R1.x;\n"
3227 "ADD R0.w, -R0.z, c[5].z;\n"
3228 "CMP R0.x, R0, R0.w, R0.z;\n"
3229 "CMP R0.x, -R0.y, -R0, R0;\n"
3230 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3231 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3232 "ADD R0.x, R0, c[0];\n"
3233 "MUL R0.x, R0, c[5];\n"
3234 "FLR R0.y, R0.x;\n"
3235 "ADD R0.x, R0, -R0.y;\n"
3236 "TEX R0, R0, texture[1], 1D;\n"
3237 "ADD R2.x, -R1.w, c[7].z;\n"
3238 "MUL R2.xyz, R0, R2.x;\n"
3239 "MAD R0.xyz, R0, R1, R2;\n"
3240 "ADD R2.x, R0.w, R1.w;\n"
3241 "ADD R2.y, -R0.w, c[7].z;\n"
3242 "MAD result.color.xyz, R1, R2.y, R0;\n"
3243 "MAD result.color.w, -R0, R1, R2.x;\n"
3244 "END\n"
3245 ;
3246
3247static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK =
3248 "!!ARBfp1.0\n"
3249 "PARAM c[8] = { program.local[0..4],\n"
3250 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3251 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3252 " { 0.33299461, 0.99999559 } };\n"
3253 "TEMP R0;\n"
3254 "TEMP R1;\n"
3255 "TEMP R2;\n"
3256 "MUL R0.xyz, fragment.position.y, c[2];\n"
3257 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3258 "ADD R0.xyz, R0, c[3];\n"
3259 "RCP R0.z, R0.z;\n"
3260 "MUL R0.xy, R0, R0.z;\n"
3261 "ABS R0.z, R0.x;\n"
3262 "ABS R0.w, R0.y;\n"
3263 "ADD R0.w, R0, -R0.z;\n"
3264 "ADD R1.x, R0.y, c[5].y;\n"
3265 "ABS R0.w, R0;\n"
3266 "CMP R0.y, -R0.w, R0, R1.x;\n"
3267 "ABS R0.w, -R0.y;\n"
3268 "MAX R1.x, R0.z, R0.w;\n"
3269 "RCP R1.y, R1.x;\n"
3270 "MIN R1.x, R0.z, R0.w;\n"
3271 "MUL R1.x, R1, R1.y;\n"
3272 "MUL R1.y, R1.x, R1.x;\n"
3273 "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
3274 "MAD R1.z, R1, R1.y, -c[6];\n"
3275 "MAD R1.z, R1, R1.y, c[6].w;\n"
3276 "MAD R1.z, R1, R1.y, -c[7].x;\n"
3277 "MAD R1.y, R1.z, R1, c[7];\n"
3278 "MUL R1.x, R1.y, R1;\n"
3279 "ADD R0.z, -R0, R0.w;\n"
3280 "ADD R1.y, -R1.x, c[5].w;\n"
3281 "CMP R0.z, -R0, R1.y, R1.x;\n"
3282 "ADD R0.w, -R0.z, c[5].z;\n"
3283 "CMP R0.x, R0, R0.w, R0.z;\n"
3284 "CMP R0.x, -R0.y, -R0, R0;\n"
3285 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3286 "ADD R0.x, R0, c[0];\n"
3287 "MUL R0.x, R0, c[5];\n"
3288 "FLR R0.y, R0.x;\n"
3289 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3290 "ADD R0.x, R0, -R0.y;\n"
3291 "TEX R0, R0, texture[1], 1D;\n"
3292 "ADD R2, R0, R1;\n"
3293 "MAD result.color, -R0, R1, R2;\n"
3294 "END\n"
3295 ;
3296
3297static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK =
3298 "!!ARBfp1.0\n"
3299 "PARAM c[8] = { program.local[0..4],\n"
3300 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
3301 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
3302 " { 3.141593, 0.15915494, 2, 1 } };\n"
3303 "TEMP R0;\n"
3304 "TEMP R1;\n"
3305 "TEMP R2;\n"
3306 "TEMP R3;\n"
3307 "MUL R0.xyz, fragment.position.y, c[2];\n"
3308 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3309 "ADD R0.xyz, R0, c[3];\n"
3310 "RCP R0.z, R0.z;\n"
3311 "MUL R0.xy, R0, R0.z;\n"
3312 "ABS R0.z, R0.x;\n"
3313 "ABS R0.w, R0.y;\n"
3314 "ADD R0.w, R0, -R0.z;\n"
3315 "ADD R1.x, R0.y, c[5];\n"
3316 "ABS R0.w, R0;\n"
3317 "CMP R0.y, -R0.w, R0, R1.x;\n"
3318 "ABS R0.w, -R0.y;\n"
3319 "MAX R1.x, R0.z, R0.w;\n"
3320 "RCP R1.y, R1.x;\n"
3321 "MIN R1.x, R0.z, R0.w;\n"
3322 "MUL R1.x, R1, R1.y;\n"
3323 "MUL R1.y, R1.x, R1.x;\n"
3324 "MAD R1.z, R1.y, c[5].y, c[5];\n"
3325 "MAD R1.z, R1, R1.y, -c[5].w;\n"
3326 "MAD R1.z, R1, R1.y, c[6].x;\n"
3327 "MAD R1.z, R1, R1.y, -c[6].y;\n"
3328 "MAD R1.y, R1.z, R1, c[6].z;\n"
3329 "MUL R1.x, R1.y, R1;\n"
3330 "ADD R0.z, -R0, R0.w;\n"
3331 "ADD R1.y, -R1.x, c[6].w;\n"
3332 "CMP R0.z, -R0, R1.y, R1.x;\n"
3333 "ADD R0.w, -R0.z, c[7].x;\n"
3334 "CMP R0.x, R0, R0.w, R0.z;\n"
3335 "CMP R0.x, -R0.y, -R0, R0;\n"
3336 "ADD R0.x, R0, c[0];\n"
3337 "MUL R0.x, R0, c[7].y;\n"
3338 "FLR R0.y, R0.x;\n"
3339 "ADD R0.x, R0, -R0.y;\n"
3340 "TEX R0, R0, texture[1], 1D;\n"
3341 "MUL R1.xy, fragment.position, c[4];\n"
3342 "TEX R1, R1, texture[0], 2D;\n"
3343 "ADD R3.xyz, R0.w, -R0;\n"
3344 "ADD R2.xyz, R1.w, -R1;\n"
3345 "MUL R2.xyz, R2, R3;\n"
3346 "ADD R2.w, -R1, c[7];\n"
3347 "MUL R2.xyz, R2, c[7].z;\n"
3348 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
3349 "MAD R2.xyz, R0, R2.w, R2;\n"
3350 "MUL R3.xyz, R0, R2.w;\n"
3351 "MUL R0.xyz, R0, R1;\n"
3352 "ADD R2.w, -R0, c[7];\n"
3353 "MAD R0.xyz, R0, c[7].z, R3;\n"
3354 "MAD R0.xyz, R1, R2.w, R0;\n"
3355 "MAD R2.xyz, R1, R2.w, R2;\n"
3356 "MUL R1.xyz, R1, c[7].z;\n"
3357 "ADD R2.w, R0, R1;\n"
3358 "ADD R2.xyz, R2, -R0;\n"
3359 "SGE R1.xyz, R1, R1.w;\n"
3360 "MAD result.color.xyz, R1, R2, R0;\n"
3361 "MAD result.color.w, -R0, R1, R2;\n"
3362 "END\n"
3363 ;
3364
3365static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK =
3366 "!!ARBfp1.0\n"
3367 "PARAM c[8] = { program.local[0..4],\n"
3368 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3369 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3370 " { 0.33299461, 0.99999559, 1 } };\n"
3371 "TEMP R0;\n"
3372 "TEMP R1;\n"
3373 "TEMP R2;\n"
3374 "TEMP R3;\n"
3375 "MUL R0.xyz, fragment.position.y, c[2];\n"
3376 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3377 "ADD R0.xyz, R0, c[3];\n"
3378 "RCP R0.z, R0.z;\n"
3379 "MUL R0.xy, R0, R0.z;\n"
3380 "ABS R0.z, R0.x;\n"
3381 "ABS R0.w, R0.y;\n"
3382 "ADD R0.w, R0, -R0.z;\n"
3383 "ADD R1.x, R0.y, c[5].y;\n"
3384 "ABS R0.w, R0;\n"
3385 "CMP R0.y, -R0.w, R0, R1.x;\n"
3386 "ABS R0.w, -R0.y;\n"
3387 "MAX R1.x, R0.z, R0.w;\n"
3388 "RCP R1.y, R1.x;\n"
3389 "MIN R1.x, R0.z, R0.w;\n"
3390 "MUL R1.x, R1, R1.y;\n"
3391 "MUL R1.y, R1.x, R1.x;\n"
3392 "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
3393 "MAD R1.z, R1, R1.y, -c[6];\n"
3394 "MAD R1.z, R1, R1.y, c[6].w;\n"
3395 "MAD R1.z, R1, R1.y, -c[7].x;\n"
3396 "MAD R1.y, R1.z, R1, c[7];\n"
3397 "MUL R1.x, R1.y, R1;\n"
3398 "ADD R0.z, -R0, R0.w;\n"
3399 "ADD R1.y, -R1.x, c[5].w;\n"
3400 "CMP R0.z, -R0, R1.y, R1.x;\n"
3401 "ADD R0.w, -R0.z, c[5].z;\n"
3402 "CMP R0.x, R0, R0.w, R0.z;\n"
3403 "CMP R0.x, -R0.y, -R0, R0;\n"
3404 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3405 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3406 "ADD R0.x, R0, c[0];\n"
3407 "MUL R0.x, R0, c[5];\n"
3408 "FLR R0.y, R0.x;\n"
3409 "ADD R0.x, R0, -R0.y;\n"
3410 "TEX R0, R0, texture[1], 1D;\n"
3411 "MUL R2.xyz, R0, R1.w;\n"
3412 "MUL R3.xyz, R0.w, R1;\n"
3413 "MIN R2.xyz, R2, R3;\n"
3414 "ADD R2.w, -R1, c[7].z;\n"
3415 "MAD R0.xyz, R0, R2.w, R2;\n"
3416 "ADD R2.x, R0.w, R1.w;\n"
3417 "ADD R2.y, -R0.w, c[7].z;\n"
3418 "MAD result.color.xyz, R1, R2.y, R0;\n"
3419 "MAD result.color.w, -R0, R1, R2.x;\n"
3420 "END\n"
3421 ;
3422
3423static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
3424 "!!ARBfp1.0\n"
3425 "PARAM c[8] = { program.local[0..4],\n"
3426 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3427 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3428 " { 0.33299461, 0.99999559, 1 } };\n"
3429 "TEMP R0;\n"
3430 "TEMP R1;\n"
3431 "TEMP R2;\n"
3432 "TEMP R3;\n"
3433 "MUL R0.xyz, fragment.position.y, c[2];\n"
3434 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3435 "ADD R0.xyz, R0, c[3];\n"
3436 "RCP R0.z, R0.z;\n"
3437 "MUL R0.xy, R0, R0.z;\n"
3438 "ABS R0.z, R0.x;\n"
3439 "ABS R0.w, R0.y;\n"
3440 "ADD R0.w, R0, -R0.z;\n"
3441 "ADD R1.x, R0.y, c[5].y;\n"
3442 "ABS R0.w, R0;\n"
3443 "CMP R0.y, -R0.w, R0, R1.x;\n"
3444 "ABS R0.w, -R0.y;\n"
3445 "MAX R1.x, R0.z, R0.w;\n"
3446 "RCP R1.y, R1.x;\n"
3447 "MIN R1.x, R0.z, R0.w;\n"
3448 "MUL R1.x, R1, R1.y;\n"
3449 "MUL R1.y, R1.x, R1.x;\n"
3450 "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
3451 "MAD R1.z, R1, R1.y, -c[6];\n"
3452 "MAD R1.z, R1, R1.y, c[6].w;\n"
3453 "MAD R1.z, R1, R1.y, -c[7].x;\n"
3454 "MAD R1.y, R1.z, R1, c[7];\n"
3455 "MUL R1.x, R1.y, R1;\n"
3456 "ADD R0.z, -R0, R0.w;\n"
3457 "ADD R1.y, -R1.x, c[5].w;\n"
3458 "CMP R0.z, -R0, R1.y, R1.x;\n"
3459 "ADD R0.w, -R0.z, c[5].z;\n"
3460 "CMP R0.x, R0, R0.w, R0.z;\n"
3461 "CMP R0.x, -R0.y, -R0, R0;\n"
3462 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3463 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3464 "ADD R0.x, R0, c[0];\n"
3465 "MUL R0.x, R0, c[5];\n"
3466 "FLR R0.y, R0.x;\n"
3467 "ADD R0.x, R0, -R0.y;\n"
3468 "TEX R0, R0, texture[1], 1D;\n"
3469 "MUL R2.xyz, R0, R1.w;\n"
3470 "MUL R3.xyz, R0.w, R1;\n"
3471 "MAX R2.xyz, R2, R3;\n"
3472 "ADD R2.w, -R1, c[7].z;\n"
3473 "MAD R0.xyz, R0, R2.w, R2;\n"
3474 "ADD R2.x, R0.w, R1.w;\n"
3475 "ADD R2.y, -R0.w, c[7].z;\n"
3476 "MAD result.color.xyz, R1, R2.y, R0;\n"
3477 "MAD result.color.w, -R0, R1, R2.x;\n"
3478 "END\n"
3479 ;
3480
3481static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
3482 "!!ARBfp1.0\n"
3483 "PARAM c[8] = { program.local[0..4],\n"
3484 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
3485 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
3486 " { 3.141593, 0.15915494, 1, 1e-006 } };\n"
3487 "TEMP R0;\n"
3488 "TEMP R1;\n"
3489 "TEMP R2;\n"
3490 "TEMP R3;\n"
3491 "MUL R0.xyz, fragment.position.y, c[2];\n"
3492 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3493 "ADD R0.xyz, R0, c[3];\n"
3494 "RCP R0.z, R0.z;\n"
3495 "MUL R0.xy, R0, R0.z;\n"
3496 "ABS R0.z, R0.x;\n"
3497 "ABS R0.w, R0.y;\n"
3498 "ADD R0.w, R0, -R0.z;\n"
3499 "ADD R1.x, R0.y, c[5];\n"
3500 "ABS R0.w, R0;\n"
3501 "CMP R0.y, -R0.w, R0, R1.x;\n"
3502 "ABS R0.w, -R0.y;\n"
3503 "MAX R1.x, R0.z, R0.w;\n"
3504 "RCP R1.y, R1.x;\n"
3505 "MIN R1.x, R0.z, R0.w;\n"
3506 "MUL R1.x, R1, R1.y;\n"
3507 "MUL R1.y, R1.x, R1.x;\n"
3508 "MAD R1.z, R1.y, c[5].y, c[5];\n"
3509 "MAD R1.z, R1, R1.y, -c[5].w;\n"
3510 "MAD R1.z, R1, R1.y, c[6].x;\n"
3511 "MAD R1.z, R1, R1.y, -c[6].y;\n"
3512 "MAD R1.y, R1.z, R1, c[6].z;\n"
3513 "MUL R1.x, R1.y, R1;\n"
3514 "ADD R1.y, -R1.x, c[6].w;\n"
3515 "ADD R0.z, -R0, R0.w;\n"
3516 "CMP R0.z, -R0, R1.y, R1.x;\n"
3517 "ADD R0.w, -R0.z, c[7].x;\n"
3518 "CMP R0.x, R0, R0.w, R0.z;\n"
3519 "CMP R0.x, -R0.y, -R0, R0;\n"
3520 "ADD R0.x, R0, c[0];\n"
3521 "MUL R0.x, R0, c[7].y;\n"
3522 "FLR R0.y, R0.x;\n"
3523 "ADD R0.x, R0, -R0.y;\n"
3524 "TEX R0, R0, texture[1], 1D;\n"
3525 "MAX R1.x, R0.w, c[7].w;\n"
3526 "RCP R1.x, R1.x;\n"
3527 "MAD R1.xyz, -R0, R1.x, c[7].z;\n"
3528 "MAX R2.xyz, R1, c[7].w;\n"
3529 "MUL R1.xy, fragment.position, c[4];\n"
3530 "TEX R1, R1, texture[0], 2D;\n"
3531 "ADD R2.w, -R0, c[7].z;\n"
3532 "MUL R3.xyz, R1, R2.w;\n"
3533 "ADD R2.w, -R1, c[7].z;\n"
3534 "MAD R3.xyz, R0, R2.w, R3;\n"
3535 "MUL R1.xyz, R0.w, R1;\n"
3536 "MAD R0.xyz, R0, R1.w, R1;\n"
3537 "MUL R2.w, R0, R1;\n"
3538 "RCP R2.x, R2.x;\n"
3539 "RCP R2.y, R2.y;\n"
3540 "RCP R2.z, R2.z;\n"
3541 "MAD R2.xyz, R1, R2, R3;\n"
3542 "MAD R3.xyz, R0.w, R1.w, R3;\n"
3543 "ADD R1.x, R0.w, R1.w;\n"
3544 "ADD R3.xyz, R3, -R2;\n"
3545 "SGE R0.xyz, R0, R2.w;\n"
3546 "MAD result.color.xyz, R0, R3, R2;\n"
3547 "MAD result.color.w, -R0, R1, R1.x;\n"
3548 "END\n"
3549 ;
3550
3551static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK =
3552 "!!ARBfp1.0\n"
3553 "PARAM c[8] = { program.local[0..4],\n"
3554 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
3555 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
3556 " { 3.141593, 0.15915494, 1, 9.9999997e-006 } };\n"
3557 "TEMP R0;\n"
3558 "TEMP R1;\n"
3559 "TEMP R2;\n"
3560 "TEMP R3;\n"
3561 "TEMP R4;\n"
3562 "TEMP R5;\n"
3563 "MUL R0.xyz, fragment.position.y, c[2];\n"
3564 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3565 "ADD R0.xyz, R0, c[3];\n"
3566 "RCP R0.z, R0.z;\n"
3567 "MUL R0.xy, R0, R0.z;\n"
3568 "ABS R0.w, R0.x;\n"
3569 "ABS R0.z, R0.y;\n"
3570 "ADD R0.z, R0, -R0.w;\n"
3571 "ADD R1.x, R0.y, c[5];\n"
3572 "ABS R0.z, R0;\n"
3573 "CMP R0.y, -R0.z, R0, R1.x;\n"
3574 "ABS R0.z, -R0.y;\n"
3575 "MAX R1.x, R0.w, R0.z;\n"
3576 "RCP R1.y, R1.x;\n"
3577 "MIN R1.x, R0.w, R0.z;\n"
3578 "MUL R1.x, R1, R1.y;\n"
3579 "MUL R1.y, R1.x, R1.x;\n"
3580 "MAD R1.z, R1.y, c[5].y, c[5];\n"
3581 "MAD R1.z, R1, R1.y, -c[5].w;\n"
3582 "MAD R1.z, R1, R1.y, c[6].x;\n"
3583 "MAD R1.z, R1, R1.y, -c[6].y;\n"
3584 "MAD R1.y, R1.z, R1, c[6].z;\n"
3585 "MUL R1.x, R1.y, R1;\n"
3586 "ADD R1.y, -R1.x, c[6].w;\n"
3587 "ADD R0.z, -R0.w, R0;\n"
3588 "CMP R0.z, -R0, R1.y, R1.x;\n"
3589 "ADD R0.w, -R0.z, c[7].x;\n"
3590 "CMP R0.x, R0, R0.w, R0.z;\n"
3591 "CMP R0.x, -R0.y, -R0, R0;\n"
3592 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3593 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3594 "ADD R0.x, R0, c[0];\n"
3595 "MUL R0.x, R0, c[7].y;\n"
3596 "FLR R0.y, R0.x;\n"
3597 "ADD R0.x, R0, -R0.y;\n"
3598 "TEX R0, R0, texture[1], 1D;\n"
3599 "MUL R2.xyz, R0.w, R1;\n"
3600 "MAD R3.xyz, R0, R1.w, R2;\n"
3601 "ADD R2.w, -R1, c[7].z;\n"
3602 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
3603 "MUL R4.xyz, R0.w, R2;\n"
3604 "MAX R2.xyz, R0, c[7].w;\n"
3605 "MUL R5.xyz, R0, R2.w;\n"
3606 "ADD R3.w, -R0, c[7].z;\n"
3607 "RCP R2.x, R2.x;\n"
3608 "RCP R2.y, R2.y;\n"
3609 "RCP R2.z, R2.z;\n"
3610 "MAD R2.xyz, R4, R2, R5;\n"
3611 "MUL R4.xyz, R1, R3.w;\n"
3612 "MAD R1.xyz, R1, R3.w, R2;\n"
3613 "MAD R0.xyz, R0, R2.w, R4;\n"
3614 "MUL R2.x, R0.w, R1.w;\n"
3615 "ADD R2.w, R0, R1;\n"
3616 "ADD R1.xyz, R1, -R0;\n"
3617 "SGE R2.xyz, R3, R2.x;\n"
3618 "MAD result.color.xyz, R2, R1, R0;\n"
3619 "MAD result.color.w, -R0, R1, R2;\n"
3620 "END\n"
3621 ;
3622
3623static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
3624 "!!ARBfp1.0\n"
3625 "PARAM c[8] = { program.local[0..4],\n"
3626 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
3627 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
3628 " { 3.141593, 0.15915494, 2, 1 } };\n"
3629 "TEMP R0;\n"
3630 "TEMP R1;\n"
3631 "TEMP R2;\n"
3632 "TEMP R3;\n"
3633 "TEMP R4;\n"
3634 "MUL R0.xyz, fragment.position.y, c[2];\n"
3635 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3636 "ADD R0.xyz, R0, c[3];\n"
3637 "RCP R0.z, R0.z;\n"
3638 "MUL R0.xy, R0, R0.z;\n"
3639 "ABS R0.z, R0.x;\n"
3640 "ABS R0.w, R0.y;\n"
3641 "ADD R0.w, R0, -R0.z;\n"
3642 "ADD R1.x, R0.y, c[5];\n"
3643 "ABS R0.w, R0;\n"
3644 "CMP R0.y, -R0.w, R0, R1.x;\n"
3645 "ABS R0.w, -R0.y;\n"
3646 "MAX R1.x, R0.z, R0.w;\n"
3647 "RCP R1.y, R1.x;\n"
3648 "MIN R1.x, R0.z, R0.w;\n"
3649 "MUL R1.x, R1, R1.y;\n"
3650 "MUL R1.y, R1.x, R1.x;\n"
3651 "MAD R1.z, R1.y, c[5].y, c[5];\n"
3652 "MAD R1.z, R1, R1.y, -c[5].w;\n"
3653 "MAD R1.z, R1, R1.y, c[6].x;\n"
3654 "MAD R1.z, R1, R1.y, -c[6].y;\n"
3655 "MAD R1.y, R1.z, R1, c[6].z;\n"
3656 "MUL R1.x, R1.y, R1;\n"
3657 "ADD R0.z, -R0, R0.w;\n"
3658 "ADD R1.y, -R1.x, c[6].w;\n"
3659 "CMP R0.z, -R0, R1.y, R1.x;\n"
3660 "ADD R0.w, -R0.z, c[7].x;\n"
3661 "CMP R0.x, R0, R0.w, R0.z;\n"
3662 "CMP R0.x, -R0.y, -R0, R0;\n"
3663 "ADD R0.x, R0, c[0];\n"
3664 "MUL R0.x, R0, c[7].y;\n"
3665 "FLR R0.y, R0.x;\n"
3666 "ADD R0.x, R0, -R0.y;\n"
3667 "TEX R0, R0, texture[1], 1D;\n"
3668 "MUL R1.xy, fragment.position, c[4];\n"
3669 "TEX R1, R1, texture[0], 2D;\n"
3670 "ADD R2.w, -R1, c[7];\n"
3671 "ADD R3.xyz, R0.w, -R0;\n"
3672 "ADD R2.xyz, R1.w, -R1;\n"
3673 "MUL R2.xyz, R2, R3;\n"
3674 "MUL R2.xyz, R2, c[7].z;\n"
3675 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
3676 "MUL R4.xyz, R0, R2.w;\n"
3677 "MUL R3.xyz, R0, R1;\n"
3678 "MAD R2.xyz, R0, R2.w, R2;\n"
3679 "ADD R2.w, -R0, c[7];\n"
3680 "MUL R0.xyz, R0, c[7].z;\n"
3681 "MAD R2.xyz, R1, R2.w, R2;\n"
3682 "MAD R3.xyz, R3, c[7].z, R4;\n"
3683 "MAD R1.xyz, R1, R2.w, R3;\n"
3684 "ADD R2.w, R0, R1;\n"
3685 "ADD R2.xyz, R2, -R1;\n"
3686 "SGE R0.xyz, R0, R0.w;\n"
3687 "MAD result.color.xyz, R0, R2, R1;\n"
3688 "MAD result.color.w, -R0, R1, R2;\n"
3689 "END\n"
3690 ;
3691
3692static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
3693 "!!ARBfp1.0\n"
3694 "PARAM c[10] = { program.local[0..4],\n"
3695 " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n"
3696 " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n"
3697 " { 3.141593, 0.15915494, 1, 2 },\n"
3698 " { 9.9999997e-006, 4, 16, 12 },\n"
3699 " { 3 } };\n"
3700 "TEMP R0;\n"
3701 "TEMP R1;\n"
3702 "TEMP R2;\n"
3703 "TEMP R3;\n"
3704 "TEMP R4;\n"
3705 "TEMP R5;\n"
3706 "TEMP R6;\n"
3707 "MUL R0.xyz, fragment.position.y, c[2];\n"
3708 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3709 "ADD R0.xyz, R0, c[3];\n"
3710 "RCP R0.z, R0.z;\n"
3711 "MUL R0.xy, R0, R0.z;\n"
3712 "ABS R0.w, R0.x;\n"
3713 "ABS R0.z, R0.y;\n"
3714 "ADD R0.z, R0, -R0.w;\n"
3715 "ADD R1.x, R0.y, c[5];\n"
3716 "ABS R0.z, R0;\n"
3717 "CMP R0.y, -R0.z, R0, R1.x;\n"
3718 "ABS R0.z, -R0.y;\n"
3719 "MAX R1.x, R0.w, R0.z;\n"
3720 "RCP R1.y, R1.x;\n"
3721 "MIN R1.x, R0.w, R0.z;\n"
3722 "MUL R1.x, R1, R1.y;\n"
3723 "MUL R1.y, R1.x, R1.x;\n"
3724 "MAD R1.z, R1.y, c[5].y, c[5];\n"
3725 "MAD R1.z, R1, R1.y, -c[5].w;\n"
3726 "MAD R1.z, R1, R1.y, c[6].x;\n"
3727 "MAD R1.z, R1, R1.y, -c[6].y;\n"
3728 "MAD R1.y, R1.z, R1, c[6].z;\n"
3729 "MUL R1.x, R1.y, R1;\n"
3730 "ADD R1.y, -R1.x, c[6].w;\n"
3731 "ADD R0.z, -R0.w, R0;\n"
3732 "CMP R0.z, -R0, R1.y, R1.x;\n"
3733 "ADD R0.w, -R0.z, c[7].x;\n"
3734 "CMP R0.x, R0, R0.w, R0.z;\n"
3735 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3736 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3737 "CMP R0.x, -R0.y, -R0, R0;\n"
3738 "MAX R0.z, R1.w, c[8].x;\n"
3739 "RCP R2.x, R0.z;\n"
3740 "MUL R3.xyz, R1, R2.x;\n"
3741 "MAD R4.xyz, R3, c[8].z, -c[8].w;\n"
3742 "ADD R0.x, R0, c[0];\n"
3743 "MUL R0.x, R0, c[7].y;\n"
3744 "FLR R0.y, R0.x;\n"
3745 "ADD R0.x, R0, -R0.y;\n"
3746 "TEX R0, R0, texture[1], 1D;\n"
3747 "MAD R2.xyz, R0, c[7].w, -R0.w;\n"
3748 "MAD R4.xyz, R3, R4, c[9].x;\n"
3749 "MUL R5.xyz, R1.w, R2;\n"
3750 "MUL R6.xyz, R5, R4;\n"
3751 "RSQ R2.w, R3.x;\n"
3752 "RCP R4.x, R2.w;\n"
3753 "RSQ R2.w, R3.y;\n"
3754 "RSQ R3.w, R3.z;\n"
3755 "RCP R4.y, R2.w;\n"
3756 "RCP R4.z, R3.w;\n"
3757 "ADD R4.xyz, -R3, R4;\n"
3758 "MUL R6.xyz, R3, R6;\n"
3759 "MUL R4.xyz, R5, R4;\n"
3760 "ADD R3.xyz, -R3, c[7].z;\n"
3761 "MAD R2.xyz, R2, R3, R0.w;\n"
3762 "MUL R3.xyz, R0, c[7].w;\n"
3763 "MAD R5.xyz, R0.w, R1, R6;\n"
3764 "MAD R4.xyz, R0.w, R1, R4;\n"
3765 "ADD R6.xyz, R4, -R5;\n"
3766 "MUL R4.xyz, R1, c[8].y;\n"
3767 "SGE R4.xyz, R4, R1.w;\n"
3768 "MAD R4.xyz, R4, R6, R5;\n"
3769 "MAD R4.xyz, -R1, R2, R4;\n"
3770 "MUL R2.xyz, R1, R2;\n"
3771 "SGE R3.xyz, R3, R0.w;\n"
3772 "MAD R2.xyz, R3, R4, R2;\n"
3773 "ADD R2.w, -R1, c[7].z;\n"
3774 "MAD R2.xyz, R0, R2.w, R2;\n"
3775 "ADD R0.x, R0.w, R1.w;\n"
3776 "ADD R0.y, -R0.w, c[7].z;\n"
3777 "MAD result.color.xyz, R1, R0.y, R2;\n"
3778 "MAD result.color.w, -R0, R1, R0.x;\n"
3779 "END\n"
3780 ;
3781
3782static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
3783 "!!ARBfp1.0\n"
3784 "PARAM c[8] = { program.local[0..4],\n"
3785 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3786 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3787 " { 0.33299461, 0.99999559, 2 } };\n"
3788 "TEMP R0;\n"
3789 "TEMP R1;\n"
3790 "TEMP R2;\n"
3791 "TEMP R3;\n"
3792 "MUL R0.xyz, fragment.position.y, c[2];\n"
3793 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3794 "ADD R0.xyz, R0, c[3];\n"
3795 "RCP R0.z, R0.z;\n"
3796 "MUL R0.xy, R0, R0.z;\n"
3797 "ABS R0.z, R0.x;\n"
3798 "ABS R0.w, R0.y;\n"
3799 "ADD R0.w, R0, -R0.z;\n"
3800 "ADD R1.x, R0.y, c[5].y;\n"
3801 "ABS R0.w, R0;\n"
3802 "CMP R0.y, -R0.w, R0, R1.x;\n"
3803 "ABS R0.w, -R0.y;\n"
3804 "MAX R1.x, R0.z, R0.w;\n"
3805 "RCP R1.y, R1.x;\n"
3806 "MIN R1.x, R0.z, R0.w;\n"
3807 "MUL R1.x, R1, R1.y;\n"
3808 "MUL R1.y, R1.x, R1.x;\n"
3809 "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
3810 "MAD R1.z, R1, R1.y, -c[6];\n"
3811 "MAD R1.z, R1, R1.y, c[6].w;\n"
3812 "MAD R1.z, R1, R1.y, -c[7].x;\n"
3813 "MAD R1.y, R1.z, R1, c[7];\n"
3814 "MUL R1.x, R1.y, R1;\n"
3815 "ADD R0.z, -R0, R0.w;\n"
3816 "ADD R1.y, -R1.x, c[5].w;\n"
3817 "CMP R0.z, -R0, R1.y, R1.x;\n"
3818 "ADD R0.w, -R0.z, c[5].z;\n"
3819 "CMP R0.x, R0, R0.w, R0.z;\n"
3820 "CMP R0.x, -R0.y, -R0, R0;\n"
3821 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3822 "ADD R0.x, R0, c[0];\n"
3823 "MUL R0.x, R0, c[5];\n"
3824 "FLR R0.y, R0.x;\n"
3825 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3826 "ADD R0.x, R0, -R0.y;\n"
3827 "TEX R0, R0, texture[1], 1D;\n"
3828 "MUL R2.xyz, R0, R1.w;\n"
3829 "MUL R3.xyz, R0.w, R1;\n"
3830 "ADD R0.xyz, R0, R1;\n"
3831 "MIN R2.xyz, R2, R3;\n"
3832 "ADD R1.x, R0.w, R1.w;\n"
3833 "MAD result.color.xyz, -R2, c[7].z, R0;\n"
3834 "MAD result.color.w, -R0, R1, R1.x;\n"
3835 "END\n"
3836 ;
3837
3838static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
3839 "!!ARBfp1.0\n"
3840 "PARAM c[8] = { program.local[0..4],\n"
3841 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3842 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3843 " { 0.33299461, 0.99999559, 2, 1 } };\n"
3844 "TEMP R0;\n"
3845 "TEMP R1;\n"
3846 "TEMP R2;\n"
3847 "TEMP R3;\n"
3848 "MUL R0.xyz, fragment.position.y, c[2];\n"
3849 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3850 "ADD R0.xyz, R0, c[3];\n"
3851 "RCP R0.z, R0.z;\n"
3852 "MUL R0.xy, R0, R0.z;\n"
3853 "ABS R0.z, R0.x;\n"
3854 "ABS R0.w, R0.y;\n"
3855 "ADD R0.w, R0, -R0.z;\n"
3856 "ADD R1.x, R0.y, c[5].y;\n"
3857 "ABS R0.w, R0;\n"
3858 "CMP R0.y, -R0.w, R0, R1.x;\n"
3859 "ABS R0.w, -R0.y;\n"
3860 "MAX R1.x, R0.z, R0.w;\n"
3861 "RCP R1.y, R1.x;\n"
3862 "MIN R1.x, R0.z, R0.w;\n"
3863 "MUL R1.x, R1, R1.y;\n"
3864 "MUL R1.y, R1.x, R1.x;\n"
3865 "MAD R1.z, R1.y, c[6].x, c[6].y;\n"
3866 "MAD R1.z, R1, R1.y, -c[6];\n"
3867 "MAD R1.z, R1, R1.y, c[6].w;\n"
3868 "MAD R1.z, R1, R1.y, -c[7].x;\n"
3869 "MAD R1.y, R1.z, R1, c[7];\n"
3870 "MUL R1.x, R1.y, R1;\n"
3871 "ADD R0.z, -R0, R0.w;\n"
3872 "ADD R1.y, -R1.x, c[5].w;\n"
3873 "CMP R0.z, -R0, R1.y, R1.x;\n"
3874 "ADD R0.w, -R0.z, c[5].z;\n"
3875 "CMP R0.x, R0, R0.w, R0.z;\n"
3876 "CMP R0.x, -R0.y, -R0, R0;\n"
3877 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
3878 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3879 "ADD R0.x, R0, c[0];\n"
3880 "MUL R0.x, R0, c[5];\n"
3881 "FLR R0.y, R0.x;\n"
3882 "ADD R0.x, R0, -R0.y;\n"
3883 "TEX R0, R0, texture[1], 1D;\n"
3884 "MUL R2.xyz, R0.w, R1;\n"
3885 "MAD R3.xyz, R0, R1.w, R2;\n"
3886 "MUL R2.xyz, R0, R1;\n"
3887 "MAD R2.xyz, -R2, c[7].z, R3;\n"
3888 "ADD R2.w, -R1, c[7];\n"
3889 "MAD R0.xyz, R0, R2.w, R2;\n"
3890 "ADD R2.x, R0.w, R1.w;\n"
3891 "ADD R2.y, -R0.w, c[7].w;\n"
3892 "MAD result.color.xyz, R1, R2.y, R0;\n"
3893 "MAD result.color.w, -R0, R1, R2.x;\n"
3894 "END\n"
3895 ;
3896
3897static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK =
3898 "!!ARBfp1.0\n"
3899 "PARAM c[10] = { program.local[0..6],\n"
3900 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3901 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3902 " { 0.33299461, 0.99999559 } };\n"
3903 "TEMP R0;\n"
3904 "TEMP R1;\n"
3905 "MUL R0.xyz, fragment.position.y, c[2];\n"
3906 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3907 "ADD R0.xyz, R0, c[3];\n"
3908 "RCP R0.z, R0.z;\n"
3909 "MUL R0.xy, R0, R0.z;\n"
3910 "ABS R0.z, R0.x;\n"
3911 "ABS R0.w, R0.y;\n"
3912 "ADD R0.w, R0, -R0.z;\n"
3913 "ADD R1.x, R0.y, c[7].y;\n"
3914 "ABS R0.w, R0;\n"
3915 "CMP R0.y, -R0.w, R0, R1.x;\n"
3916 "ABS R0.w, -R0.y;\n"
3917 "MAX R1.x, R0.z, R0.w;\n"
3918 "RCP R1.y, R1.x;\n"
3919 "MIN R1.x, R0.z, R0.w;\n"
3920 "MUL R1.x, R1, R1.y;\n"
3921 "MUL R1.y, R1.x, R1.x;\n"
3922 "MAD R1.z, R1.y, c[8].x, c[8].y;\n"
3923 "MAD R1.z, R1, R1.y, -c[8];\n"
3924 "MAD R1.z, R1, R1.y, c[8].w;\n"
3925 "MAD R1.z, R1, R1.y, -c[9].x;\n"
3926 "MAD R1.y, R1.z, R1, c[9];\n"
3927 "MUL R1.x, R1.y, R1;\n"
3928 "ADD R1.y, -R1.x, c[7].w;\n"
3929 "ADD R0.z, -R0, R0.w;\n"
3930 "CMP R0.z, -R0, R1.y, R1.x;\n"
3931 "ADD R0.w, -R0.z, c[7].z;\n"
3932 "CMP R0.x, R0, R0.w, R0.z;\n"
3933 "CMP R0.x, -R0.y, -R0, R0;\n"
3934 "ADD R0.x, R0, c[0];\n"
3935 "MUL R1.x, R0, c[7];\n"
3936 "FLR R1.y, R1.x;\n"
3937 "ADD R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
3938 "MUL R0.xy, R0.zwzw, c[4];\n"
3939 "TEX R0, R0, texture[0], 2D;\n"
3940 "ADD R1.x, R1, -R1.y;\n"
3941 "DP4 R1.y, R0, c[6];\n"
3942 "TEX R0, R1, texture[1], 1D;\n"
3943 "MUL result.color, R0, R1.y;\n"
3944 "END\n"
3945 ;
3946
3947static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
3948 "!!ARBfp1.0\n"
3949 "PARAM c[7] = { program.local[0..3],\n"
3950 " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n"
3951 " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n"
3952 " { 0.33299461, 0.99999559 } };\n"
3953 "TEMP R0;\n"
3954 "TEMP R1;\n"
3955 "MUL R0.xyz, fragment.position.y, c[2];\n"
3956 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
3957 "ADD R0.xyz, R0, c[3];\n"
3958 "RCP R0.z, R0.z;\n"
3959 "MUL R0.xy, R0, R0.z;\n"
3960 "ABS R0.z, R0.x;\n"
3961 "ABS R0.w, R0.y;\n"
3962 "ADD R0.w, R0, -R0.z;\n"
3963 "ADD R1.x, R0.y, c[4].y;\n"
3964 "ABS R0.w, R0;\n"
3965 "CMP R0.y, -R0.w, R0, R1.x;\n"
3966 "ABS R0.w, -R0.y;\n"
3967 "MAX R1.x, R0.z, R0.w;\n"
3968 "RCP R1.y, R1.x;\n"
3969 "MIN R1.x, R0.z, R0.w;\n"
3970 "MUL R1.x, R1, R1.y;\n"
3971 "MUL R1.y, R1.x, R1.x;\n"
3972 "MAD R1.z, R1.y, c[5].x, c[5].y;\n"
3973 "MAD R1.z, R1, R1.y, -c[5];\n"
3974 "MAD R1.z, R1, R1.y, c[5].w;\n"
3975 "MAD R1.z, R1, R1.y, -c[6].x;\n"
3976 "MAD R1.y, R1.z, R1, c[6];\n"
3977 "MUL R1.x, R1.y, R1;\n"
3978 "ADD R0.z, -R0, R0.w;\n"
3979 "ADD R1.y, -R1.x, c[4].w;\n"
3980 "CMP R0.z, -R0, R1.y, R1.x;\n"
3981 "ADD R0.w, -R0.z, c[4].z;\n"
3982 "CMP R0.x, R0, R0.w, R0.z;\n"
3983 "CMP R0.x, -R0.y, -R0, R0;\n"
3984 "ADD R0.x, R0, c[0];\n"
3985 "MUL R0.x, R0, c[4];\n"
3986 "FLR R0.y, R0.x;\n"
3987 "ADD R0.x, R0, -R0.y;\n"
3988 "TEX result.color, R0, texture[0], 1D;\n"
3989 "END\n"
3990 ;
3991
3992static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
3993 "!!ARBfp1.0\n"
3994 "PARAM c[11] = { program.local[0..9],\n"
3995 " { 1 } };\n"
3996 "TEMP R0;\n"
3997 "TEMP R1;\n"
3998 "TEMP R2;\n"
3999 "TEMP R3;\n"
4000 "MUL R0.xyz, fragment.position.y, c[2];\n"
4001 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4002 "ADD R0.xyz, R0, c[3];\n"
4003 "RCP R0.z, R0.z;\n"
4004 "MUL R0.xy, R0, R0.z;\n"
4005 "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
4006 "ADD R1.x, R0.z, R0.w;\n"
4007 "MUL R0.xy, fragment.position, c[7];\n"
4008 "TEX R0, R0, texture[0], 2D;\n"
4009 "MUL R1.x, R1, c[0].z;\n"
4010 "TEX R1, R1, texture[2], 1D;\n"
4011 "MUL R2.xyz, R0, c[4].y;\n"
4012 "MUL R3.xyz, R1.w, R2;\n"
4013 "MUL R2.xyz, R1, c[4].x;\n"
4014 "MAD R2.xyz, R0.w, R2, R3;\n"
4015 "ADD R3.xy, fragment.position, c[8];\n"
4016 "ADD R2.w, -R0, c[10].x;\n"
4017 "MUL R1.xyz, R1, c[5].y;\n"
4018 "MAD R2.xyz, R2.w, R1, R2;\n"
4019 "MUL R1.xyz, R0, c[5].z;\n"
4020 "ADD R3.z, -R1.w, c[10].x;\n"
4021 "MAD R2.xyz, R3.z, R1, R2;\n"
4022 "MUL R1.y, R1.w, R2.w;\n"
4023 "MUL R1.x, R1.w, R0.w;\n"
4024 "MUL R1.z, R0.w, R3;\n"
4025 "DP3 R2.w, R1, c[5];\n"
4026 "MUL R3.xy, R3, c[6];\n"
4027 "TEX R1, R3, texture[1], 2D;\n"
4028 "ADD R2, R2, -R0;\n"
4029 "DP4 R1.x, R1, c[9];\n"
4030 "MAD result.color, R1.x, R2, R0;\n"
4031 "END\n"
4032 ;
4033
4034static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY =
4035 "!!ARBfp1.0\n"
4036 "PARAM c[9] = { program.local[0..7],\n"
4037 " { 1 } };\n"
4038 "TEMP R0;\n"
4039 "TEMP R1;\n"
4040 "TEMP R2;\n"
4041 "MUL R0.xyz, fragment.position.y, c[2];\n"
4042 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4043 "ADD R0.xyz, R0, c[3];\n"
4044 "RCP R0.z, R0.z;\n"
4045 "MUL R0.xy, R0, R0.z;\n"
4046 "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
4047 "ADD R1.x, R0.z, R0.w;\n"
4048 "MUL R0.xy, fragment.position, c[5];\n"
4049 "TEX R0, R0, texture[0], 2D;\n"
4050 "MUL R1.x, R1, c[0].z;\n"
4051 "TEX R1, R1, texture[2], 1D;\n"
4052 "ADD R2.x, -R0.w, c[8];\n"
4053 "MUL R2.xyz, R1, R2.x;\n"
4054 "MAD R1.xyz, R1, R0, R2;\n"
4055 "ADD R2.x, -R1.w, c[8];\n"
4056 "MAD R2.xyz, R0, R2.x, R1;\n"
4057 "ADD R1.z, R1.w, R0.w;\n"
4058 "MAD R2.w, -R1, R0, R1.z;\n"
4059 "ADD R1.xy, fragment.position, c[6];\n"
4060 "MUL R1.xy, R1, c[4];\n"
4061 "TEX R1, R1, texture[1], 2D;\n"
4062 "ADD R2, R2, -R0;\n"
4063 "DP4 R1.x, R1, c[7];\n"
4064 "MAD result.color, R1.x, R2, R0;\n"
4065 "END\n"
4066 ;
4067
4068static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN =
4069 "!!ARBfp1.0\n"
4070 "PARAM c[8] = { program.local[0..7] };\n"
4071 "TEMP R0;\n"
4072 "TEMP R1;\n"
4073 "TEMP R2;\n"
4074 "TEMP R3;\n"
4075 "MUL R0.xyz, fragment.position.y, c[2];\n"
4076 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4077 "ADD R0.xyz, R0, c[3];\n"
4078 "RCP R0.z, R0.z;\n"
4079 "MUL R0.xy, R0, R0.z;\n"
4080 "MUL R0.xy, R0, c[0];\n"
4081 "ADD R0.x, R0, R0.y;\n"
4082 "MUL R0.z, R0.x, c[0];\n"
4083 "ADD R3.xy, fragment.position, c[6];\n"
4084 "TEX R1, R0.z, texture[2], 1D;\n"
4085 "MUL R0.xy, fragment.position, c[5];\n"
4086 "TEX R0, R0, texture[0], 2D;\n"
4087 "ADD R2, R1, R0;\n"
4088 "MAD R2, -R1, R0, R2;\n"
4089 "MUL R3.xy, R3, c[4];\n"
4090 "TEX R1, R3, texture[1], 2D;\n"
4091 "ADD R2, R2, -R0;\n"
4092 "DP4 R1.x, R1, c[7];\n"
4093 "MAD result.color, R1.x, R2, R0;\n"
4094 "END\n"
4095 ;
4096
4097static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY =
4098 "!!ARBfp1.0\n"
4099 "PARAM c[9] = { program.local[0..7],\n"
4100 " { 2, 1 } };\n"
4101 "TEMP R0;\n"
4102 "TEMP R1;\n"
4103 "TEMP R2;\n"
4104 "TEMP R3;\n"
4105 "TEMP R4;\n"
4106 "MUL R0.xyz, fragment.position.y, c[2];\n"
4107 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4108 "ADD R0.xyz, R0, c[3];\n"
4109 "RCP R0.z, R0.z;\n"
4110 "MUL R0.xy, R0, R0.z;\n"
4111 "MUL R0.xy, R0, c[0];\n"
4112 "ADD R0.x, R0, R0.y;\n"
4113 "MUL R0.x, R0, c[0].z;\n"
4114 "TEX R0, R0, texture[2], 1D;\n"
4115 "MUL R1.xy, fragment.position, c[5];\n"
4116 "TEX R1, R1, texture[0], 2D;\n"
4117 "ADD R2.w, -R1, c[8].y;\n"
4118 "ADD R3.xyz, R0.w, -R0;\n"
4119 "ADD R2.xyz, R1.w, -R1;\n"
4120 "MUL R2.xyz, R2, R3;\n"
4121 "MUL R2.xyz, R2, c[8].x;\n"
4122 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4123 "MUL R4.xyz, R0, R2.w;\n"
4124 "MUL R3.xyz, R0, R1;\n"
4125 "MAD R0.xyz, R0, R2.w, R2;\n"
4126 "ADD R2.x, -R0.w, c[8].y;\n"
4127 "MAD R3.xyz, R3, c[8].x, R4;\n"
4128 "MAD R3.xyz, R1, R2.x, R3;\n"
4129 "MAD R0.xyz, R1, R2.x, R0;\n"
4130 "MUL R2.xyz, R1, c[8].x;\n"
4131 "ADD R0.xyz, R0, -R3;\n"
4132 "SGE R2.xyz, R2, R1.w;\n"
4133 "MAD R2.xyz, R2, R0, R3;\n"
4134 "ADD R0.z, R0.w, R1.w;\n"
4135 "MAD R2.w, -R0, R1, R0.z;\n"
4136 "ADD R0.xy, fragment.position, c[6];\n"
4137 "MUL R0.xy, R0, c[4];\n"
4138 "TEX R0, R0, texture[1], 2D;\n"
4139 "ADD R2, R2, -R1;\n"
4140 "DP4 R0.x, R0, c[7];\n"
4141 "MAD result.color, R0.x, R2, R1;\n"
4142 "END\n"
4143 ;
4144
4145static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN =
4146 "!!ARBfp1.0\n"
4147 "PARAM c[9] = { program.local[0..7],\n"
4148 " { 1 } };\n"
4149 "TEMP R0;\n"
4150 "TEMP R1;\n"
4151 "TEMP R2;\n"
4152 "TEMP R3;\n"
4153 "MUL R0.xyz, fragment.position.y, c[2];\n"
4154 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4155 "ADD R0.xyz, R0, c[3];\n"
4156 "RCP R0.z, R0.z;\n"
4157 "MUL R0.xy, R0, R0.z;\n"
4158 "MUL R0.xy, R0, c[0];\n"
4159 "ADD R0.z, R0.x, R0.y;\n"
4160 "MUL R1.x, R0.z, c[0].z;\n"
4161 "MUL R0.xy, fragment.position, c[5];\n"
4162 "TEX R0, R0, texture[0], 2D;\n"
4163 "TEX R1, R1, texture[2], 1D;\n"
4164 "MUL R3.xyz, R1.w, R0;\n"
4165 "MUL R2.xyz, R1, R0.w;\n"
4166 "MIN R2.xyz, R2, R3;\n"
4167 "ADD R2.w, -R0, c[8].x;\n"
4168 "MAD R1.xyz, R1, R2.w, R2;\n"
4169 "ADD R2.x, -R1.w, c[8];\n"
4170 "MAD R2.xyz, R0, R2.x, R1;\n"
4171 "ADD R1.z, R1.w, R0.w;\n"
4172 "MAD R2.w, -R1, R0, R1.z;\n"
4173 "ADD R1.xy, fragment.position, c[6];\n"
4174 "MUL R1.xy, R1, c[4];\n"
4175 "TEX R1, R1, texture[1], 2D;\n"
4176 "ADD R2, R2, -R0;\n"
4177 "DP4 R1.x, R1, c[7];\n"
4178 "MAD result.color, R1.x, R2, R0;\n"
4179 "END\n"
4180 ;
4181
4182static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN =
4183 "!!ARBfp1.0\n"
4184 "PARAM c[9] = { program.local[0..7],\n"
4185 " { 1 } };\n"
4186 "TEMP R0;\n"
4187 "TEMP R1;\n"
4188 "TEMP R2;\n"
4189 "TEMP R3;\n"
4190 "MUL R0.xyz, fragment.position.y, c[2];\n"
4191 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4192 "ADD R0.xyz, R0, c[3];\n"
4193 "RCP R0.z, R0.z;\n"
4194 "MUL R0.xy, R0, R0.z;\n"
4195 "MUL R0.xy, R0, c[0];\n"
4196 "ADD R0.z, R0.x, R0.y;\n"
4197 "MUL R1.x, R0.z, c[0].z;\n"
4198 "MUL R0.xy, fragment.position, c[5];\n"
4199 "TEX R0, R0, texture[0], 2D;\n"
4200 "TEX R1, R1, texture[2], 1D;\n"
4201 "MUL R3.xyz, R1.w, R0;\n"
4202 "MUL R2.xyz, R1, R0.w;\n"
4203 "MAX R2.xyz, R2, R3;\n"
4204 "ADD R2.w, -R0, c[8].x;\n"
4205 "MAD R1.xyz, R1, R2.w, R2;\n"
4206 "ADD R2.x, -R1.w, c[8];\n"
4207 "MAD R2.xyz, R0, R2.x, R1;\n"
4208 "ADD R1.z, R1.w, R0.w;\n"
4209 "MAD R2.w, -R1, R0, R1.z;\n"
4210 "ADD R1.xy, fragment.position, c[6];\n"
4211 "MUL R1.xy, R1, c[4];\n"
4212 "TEX R1, R1, texture[1], 2D;\n"
4213 "ADD R2, R2, -R0;\n"
4214 "DP4 R1.x, R1, c[7];\n"
4215 "MAD result.color, R1.x, R2, R0;\n"
4216 "END\n"
4217 ;
4218
4219static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE =
4220 "!!ARBfp1.0\n"
4221 "PARAM c[9] = { program.local[0..7],\n"
4222 " { 1, 1e-006 } };\n"
4223 "TEMP R0;\n"
4224 "TEMP R1;\n"
4225 "TEMP R2;\n"
4226 "TEMP R3;\n"
4227 "TEMP R4;\n"
4228 "MUL R0.xyz, fragment.position.y, c[2];\n"
4229 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4230 "ADD R0.xyz, R0, c[3];\n"
4231 "RCP R0.z, R0.z;\n"
4232 "MUL R0.xy, R0, R0.z;\n"
4233 "MUL R0.xy, R0, c[0];\n"
4234 "ADD R0.x, R0, R0.y;\n"
4235 "MUL R0.x, R0, c[0].z;\n"
4236 "TEX R0, R0, texture[2], 1D;\n"
4237 "MAX R1.x, R0.w, c[8].y;\n"
4238 "RCP R1.x, R1.x;\n"
4239 "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
4240 "MAX R2.xyz, R2, c[8].y;\n"
4241 "MUL R1.xy, fragment.position, c[5];\n"
4242 "TEX R1, R1, texture[0], 2D;\n"
4243 "ADD R2.w, -R0, c[8].x;\n"
4244 "MUL R3.xyz, R1, R2.w;\n"
4245 "ADD R2.w, -R1, c[8].x;\n"
4246 "MAD R4.xyz, R0, R2.w, R3;\n"
4247 "MUL R3.xyz, R0.w, R1;\n"
4248 "MUL R2.w, R0, R1;\n"
4249 "MAD R0.xyz, R0, R1.w, R3;\n"
4250 "SGE R0.xyz, R0, R2.w;\n"
4251 "RCP R2.x, R2.x;\n"
4252 "RCP R2.y, R2.y;\n"
4253 "RCP R2.z, R2.z;\n"
4254 "MAD R2.xyz, R3, R2, R4;\n"
4255 "MAD R4.xyz, R0.w, R1.w, R4;\n"
4256 "ADD R4.xyz, R4, -R2;\n"
4257 "MAD R2.xyz, R0, R4, R2;\n"
4258 "ADD R0.z, R0.w, R1.w;\n"
4259 "MAD R2.w, -R0, R1, R0.z;\n"
4260 "ADD R0.xy, fragment.position, c[6];\n"
4261 "MUL R0.xy, R0, c[4];\n"
4262 "TEX R0, R0, texture[1], 2D;\n"
4263 "ADD R2, R2, -R1;\n"
4264 "DP4 R0.x, R0, c[7];\n"
4265 "MAD result.color, R0.x, R2, R1;\n"
4266 "END\n"
4267 ;
4268
4269static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN =
4270 "!!ARBfp1.0\n"
4271 "PARAM c[9] = { program.local[0..7],\n"
4272 " { 1, 9.9999997e-006 } };\n"
4273 "TEMP R0;\n"
4274 "TEMP R1;\n"
4275 "TEMP R2;\n"
4276 "TEMP R3;\n"
4277 "TEMP R4;\n"
4278 "TEMP R5;\n"
4279 "MUL R0.xyz, fragment.position.y, c[2];\n"
4280 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4281 "ADD R0.xyz, R0, c[3];\n"
4282 "RCP R0.z, R0.z;\n"
4283 "MUL R0.xy, R0, R0.z;\n"
4284 "MUL R0.xy, R0, c[0];\n"
4285 "ADD R0.x, R0, R0.y;\n"
4286 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
4287 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4288 "MUL R0.x, R0, c[0].z;\n"
4289 "TEX R0, R0, texture[2], 1D;\n"
4290 "MUL R2.xyz, R0.w, R1;\n"
4291 "MAD R3.xyz, R0, R1.w, R2;\n"
4292 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
4293 "MUL R4.xyz, R0.w, R2;\n"
4294 "MAX R2.xyz, R0, c[8].y;\n"
4295 "ADD R2.w, -R1, c[8].x;\n"
4296 "MUL R5.xyz, R0, R2.w;\n"
4297 "ADD R3.w, -R0, c[8].x;\n"
4298 "RCP R2.x, R2.x;\n"
4299 "RCP R2.y, R2.y;\n"
4300 "RCP R2.z, R2.z;\n"
4301 "MAD R2.xyz, R4, R2, R5;\n"
4302 "MUL R4.xyz, R1, R3.w;\n"
4303 "MAD R0.xyz, R0, R2.w, R4;\n"
4304 "MUL R2.w, R0, R1;\n"
4305 "MAD R2.xyz, R1, R3.w, R2;\n"
4306 "ADD R2.xyz, R2, -R0;\n"
4307 "SGE R3.xyz, R3, R2.w;\n"
4308 "MAD R2.xyz, R3, R2, R0;\n"
4309 "ADD R0.z, R0.w, R1.w;\n"
4310 "MAD R2.w, -R0, R1, R0.z;\n"
4311 "ADD R0.xy, fragment.position, c[6];\n"
4312 "MUL R0.xy, R0, c[4];\n"
4313 "TEX R0, R0, texture[1], 2D;\n"
4314 "ADD R2, R2, -R1;\n"
4315 "DP4 R0.x, R0, c[7];\n"
4316 "MAD result.color, R0.x, R2, R1;\n"
4317 "END\n"
4318 ;
4319
4320static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT =
4321 "!!ARBfp1.0\n"
4322 "PARAM c[9] = { program.local[0..7],\n"
4323 " { 2, 1 } };\n"
4324 "TEMP R0;\n"
4325 "TEMP R1;\n"
4326 "TEMP R2;\n"
4327 "TEMP R3;\n"
4328 "TEMP R4;\n"
4329 "MUL R0.xyz, fragment.position.y, c[2];\n"
4330 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4331 "ADD R0.xyz, R0, c[3];\n"
4332 "RCP R0.z, R0.z;\n"
4333 "MUL R0.xy, R0, R0.z;\n"
4334 "MUL R0.xy, R0, c[0];\n"
4335 "ADD R0.x, R0, R0.y;\n"
4336 "MUL R0.x, R0, c[0].z;\n"
4337 "TEX R0, R0, texture[2], 1D;\n"
4338 "MUL R1.xy, fragment.position, c[5];\n"
4339 "TEX R1, R1, texture[0], 2D;\n"
4340 "ADD R2.w, -R1, c[8].y;\n"
4341 "ADD R3.xyz, R0.w, -R0;\n"
4342 "ADD R2.xyz, R1.w, -R1;\n"
4343 "MUL R2.xyz, R2, R3;\n"
4344 "MUL R2.xyz, R2, c[8].x;\n"
4345 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4346 "MUL R4.xyz, R0, R2.w;\n"
4347 "MAD R2.xyz, R0, R2.w, R2;\n"
4348 "MUL R3.xyz, R0, R1;\n"
4349 "ADD R2.w, -R0, c[8].y;\n"
4350 "MAD R3.xyz, R3, c[8].x, R4;\n"
4351 "MUL R0.xyz, R0, c[8].x;\n"
4352 "SGE R0.xyz, R0, R0.w;\n"
4353 "MAD R3.xyz, R1, R2.w, R3;\n"
4354 "MAD R2.xyz, R1, R2.w, R2;\n"
4355 "ADD R2.xyz, R2, -R3;\n"
4356 "MAD R2.xyz, R0, R2, R3;\n"
4357 "ADD R0.z, R0.w, R1.w;\n"
4358 "MAD R2.w, -R0, R1, R0.z;\n"
4359 "ADD R0.xy, fragment.position, c[6];\n"
4360 "MUL R0.xy, R0, c[4];\n"
4361 "TEX R0, R0, texture[1], 2D;\n"
4362 "ADD R2, R2, -R1;\n"
4363 "DP4 R0.x, R0, c[7];\n"
4364 "MAD result.color, R0.x, R2, R1;\n"
4365 "END\n"
4366 ;
4367
4368static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT =
4369 "!!ARBfp1.0\n"
4370 "PARAM c[10] = { program.local[0..7],\n"
4371 " { 1, 2, 9.9999997e-006, 4 },\n"
4372 " { 16, 12, 3 } };\n"
4373 "TEMP R0;\n"
4374 "TEMP R1;\n"
4375 "TEMP R2;\n"
4376 "TEMP R3;\n"
4377 "TEMP R4;\n"
4378 "TEMP R5;\n"
4379 "TEMP R6;\n"
4380 "MUL R0.xyz, fragment.position.y, c[2];\n"
4381 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4382 "ADD R0.xyz, R0, c[3];\n"
4383 "RCP R0.z, R0.z;\n"
4384 "MUL R0.xy, R0, R0.z;\n"
4385 "MUL R0.xy, R0, c[0];\n"
4386 "ADD R0.x, R0, R0.y;\n"
4387 "MUL R1.xy, fragment.position, c[5];\n"
4388 "TEX R1, R1, texture[0], 2D;\n"
4389 "MAX R0.z, R1.w, c[8];\n"
4390 "RCP R0.z, R0.z;\n"
4391 "MUL R3.xyz, R1, R0.z;\n"
4392 "MAD R2.xyz, R3, c[9].x, -c[9].y;\n"
4393 "MUL R0.x, R0, c[0].z;\n"
4394 "TEX R0, R0, texture[2], 1D;\n"
4395 "MAD R4.xyz, R3, R2, c[9].z;\n"
4396 "MAD R2.xyz, R0, c[8].y, -R0.w;\n"
4397 "MUL R5.xyz, R1.w, R2;\n"
4398 "MUL R6.xyz, R5, R4;\n"
4399 "RSQ R2.w, R3.x;\n"
4400 "RCP R4.x, R2.w;\n"
4401 "RSQ R2.w, R3.y;\n"
4402 "RSQ R3.w, R3.z;\n"
4403 "RCP R4.y, R2.w;\n"
4404 "RCP R4.z, R3.w;\n"
4405 "ADD R4.xyz, -R3, R4;\n"
4406 "MUL R6.xyz, R3, R6;\n"
4407 "MUL R4.xyz, R5, R4;\n"
4408 "ADD R3.xyz, -R3, c[8].x;\n"
4409 "MAD R2.xyz, R2, R3, R0.w;\n"
4410 "MUL R3.xyz, R0, c[8].y;\n"
4411 "MAD R5.xyz, R0.w, R1, R6;\n"
4412 "MAD R4.xyz, R0.w, R1, R4;\n"
4413 "ADD R6.xyz, R4, -R5;\n"
4414 "MUL R4.xyz, R1, c[8].w;\n"
4415 "SGE R4.xyz, R4, R1.w;\n"
4416 "MAD R4.xyz, R4, R6, R5;\n"
4417 "MAD R4.xyz, -R1, R2, R4;\n"
4418 "SGE R3.xyz, R3, R0.w;\n"
4419 "MUL R2.xyz, R1, R2;\n"
4420 "ADD R2.w, -R1, c[8].x;\n"
4421 "MAD R2.xyz, R3, R4, R2;\n"
4422 "MAD R2.xyz, R0, R2.w, R2;\n"
4423 "ADD R0.x, -R0.w, c[8];\n"
4424 "MAD R2.xyz, R1, R0.x, R2;\n"
4425 "ADD R0.z, R0.w, R1.w;\n"
4426 "MAD R2.w, -R0, R1, R0.z;\n"
4427 "ADD R0.xy, fragment.position, c[6];\n"
4428 "MUL R0.xy, R0, c[4];\n"
4429 "TEX R0, R0, texture[1], 2D;\n"
4430 "ADD R2, R2, -R1;\n"
4431 "DP4 R0.x, R0, c[7];\n"
4432 "MAD result.color, R0.x, R2, R1;\n"
4433 "END\n"
4434 ;
4435
4436static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE =
4437 "!!ARBfp1.0\n"
4438 "PARAM c[9] = { program.local[0..7],\n"
4439 " { 2 } };\n"
4440 "TEMP R0;\n"
4441 "TEMP R1;\n"
4442 "TEMP R2;\n"
4443 "TEMP R3;\n"
4444 "MUL R0.xyz, fragment.position.y, c[2];\n"
4445 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4446 "ADD R0.xyz, R0, c[3];\n"
4447 "RCP R0.z, R0.z;\n"
4448 "MUL R0.xy, R0, R0.z;\n"
4449 "MUL R0.xy, R0, c[0];\n"
4450 "ADD R0.z, R0.x, R0.y;\n"
4451 "MUL R1.x, R0.z, c[0].z;\n"
4452 "MUL R0.xy, fragment.position, c[5];\n"
4453 "TEX R0, R0, texture[0], 2D;\n"
4454 "TEX R1, R1, texture[2], 1D;\n"
4455 "ADD R2.xyz, R1, R0;\n"
4456 "MUL R3.xyz, R1.w, R0;\n"
4457 "MUL R1.xyz, R1, R0.w;\n"
4458 "MIN R1.xyz, R1, R3;\n"
4459 "MAD R2.xyz, -R1, c[8].x, R2;\n"
4460 "ADD R1.z, R1.w, R0.w;\n"
4461 "MAD R2.w, -R1, R0, R1.z;\n"
4462 "ADD R1.xy, fragment.position, c[6];\n"
4463 "MUL R1.xy, R1, c[4];\n"
4464 "TEX R1, R1, texture[1], 2D;\n"
4465 "ADD R2, R2, -R0;\n"
4466 "DP4 R1.x, R1, c[7];\n"
4467 "MAD result.color, R1.x, R2, R0;\n"
4468 "END\n"
4469 ;
4470
4471static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION =
4472 "!!ARBfp1.0\n"
4473 "PARAM c[9] = { program.local[0..7],\n"
4474 " { 2, 1 } };\n"
4475 "TEMP R0;\n"
4476 "TEMP R1;\n"
4477 "TEMP R2;\n"
4478 "TEMP R3;\n"
4479 "MUL R0.xyz, fragment.position.y, c[2];\n"
4480 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4481 "ADD R0.xyz, R0, c[3];\n"
4482 "RCP R0.z, R0.z;\n"
4483 "MUL R0.xy, R0, R0.z;\n"
4484 "MUL R0.xy, R0, c[0];\n"
4485 "ADD R0.z, R0.x, R0.y;\n"
4486 "MUL R1.x, R0.z, c[0].z;\n"
4487 "MUL R0.xy, fragment.position, c[5];\n"
4488 "TEX R0, R0, texture[0], 2D;\n"
4489 "TEX R1, R1, texture[2], 1D;\n"
4490 "MUL R2.xyz, R1.w, R0;\n"
4491 "MAD R3.xyz, R1, R0.w, R2;\n"
4492 "MUL R2.xyz, R1, R0;\n"
4493 "MAD R2.xyz, -R2, c[8].x, R3;\n"
4494 "ADD R2.w, -R0, c[8].y;\n"
4495 "MAD R1.xyz, R1, R2.w, R2;\n"
4496 "ADD R2.x, -R1.w, c[8].y;\n"
4497 "MAD R2.xyz, R0, R2.x, R1;\n"
4498 "ADD R1.z, R1.w, R0.w;\n"
4499 "MAD R2.w, -R1, R0, R1.z;\n"
4500 "ADD R1.xy, fragment.position, c[6];\n"
4501 "MUL R1.xy, R1, c[4];\n"
4502 "TEX R1, R1, texture[1], 2D;\n"
4503 "ADD R2, R2, -R0;\n"
4504 "DP4 R1.x, R1, c[7];\n"
4505 "MAD result.color, R1.x, R2, R0;\n"
4506 "END\n"
4507 ;
4508
4509static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
4510 "!!ARBfp1.0\n"
4511 "PARAM c[8] = { program.local[0..6],\n"
4512 " { 1 } };\n"
4513 "TEMP R0;\n"
4514 "TEMP R1;\n"
4515 "TEMP R2;\n"
4516 "TEMP R3;\n"
4517 "MUL R0.xyz, fragment.position.y, c[2];\n"
4518 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4519 "ADD R0.xyz, R0, c[3];\n"
4520 "RCP R0.z, R0.z;\n"
4521 "MUL R0.xy, R0, R0.z;\n"
4522 "MUL R0.xy, R0, c[0];\n"
4523 "ADD R0.x, R0, R0.y;\n"
4524 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
4525 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4526 "MUL R2.xyz, R1, c[4].y;\n"
4527 "MUL R0.x, R0, c[0].z;\n"
4528 "TEX R0, R0, texture[1], 1D;\n"
4529 "MUL R3.xyz, R0.w, R2;\n"
4530 "MUL R2.xyz, R0, c[4].x;\n"
4531 "MAD R2.xyz, R1.w, R2, R3;\n"
4532 "ADD R2.w, -R1, c[7].x;\n"
4533 "MUL R0.xyz, R0, c[5].y;\n"
4534 "MAD R0.xyz, R2.w, R0, R2;\n"
4535 "ADD R2.x, -R0.w, c[7];\n"
4536 "MUL R1.xyz, R1, c[5].z;\n"
4537 "MAD result.color.xyz, R2.x, R1, R0;\n"
4538 "MUL R0.x, R0.w, R1.w;\n"
4539 "MUL R0.z, R1.w, R2.x;\n"
4540 "MUL R0.y, R0.w, R2.w;\n"
4541 "DP3 result.color.w, R0, c[5];\n"
4542 "END\n"
4543 ;
4544
4545static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK =
4546 "!!ARBfp1.0\n"
4547 "PARAM c[6] = { program.local[0..4],\n"
4548 " { 1 } };\n"
4549 "TEMP R0;\n"
4550 "TEMP R1;\n"
4551 "TEMP R2;\n"
4552 "MUL R0.xyz, fragment.position.y, c[2];\n"
4553 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4554 "ADD R0.xyz, R0, c[3];\n"
4555 "RCP R0.z, R0.z;\n"
4556 "MUL R0.xy, R0, R0.z;\n"
4557 "MUL R0.xy, R0, c[0];\n"
4558 "ADD R0.x, R0, R0.y;\n"
4559 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4560 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4561 "MUL R0.x, R0, c[0].z;\n"
4562 "TEX R0, R0, texture[1], 1D;\n"
4563 "ADD R2.x, -R1.w, c[5];\n"
4564 "MUL R2.xyz, R0, R2.x;\n"
4565 "MAD R0.xyz, R0, R1, R2;\n"
4566 "ADD R2.x, R0.w, R1.w;\n"
4567 "ADD R2.y, -R0.w, c[5].x;\n"
4568 "MAD result.color.xyz, R1, R2.y, R0;\n"
4569 "MAD result.color.w, -R0, R1, R2.x;\n"
4570 "END\n"
4571 ;
4572
4573static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK =
4574 "!!ARBfp1.0\n"
4575 "PARAM c[5] = { program.local[0..4] };\n"
4576 "TEMP R0;\n"
4577 "TEMP R1;\n"
4578 "TEMP R2;\n"
4579 "MUL R0.xyz, fragment.position.y, c[2];\n"
4580 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4581 "ADD R0.xyz, R0, c[3];\n"
4582 "RCP R0.z, R0.z;\n"
4583 "MUL R0.xy, R0, R0.z;\n"
4584 "MUL R0.xy, R0, c[0];\n"
4585 "ADD R0.x, R0, R0.y;\n"
4586 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4587 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4588 "MUL R0.x, R0, c[0].z;\n"
4589 "TEX R0, R0, texture[1], 1D;\n"
4590 "ADD R2, R0, R1;\n"
4591 "MAD result.color, -R0, R1, R2;\n"
4592 "END\n"
4593 ;
4594
4595static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK =
4596 "!!ARBfp1.0\n"
4597 "PARAM c[6] = { program.local[0..4],\n"
4598 " { 2, 1 } };\n"
4599 "TEMP R0;\n"
4600 "TEMP R1;\n"
4601 "TEMP R2;\n"
4602 "TEMP R3;\n"
4603 "MUL R0.xyz, fragment.position.y, c[2];\n"
4604 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4605 "ADD R0.xyz, R0, c[3];\n"
4606 "RCP R0.z, R0.z;\n"
4607 "MUL R0.xy, R0, R0.z;\n"
4608 "MUL R0.xy, R0, c[0];\n"
4609 "ADD R0.x, R0, R0.y;\n"
4610 "MUL R0.x, R0, c[0].z;\n"
4611 "TEX R0, R0, texture[1], 1D;\n"
4612 "MUL R1.xy, fragment.position, c[4];\n"
4613 "TEX R1, R1, texture[0], 2D;\n"
4614 "ADD R3.xyz, R0.w, -R0;\n"
4615 "ADD R2.xyz, R1.w, -R1;\n"
4616 "MUL R2.xyz, R2, R3;\n"
4617 "ADD R2.w, -R1, c[5].y;\n"
4618 "MUL R2.xyz, R2, c[5].x;\n"
4619 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4620 "MAD R2.xyz, R0, R2.w, R2;\n"
4621 "MUL R3.xyz, R0, R2.w;\n"
4622 "MUL R0.xyz, R0, R1;\n"
4623 "ADD R2.w, -R0, c[5].y;\n"
4624 "MAD R0.xyz, R0, c[5].x, R3;\n"
4625 "MAD R0.xyz, R1, R2.w, R0;\n"
4626 "MAD R2.xyz, R1, R2.w, R2;\n"
4627 "MUL R1.xyz, R1, c[5].x;\n"
4628 "ADD R2.w, R0, R1;\n"
4629 "ADD R2.xyz, R2, -R0;\n"
4630 "SGE R1.xyz, R1, R1.w;\n"
4631 "MAD result.color.xyz, R1, R2, R0;\n"
4632 "MAD result.color.w, -R0, R1, R2;\n"
4633 "END\n"
4634 ;
4635
4636static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK =
4637 "!!ARBfp1.0\n"
4638 "PARAM c[6] = { program.local[0..4],\n"
4639 " { 1 } };\n"
4640 "TEMP R0;\n"
4641 "TEMP R1;\n"
4642 "TEMP R2;\n"
4643 "TEMP R3;\n"
4644 "MUL R0.xyz, fragment.position.y, c[2];\n"
4645 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4646 "ADD R0.xyz, R0, c[3];\n"
4647 "RCP R0.z, R0.z;\n"
4648 "MUL R0.xy, R0, R0.z;\n"
4649 "MUL R0.xy, R0, c[0];\n"
4650 "ADD R0.x, R0, R0.y;\n"
4651 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4652 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4653 "MUL R0.x, R0, c[0].z;\n"
4654 "TEX R0, R0, texture[1], 1D;\n"
4655 "MUL R2.xyz, R0, R1.w;\n"
4656 "MUL R3.xyz, R0.w, R1;\n"
4657 "MIN R2.xyz, R2, R3;\n"
4658 "ADD R2.w, -R1, c[5].x;\n"
4659 "MAD R0.xyz, R0, R2.w, R2;\n"
4660 "ADD R2.x, R0.w, R1.w;\n"
4661 "ADD R2.y, -R0.w, c[5].x;\n"
4662 "MAD result.color.xyz, R1, R2.y, R0;\n"
4663 "MAD result.color.w, -R0, R1, R2.x;\n"
4664 "END\n"
4665 ;
4666
4667static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK =
4668 "!!ARBfp1.0\n"
4669 "PARAM c[6] = { program.local[0..4],\n"
4670 " { 1 } };\n"
4671 "TEMP R0;\n"
4672 "TEMP R1;\n"
4673 "TEMP R2;\n"
4674 "TEMP R3;\n"
4675 "MUL R0.xyz, fragment.position.y, c[2];\n"
4676 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4677 "ADD R0.xyz, R0, c[3];\n"
4678 "RCP R0.z, R0.z;\n"
4679 "MUL R0.xy, R0, R0.z;\n"
4680 "MUL R0.xy, R0, c[0];\n"
4681 "ADD R0.x, R0, R0.y;\n"
4682 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4683 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4684 "MUL R0.x, R0, c[0].z;\n"
4685 "TEX R0, R0, texture[1], 1D;\n"
4686 "MUL R2.xyz, R0, R1.w;\n"
4687 "MUL R3.xyz, R0.w, R1;\n"
4688 "MAX R2.xyz, R2, R3;\n"
4689 "ADD R2.w, -R1, c[5].x;\n"
4690 "MAD R0.xyz, R0, R2.w, R2;\n"
4691 "ADD R2.x, R0.w, R1.w;\n"
4692 "ADD R2.y, -R0.w, c[5].x;\n"
4693 "MAD result.color.xyz, R1, R2.y, R0;\n"
4694 "MAD result.color.w, -R0, R1, R2.x;\n"
4695 "END\n"
4696 ;
4697
4698static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK =
4699 "!!ARBfp1.0\n"
4700 "PARAM c[6] = { program.local[0..4],\n"
4701 " { 1, 1e-006 } };\n"
4702 "TEMP R0;\n"
4703 "TEMP R1;\n"
4704 "TEMP R2;\n"
4705 "TEMP R3;\n"
4706 "MUL R0.xyz, fragment.position.y, c[2];\n"
4707 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4708 "ADD R0.xyz, R0, c[3];\n"
4709 "RCP R0.z, R0.z;\n"
4710 "MUL R0.xy, R0, R0.z;\n"
4711 "MUL R0.xy, R0, c[0];\n"
4712 "ADD R0.x, R0, R0.y;\n"
4713 "MUL R0.x, R0, c[0].z;\n"
4714 "TEX R0, R0, texture[1], 1D;\n"
4715 "MAX R1.x, R0.w, c[5].y;\n"
4716 "RCP R1.x, R1.x;\n"
4717 "MAD R3.xyz, -R0, R1.x, c[5].x;\n"
4718 "MAX R3.xyz, R3, c[5].y;\n"
4719 "MUL R1.xy, fragment.position, c[4];\n"
4720 "TEX R1, R1, texture[0], 2D;\n"
4721 "ADD R2.x, -R0.w, c[5];\n"
4722 "MUL R2.xyz, R1, R2.x;\n"
4723 "ADD R2.w, -R1, c[5].x;\n"
4724 "MAD R2.xyz, R0, R2.w, R2;\n"
4725 "MUL R1.xyz, R0.w, R1;\n"
4726 "MAD R0.xyz, R0, R1.w, R1;\n"
4727 "MUL R2.w, R0, R1;\n"
4728 "RCP R3.x, R3.x;\n"
4729 "RCP R3.y, R3.y;\n"
4730 "RCP R3.z, R3.z;\n"
4731 "MAD R3.xyz, R1, R3, R2;\n"
4732 "MAD R2.xyz, R0.w, R1.w, R2;\n"
4733 "ADD R1.x, R0.w, R1.w;\n"
4734 "ADD R2.xyz, R2, -R3;\n"
4735 "SGE R0.xyz, R0, R2.w;\n"
4736 "MAD result.color.xyz, R0, R2, R3;\n"
4737 "MAD result.color.w, -R0, R1, R1.x;\n"
4738 "END\n"
4739 ;
4740
4741static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK =
4742 "!!ARBfp1.0\n"
4743 "PARAM c[6] = { program.local[0..4],\n"
4744 " { 1, 9.9999997e-006 } };\n"
4745 "TEMP R0;\n"
4746 "TEMP R1;\n"
4747 "TEMP R2;\n"
4748 "TEMP R3;\n"
4749 "TEMP R4;\n"
4750 "TEMP R5;\n"
4751 "MUL R0.xyz, fragment.position.y, c[2];\n"
4752 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4753 "ADD R0.xyz, R0, c[3];\n"
4754 "RCP R0.z, R0.z;\n"
4755 "MUL R0.xy, R0, R0.z;\n"
4756 "MUL R0.xy, R0, c[0];\n"
4757 "ADD R0.x, R0, R0.y;\n"
4758 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4759 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4760 "MUL R0.x, R0, c[0].z;\n"
4761 "TEX R0, R0, texture[1], 1D;\n"
4762 "MUL R2.xyz, R0.w, R1;\n"
4763 "MAD R3.xyz, R0, R1.w, R2;\n"
4764 "ADD R2.w, -R1, c[5].x;\n"
4765 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
4766 "MUL R4.xyz, R0.w, R2;\n"
4767 "MAX R2.xyz, R0, c[5].y;\n"
4768 "MUL R5.xyz, R0, R2.w;\n"
4769 "ADD R3.w, -R0, c[5].x;\n"
4770 "RCP R2.x, R2.x;\n"
4771 "RCP R2.y, R2.y;\n"
4772 "RCP R2.z, R2.z;\n"
4773 "MAD R2.xyz, R4, R2, R5;\n"
4774 "MUL R4.xyz, R1, R3.w;\n"
4775 "MAD R1.xyz, R1, R3.w, R2;\n"
4776 "MAD R0.xyz, R0, R2.w, R4;\n"
4777 "MUL R2.x, R0.w, R1.w;\n"
4778 "ADD R2.w, R0, R1;\n"
4779 "ADD R1.xyz, R1, -R0;\n"
4780 "SGE R2.xyz, R3, R2.x;\n"
4781 "MAD result.color.xyz, R2, R1, R0;\n"
4782 "MAD result.color.w, -R0, R1, R2;\n"
4783 "END\n"
4784 ;
4785
4786static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK =
4787 "!!ARBfp1.0\n"
4788 "PARAM c[6] = { program.local[0..4],\n"
4789 " { 2, 1 } };\n"
4790 "TEMP R0;\n"
4791 "TEMP R1;\n"
4792 "TEMP R2;\n"
4793 "TEMP R3;\n"
4794 "TEMP R4;\n"
4795 "MUL R0.xyz, fragment.position.y, c[2];\n"
4796 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4797 "ADD R0.xyz, R0, c[3];\n"
4798 "RCP R0.z, R0.z;\n"
4799 "MUL R0.xy, R0, R0.z;\n"
4800 "MUL R0.xy, R0, c[0];\n"
4801 "ADD R0.x, R0, R0.y;\n"
4802 "MUL R0.x, R0, c[0].z;\n"
4803 "TEX R0, R0, texture[1], 1D;\n"
4804 "MUL R1.xy, fragment.position, c[4];\n"
4805 "TEX R1, R1, texture[0], 2D;\n"
4806 "ADD R2.w, -R1, c[5].y;\n"
4807 "ADD R3.xyz, R0.w, -R0;\n"
4808 "ADD R2.xyz, R1.w, -R1;\n"
4809 "MUL R2.xyz, R2, R3;\n"
4810 "MUL R2.xyz, R2, c[5].x;\n"
4811 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4812 "MAD R2.xyz, R0, R2.w, R2;\n"
4813 "MUL R4.xyz, R0, R2.w;\n"
4814 "MUL R3.xyz, R0, R1;\n"
4815 "MUL R0.xyz, R0, c[5].x;\n"
4816 "ADD R2.w, -R0, c[5].y;\n"
4817 "MAD R3.xyz, R3, c[5].x, R4;\n"
4818 "MAD R3.xyz, R1, R2.w, R3;\n"
4819 "MAD R1.xyz, R1, R2.w, R2;\n"
4820 "ADD R2.x, R0.w, R1.w;\n"
4821 "ADD R1.xyz, R1, -R3;\n"
4822 "SGE R0.xyz, R0, R0.w;\n"
4823 "MAD result.color.xyz, R0, R1, R3;\n"
4824 "MAD result.color.w, -R0, R1, R2.x;\n"
4825 "END\n"
4826 ;
4827
4828static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
4829 "!!ARBfp1.0\n"
4830 "PARAM c[7] = { program.local[0..4],\n"
4831 " { 1, 2, 9.9999997e-006, 4 },\n"
4832 " { 16, 12, 3 } };\n"
4833 "TEMP R0;\n"
4834 "TEMP R1;\n"
4835 "TEMP R2;\n"
4836 "TEMP R3;\n"
4837 "TEMP R4;\n"
4838 "TEMP R5;\n"
4839 "TEMP R6;\n"
4840 "MUL R0.xyz, fragment.position.y, c[2];\n"
4841 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4842 "ADD R0.xyz, R0, c[3];\n"
4843 "RCP R0.z, R0.z;\n"
4844 "MUL R0.xy, R0, R0.z;\n"
4845 "MUL R0.xy, R0, c[0];\n"
4846 "ADD R0.x, R0, R0.y;\n"
4847 "MUL R1.xy, fragment.position, c[4];\n"
4848 "TEX R1, R1, texture[0], 2D;\n"
4849 "MAX R0.z, R1.w, c[5];\n"
4850 "RCP R0.z, R0.z;\n"
4851 "MUL R3.xyz, R1, R0.z;\n"
4852 "MAD R2.xyz, R3, c[6].x, -c[6].y;\n"
4853 "MUL R0.x, R0, c[0].z;\n"
4854 "TEX R0, R0, texture[1], 1D;\n"
4855 "MAD R4.xyz, R3, R2, c[6].z;\n"
4856 "MAD R2.xyz, R0, c[5].y, -R0.w;\n"
4857 "MUL R5.xyz, R1.w, R2;\n"
4858 "MUL R6.xyz, R5, R4;\n"
4859 "RSQ R2.w, R3.x;\n"
4860 "RCP R4.x, R2.w;\n"
4861 "RSQ R2.w, R3.y;\n"
4862 "RSQ R3.w, R3.z;\n"
4863 "RCP R4.y, R2.w;\n"
4864 "RCP R4.z, R3.w;\n"
4865 "ADD R4.xyz, -R3, R4;\n"
4866 "MUL R6.xyz, R3, R6;\n"
4867 "MUL R4.xyz, R5, R4;\n"
4868 "ADD R3.xyz, -R3, c[5].x;\n"
4869 "MAD R2.xyz, R2, R3, R0.w;\n"
4870 "MUL R3.xyz, R0, c[5].y;\n"
4871 "MAD R5.xyz, R0.w, R1, R6;\n"
4872 "MAD R4.xyz, R0.w, R1, R4;\n"
4873 "ADD R6.xyz, R4, -R5;\n"
4874 "MUL R4.xyz, R1, c[5].w;\n"
4875 "SGE R4.xyz, R4, R1.w;\n"
4876 "MAD R4.xyz, R4, R6, R5;\n"
4877 "MAD R4.xyz, -R1, R2, R4;\n"
4878 "MUL R2.xyz, R1, R2;\n"
4879 "SGE R3.xyz, R3, R0.w;\n"
4880 "MAD R2.xyz, R3, R4, R2;\n"
4881 "ADD R2.w, -R1, c[5].x;\n"
4882 "MAD R2.xyz, R0, R2.w, R2;\n"
4883 "ADD R0.x, R0.w, R1.w;\n"
4884 "ADD R0.y, -R0.w, c[5].x;\n"
4885 "MAD result.color.xyz, R1, R0.y, R2;\n"
4886 "MAD result.color.w, -R0, R1, R0.x;\n"
4887 "END\n"
4888 ;
4889
4890static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK =
4891 "!!ARBfp1.0\n"
4892 "PARAM c[6] = { program.local[0..4],\n"
4893 " { 2 } };\n"
4894 "TEMP R0;\n"
4895 "TEMP R1;\n"
4896 "TEMP R2;\n"
4897 "TEMP R3;\n"
4898 "MUL R0.xyz, fragment.position.y, c[2];\n"
4899 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4900 "ADD R0.xyz, R0, c[3];\n"
4901 "RCP R0.z, R0.z;\n"
4902 "MUL R0.xy, R0, R0.z;\n"
4903 "MUL R0.xy, R0, c[0];\n"
4904 "ADD R0.x, R0, R0.y;\n"
4905 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4906 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4907 "MUL R0.x, R0, c[0].z;\n"
4908 "TEX R0, R0, texture[1], 1D;\n"
4909 "MUL R2.xyz, R0, R1.w;\n"
4910 "MUL R3.xyz, R0.w, R1;\n"
4911 "ADD R0.xyz, R0, R1;\n"
4912 "MIN R2.xyz, R2, R3;\n"
4913 "ADD R1.x, R0.w, R1.w;\n"
4914 "MAD result.color.xyz, -R2, c[5].x, R0;\n"
4915 "MAD result.color.w, -R0, R1, R1.x;\n"
4916 "END\n"
4917 ;
4918
4919static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK =
4920 "!!ARBfp1.0\n"
4921 "PARAM c[6] = { program.local[0..4],\n"
4922 " { 2, 1 } };\n"
4923 "TEMP R0;\n"
4924 "TEMP R1;\n"
4925 "TEMP R2;\n"
4926 "TEMP R3;\n"
4927 "MUL R0.xyz, fragment.position.y, c[2];\n"
4928 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4929 "ADD R0.xyz, R0, c[3];\n"
4930 "RCP R0.z, R0.z;\n"
4931 "MUL R0.xy, R0, R0.z;\n"
4932 "MUL R0.xy, R0, c[0];\n"
4933 "ADD R0.x, R0, R0.y;\n"
4934 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4935 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4936 "MUL R0.x, R0, c[0].z;\n"
4937 "TEX R0, R0, texture[1], 1D;\n"
4938 "MUL R2.xyz, R0.w, R1;\n"
4939 "MAD R3.xyz, R0, R1.w, R2;\n"
4940 "MUL R2.xyz, R0, R1;\n"
4941 "MAD R2.xyz, -R2, c[5].x, R3;\n"
4942 "ADD R2.w, -R1, c[5].y;\n"
4943 "MAD R0.xyz, R0, R2.w, R2;\n"
4944 "ADD R2.x, R0.w, R1.w;\n"
4945 "ADD R2.y, -R0.w, c[5];\n"
4946 "MAD result.color.xyz, R1, R2.y, R0;\n"
4947 "MAD result.color.w, -R0, R1, R2.x;\n"
4948 "END\n"
4949 ;
4950
4951static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK =
4952 "!!ARBfp1.0\n"
4953 "PARAM c[7] = { program.local[0..6] };\n"
4954 "TEMP R0;\n"
4955 "TEMP R1;\n"
4956 "MUL R0.xyz, fragment.position.y, c[2];\n"
4957 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4958 "ADD R0.xyz, R0, c[3];\n"
4959 "RCP R0.z, R0.z;\n"
4960 "MUL R0.zw, R0.xyxy, R0.z;\n"
4961 "MUL R0.zw, R0, c[0].xyxy;\n"
4962 "ADD R1.x, R0.z, R0.w;\n"
4963 "ADD R0.xy, fragment.position, c[5];\n"
4964 "MUL R0.xy, R0, c[4];\n"
4965 "TEX R0, R0, texture[0], 2D;\n"
4966 "DP4 R1.y, R0, c[6];\n"
4967 "MUL R1.x, R1, c[0].z;\n"
4968 "TEX R0, R1, texture[1], 1D;\n"
4969 "MUL result.color, R0, R1.y;\n"
4970 "END\n"
4971 ;
4972
4973static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK =
4974 "!!ARBfp1.0\n"
4975 "PARAM c[4] = { program.local[0..3] };\n"
4976 "TEMP R0;\n"
4977 "MUL R0.xyz, fragment.position.y, c[2];\n"
4978 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4979 "ADD R0.xyz, R0, c[3];\n"
4980 "RCP R0.z, R0.z;\n"
4981 "MUL R0.xy, R0, R0.z;\n"
4982 "MUL R0.xy, R0, c[0];\n"
4983 "ADD R0.x, R0, R0.y;\n"
4984 "MUL R0.x, R0, c[0].z;\n"
4985 "TEX result.color, R0, texture[0], 1D;\n"
4986 "END\n"
4987 ;
4988
4989static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
4990 "!!ARBfp1.0\n"
4991 "PARAM c[11] = { program.local[0..9],\n"
4992 " { 1 } };\n"
4993 "TEMP R0;\n"
4994 "TEMP R1;\n"
4995 "TEMP R2;\n"
4996 "TEMP R3;\n"
4997 "MUL R0.xyz, fragment.position.y, c[2];\n"
4998 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
4999 "ADD R1.xyz, R0, c[3];\n"
5000 "RCP R0.z, R1.z;\n"
5001 "MUL R1.xy, R1, R0.z;\n"
5002 "MUL R0.xy, fragment.position, c[7];\n"
5003 "TEX R0, R0, texture[0], 2D;\n"
5004 "MUL R1.xy, R1, c[0];\n"
5005 "TEX R1, R1, texture[2], 2D;\n"
5006 "MUL R2.xyz, R0, c[4].y;\n"
5007 "MUL R3.xyz, R1.w, R2;\n"
5008 "MUL R2.xyz, R1, c[4].x;\n"
5009 "MAD R2.xyz, R0.w, R2, R3;\n"
5010 "ADD R3.xy, fragment.position, c[8];\n"
5011 "ADD R2.w, -R0, c[10].x;\n"
5012 "MUL R1.xyz, R1, c[5].y;\n"
5013 "MAD R2.xyz, R2.w, R1, R2;\n"
5014 "MUL R1.xyz, R0, c[5].z;\n"
5015 "ADD R3.z, -R1.w, c[10].x;\n"
5016 "MAD R2.xyz, R3.z, R1, R2;\n"
5017 "MUL R1.y, R1.w, R2.w;\n"
5018 "MUL R1.x, R1.w, R0.w;\n"
5019 "MUL R1.z, R0.w, R3;\n"
5020 "DP3 R2.w, R1, c[5];\n"
5021 "MUL R3.xy, R3, c[6];\n"
5022 "TEX R1, R3, texture[1], 2D;\n"
5023 "ADD R2, R2, -R0;\n"
5024 "DP4 R1.x, R1, c[9];\n"
5025 "MAD result.color, R1.x, R2, R0;\n"
5026 "END\n"
5027 ;
5028
5029static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY =
5030 "!!ARBfp1.0\n"
5031 "PARAM c[9] = { program.local[0..7],\n"
5032 " { 1 } };\n"
5033 "TEMP R0;\n"
5034 "TEMP R1;\n"
5035 "TEMP R2;\n"
5036 "MUL R0.xyz, fragment.position.y, c[2];\n"
5037 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5038 "ADD R1.xyz, R0, c[3];\n"
5039 "RCP R0.z, R1.z;\n"
5040 "MUL R1.xy, R1, R0.z;\n"
5041 "MUL R0.xy, fragment.position, c[5];\n"
5042 "TEX R0, R0, texture[0], 2D;\n"
5043 "MUL R1.xy, R1, c[0];\n"
5044 "TEX R1, R1, texture[2], 2D;\n"
5045 "ADD R2.x, -R0.w, c[8];\n"
5046 "MUL R2.xyz, R1, R2.x;\n"
5047 "MAD R1.xyz, R1, R0, R2;\n"
5048 "ADD R2.x, -R1.w, c[8];\n"
5049 "MAD R2.xyz, R0, R2.x, R1;\n"
5050 "ADD R1.z, R1.w, R0.w;\n"
5051 "MAD R2.w, -R1, R0, R1.z;\n"
5052 "ADD R1.xy, fragment.position, c[6];\n"
5053 "MUL R1.xy, R1, c[4];\n"
5054 "TEX R1, R1, texture[1], 2D;\n"
5055 "ADD R2, R2, -R0;\n"
5056 "DP4 R1.x, R1, c[7];\n"
5057 "MAD result.color, R1.x, R2, R0;\n"
5058 "END\n"
5059 ;
5060
5061static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN =
5062 "!!ARBfp1.0\n"
5063 "PARAM c[8] = { program.local[0..7] };\n"
5064 "TEMP R0;\n"
5065 "TEMP R1;\n"
5066 "TEMP R2;\n"
5067 "TEMP R3;\n"
5068 "MUL R0.xyz, fragment.position.y, c[2];\n"
5069 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5070 "ADD R0.xyz, R0, c[3];\n"
5071 "RCP R0.z, R0.z;\n"
5072 "MUL R0.xy, R0, R0.z;\n"
5073 "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
5074 "ADD R3.xy, fragment.position, c[6];\n"
5075 "TEX R1, R0.zwzw, texture[2], 2D;\n"
5076 "MUL R0.xy, fragment.position, c[5];\n"
5077 "TEX R0, R0, texture[0], 2D;\n"
5078 "ADD R2, R1, R0;\n"
5079 "MAD R2, -R1, R0, R2;\n"
5080 "MUL R3.xy, R3, c[4];\n"
5081 "TEX R1, R3, texture[1], 2D;\n"
5082 "ADD R2, R2, -R0;\n"
5083 "DP4 R1.x, R1, c[7];\n"
5084 "MAD result.color, R1.x, R2, R0;\n"
5085 "END\n"
5086 ;
5087
5088static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY =
5089 "!!ARBfp1.0\n"
5090 "PARAM c[9] = { program.local[0..7],\n"
5091 " { 2, 1 } };\n"
5092 "TEMP R0;\n"
5093 "TEMP R1;\n"
5094 "TEMP R2;\n"
5095 "TEMP R3;\n"
5096 "TEMP R4;\n"
5097 "MUL R0.xyz, fragment.position.y, c[2];\n"
5098 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5099 "ADD R0.xyz, R0, c[3];\n"
5100 "RCP R0.z, R0.z;\n"
5101 "MUL R0.xy, R0, R0.z;\n"
5102 "MUL R0.xy, R0, c[0];\n"
5103 "TEX R0, R0, texture[2], 2D;\n"
5104 "MUL R1.xy, fragment.position, c[5];\n"
5105 "TEX R1, R1, texture[0], 2D;\n"
5106 "ADD R2.w, -R1, c[8].y;\n"
5107 "ADD R3.xyz, R0.w, -R0;\n"
5108 "ADD R2.xyz, R1.w, -R1;\n"
5109 "MUL R2.xyz, R2, R3;\n"
5110 "MUL R2.xyz, R2, c[8].x;\n"
5111 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5112 "MUL R4.xyz, R0, R2.w;\n"
5113 "MUL R3.xyz, R0, R1;\n"
5114 "MAD R0.xyz, R0, R2.w, R2;\n"
5115 "ADD R2.x, -R0.w, c[8].y;\n"
5116 "MAD R3.xyz, R3, c[8].x, R4;\n"
5117 "MAD R3.xyz, R1, R2.x, R3;\n"
5118 "MAD R0.xyz, R1, R2.x, R0;\n"
5119 "MUL R2.xyz, R1, c[8].x;\n"
5120 "ADD R0.xyz, R0, -R3;\n"
5121 "SGE R2.xyz, R2, R1.w;\n"
5122 "MAD R2.xyz, R2, R0, R3;\n"
5123 "ADD R0.z, R0.w, R1.w;\n"
5124 "MAD R2.w, -R0, R1, R0.z;\n"
5125 "ADD R0.xy, fragment.position, c[6];\n"
5126 "MUL R0.xy, R0, c[4];\n"
5127 "TEX R0, R0, texture[1], 2D;\n"
5128 "ADD R2, R2, -R1;\n"
5129 "DP4 R0.x, R0, c[7];\n"
5130 "MAD result.color, R0.x, R2, R1;\n"
5131 "END\n"
5132 ;
5133
5134static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN =
5135 "!!ARBfp1.0\n"
5136 "PARAM c[9] = { program.local[0..7],\n"
5137 " { 1 } };\n"
5138 "TEMP R0;\n"
5139 "TEMP R1;\n"
5140 "TEMP R2;\n"
5141 "TEMP R3;\n"
5142 "MUL R0.xyz, fragment.position.y, c[2];\n"
5143 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5144 "ADD R0.xyz, R0, c[3];\n"
5145 "RCP R0.z, R0.z;\n"
5146 "MUL R0.zw, R0.xyxy, R0.z;\n"
5147 "MUL R1.xy, R0.zwzw, c[0];\n"
5148 "MUL R0.xy, fragment.position, c[5];\n"
5149 "TEX R0, R0, texture[0], 2D;\n"
5150 "TEX R1, R1, texture[2], 2D;\n"
5151 "MUL R3.xyz, R1.w, R0;\n"
5152 "MUL R2.xyz, R1, R0.w;\n"
5153 "MIN R2.xyz, R2, R3;\n"
5154 "ADD R2.w, -R0, c[8].x;\n"
5155 "MAD R1.xyz, R1, R2.w, R2;\n"
5156 "ADD R2.x, -R1.w, c[8];\n"
5157 "MAD R2.xyz, R0, R2.x, R1;\n"
5158 "ADD R1.z, R1.w, R0.w;\n"
5159 "MAD R2.w, -R1, R0, R1.z;\n"
5160 "ADD R1.xy, fragment.position, c[6];\n"
5161 "MUL R1.xy, R1, c[4];\n"
5162 "TEX R1, R1, texture[1], 2D;\n"
5163 "ADD R2, R2, -R0;\n"
5164 "DP4 R1.x, R1, c[7];\n"
5165 "MAD result.color, R1.x, R2, R0;\n"
5166 "END\n"
5167 ;
5168
5169static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN =
5170 "!!ARBfp1.0\n"
5171 "PARAM c[9] = { program.local[0..7],\n"
5172 " { 1 } };\n"
5173 "TEMP R0;\n"
5174 "TEMP R1;\n"
5175 "TEMP R2;\n"
5176 "TEMP R3;\n"
5177 "MUL R0.xyz, fragment.position.y, c[2];\n"
5178 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5179 "ADD R0.xyz, R0, c[3];\n"
5180 "RCP R0.z, R0.z;\n"
5181 "MUL R0.zw, R0.xyxy, R0.z;\n"
5182 "MUL R1.xy, R0.zwzw, c[0];\n"
5183 "MUL R0.xy, fragment.position, c[5];\n"
5184 "TEX R0, R0, texture[0], 2D;\n"
5185 "TEX R1, R1, texture[2], 2D;\n"
5186 "MUL R3.xyz, R1.w, R0;\n"
5187 "MUL R2.xyz, R1, R0.w;\n"
5188 "MAX R2.xyz, R2, R3;\n"
5189 "ADD R2.w, -R0, c[8].x;\n"
5190 "MAD R1.xyz, R1, R2.w, R2;\n"
5191 "ADD R2.x, -R1.w, c[8];\n"
5192 "MAD R2.xyz, R0, R2.x, R1;\n"
5193 "ADD R1.z, R1.w, R0.w;\n"
5194 "MAD R2.w, -R1, R0, R1.z;\n"
5195 "ADD R1.xy, fragment.position, c[6];\n"
5196 "MUL R1.xy, R1, c[4];\n"
5197 "TEX R1, R1, texture[1], 2D;\n"
5198 "ADD R2, R2, -R0;\n"
5199 "DP4 R1.x, R1, c[7];\n"
5200 "MAD result.color, R1.x, R2, R0;\n"
5201 "END\n"
5202 ;
5203
5204static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE =
5205 "!!ARBfp1.0\n"
5206 "PARAM c[9] = { program.local[0..7],\n"
5207 " { 1, 1e-006 } };\n"
5208 "TEMP R0;\n"
5209 "TEMP R1;\n"
5210 "TEMP R2;\n"
5211 "TEMP R3;\n"
5212 "TEMP R4;\n"
5213 "MUL R0.xyz, fragment.position.y, c[2];\n"
5214 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5215 "ADD R0.xyz, R0, c[3];\n"
5216 "RCP R0.z, R0.z;\n"
5217 "MUL R0.xy, R0, R0.z;\n"
5218 "MUL R0.xy, R0, c[0];\n"
5219 "TEX R0, R0, texture[2], 2D;\n"
5220 "MAX R1.x, R0.w, c[8].y;\n"
5221 "RCP R1.x, R1.x;\n"
5222 "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
5223 "MAX R2.xyz, R2, c[8].y;\n"
5224 "MUL R1.xy, fragment.position, c[5];\n"
5225 "TEX R1, R1, texture[0], 2D;\n"
5226 "ADD R2.w, -R0, c[8].x;\n"
5227 "MUL R3.xyz, R1, R2.w;\n"
5228 "ADD R2.w, -R1, c[8].x;\n"
5229 "MAD R4.xyz, R0, R2.w, R3;\n"
5230 "MUL R3.xyz, R0.w, R1;\n"
5231 "MUL R2.w, R0, R1;\n"
5232 "MAD R0.xyz, R0, R1.w, R3;\n"
5233 "SGE R0.xyz, R0, R2.w;\n"
5234 "RCP R2.x, R2.x;\n"
5235 "RCP R2.y, R2.y;\n"
5236 "RCP R2.z, R2.z;\n"
5237 "MAD R2.xyz, R3, R2, R4;\n"
5238 "MAD R4.xyz, R0.w, R1.w, R4;\n"
5239 "ADD R4.xyz, R4, -R2;\n"
5240 "MAD R2.xyz, R0, R4, R2;\n"
5241 "ADD R0.z, R0.w, R1.w;\n"
5242 "MAD R2.w, -R0, R1, R0.z;\n"
5243 "ADD R0.xy, fragment.position, c[6];\n"
5244 "MUL R0.xy, R0, c[4];\n"
5245 "TEX R0, R0, texture[1], 2D;\n"
5246 "ADD R2, R2, -R1;\n"
5247 "DP4 R0.x, R0, c[7];\n"
5248 "MAD result.color, R0.x, R2, R1;\n"
5249 "END\n"
5250 ;
5251
5252static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN =
5253 "!!ARBfp1.0\n"
5254 "PARAM c[9] = { program.local[0..7],\n"
5255 " { 1, 9.9999997e-006 } };\n"
5256 "TEMP R0;\n"
5257 "TEMP R1;\n"
5258 "TEMP R2;\n"
5259 "TEMP R3;\n"
5260 "TEMP R4;\n"
5261 "TEMP R5;\n"
5262 "MUL R0.xyz, fragment.position.y, c[2];\n"
5263 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5264 "ADD R0.xyz, R0, c[3];\n"
5265 "RCP R0.z, R0.z;\n"
5266 "MUL R0.xy, R0, R0.z;\n"
5267 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
5268 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5269 "MUL R0.xy, R0, c[0];\n"
5270 "TEX R0, R0, texture[2], 2D;\n"
5271 "MUL R2.xyz, R0.w, R1;\n"
5272 "MAD R3.xyz, R0, R1.w, R2;\n"
5273 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
5274 "MUL R4.xyz, R0.w, R2;\n"
5275 "MAX R2.xyz, R0, c[8].y;\n"
5276 "ADD R2.w, -R1, c[8].x;\n"
5277 "MUL R5.xyz, R0, R2.w;\n"
5278 "ADD R3.w, -R0, c[8].x;\n"
5279 "RCP R2.x, R2.x;\n"
5280 "RCP R2.y, R2.y;\n"
5281 "RCP R2.z, R2.z;\n"
5282 "MAD R2.xyz, R4, R2, R5;\n"
5283 "MUL R4.xyz, R1, R3.w;\n"
5284 "MAD R0.xyz, R0, R2.w, R4;\n"
5285 "MUL R2.w, R0, R1;\n"
5286 "MAD R2.xyz, R1, R3.w, R2;\n"
5287 "ADD R2.xyz, R2, -R0;\n"
5288 "SGE R3.xyz, R3, R2.w;\n"
5289 "MAD R2.xyz, R3, R2, R0;\n"
5290 "ADD R0.z, R0.w, R1.w;\n"
5291 "MAD R2.w, -R0, R1, R0.z;\n"
5292 "ADD R0.xy, fragment.position, c[6];\n"
5293 "MUL R0.xy, R0, c[4];\n"
5294 "TEX R0, R0, texture[1], 2D;\n"
5295 "ADD R2, R2, -R1;\n"
5296 "DP4 R0.x, R0, c[7];\n"
5297 "MAD result.color, R0.x, R2, R1;\n"
5298 "END\n"
5299 ;
5300
5301static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT =
5302 "!!ARBfp1.0\n"
5303 "PARAM c[9] = { program.local[0..7],\n"
5304 " { 2, 1 } };\n"
5305 "TEMP R0;\n"
5306 "TEMP R1;\n"
5307 "TEMP R2;\n"
5308 "TEMP R3;\n"
5309 "TEMP R4;\n"
5310 "MUL R0.xyz, fragment.position.y, c[2];\n"
5311 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5312 "ADD R0.xyz, R0, c[3];\n"
5313 "RCP R0.z, R0.z;\n"
5314 "MUL R0.xy, R0, R0.z;\n"
5315 "MUL R0.xy, R0, c[0];\n"
5316 "TEX R0, R0, texture[2], 2D;\n"
5317 "MUL R1.xy, fragment.position, c[5];\n"
5318 "TEX R1, R1, texture[0], 2D;\n"
5319 "ADD R2.w, -R1, c[8].y;\n"
5320 "ADD R3.xyz, R0.w, -R0;\n"
5321 "ADD R2.xyz, R1.w, -R1;\n"
5322 "MUL R2.xyz, R2, R3;\n"
5323 "MUL R2.xyz, R2, c[8].x;\n"
5324 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5325 "MUL R4.xyz, R0, R2.w;\n"
5326 "MAD R2.xyz, R0, R2.w, R2;\n"
5327 "MUL R3.xyz, R0, R1;\n"
5328 "ADD R2.w, -R0, c[8].y;\n"
5329 "MAD R3.xyz, R3, c[8].x, R4;\n"
5330 "MUL R0.xyz, R0, c[8].x;\n"
5331 "SGE R0.xyz, R0, R0.w;\n"
5332 "MAD R3.xyz, R1, R2.w, R3;\n"
5333 "MAD R2.xyz, R1, R2.w, R2;\n"
5334 "ADD R2.xyz, R2, -R3;\n"
5335 "MAD R2.xyz, R0, R2, R3;\n"
5336 "ADD R0.z, R0.w, R1.w;\n"
5337 "MAD R2.w, -R0, R1, R0.z;\n"
5338 "ADD R0.xy, fragment.position, c[6];\n"
5339 "MUL R0.xy, R0, c[4];\n"
5340 "TEX R0, R0, texture[1], 2D;\n"
5341 "ADD R2, R2, -R1;\n"
5342 "DP4 R0.x, R0, c[7];\n"
5343 "MAD result.color, R0.x, R2, R1;\n"
5344 "END\n"
5345 ;
5346
5347static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT =
5348 "!!ARBfp1.0\n"
5349 "PARAM c[10] = { program.local[0..7],\n"
5350 " { 1, 2, 9.9999997e-006, 4 },\n"
5351 " { 16, 12, 3 } };\n"
5352 "TEMP R0;\n"
5353 "TEMP R1;\n"
5354 "TEMP R2;\n"
5355 "TEMP R3;\n"
5356 "TEMP R4;\n"
5357 "TEMP R5;\n"
5358 "TEMP R6;\n"
5359 "MUL R0.xyz, fragment.position.y, c[2];\n"
5360 "MUL R1.xy, fragment.position, c[5];\n"
5361 "TEX R1, R1, texture[0], 2D;\n"
5362 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5363 "ADD R0.xyz, R0, c[3];\n"
5364 "RCP R0.z, R0.z;\n"
5365 "MUL R0.xy, R0, R0.z;\n"
5366 "MAX R0.w, R1, c[8].z;\n"
5367 "RCP R0.w, R0.w;\n"
5368 "MUL R3.xyz, R1, R0.w;\n"
5369 "MAD R2.xyz, R3, c[9].x, -c[9].y;\n"
5370 "MUL R0.xy, R0, c[0];\n"
5371 "TEX R0, R0, texture[2], 2D;\n"
5372 "MAD R4.xyz, R3, R2, c[9].z;\n"
5373 "MAD R2.xyz, R0, c[8].y, -R0.w;\n"
5374 "MUL R5.xyz, R1.w, R2;\n"
5375 "MUL R6.xyz, R5, R4;\n"
5376 "RSQ R2.w, R3.x;\n"
5377 "RCP R4.x, R2.w;\n"
5378 "RSQ R2.w, R3.y;\n"
5379 "RSQ R3.w, R3.z;\n"
5380 "RCP R4.y, R2.w;\n"
5381 "RCP R4.z, R3.w;\n"
5382 "ADD R4.xyz, -R3, R4;\n"
5383 "MUL R6.xyz, R3, R6;\n"
5384 "MUL R4.xyz, R5, R4;\n"
5385 "ADD R3.xyz, -R3, c[8].x;\n"
5386 "MAD R2.xyz, R2, R3, R0.w;\n"
5387 "MUL R3.xyz, R0, c[8].y;\n"
5388 "MAD R5.xyz, R0.w, R1, R6;\n"
5389 "MAD R4.xyz, R0.w, R1, R4;\n"
5390 "ADD R6.xyz, R4, -R5;\n"
5391 "MUL R4.xyz, R1, c[8].w;\n"
5392 "SGE R4.xyz, R4, R1.w;\n"
5393 "MAD R4.xyz, R4, R6, R5;\n"
5394 "MAD R4.xyz, -R1, R2, R4;\n"
5395 "SGE R3.xyz, R3, R0.w;\n"
5396 "MUL R2.xyz, R1, R2;\n"
5397 "ADD R2.w, -R1, c[8].x;\n"
5398 "MAD R2.xyz, R3, R4, R2;\n"
5399 "MAD R2.xyz, R0, R2.w, R2;\n"
5400 "ADD R0.x, -R0.w, c[8];\n"
5401 "MAD R2.xyz, R1, R0.x, R2;\n"
5402 "ADD R0.z, R0.w, R1.w;\n"
5403 "MAD R2.w, -R0, R1, R0.z;\n"
5404 "ADD R0.xy, fragment.position, c[6];\n"
5405 "MUL R0.xy, R0, c[4];\n"
5406 "TEX R0, R0, texture[1], 2D;\n"
5407 "ADD R2, R2, -R1;\n"
5408 "DP4 R0.x, R0, c[7];\n"
5409 "MAD result.color, R0.x, R2, R1;\n"
5410 "END\n"
5411 ;
5412
5413static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE =
5414 "!!ARBfp1.0\n"
5415 "PARAM c[9] = { program.local[0..7],\n"
5416 " { 2 } };\n"
5417 "TEMP R0;\n"
5418 "TEMP R1;\n"
5419 "TEMP R2;\n"
5420 "TEMP R3;\n"
5421 "MUL R0.xyz, fragment.position.y, c[2];\n"
5422 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5423 "ADD R0.xyz, R0, c[3];\n"
5424 "RCP R0.z, R0.z;\n"
5425 "MUL R0.zw, R0.xyxy, R0.z;\n"
5426 "MUL R1.xy, R0.zwzw, c[0];\n"
5427 "MUL R0.xy, fragment.position, c[5];\n"
5428 "TEX R0, R0, texture[0], 2D;\n"
5429 "TEX R1, R1, texture[2], 2D;\n"
5430 "ADD R2.xyz, R1, R0;\n"
5431 "MUL R3.xyz, R1.w, R0;\n"
5432 "MUL R1.xyz, R1, R0.w;\n"
5433 "MIN R1.xyz, R1, R3;\n"
5434 "MAD R2.xyz, -R1, c[8].x, R2;\n"
5435 "ADD R1.z, R1.w, R0.w;\n"
5436 "MAD R2.w, -R1, R0, R1.z;\n"
5437 "ADD R1.xy, fragment.position, c[6];\n"
5438 "MUL R1.xy, R1, c[4];\n"
5439 "TEX R1, R1, texture[1], 2D;\n"
5440 "ADD R2, R2, -R0;\n"
5441 "DP4 R1.x, R1, c[7];\n"
5442 "MAD result.color, R1.x, R2, R0;\n"
5443 "END\n"
5444 ;
5445
5446static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION =
5447 "!!ARBfp1.0\n"
5448 "PARAM c[9] = { program.local[0..7],\n"
5449 " { 2, 1 } };\n"
5450 "TEMP R0;\n"
5451 "TEMP R1;\n"
5452 "TEMP R2;\n"
5453 "TEMP R3;\n"
5454 "MUL R0.xyz, fragment.position.y, c[2];\n"
5455 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5456 "ADD R0.xyz, R0, c[3];\n"
5457 "RCP R0.z, R0.z;\n"
5458 "MUL R0.zw, R0.xyxy, R0.z;\n"
5459 "MUL R1.xy, R0.zwzw, c[0];\n"
5460 "MUL R0.xy, fragment.position, c[5];\n"
5461 "TEX R0, R0, texture[0], 2D;\n"
5462 "TEX R1, R1, texture[2], 2D;\n"
5463 "MUL R2.xyz, R1.w, R0;\n"
5464 "MAD R3.xyz, R1, R0.w, R2;\n"
5465 "MUL R2.xyz, R1, R0;\n"
5466 "MAD R2.xyz, -R2, c[8].x, R3;\n"
5467 "ADD R2.w, -R0, c[8].y;\n"
5468 "MAD R1.xyz, R1, R2.w, R2;\n"
5469 "ADD R2.x, -R1.w, c[8].y;\n"
5470 "MAD R2.xyz, R0, R2.x, R1;\n"
5471 "ADD R1.z, R1.w, R0.w;\n"
5472 "MAD R2.w, -R1, R0, R1.z;\n"
5473 "ADD R1.xy, fragment.position, c[6];\n"
5474 "MUL R1.xy, R1, c[4];\n"
5475 "TEX R1, R1, texture[1], 2D;\n"
5476 "ADD R2, R2, -R0;\n"
5477 "DP4 R1.x, R1, c[7];\n"
5478 "MAD result.color, R1.x, R2, R0;\n"
5479 "END\n"
5480 ;
5481
5482static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
5483 "!!ARBfp1.0\n"
5484 "PARAM c[8] = { program.local[0..6],\n"
5485 " { 1 } };\n"
5486 "TEMP R0;\n"
5487 "TEMP R1;\n"
5488 "TEMP R2;\n"
5489 "TEMP R3;\n"
5490 "MUL R0.xyz, fragment.position.y, c[2];\n"
5491 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5492 "ADD R0.xyz, R0, c[3];\n"
5493 "RCP R0.z, R0.z;\n"
5494 "MUL R0.xy, R0, R0.z;\n"
5495 "MUL R1.xy, fragment.position, c[6];\n"
5496 "TEX R1, R1, texture[0], 2D;\n"
5497 "MUL R2.xyz, R1, c[4].y;\n"
5498 "MUL R0.xy, R0, c[0];\n"
5499 "TEX R0, R0, texture[1], 2D;\n"
5500 "MUL R3.xyz, R0.w, R2;\n"
5501 "MUL R2.xyz, R0, c[4].x;\n"
5502 "MAD R2.xyz, R1.w, R2, R3;\n"
5503 "ADD R2.w, -R1, c[7].x;\n"
5504 "MUL R0.xyz, R0, c[5].y;\n"
5505 "MAD R0.xyz, R2.w, R0, R2;\n"
5506 "ADD R2.x, -R0.w, c[7];\n"
5507 "MUL R1.xyz, R1, c[5].z;\n"
5508 "MAD result.color.xyz, R2.x, R1, R0;\n"
5509 "MUL R0.x, R0.w, R1.w;\n"
5510 "MUL R0.z, R1.w, R2.x;\n"
5511 "MUL R0.y, R0.w, R2.w;\n"
5512 "DP3 result.color.w, R0, c[5];\n"
5513 "END\n"
5514 ;
5515
5516static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK =
5517 "!!ARBfp1.0\n"
5518 "PARAM c[6] = { program.local[0..4],\n"
5519 " { 1 } };\n"
5520 "TEMP R0;\n"
5521 "TEMP R1;\n"
5522 "TEMP R2;\n"
5523 "MUL R0.xyz, fragment.position.y, c[2];\n"
5524 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5525 "ADD R0.xyz, R0, c[3];\n"
5526 "RCP R0.z, R0.z;\n"
5527 "MUL R0.xy, R0, R0.z;\n"
5528 "MUL R1.xy, fragment.position, c[4];\n"
5529 "TEX R1, R1, texture[0], 2D;\n"
5530 "MUL R0.xy, R0, c[0];\n"
5531 "TEX R0, R0, texture[1], 2D;\n"
5532 "ADD R2.x, -R1.w, c[5];\n"
5533 "MUL R2.xyz, R0, R2.x;\n"
5534 "MAD R0.xyz, R0, R1, R2;\n"
5535 "ADD R2.x, R0.w, R1.w;\n"
5536 "ADD R2.y, -R0.w, c[5].x;\n"
5537 "MAD result.color.xyz, R1, R2.y, R0;\n"
5538 "MAD result.color.w, -R0, R1, R2.x;\n"
5539 "END\n"
5540 ;
5541
5542static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK =
5543 "!!ARBfp1.0\n"
5544 "PARAM c[5] = { program.local[0..4] };\n"
5545 "TEMP R0;\n"
5546 "TEMP R1;\n"
5547 "TEMP R2;\n"
5548 "MUL R0.xyz, fragment.position.y, c[2];\n"
5549 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5550 "ADD R0.xyz, R0, c[3];\n"
5551 "RCP R0.z, R0.z;\n"
5552 "MUL R0.xy, R0, R0.z;\n"
5553 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5554 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5555 "MUL R0.xy, R0, c[0];\n"
5556 "TEX R0, R0, texture[1], 2D;\n"
5557 "ADD R2, R0, R1;\n"
5558 "MAD result.color, -R0, R1, R2;\n"
5559 "END\n"
5560 ;
5561
5562static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK =
5563 "!!ARBfp1.0\n"
5564 "PARAM c[6] = { program.local[0..4],\n"
5565 " { 2, 1 } };\n"
5566 "TEMP R0;\n"
5567 "TEMP R1;\n"
5568 "TEMP R2;\n"
5569 "TEMP R3;\n"
5570 "MUL R0.xyz, fragment.position.y, c[2];\n"
5571 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5572 "ADD R0.xyz, R0, c[3];\n"
5573 "RCP R0.z, R0.z;\n"
5574 "MUL R0.xy, R0, R0.z;\n"
5575 "MUL R0.xy, R0, c[0];\n"
5576 "TEX R0, R0, texture[1], 2D;\n"
5577 "MUL R1.xy, fragment.position, c[4];\n"
5578 "TEX R1, R1, texture[0], 2D;\n"
5579 "ADD R3.xyz, R0.w, -R0;\n"
5580 "ADD R2.xyz, R1.w, -R1;\n"
5581 "MUL R2.xyz, R2, R3;\n"
5582 "ADD R2.w, -R1, c[5].y;\n"
5583 "MUL R2.xyz, R2, c[5].x;\n"
5584 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5585 "MAD R2.xyz, R0, R2.w, R2;\n"
5586 "MUL R3.xyz, R0, R2.w;\n"
5587 "MUL R0.xyz, R0, R1;\n"
5588 "ADD R2.w, -R0, c[5].y;\n"
5589 "MAD R0.xyz, R0, c[5].x, R3;\n"
5590 "MAD R0.xyz, R1, R2.w, R0;\n"
5591 "MAD R2.xyz, R1, R2.w, R2;\n"
5592 "MUL R1.xyz, R1, c[5].x;\n"
5593 "ADD R2.w, R0, R1;\n"
5594 "ADD R2.xyz, R2, -R0;\n"
5595 "SGE R1.xyz, R1, R1.w;\n"
5596 "MAD result.color.xyz, R1, R2, R0;\n"
5597 "MAD result.color.w, -R0, R1, R2;\n"
5598 "END\n"
5599 ;
5600
5601static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK =
5602 "!!ARBfp1.0\n"
5603 "PARAM c[6] = { program.local[0..4],\n"
5604 " { 1 } };\n"
5605 "TEMP R0;\n"
5606 "TEMP R1;\n"
5607 "TEMP R2;\n"
5608 "TEMP R3;\n"
5609 "MUL R0.xyz, fragment.position.y, c[2];\n"
5610 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5611 "ADD R0.xyz, R0, c[3];\n"
5612 "RCP R0.z, R0.z;\n"
5613 "MUL R0.xy, R0, R0.z;\n"
5614 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5615 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5616 "MUL R0.xy, R0, c[0];\n"
5617 "TEX R0, R0, texture[1], 2D;\n"
5618 "MUL R2.xyz, R0, R1.w;\n"
5619 "MUL R3.xyz, R0.w, R1;\n"
5620 "MIN R2.xyz, R2, R3;\n"
5621 "ADD R2.w, -R1, c[5].x;\n"
5622 "MAD R0.xyz, R0, R2.w, R2;\n"
5623 "ADD R2.x, R0.w, R1.w;\n"
5624 "ADD R2.y, -R0.w, c[5].x;\n"
5625 "MAD result.color.xyz, R1, R2.y, R0;\n"
5626 "MAD result.color.w, -R0, R1, R2.x;\n"
5627 "END\n"
5628 ;
5629
5630static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK =
5631 "!!ARBfp1.0\n"
5632 "PARAM c[6] = { program.local[0..4],\n"
5633 " { 1 } };\n"
5634 "TEMP R0;\n"
5635 "TEMP R1;\n"
5636 "TEMP R2;\n"
5637 "TEMP R3;\n"
5638 "MUL R0.xyz, fragment.position.y, c[2];\n"
5639 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5640 "ADD R0.xyz, R0, c[3];\n"
5641 "RCP R0.z, R0.z;\n"
5642 "MUL R0.xy, R0, R0.z;\n"
5643 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5644 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5645 "MUL R0.xy, R0, c[0];\n"
5646 "TEX R0, R0, texture[1], 2D;\n"
5647 "MUL R2.xyz, R0, R1.w;\n"
5648 "MUL R3.xyz, R0.w, R1;\n"
5649 "MAX R2.xyz, R2, R3;\n"
5650 "ADD R2.w, -R1, c[5].x;\n"
5651 "MAD R0.xyz, R0, R2.w, R2;\n"
5652 "ADD R2.x, R0.w, R1.w;\n"
5653 "ADD R2.y, -R0.w, c[5].x;\n"
5654 "MAD result.color.xyz, R1, R2.y, R0;\n"
5655 "MAD result.color.w, -R0, R1, R2.x;\n"
5656 "END\n"
5657 ;
5658
5659static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK =
5660 "!!ARBfp1.0\n"
5661 "PARAM c[6] = { program.local[0..4],\n"
5662 " { 1, 1e-006 } };\n"
5663 "TEMP R0;\n"
5664 "TEMP R1;\n"
5665 "TEMP R2;\n"
5666 "TEMP R3;\n"
5667 "MUL R0.xyz, fragment.position.y, c[2];\n"
5668 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5669 "ADD R0.xyz, R0, c[3];\n"
5670 "RCP R0.z, R0.z;\n"
5671 "MUL R0.xy, R0, R0.z;\n"
5672 "MUL R0.xy, R0, c[0];\n"
5673 "TEX R0, R0, texture[1], 2D;\n"
5674 "MAX R1.x, R0.w, c[5].y;\n"
5675 "RCP R1.x, R1.x;\n"
5676 "MAD R3.xyz, -R0, R1.x, c[5].x;\n"
5677 "MAX R3.xyz, R3, c[5].y;\n"
5678 "MUL R1.xy, fragment.position, c[4];\n"
5679 "TEX R1, R1, texture[0], 2D;\n"
5680 "ADD R2.x, -R0.w, c[5];\n"
5681 "MUL R2.xyz, R1, R2.x;\n"
5682 "ADD R2.w, -R1, c[5].x;\n"
5683 "MAD R2.xyz, R0, R2.w, R2;\n"
5684 "MUL R1.xyz, R0.w, R1;\n"
5685 "MAD R0.xyz, R0, R1.w, R1;\n"
5686 "MUL R2.w, R0, R1;\n"
5687 "RCP R3.x, R3.x;\n"
5688 "RCP R3.y, R3.y;\n"
5689 "RCP R3.z, R3.z;\n"
5690 "MAD R3.xyz, R1, R3, R2;\n"
5691 "MAD R2.xyz, R0.w, R1.w, R2;\n"
5692 "ADD R1.x, R0.w, R1.w;\n"
5693 "ADD R2.xyz, R2, -R3;\n"
5694 "SGE R0.xyz, R0, R2.w;\n"
5695 "MAD result.color.xyz, R0, R2, R3;\n"
5696 "MAD result.color.w, -R0, R1, R1.x;\n"
5697 "END\n"
5698 ;
5699
5700static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK =
5701 "!!ARBfp1.0\n"
5702 "PARAM c[6] = { program.local[0..4],\n"
5703 " { 1, 9.9999997e-006 } };\n"
5704 "TEMP R0;\n"
5705 "TEMP R1;\n"
5706 "TEMP R2;\n"
5707 "TEMP R3;\n"
5708 "TEMP R4;\n"
5709 "TEMP R5;\n"
5710 "MUL R0.xyz, fragment.position.y, c[2];\n"
5711 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5712 "ADD R0.xyz, R0, c[3];\n"
5713 "RCP R0.z, R0.z;\n"
5714 "MUL R0.xy, R0, R0.z;\n"
5715 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5716 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5717 "MUL R0.xy, R0, c[0];\n"
5718 "TEX R0, R0, texture[1], 2D;\n"
5719 "MUL R2.xyz, R0.w, R1;\n"
5720 "MAD R3.xyz, R0, R1.w, R2;\n"
5721 "ADD R2.w, -R1, c[5].x;\n"
5722 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
5723 "MUL R4.xyz, R0.w, R2;\n"
5724 "MAX R2.xyz, R0, c[5].y;\n"
5725 "MUL R5.xyz, R0, R2.w;\n"
5726 "ADD R3.w, -R0, c[5].x;\n"
5727 "RCP R2.x, R2.x;\n"
5728 "RCP R2.y, R2.y;\n"
5729 "RCP R2.z, R2.z;\n"
5730 "MAD R2.xyz, R4, R2, R5;\n"
5731 "MUL R4.xyz, R1, R3.w;\n"
5732 "MAD R1.xyz, R1, R3.w, R2;\n"
5733 "MAD R0.xyz, R0, R2.w, R4;\n"
5734 "MUL R2.x, R0.w, R1.w;\n"
5735 "ADD R2.w, R0, R1;\n"
5736 "ADD R1.xyz, R1, -R0;\n"
5737 "SGE R2.xyz, R3, R2.x;\n"
5738 "MAD result.color.xyz, R2, R1, R0;\n"
5739 "MAD result.color.w, -R0, R1, R2;\n"
5740 "END\n"
5741 ;
5742
5743static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK =
5744 "!!ARBfp1.0\n"
5745 "PARAM c[6] = { program.local[0..4],\n"
5746 " { 2, 1 } };\n"
5747 "TEMP R0;\n"
5748 "TEMP R1;\n"
5749 "TEMP R2;\n"
5750 "TEMP R3;\n"
5751 "TEMP R4;\n"
5752 "MUL R0.xyz, fragment.position.y, c[2];\n"
5753 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5754 "ADD R0.xyz, R0, c[3];\n"
5755 "RCP R0.z, R0.z;\n"
5756 "MUL R0.xy, R0, R0.z;\n"
5757 "MUL R0.xy, R0, c[0];\n"
5758 "TEX R0, R0, texture[1], 2D;\n"
5759 "MUL R1.xy, fragment.position, c[4];\n"
5760 "TEX R1, R1, texture[0], 2D;\n"
5761 "ADD R2.w, -R1, c[5].y;\n"
5762 "ADD R3.xyz, R0.w, -R0;\n"
5763 "ADD R2.xyz, R1.w, -R1;\n"
5764 "MUL R2.xyz, R2, R3;\n"
5765 "MUL R2.xyz, R2, c[5].x;\n"
5766 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5767 "MAD R2.xyz, R0, R2.w, R2;\n"
5768 "MUL R4.xyz, R0, R2.w;\n"
5769 "MUL R3.xyz, R0, R1;\n"
5770 "MUL R0.xyz, R0, c[5].x;\n"
5771 "ADD R2.w, -R0, c[5].y;\n"
5772 "MAD R3.xyz, R3, c[5].x, R4;\n"
5773 "MAD R3.xyz, R1, R2.w, R3;\n"
5774 "MAD R1.xyz, R1, R2.w, R2;\n"
5775 "ADD R2.x, R0.w, R1.w;\n"
5776 "ADD R1.xyz, R1, -R3;\n"
5777 "SGE R0.xyz, R0, R0.w;\n"
5778 "MAD result.color.xyz, R0, R1, R3;\n"
5779 "MAD result.color.w, -R0, R1, R2.x;\n"
5780 "END\n"
5781 ;
5782
5783static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
5784 "!!ARBfp1.0\n"
5785 "PARAM c[7] = { program.local[0..4],\n"
5786 " { 1, 2, 9.9999997e-006, 4 },\n"
5787 " { 16, 12, 3 } };\n"
5788 "TEMP R0;\n"
5789 "TEMP R1;\n"
5790 "TEMP R2;\n"
5791 "TEMP R3;\n"
5792 "TEMP R4;\n"
5793 "TEMP R5;\n"
5794 "TEMP R6;\n"
5795 "MUL R0.xyz, fragment.position.y, c[2];\n"
5796 "MUL R1.xy, fragment.position, c[4];\n"
5797 "TEX R1, R1, texture[0], 2D;\n"
5798 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5799 "ADD R0.xyz, R0, c[3];\n"
5800 "RCP R0.z, R0.z;\n"
5801 "MUL R0.xy, R0, R0.z;\n"
5802 "MAX R0.w, R1, c[5].z;\n"
5803 "RCP R0.w, R0.w;\n"
5804 "MUL R3.xyz, R1, R0.w;\n"
5805 "MAD R2.xyz, R3, c[6].x, -c[6].y;\n"
5806 "MUL R0.xy, R0, c[0];\n"
5807 "TEX R0, R0, texture[1], 2D;\n"
5808 "MAD R4.xyz, R3, R2, c[6].z;\n"
5809 "MAD R2.xyz, R0, c[5].y, -R0.w;\n"
5810 "MUL R5.xyz, R1.w, R2;\n"
5811 "MUL R6.xyz, R5, R4;\n"
5812 "RSQ R2.w, R3.x;\n"
5813 "RCP R4.x, R2.w;\n"
5814 "RSQ R2.w, R3.y;\n"
5815 "RSQ R3.w, R3.z;\n"
5816 "RCP R4.y, R2.w;\n"
5817 "RCP R4.z, R3.w;\n"
5818 "ADD R4.xyz, -R3, R4;\n"
5819 "MUL R6.xyz, R3, R6;\n"
5820 "MUL R4.xyz, R5, R4;\n"
5821 "ADD R3.xyz, -R3, c[5].x;\n"
5822 "MAD R2.xyz, R2, R3, R0.w;\n"
5823 "MUL R3.xyz, R0, c[5].y;\n"
5824 "MAD R5.xyz, R0.w, R1, R6;\n"
5825 "MAD R4.xyz, R0.w, R1, R4;\n"
5826 "ADD R6.xyz, R4, -R5;\n"
5827 "MUL R4.xyz, R1, c[5].w;\n"
5828 "SGE R4.xyz, R4, R1.w;\n"
5829 "MAD R4.xyz, R4, R6, R5;\n"
5830 "MAD R4.xyz, -R1, R2, R4;\n"
5831 "MUL R2.xyz, R1, R2;\n"
5832 "SGE R3.xyz, R3, R0.w;\n"
5833 "MAD R2.xyz, R3, R4, R2;\n"
5834 "ADD R2.w, -R1, c[5].x;\n"
5835 "MAD R2.xyz, R0, R2.w, R2;\n"
5836 "ADD R0.x, R0.w, R1.w;\n"
5837 "ADD R0.y, -R0.w, c[5].x;\n"
5838 "MAD result.color.xyz, R1, R0.y, R2;\n"
5839 "MAD result.color.w, -R0, R1, R0.x;\n"
5840 "END\n"
5841 ;
5842
5843static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK =
5844 "!!ARBfp1.0\n"
5845 "PARAM c[6] = { program.local[0..4],\n"
5846 " { 2 } };\n"
5847 "TEMP R0;\n"
5848 "TEMP R1;\n"
5849 "TEMP R2;\n"
5850 "TEMP R3;\n"
5851 "MUL R0.xyz, fragment.position.y, c[2];\n"
5852 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5853 "ADD R0.xyz, R0, c[3];\n"
5854 "RCP R0.z, R0.z;\n"
5855 "MUL R0.xy, R0, R0.z;\n"
5856 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5857 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5858 "MUL R0.xy, R0, c[0];\n"
5859 "TEX R0, R0, texture[1], 2D;\n"
5860 "MUL R2.xyz, R0, R1.w;\n"
5861 "MUL R3.xyz, R0.w, R1;\n"
5862 "ADD R0.xyz, R0, R1;\n"
5863 "MIN R2.xyz, R2, R3;\n"
5864 "ADD R1.x, R0.w, R1.w;\n"
5865 "MAD result.color.xyz, -R2, c[5].x, R0;\n"
5866 "MAD result.color.w, -R0, R1, R1.x;\n"
5867 "END\n"
5868 ;
5869
5870static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK =
5871 "!!ARBfp1.0\n"
5872 "PARAM c[6] = { program.local[0..4],\n"
5873 " { 2, 1 } };\n"
5874 "TEMP R0;\n"
5875 "TEMP R1;\n"
5876 "TEMP R2;\n"
5877 "TEMP R3;\n"
5878 "MUL R0.xyz, fragment.position.y, c[2];\n"
5879 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5880 "ADD R0.xyz, R0, c[3];\n"
5881 "RCP R0.z, R0.z;\n"
5882 "MUL R0.xy, R0, R0.z;\n"
5883 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5884 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5885 "MUL R0.xy, R0, c[0];\n"
5886 "TEX R0, R0, texture[1], 2D;\n"
5887 "MUL R2.xyz, R0.w, R1;\n"
5888 "MAD R3.xyz, R0, R1.w, R2;\n"
5889 "MUL R2.xyz, R0, R1;\n"
5890 "MAD R2.xyz, -R2, c[5].x, R3;\n"
5891 "ADD R2.w, -R1, c[5].y;\n"
5892 "MAD R0.xyz, R0, R2.w, R2;\n"
5893 "ADD R2.x, R0.w, R1.w;\n"
5894 "ADD R2.y, -R0.w, c[5];\n"
5895 "MAD result.color.xyz, R1, R2.y, R0;\n"
5896 "MAD result.color.w, -R0, R1, R2.x;\n"
5897 "END\n"
5898 ;
5899
5900static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK =
5901 "!!ARBfp1.0\n"
5902 "PARAM c[7] = { program.local[0..6] };\n"
5903 "TEMP R0;\n"
5904 "TEMP R1;\n"
5905 "MUL R0.xyz, fragment.position.y, c[2];\n"
5906 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5907 "ADD R1.xyz, R0, c[3];\n"
5908 "RCP R0.z, R1.z;\n"
5909 "MUL R1.xy, R1, R0.z;\n"
5910 "ADD R0.xy, fragment.position, c[5];\n"
5911 "MUL R0.xy, R0, c[4];\n"
5912 "TEX R0, R0, texture[0], 2D;\n"
5913 "DP4 R1.z, R0, c[6];\n"
5914 "MUL R1.xy, R1, c[0];\n"
5915 "TEX R0, R1, texture[1], 2D;\n"
5916 "MUL result.color, R0, R1.z;\n"
5917 "END\n"
5918 ;
5919
5920static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK =
5921 "!!ARBfp1.0\n"
5922 "PARAM c[4] = { program.local[0..3] };\n"
5923 "TEMP R0;\n"
5924 "MUL R0.xyz, fragment.position.y, c[2];\n"
5925 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5926 "ADD R0.xyz, R0, c[3];\n"
5927 "RCP R0.z, R0.z;\n"
5928 "MUL R0.xy, R0, R0.z;\n"
5929 "MUL R0.xy, R0, c[0];\n"
5930 "TEX result.color, R0, texture[0], 2D;\n"
5931 "END\n"
5932 ;
5933
5934static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
5935 "!!ARBfp1.0\n"
5936 "PARAM c[11] = { program.local[0..9],\n"
5937 " { 1 } };\n"
5938 "TEMP R0;\n"
5939 "TEMP R1;\n"
5940 "TEMP R2;\n"
5941 "TEMP R3;\n"
5942 "MUL R0.xyz, fragment.position.y, c[2];\n"
5943 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5944 "ADD R0.xyz, R0, c[3];\n"
5945 "RCP R0.z, R0.z;\n"
5946 "MUL R0.xy, R0, R0.z;\n"
5947 "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
5948 "TEX R1.x, R0.zwzw, texture[2], 2D;\n"
5949 "MUL R0.xy, fragment.position, c[7];\n"
5950 "TEX R0, R0, texture[0], 2D;\n"
5951 "ADD R1.x, -R1, c[10];\n"
5952 "MUL R1, fragment.color.primary, R1.x;\n"
5953 "MUL R2.xyz, R0, c[4].y;\n"
5954 "MUL R3.xyz, R1.w, R2;\n"
5955 "MUL R2.xyz, R1, c[4].x;\n"
5956 "MAD R2.xyz, R0.w, R2, R3;\n"
5957 "ADD R3.xy, fragment.position, c[8];\n"
5958 "ADD R2.w, -R0, c[10].x;\n"
5959 "MUL R1.xyz, R1, c[5].y;\n"
5960 "MAD R2.xyz, R2.w, R1, R2;\n"
5961 "MUL R1.xyz, R0, c[5].z;\n"
5962 "ADD R3.z, -R1.w, c[10].x;\n"
5963 "MAD R2.xyz, R3.z, R1, R2;\n"
5964 "MUL R1.y, R1.w, R2.w;\n"
5965 "MUL R1.x, R1.w, R0.w;\n"
5966 "MUL R1.z, R0.w, R3;\n"
5967 "DP3 R2.w, R1, c[5];\n"
5968 "MUL R3.xy, R3, c[6];\n"
5969 "TEX R1, R3, texture[1], 2D;\n"
5970 "ADD R2, R2, -R0;\n"
5971 "DP4 R1.x, R1, c[9];\n"
5972 "MAD result.color, R1.x, R2, R0;\n"
5973 "END\n"
5974 ;
5975
5976static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY =
5977 "!!ARBfp1.0\n"
5978 "PARAM c[9] = { program.local[0..7],\n"
5979 " { 1 } };\n"
5980 "TEMP R0;\n"
5981 "TEMP R1;\n"
5982 "TEMP R2;\n"
5983 "MUL R0.xyz, fragment.position.y, c[2];\n"
5984 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
5985 "ADD R0.xyz, R0, c[3];\n"
5986 "RCP R0.z, R0.z;\n"
5987 "MUL R0.xy, R0, R0.z;\n"
5988 "MUL R0.zw, R0.xyxy, c[0].xyxy;\n"
5989 "TEX R1.x, R0.zwzw, texture[2], 2D;\n"
5990 "MUL R0.xy, fragment.position, c[5];\n"
5991 "TEX R0, R0, texture[0], 2D;\n"
5992 "ADD R1.x, -R1, c[8];\n"
5993 "MUL R1, fragment.color.primary, R1.x;\n"
5994 "ADD R2.x, -R0.w, c[8];\n"
5995 "MUL R2.xyz, R1, R2.x;\n"
5996 "MAD R1.xyz, R1, R0, R2;\n"
5997 "ADD R2.x, -R1.w, c[8];\n"
5998 "MAD R2.xyz, R0, R2.x, R1;\n"
5999 "ADD R1.z, R1.w, R0.w;\n"
6000 "MAD R2.w, -R1, R0, R1.z;\n"
6001 "ADD R1.xy, fragment.position, c[6];\n"
6002 "MUL R1.xy, R1, c[4];\n"
6003 "TEX R1, R1, texture[1], 2D;\n"
6004 "ADD R2, R2, -R0;\n"
6005 "DP4 R1.x, R1, c[7];\n"
6006 "MAD result.color, R1.x, R2, R0;\n"
6007 "END\n"
6008 ;
6009
6010static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN =
6011 "!!ARBfp1.0\n"
6012 "PARAM c[9] = { program.local[0..7],\n"
6013 " { 1 } };\n"
6014 "TEMP R0;\n"
6015 "TEMP R1;\n"
6016 "TEMP R2;\n"
6017 "TEMP R3;\n"
6018 "MUL R0.xyz, fragment.position.y, c[2];\n"
6019 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6020 "ADD R0.xyz, R0, c[3];\n"
6021 "RCP R0.z, R0.z;\n"
6022 "MUL R0.xy, R0, R0.z;\n"
6023 "MUL R0.xy, R0, c[0];\n"
6024 "TEX R0.x, R0, texture[2], 2D;\n"
6025 "ADD R0.z, -R0.x, c[8].x;\n"
6026 "ADD R3.xy, fragment.position, c[6];\n"
6027 "MUL R1, fragment.color.primary, R0.z;\n"
6028 "MUL R0.xy, fragment.position, c[5];\n"
6029 "TEX R0, R0, texture[0], 2D;\n"
6030 "ADD R2, R1, R0;\n"
6031 "MAD R2, -R1, R0, R2;\n"
6032 "MUL R3.xy, R3, c[4];\n"
6033 "TEX R1, R3, texture[1], 2D;\n"
6034 "ADD R2, R2, -R0;\n"
6035 "DP4 R1.x, R1, c[7];\n"
6036 "MAD result.color, R1.x, R2, R0;\n"
6037 "END\n"
6038 ;
6039
6040static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY =
6041 "!!ARBfp1.0\n"
6042 "PARAM c[9] = { program.local[0..7],\n"
6043 " { 1, 2 } };\n"
6044 "TEMP R0;\n"
6045 "TEMP R1;\n"
6046 "TEMP R2;\n"
6047 "TEMP R3;\n"
6048 "TEMP R4;\n"
6049 "MUL R0.xyz, fragment.position.y, c[2];\n"
6050 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6051 "ADD R0.xyz, R0, c[3];\n"
6052 "RCP R0.z, R0.z;\n"
6053 "MUL R0.xy, R0, R0.z;\n"
6054 "MUL R0.xy, R0, c[0];\n"
6055 "TEX R0.x, R0, texture[2], 2D;\n"
6056 "ADD R0.x, -R0, c[8];\n"
6057 "MUL R1, fragment.color.primary, R0.x;\n"
6058 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
6059 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6060 "ADD R2.w, -R0, c[8].x;\n"
6061 "ADD R3.xyz, R1.w, -R1;\n"
6062 "ADD R2.xyz, R0.w, -R0;\n"
6063 "MUL R2.xyz, R2, R3;\n"
6064 "MUL R2.xyz, R2, c[8].y;\n"
6065 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6066 "MUL R4.xyz, R1, R2.w;\n"
6067 "MUL R3.xyz, R1, R0;\n"
6068 "MAD R1.xyz, R1, R2.w, R2;\n"
6069 "ADD R2.x, -R1.w, c[8];\n"
6070 "MAD R3.xyz, R3, c[8].y, R4;\n"
6071 "MAD R3.xyz, R0, R2.x, R3;\n"
6072 "MAD R1.xyz, R0, R2.x, R1;\n"
6073 "MUL R2.xyz, R0, c[8].y;\n"
6074 "ADD R1.xyz, R1, -R3;\n"
6075 "SGE R2.xyz, R2, R0.w;\n"
6076 "MAD R2.xyz, R2, R1, R3;\n"
6077 "ADD R1.z, R1.w, R0.w;\n"
6078 "MAD R2.w, -R1, R0, R1.z;\n"
6079 "ADD R1.xy, fragment.position, c[6];\n"
6080 "MUL R1.xy, R1, c[4];\n"
6081 "TEX R1, R1, texture[1], 2D;\n"
6082 "ADD R2, R2, -R0;\n"
6083 "DP4 R1.x, R1, c[7];\n"
6084 "MAD result.color, R1.x, R2, R0;\n"
6085 "END\n"
6086 ;
6087
6088static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN =
6089 "!!ARBfp1.0\n"
6090 "PARAM c[9] = { program.local[0..7],\n"
6091 " { 1 } };\n"
6092 "TEMP R0;\n"
6093 "TEMP R1;\n"
6094 "TEMP R2;\n"
6095 "TEMP R3;\n"
6096 "MUL R0.xyz, fragment.position.y, c[2];\n"
6097 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6098 "ADD R0.xyz, R0, c[3];\n"
6099 "RCP R0.z, R0.z;\n"
6100 "MUL R0.xy, R0, R0.z;\n"
6101 "MUL R0.xy, R0, c[0];\n"
6102 "TEX R1.x, R0, texture[2], 2D;\n"
6103 "MUL R0.xy, fragment.position, c[5];\n"
6104 "TEX R0, R0, texture[0], 2D;\n"
6105 "ADD R1.x, -R1, c[8];\n"
6106 "MUL R1, fragment.color.primary, R1.x;\n"
6107 "MUL R3.xyz, R1.w, R0;\n"
6108 "MUL R2.xyz, R1, R0.w;\n"
6109 "MIN R2.xyz, R2, R3;\n"
6110 "ADD R2.w, -R0, c[8].x;\n"
6111 "MAD R1.xyz, R1, R2.w, R2;\n"
6112 "ADD R2.x, -R1.w, c[8];\n"
6113 "MAD R2.xyz, R0, R2.x, R1;\n"
6114 "ADD R1.z, R1.w, R0.w;\n"
6115 "MAD R2.w, -R1, R0, R1.z;\n"
6116 "ADD R1.xy, fragment.position, c[6];\n"
6117 "MUL R1.xy, R1, c[4];\n"
6118 "TEX R1, R1, texture[1], 2D;\n"
6119 "ADD R2, R2, -R0;\n"
6120 "DP4 R1.x, R1, c[7];\n"
6121 "MAD result.color, R1.x, R2, R0;\n"
6122 "END\n"
6123 ;
6124
6125static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN =
6126 "!!ARBfp1.0\n"
6127 "PARAM c[9] = { program.local[0..7],\n"
6128 " { 1 } };\n"
6129 "TEMP R0;\n"
6130 "TEMP R1;\n"
6131 "TEMP R2;\n"
6132 "TEMP R3;\n"
6133 "MUL R0.xyz, fragment.position.y, c[2];\n"
6134 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6135 "ADD R0.xyz, R0, c[3];\n"
6136 "RCP R0.z, R0.z;\n"
6137 "MUL R0.xy, R0, R0.z;\n"
6138 "MUL R0.xy, R0, c[0];\n"
6139 "TEX R1.x, R0, texture[2], 2D;\n"
6140 "MUL R0.xy, fragment.position, c[5];\n"
6141 "TEX R0, R0, texture[0], 2D;\n"
6142 "ADD R1.x, -R1, c[8];\n"
6143 "MUL R1, fragment.color.primary, R1.x;\n"
6144 "MUL R3.xyz, R1.w, R0;\n"
6145 "MUL R2.xyz, R1, R0.w;\n"
6146 "MAX R2.xyz, R2, R3;\n"
6147 "ADD R2.w, -R0, c[8].x;\n"
6148 "MAD R1.xyz, R1, R2.w, R2;\n"
6149 "ADD R2.x, -R1.w, c[8];\n"
6150 "MAD R2.xyz, R0, R2.x, R1;\n"
6151 "ADD R1.z, R1.w, R0.w;\n"
6152 "MAD R2.w, -R1, R0, R1.z;\n"
6153 "ADD R1.xy, fragment.position, c[6];\n"
6154 "MUL R1.xy, R1, c[4];\n"
6155 "TEX R1, R1, texture[1], 2D;\n"
6156 "ADD R2, R2, -R0;\n"
6157 "DP4 R1.x, R1, c[7];\n"
6158 "MAD result.color, R1.x, R2, R0;\n"
6159 "END\n"
6160 ;
6161
6162static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE =
6163 "!!ARBfp1.0\n"
6164 "PARAM c[9] = { program.local[0..7],\n"
6165 " { 1, 1e-006 } };\n"
6166 "TEMP R0;\n"
6167 "TEMP R1;\n"
6168 "TEMP R2;\n"
6169 "TEMP R3;\n"
6170 "TEMP R4;\n"
6171 "MUL R0.xyz, fragment.position.y, c[2];\n"
6172 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6173 "ADD R0.xyz, R0, c[3];\n"
6174 "RCP R0.z, R0.z;\n"
6175 "MUL R0.xy, R0, R0.z;\n"
6176 "MUL R0.xy, R0, c[0];\n"
6177 "TEX R0.x, R0, texture[2], 2D;\n"
6178 "ADD R0.x, -R0, c[8];\n"
6179 "MUL R1, fragment.color.primary, R0.x;\n"
6180 "MAX R0.x, R1.w, c[8].y;\n"
6181 "RCP R0.x, R0.x;\n"
6182 "MAD R2.xyz, -R1, R0.x, c[8].x;\n"
6183 "MAX R2.xyz, R2, c[8].y;\n"
6184 "MUL R0.xy, fragment.position, c[5];\n"
6185 "TEX R0, R0, texture[0], 2D;\n"
6186 "ADD R2.w, -R1, c[8].x;\n"
6187 "MUL R3.xyz, R0, R2.w;\n"
6188 "ADD R2.w, -R0, c[8].x;\n"
6189 "MAD R4.xyz, R1, R2.w, R3;\n"
6190 "MUL R3.xyz, R1.w, R0;\n"
6191 "MUL R2.w, R1, R0;\n"
6192 "MAD R1.xyz, R1, R0.w, R3;\n"
6193 "SGE R1.xyz, R1, R2.w;\n"
6194 "RCP R2.x, R2.x;\n"
6195 "RCP R2.y, R2.y;\n"
6196 "RCP R2.z, R2.z;\n"
6197 "MAD R2.xyz, R3, R2, R4;\n"
6198 "MAD R4.xyz, R1.w, R0.w, R4;\n"
6199 "ADD R4.xyz, R4, -R2;\n"
6200 "MAD R2.xyz, R1, R4, R2;\n"
6201 "ADD R1.z, R1.w, R0.w;\n"
6202 "MAD R2.w, -R1, R0, R1.z;\n"
6203 "ADD R1.xy, fragment.position, c[6];\n"
6204 "MUL R1.xy, R1, c[4];\n"
6205 "TEX R1, R1, texture[1], 2D;\n"
6206 "ADD R2, R2, -R0;\n"
6207 "DP4 R1.x, R1, c[7];\n"
6208 "MAD result.color, R1.x, R2, R0;\n"
6209 "END\n"
6210 ;
6211
6212static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN =
6213 "!!ARBfp1.0\n"
6214 "PARAM c[9] = { program.local[0..7],\n"
6215 " { 1, 9.9999997e-006 } };\n"
6216 "TEMP R0;\n"
6217 "TEMP R1;\n"
6218 "TEMP R2;\n"
6219 "TEMP R3;\n"
6220 "TEMP R4;\n"
6221 "TEMP R5;\n"
6222 "MUL R0.xyz, fragment.position.y, c[2];\n"
6223 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6224 "ADD R0.xyz, R0, c[3];\n"
6225 "RCP R0.z, R0.z;\n"
6226 "MUL R0.xy, R0, R0.z;\n"
6227 "MUL R0.xy, R0, c[0];\n"
6228 "TEX R0.x, R0, texture[2], 2D;\n"
6229 "ADD R1.x, -R0, c[8];\n"
6230 "MUL R1, fragment.color.primary, R1.x;\n"
6231 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
6232 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6233 "MUL R2.xyz, R1.w, R0;\n"
6234 "MAD R3.xyz, R1, R0.w, R2;\n"
6235 "MAD R2.xyz, -R1.w, R0.w, R3;\n"
6236 "MUL R4.xyz, R1.w, R2;\n"
6237 "MAX R2.xyz, R1, c[8].y;\n"
6238 "ADD R2.w, -R0, c[8].x;\n"
6239 "MUL R5.xyz, R1, R2.w;\n"
6240 "ADD R3.w, -R1, c[8].x;\n"
6241 "RCP R2.x, R2.x;\n"
6242 "RCP R2.y, R2.y;\n"
6243 "RCP R2.z, R2.z;\n"
6244 "MAD R2.xyz, R4, R2, R5;\n"
6245 "MUL R4.xyz, R0, R3.w;\n"
6246 "MAD R1.xyz, R1, R2.w, R4;\n"
6247 "MUL R2.w, R1, R0;\n"
6248 "MAD R2.xyz, R0, R3.w, R2;\n"
6249 "ADD R2.xyz, R2, -R1;\n"
6250 "SGE R3.xyz, R3, R2.w;\n"
6251 "MAD R2.xyz, R3, R2, R1;\n"
6252 "ADD R1.z, R1.w, R0.w;\n"
6253 "MAD R2.w, -R1, R0, R1.z;\n"
6254 "ADD R1.xy, fragment.position, c[6];\n"
6255 "MUL R1.xy, R1, c[4];\n"
6256 "TEX R1, R1, texture[1], 2D;\n"
6257 "ADD R2, R2, -R0;\n"
6258 "DP4 R1.x, R1, c[7];\n"
6259 "MAD result.color, R1.x, R2, R0;\n"
6260 "END\n"
6261 ;
6262
6263static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT =
6264 "!!ARBfp1.0\n"
6265 "PARAM c[9] = { program.local[0..7],\n"
6266 " { 1, 2 } };\n"
6267 "TEMP R0;\n"
6268 "TEMP R1;\n"
6269 "TEMP R2;\n"
6270 "TEMP R3;\n"
6271 "TEMP R4;\n"
6272 "MUL R0.xyz, fragment.position.y, c[2];\n"
6273 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6274 "ADD R0.xyz, R0, c[3];\n"
6275 "RCP R0.z, R0.z;\n"
6276 "MUL R0.xy, R0, R0.z;\n"
6277 "MUL R0.xy, R0, c[0];\n"
6278 "TEX R0.x, R0, texture[2], 2D;\n"
6279 "ADD R0.x, -R0, c[8];\n"
6280 "MUL R1, fragment.color.primary, R0.x;\n"
6281 "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n"
6282 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6283 "ADD R2.w, -R0, c[8].x;\n"
6284 "ADD R3.xyz, R1.w, -R1;\n"
6285 "ADD R2.xyz, R0.w, -R0;\n"
6286 "MUL R2.xyz, R2, R3;\n"
6287 "MUL R2.xyz, R2, c[8].y;\n"
6288 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6289 "MUL R4.xyz, R1, R2.w;\n"
6290 "MAD R2.xyz, R1, R2.w, R2;\n"
6291 "MUL R3.xyz, R1, R0;\n"
6292 "ADD R2.w, -R1, c[8].x;\n"
6293 "MAD R3.xyz, R3, c[8].y, R4;\n"
6294 "MUL R1.xyz, R1, c[8].y;\n"
6295 "SGE R1.xyz, R1, R1.w;\n"
6296 "MAD R3.xyz, R0, R2.w, R3;\n"
6297 "MAD R2.xyz, R0, R2.w, R2;\n"
6298 "ADD R2.xyz, R2, -R3;\n"
6299 "MAD R2.xyz, R1, R2, R3;\n"
6300 "ADD R1.z, R1.w, R0.w;\n"
6301 "MAD R2.w, -R1, R0, R1.z;\n"
6302 "ADD R1.xy, fragment.position, c[6];\n"
6303 "MUL R1.xy, R1, c[4];\n"
6304 "TEX R1, R1, texture[1], 2D;\n"
6305 "ADD R2, R2, -R0;\n"
6306 "DP4 R1.x, R1, c[7];\n"
6307 "MAD result.color, R1.x, R2, R0;\n"
6308 "END\n"
6309 ;
6310
6311static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT =
6312 "!!ARBfp1.0\n"
6313 "PARAM c[10] = { program.local[0..7],\n"
6314 " { 1, 2, 9.9999997e-006, 4 },\n"
6315 " { 16, 12, 3 } };\n"
6316 "TEMP R0;\n"
6317 "TEMP R1;\n"
6318 "TEMP R2;\n"
6319 "TEMP R3;\n"
6320 "TEMP R4;\n"
6321 "TEMP R5;\n"
6322 "TEMP R6;\n"
6323 "MUL R0.xyz, fragment.position.y, c[2];\n"
6324 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6325 "ADD R1.xyz, R0, c[3];\n"
6326 "RCP R1.z, R1.z;\n"
6327 "MUL R1.xy, R1, R1.z;\n"
6328 "MUL R1.xy, R1, c[0];\n"
6329 "TEX R1.x, R1, texture[2], 2D;\n"
6330 "MUL R0.xy, fragment.position, c[5];\n"
6331 "TEX R0, R0, texture[0], 2D;\n"
6332 "MAX R1.z, R0.w, c[8];\n"
6333 "RCP R1.z, R1.z;\n"
6334 "MUL R3.xyz, R0, R1.z;\n"
6335 "MAD R2.xyz, R3, c[9].x, -c[9].y;\n"
6336 "ADD R1.x, -R1, c[8];\n"
6337 "MUL R1, fragment.color.primary, R1.x;\n"
6338 "MAD R4.xyz, R3, R2, c[9].z;\n"
6339 "MAD R2.xyz, R1, c[8].y, -R1.w;\n"
6340 "MUL R5.xyz, R0.w, R2;\n"
6341 "MUL R6.xyz, R5, R4;\n"
6342 "RSQ R2.w, R3.x;\n"
6343 "RCP R4.x, R2.w;\n"
6344 "RSQ R2.w, R3.y;\n"
6345 "RSQ R3.w, R3.z;\n"
6346 "RCP R4.y, R2.w;\n"
6347 "RCP R4.z, R3.w;\n"
6348 "ADD R4.xyz, -R3, R4;\n"
6349 "MUL R6.xyz, R3, R6;\n"
6350 "MUL R4.xyz, R5, R4;\n"
6351 "ADD R3.xyz, -R3, c[8].x;\n"
6352 "MAD R2.xyz, R2, R3, R1.w;\n"
6353 "MUL R3.xyz, R1, c[8].y;\n"
6354 "MAD R5.xyz, R1.w, R0, R6;\n"
6355 "MAD R4.xyz, R1.w, R0, R4;\n"
6356 "ADD R6.xyz, R4, -R5;\n"
6357 "MUL R4.xyz, R0, c[8].w;\n"
6358 "SGE R4.xyz, R4, R0.w;\n"
6359 "MAD R4.xyz, R4, R6, R5;\n"
6360 "MAD R4.xyz, -R0, R2, R4;\n"
6361 "SGE R3.xyz, R3, R1.w;\n"
6362 "MUL R2.xyz, R0, R2;\n"
6363 "ADD R2.w, -R0, c[8].x;\n"
6364 "MAD R2.xyz, R3, R4, R2;\n"
6365 "MAD R2.xyz, R1, R2.w, R2;\n"
6366 "ADD R1.x, -R1.w, c[8];\n"
6367 "MAD R2.xyz, R0, R1.x, R2;\n"
6368 "ADD R1.z, R1.w, R0.w;\n"
6369 "MAD R2.w, -R1, R0, R1.z;\n"
6370 "ADD R1.xy, fragment.position, c[6];\n"
6371 "MUL R1.xy, R1, c[4];\n"
6372 "TEX R1, R1, texture[1], 2D;\n"
6373 "ADD R2, R2, -R0;\n"
6374 "DP4 R1.x, R1, c[7];\n"
6375 "MAD result.color, R1.x, R2, R0;\n"
6376 "END\n"
6377 ;
6378
6379static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE =
6380 "!!ARBfp1.0\n"
6381 "PARAM c[9] = { program.local[0..7],\n"
6382 " { 1, 2 } };\n"
6383 "TEMP R0;\n"
6384 "TEMP R1;\n"
6385 "TEMP R2;\n"
6386 "TEMP R3;\n"
6387 "MUL R0.xyz, fragment.position.y, c[2];\n"
6388 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6389 "ADD R0.xyz, R0, c[3];\n"
6390 "RCP R0.z, R0.z;\n"
6391 "MUL R0.xy, R0, R0.z;\n"
6392 "MUL R0.xy, R0, c[0];\n"
6393 "TEX R1.x, R0, texture[2], 2D;\n"
6394 "MUL R0.xy, fragment.position, c[5];\n"
6395 "ADD R1.x, -R1, c[8];\n"
6396 "TEX R0, R0, texture[0], 2D;\n"
6397 "MUL R1, fragment.color.primary, R1.x;\n"
6398 "ADD R2.xyz, R1, R0;\n"
6399 "MUL R3.xyz, R1.w, R0;\n"
6400 "MUL R1.xyz, R1, R0.w;\n"
6401 "MIN R1.xyz, R1, R3;\n"
6402 "MAD R2.xyz, -R1, c[8].y, R2;\n"
6403 "ADD R1.z, R1.w, R0.w;\n"
6404 "MAD R2.w, -R1, R0, R1.z;\n"
6405 "ADD R1.xy, fragment.position, c[6];\n"
6406 "MUL R1.xy, R1, c[4];\n"
6407 "TEX R1, R1, texture[1], 2D;\n"
6408 "ADD R2, R2, -R0;\n"
6409 "DP4 R1.x, R1, c[7];\n"
6410 "MAD result.color, R1.x, R2, R0;\n"
6411 "END\n"
6412 ;
6413
6414static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION =
6415 "!!ARBfp1.0\n"
6416 "PARAM c[9] = { program.local[0..7],\n"
6417 " { 1, 2 } };\n"
6418 "TEMP R0;\n"
6419 "TEMP R1;\n"
6420 "TEMP R2;\n"
6421 "TEMP R3;\n"
6422 "MUL R0.xyz, fragment.position.y, c[2];\n"
6423 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6424 "ADD R0.xyz, R0, c[3];\n"
6425 "RCP R0.z, R0.z;\n"
6426 "MUL R0.xy, R0, R0.z;\n"
6427 "MUL R0.xy, R0, c[0];\n"
6428 "TEX R1.x, R0, texture[2], 2D;\n"
6429 "MUL R0.xy, fragment.position, c[5];\n"
6430 "TEX R0, R0, texture[0], 2D;\n"
6431 "ADD R1.x, -R1, c[8];\n"
6432 "MUL R1, fragment.color.primary, R1.x;\n"
6433 "MUL R2.xyz, R1.w, R0;\n"
6434 "MAD R3.xyz, R1, R0.w, R2;\n"
6435 "MUL R2.xyz, R1, R0;\n"
6436 "MAD R2.xyz, -R2, c[8].y, R3;\n"
6437 "ADD R2.w, -R0, c[8].x;\n"
6438 "MAD R1.xyz, R1, R2.w, R2;\n"
6439 "ADD R2.x, -R1.w, c[8];\n"
6440 "MAD R2.xyz, R0, R2.x, R1;\n"
6441 "ADD R1.z, R1.w, R0.w;\n"
6442 "MAD R2.w, -R1, R0, R1.z;\n"
6443 "ADD R1.xy, fragment.position, c[6];\n"
6444 "MUL R1.xy, R1, c[4];\n"
6445 "TEX R1, R1, texture[1], 2D;\n"
6446 "ADD R2, R2, -R0;\n"
6447 "DP4 R1.x, R1, c[7];\n"
6448 "MAD result.color, R1.x, R2, R0;\n"
6449 "END\n"
6450 ;
6451
6452static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
6453 "!!ARBfp1.0\n"
6454 "PARAM c[8] = { program.local[0..6],\n"
6455 " { 1 } };\n"
6456 "TEMP R0;\n"
6457 "TEMP R1;\n"
6458 "TEMP R2;\n"
6459 "TEMP R3;\n"
6460 "MUL R0.xyz, fragment.position.y, c[2];\n"
6461 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6462 "ADD R0.xyz, R0, c[3];\n"
6463 "RCP R0.z, R0.z;\n"
6464 "MUL R0.xy, R0, R0.z;\n"
6465 "MUL R0.xy, R0, c[0];\n"
6466 "TEX R1.x, R0, texture[1], 2D;\n"
6467 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
6468 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6469 "MUL R2.xyz, R0, c[4].y;\n"
6470 "ADD R1.x, -R1, c[7];\n"
6471 "MUL R1, fragment.color.primary, R1.x;\n"
6472 "MUL R3.xyz, R1.w, R2;\n"
6473 "MUL R2.xyz, R1, c[4].x;\n"
6474 "MUL R0.xyz, R0, c[5].z;\n"
6475 "MAD R2.xyz, R0.w, R2, R3;\n"
6476 "ADD R2.w, -R0, c[7].x;\n"
6477 "MUL R1.xyz, R1, c[5].y;\n"
6478 "MAD R1.xyz, R2.w, R1, R2;\n"
6479 "ADD R2.x, -R1.w, c[7];\n"
6480 "MAD result.color.xyz, R2.x, R0, R1;\n"
6481 "MUL R0.x, R1.w, R0.w;\n"
6482 "MUL R0.z, R0.w, R2.x;\n"
6483 "MUL R0.y, R1.w, R2.w;\n"
6484 "DP3 result.color.w, R0, c[5];\n"
6485 "END\n"
6486 ;
6487
6488static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK =
6489 "!!ARBfp1.0\n"
6490 "PARAM c[6] = { program.local[0..4],\n"
6491 " { 1 } };\n"
6492 "TEMP R0;\n"
6493 "TEMP R1;\n"
6494 "TEMP R2;\n"
6495 "MUL R0.xyz, fragment.position.y, c[2];\n"
6496 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6497 "ADD R0.xyz, R0, c[3];\n"
6498 "RCP R0.z, R0.z;\n"
6499 "MUL R0.xy, R0, R0.z;\n"
6500 "MUL R0.xy, R0, c[0];\n"
6501 "TEX R1.x, R0, texture[1], 2D;\n"
6502 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6503 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6504 "ADD R1.x, -R1, c[5];\n"
6505 "MUL R1, fragment.color.primary, R1.x;\n"
6506 "ADD R2.x, -R0.w, c[5];\n"
6507 "MUL R2.xyz, R1, R2.x;\n"
6508 "MAD R1.xyz, R1, R0, R2;\n"
6509 "ADD R2.x, R1.w, R0.w;\n"
6510 "ADD R2.y, -R1.w, c[5].x;\n"
6511 "MAD result.color.xyz, R0, R2.y, R1;\n"
6512 "MAD result.color.w, -R1, R0, R2.x;\n"
6513 "END\n"
6514 ;
6515
6516static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK =
6517 "!!ARBfp1.0\n"
6518 "PARAM c[6] = { program.local[0..4],\n"
6519 " { 1 } };\n"
6520 "TEMP R0;\n"
6521 "TEMP R1;\n"
6522 "TEMP R2;\n"
6523 "MUL R0.xyz, fragment.position.y, c[2];\n"
6524 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6525 "ADD R0.xyz, R0, c[3];\n"
6526 "RCP R0.z, R0.z;\n"
6527 "MUL R0.xy, R0, R0.z;\n"
6528 "MUL R0.xy, R0, c[0];\n"
6529 "TEX R0.x, R0, texture[1], 2D;\n"
6530 "ADD R1.x, -R0, c[5];\n"
6531 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6532 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6533 "MUL R1, fragment.color.primary, R1.x;\n"
6534 "ADD R2, R1, R0;\n"
6535 "MAD result.color, -R1, R0, R2;\n"
6536 "END\n"
6537 ;
6538
6539static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK =
6540 "!!ARBfp1.0\n"
6541 "PARAM c[6] = { program.local[0..4],\n"
6542 " { 1, 2 } };\n"
6543 "TEMP R0;\n"
6544 "TEMP R1;\n"
6545 "TEMP R2;\n"
6546 "TEMP R3;\n"
6547 "MUL R0.xyz, fragment.position.y, c[2];\n"
6548 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6549 "ADD R0.xyz, R0, c[3];\n"
6550 "RCP R0.z, R0.z;\n"
6551 "MUL R0.xy, R0, R0.z;\n"
6552 "MUL R0.xy, R0, c[0];\n"
6553 "TEX R0.x, R0, texture[1], 2D;\n"
6554 "ADD R0.x, -R0, c[5];\n"
6555 "MUL R1, fragment.color.primary, R0.x;\n"
6556 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6557 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6558 "ADD R3.xyz, R1.w, -R1;\n"
6559 "ADD R2.xyz, R0.w, -R0;\n"
6560 "MUL R2.xyz, R2, R3;\n"
6561 "ADD R2.w, -R0, c[5].x;\n"
6562 "MUL R2.xyz, R2, c[5].y;\n"
6563 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6564 "MAD R2.xyz, R1, R2.w, R2;\n"
6565 "MUL R3.xyz, R1, R2.w;\n"
6566 "MUL R1.xyz, R1, R0;\n"
6567 "ADD R2.w, -R1, c[5].x;\n"
6568 "MAD R1.xyz, R1, c[5].y, R3;\n"
6569 "MAD R1.xyz, R0, R2.w, R1;\n"
6570 "MAD R2.xyz, R0, R2.w, R2;\n"
6571 "MUL R0.xyz, R0, c[5].y;\n"
6572 "ADD R2.w, R1, R0;\n"
6573 "ADD R2.xyz, R2, -R1;\n"
6574 "SGE R0.xyz, R0, R0.w;\n"
6575 "MAD result.color.xyz, R0, R2, R1;\n"
6576 "MAD result.color.w, -R1, R0, R2;\n"
6577 "END\n"
6578 ;
6579
6580static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK =
6581 "!!ARBfp1.0\n"
6582 "PARAM c[6] = { program.local[0..4],\n"
6583 " { 1 } };\n"
6584 "TEMP R0;\n"
6585 "TEMP R1;\n"
6586 "TEMP R2;\n"
6587 "TEMP R3;\n"
6588 "MUL R0.xyz, fragment.position.y, c[2];\n"
6589 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6590 "ADD R0.xyz, R0, c[3];\n"
6591 "RCP R0.z, R0.z;\n"
6592 "MUL R0.xy, R0, R0.z;\n"
6593 "MUL R0.xy, R0, c[0];\n"
6594 "TEX R0.x, R0, texture[1], 2D;\n"
6595 "ADD R1.x, -R0, c[5];\n"
6596 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6597 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6598 "MUL R1, fragment.color.primary, R1.x;\n"
6599 "MUL R2.xyz, R1, R0.w;\n"
6600 "MUL R3.xyz, R1.w, R0;\n"
6601 "MIN R2.xyz, R2, R3;\n"
6602 "ADD R2.w, -R0, c[5].x;\n"
6603 "MAD R1.xyz, R1, R2.w, R2;\n"
6604 "ADD R2.x, R1.w, R0.w;\n"
6605 "ADD R2.y, -R1.w, c[5].x;\n"
6606 "MAD result.color.xyz, R0, R2.y, R1;\n"
6607 "MAD result.color.w, -R1, R0, R2.x;\n"
6608 "END\n"
6609 ;
6610
6611static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK =
6612 "!!ARBfp1.0\n"
6613 "PARAM c[6] = { program.local[0..4],\n"
6614 " { 1 } };\n"
6615 "TEMP R0;\n"
6616 "TEMP R1;\n"
6617 "TEMP R2;\n"
6618 "TEMP R3;\n"
6619 "MUL R0.xyz, fragment.position.y, c[2];\n"
6620 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6621 "ADD R0.xyz, R0, c[3];\n"
6622 "RCP R0.z, R0.z;\n"
6623 "MUL R0.xy, R0, R0.z;\n"
6624 "MUL R0.xy, R0, c[0];\n"
6625 "TEX R0.x, R0, texture[1], 2D;\n"
6626 "ADD R1.x, -R0, c[5];\n"
6627 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6628 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6629 "MUL R1, fragment.color.primary, R1.x;\n"
6630 "MUL R2.xyz, R1, R0.w;\n"
6631 "MUL R3.xyz, R1.w, R0;\n"
6632 "MAX R2.xyz, R2, R3;\n"
6633 "ADD R2.w, -R0, c[5].x;\n"
6634 "MAD R1.xyz, R1, R2.w, R2;\n"
6635 "ADD R2.x, R1.w, R0.w;\n"
6636 "ADD R2.y, -R1.w, c[5].x;\n"
6637 "MAD result.color.xyz, R0, R2.y, R1;\n"
6638 "MAD result.color.w, -R1, R0, R2.x;\n"
6639 "END\n"
6640 ;
6641
6642static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK =
6643 "!!ARBfp1.0\n"
6644 "PARAM c[6] = { program.local[0..4],\n"
6645 " { 1, 1e-006 } };\n"
6646 "TEMP R0;\n"
6647 "TEMP R1;\n"
6648 "TEMP R2;\n"
6649 "TEMP R3;\n"
6650 "MUL R0.xyz, fragment.position.y, c[2];\n"
6651 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6652 "ADD R0.xyz, R0, c[3];\n"
6653 "RCP R0.z, R0.z;\n"
6654 "MUL R0.xy, R0, R0.z;\n"
6655 "MUL R0.xy, R0, c[0];\n"
6656 "TEX R0.x, R0, texture[1], 2D;\n"
6657 "ADD R0.x, -R0, c[5];\n"
6658 "MUL R1, fragment.color.primary, R0.x;\n"
6659 "MAX R0.x, R1.w, c[5].y;\n"
6660 "RCP R0.x, R0.x;\n"
6661 "MAD R3.xyz, -R1, R0.x, c[5].x;\n"
6662 "MAX R3.xyz, R3, c[5].y;\n"
6663 "MUL R0.xy, fragment.position, c[4];\n"
6664 "TEX R0, R0, texture[0], 2D;\n"
6665 "ADD R2.x, -R1.w, c[5];\n"
6666 "MUL R2.xyz, R0, R2.x;\n"
6667 "ADD R2.w, -R0, c[5].x;\n"
6668 "MAD R2.xyz, R1, R2.w, R2;\n"
6669 "MUL R0.xyz, R1.w, R0;\n"
6670 "RCP R3.x, R3.x;\n"
6671 "RCP R3.y, R3.y;\n"
6672 "RCP R3.z, R3.z;\n"
6673 "MAD R3.xyz, R0, R3, R2;\n"
6674 "MAD R0.xyz, R1, R0.w, R0;\n"
6675 "MAD R2.xyz, R1.w, R0.w, R2;\n"
6676 "MUL R2.w, R1, R0;\n"
6677 "ADD R1.x, R1.w, R0.w;\n"
6678 "ADD R2.xyz, R2, -R3;\n"
6679 "SGE R0.xyz, R0, R2.w;\n"
6680 "MAD result.color.xyz, R0, R2, R3;\n"
6681 "MAD result.color.w, -R1, R0, R1.x;\n"
6682 "END\n"
6683 ;
6684
6685static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK =
6686 "!!ARBfp1.0\n"
6687 "PARAM c[6] = { program.local[0..4],\n"
6688 " { 1, 9.9999997e-006 } };\n"
6689 "TEMP R0;\n"
6690 "TEMP R1;\n"
6691 "TEMP R2;\n"
6692 "TEMP R3;\n"
6693 "TEMP R4;\n"
6694 "TEMP R5;\n"
6695 "MUL R0.xyz, fragment.position.y, c[2];\n"
6696 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6697 "ADD R0.xyz, R0, c[3];\n"
6698 "RCP R0.z, R0.z;\n"
6699 "MUL R0.xy, R0, R0.z;\n"
6700 "MUL R0.xy, R0, c[0];\n"
6701 "TEX R0.x, R0, texture[1], 2D;\n"
6702 "ADD R1.x, -R0, c[5];\n"
6703 "MUL R1, fragment.color.primary, R1.x;\n"
6704 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6705 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6706 "MUL R2.xyz, R1.w, R0;\n"
6707 "MAD R3.xyz, R1, R0.w, R2;\n"
6708 "ADD R2.w, -R0, c[5].x;\n"
6709 "MAD R2.xyz, -R1.w, R0.w, R3;\n"
6710 "MUL R4.xyz, R1.w, R2;\n"
6711 "MAX R2.xyz, R1, c[5].y;\n"
6712 "MUL R5.xyz, R1, R2.w;\n"
6713 "ADD R3.w, -R1, c[5].x;\n"
6714 "RCP R2.x, R2.x;\n"
6715 "RCP R2.y, R2.y;\n"
6716 "RCP R2.z, R2.z;\n"
6717 "MAD R2.xyz, R4, R2, R5;\n"
6718 "MUL R4.xyz, R0, R3.w;\n"
6719 "MAD R0.xyz, R0, R3.w, R2;\n"
6720 "MAD R1.xyz, R1, R2.w, R4;\n"
6721 "MUL R2.x, R1.w, R0.w;\n"
6722 "ADD R2.w, R1, R0;\n"
6723 "ADD R0.xyz, R0, -R1;\n"
6724 "SGE R2.xyz, R3, R2.x;\n"
6725 "MAD result.color.xyz, R2, R0, R1;\n"
6726 "MAD result.color.w, -R1, R0, R2;\n"
6727 "END\n"
6728 ;
6729
6730static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK =
6731 "!!ARBfp1.0\n"
6732 "PARAM c[6] = { program.local[0..4],\n"
6733 " { 1, 2 } };\n"
6734 "TEMP R0;\n"
6735 "TEMP R1;\n"
6736 "TEMP R2;\n"
6737 "TEMP R3;\n"
6738 "TEMP R4;\n"
6739 "MUL R0.xyz, fragment.position.y, c[2];\n"
6740 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6741 "ADD R0.xyz, R0, c[3];\n"
6742 "RCP R0.z, R0.z;\n"
6743 "MUL R0.xy, R0, R0.z;\n"
6744 "MUL R0.xy, R0, c[0];\n"
6745 "TEX R0.x, R0, texture[1], 2D;\n"
6746 "ADD R0.x, -R0, c[5];\n"
6747 "MUL R1, fragment.color.primary, R0.x;\n"
6748 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6749 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6750 "ADD R2.w, -R0, c[5].x;\n"
6751 "ADD R3.xyz, R1.w, -R1;\n"
6752 "ADD R2.xyz, R0.w, -R0;\n"
6753 "MUL R2.xyz, R2, R3;\n"
6754 "MUL R2.xyz, R2, c[5].y;\n"
6755 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6756 "MAD R2.xyz, R1, R2.w, R2;\n"
6757 "MUL R4.xyz, R1, R2.w;\n"
6758 "MUL R3.xyz, R1, R0;\n"
6759 "MUL R1.xyz, R1, c[5].y;\n"
6760 "ADD R2.w, -R1, c[5].x;\n"
6761 "MAD R3.xyz, R3, c[5].y, R4;\n"
6762 "MAD R3.xyz, R0, R2.w, R3;\n"
6763 "MAD R0.xyz, R0, R2.w, R2;\n"
6764 "ADD R2.x, R1.w, R0.w;\n"
6765 "ADD R0.xyz, R0, -R3;\n"
6766 "SGE R1.xyz, R1, R1.w;\n"
6767 "MAD result.color.xyz, R1, R0, R3;\n"
6768 "MAD result.color.w, -R1, R0, R2.x;\n"
6769 "END\n"
6770 ;
6771
6772static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
6773 "!!ARBfp1.0\n"
6774 "PARAM c[7] = { program.local[0..4],\n"
6775 " { 1, 2, 9.9999997e-006, 4 },\n"
6776 " { 16, 12, 3 } };\n"
6777 "TEMP R0;\n"
6778 "TEMP R1;\n"
6779 "TEMP R2;\n"
6780 "TEMP R3;\n"
6781 "TEMP R4;\n"
6782 "TEMP R5;\n"
6783 "TEMP R6;\n"
6784 "MUL R0.xyz, fragment.position.y, c[2];\n"
6785 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6786 "ADD R1.xyz, R0, c[3];\n"
6787 "RCP R1.z, R1.z;\n"
6788 "MUL R1.xy, R1, R1.z;\n"
6789 "MUL R1.xy, R1, c[0];\n"
6790 "TEX R1.x, R1, texture[1], 2D;\n"
6791 "MUL R0.xy, fragment.position, c[4];\n"
6792 "TEX R0, R0, texture[0], 2D;\n"
6793 "MAX R1.z, R0.w, c[5];\n"
6794 "RCP R1.z, R1.z;\n"
6795 "MUL R3.xyz, R0, R1.z;\n"
6796 "MAD R2.xyz, R3, c[6].x, -c[6].y;\n"
6797 "ADD R1.x, -R1, c[5];\n"
6798 "MUL R1, fragment.color.primary, R1.x;\n"
6799 "MAD R4.xyz, R3, R2, c[6].z;\n"
6800 "MAD R2.xyz, R1, c[5].y, -R1.w;\n"
6801 "MUL R5.xyz, R0.w, R2;\n"
6802 "MUL R6.xyz, R5, R4;\n"
6803 "RSQ R2.w, R3.x;\n"
6804 "RCP R4.x, R2.w;\n"
6805 "RSQ R2.w, R3.y;\n"
6806 "RSQ R3.w, R3.z;\n"
6807 "RCP R4.y, R2.w;\n"
6808 "RCP R4.z, R3.w;\n"
6809 "ADD R4.xyz, -R3, R4;\n"
6810 "MUL R6.xyz, R3, R6;\n"
6811 "MUL R4.xyz, R5, R4;\n"
6812 "ADD R3.xyz, -R3, c[5].x;\n"
6813 "MAD R2.xyz, R2, R3, R1.w;\n"
6814 "MUL R3.xyz, R1, c[5].y;\n"
6815 "MAD R5.xyz, R1.w, R0, R6;\n"
6816 "MAD R4.xyz, R1.w, R0, R4;\n"
6817 "ADD R6.xyz, R4, -R5;\n"
6818 "MUL R4.xyz, R0, c[5].w;\n"
6819 "SGE R4.xyz, R4, R0.w;\n"
6820 "MAD R4.xyz, R4, R6, R5;\n"
6821 "MAD R4.xyz, -R0, R2, R4;\n"
6822 "MUL R2.xyz, R0, R2;\n"
6823 "SGE R3.xyz, R3, R1.w;\n"
6824 "MAD R2.xyz, R3, R4, R2;\n"
6825 "ADD R2.w, -R0, c[5].x;\n"
6826 "MAD R2.xyz, R1, R2.w, R2;\n"
6827 "ADD R1.x, R1.w, R0.w;\n"
6828 "ADD R1.y, -R1.w, c[5].x;\n"
6829 "MAD result.color.xyz, R0, R1.y, R2;\n"
6830 "MAD result.color.w, -R1, R0, R1.x;\n"
6831 "END\n"
6832 ;
6833
6834static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK =
6835 "!!ARBfp1.0\n"
6836 "PARAM c[6] = { program.local[0..4],\n"
6837 " { 1, 2 } };\n"
6838 "TEMP R0;\n"
6839 "TEMP R1;\n"
6840 "TEMP R2;\n"
6841 "TEMP R3;\n"
6842 "MUL R0.xyz, fragment.position.y, c[2];\n"
6843 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6844 "ADD R0.xyz, R0, c[3];\n"
6845 "RCP R0.z, R0.z;\n"
6846 "MUL R0.xy, R0, R0.z;\n"
6847 "MUL R0.xy, R0, c[0];\n"
6848 "TEX R0.x, R0, texture[1], 2D;\n"
6849 "ADD R1.x, -R0, c[5];\n"
6850 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6851 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6852 "MUL R1, fragment.color.primary, R1.x;\n"
6853 "MUL R3.xyz, R1.w, R0;\n"
6854 "MUL R2.xyz, R1, R0.w;\n"
6855 "ADD R0.xyz, R1, R0;\n"
6856 "MIN R2.xyz, R2, R3;\n"
6857 "ADD R1.x, R1.w, R0.w;\n"
6858 "MAD result.color.xyz, -R2, c[5].y, R0;\n"
6859 "MAD result.color.w, -R1, R0, R1.x;\n"
6860 "END\n"
6861 ;
6862
6863static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK =
6864 "!!ARBfp1.0\n"
6865 "PARAM c[6] = { program.local[0..4],\n"
6866 " { 1, 2 } };\n"
6867 "TEMP R0;\n"
6868 "TEMP R1;\n"
6869 "TEMP R2;\n"
6870 "TEMP R3;\n"
6871 "MUL R0.xyz, fragment.position.y, c[2];\n"
6872 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6873 "ADD R0.xyz, R0, c[3];\n"
6874 "RCP R0.z, R0.z;\n"
6875 "MUL R0.xy, R0, R0.z;\n"
6876 "MUL R0.xy, R0, c[0];\n"
6877 "TEX R0.x, R0, texture[1], 2D;\n"
6878 "ADD R1.x, -R0, c[5];\n"
6879 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
6880 "TEX R0, R0.zwzw, texture[0], 2D;\n"
6881 "MUL R1, fragment.color.primary, R1.x;\n"
6882 "MUL R2.xyz, R1.w, R0;\n"
6883 "MAD R3.xyz, R1, R0.w, R2;\n"
6884 "MUL R2.xyz, R1, R0;\n"
6885 "MAD R2.xyz, -R2, c[5].y, R3;\n"
6886 "ADD R2.w, -R0, c[5].x;\n"
6887 "MAD R1.xyz, R1, R2.w, R2;\n"
6888 "ADD R2.x, R1.w, R0.w;\n"
6889 "ADD R2.y, -R1.w, c[5].x;\n"
6890 "MAD result.color.xyz, R0, R2.y, R1;\n"
6891 "MAD result.color.w, -R1, R0, R2.x;\n"
6892 "END\n"
6893 ;
6894
6895static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK =
6896 "!!ARBfp1.0\n"
6897 "PARAM c[8] = { program.local[0..6],\n"
6898 " { 1 } };\n"
6899 "TEMP R0;\n"
6900 "TEMP R1;\n"
6901 "MUL R0.xyz, fragment.position.y, c[2];\n"
6902 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6903 "ADD R0.xyz, R0, c[3];\n"
6904 "RCP R0.z, R0.z;\n"
6905 "MUL R0.zw, R0.xyxy, R0.z;\n"
6906 "MUL R0.zw, R0, c[0].xyxy;\n"
6907 "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
6908 "ADD R0.xy, fragment.position, c[5];\n"
6909 "MUL R0.xy, R0, c[4];\n"
6910 "TEX R0, R0, texture[0], 2D;\n"
6911 "DP4 R1.y, R0, c[6];\n"
6912 "ADD R1.x, -R1, c[7];\n"
6913 "MUL R0, fragment.color.primary, R1.x;\n"
6914 "MUL result.color, R0, R1.y;\n"
6915 "END\n"
6916 ;
6917
6918static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK =
6919 "!!ARBfp1.0\n"
6920 "PARAM c[5] = { program.local[0..3],\n"
6921 " { 1 } };\n"
6922 "TEMP R0;\n"
6923 "MUL R0.xyz, fragment.position.y, c[2];\n"
6924 "MAD R0.xyz, fragment.position.x, c[1], R0;\n"
6925 "ADD R0.xyz, R0, c[3];\n"
6926 "RCP R0.z, R0.z;\n"
6927 "MUL R0.xy, R0, R0.z;\n"
6928 "MUL R0.xy, R0, c[0];\n"
6929 "TEX R0.x, R0, texture[0], 2D;\n"
6930 "ADD R0.x, -R0, c[4];\n"
6931 "MUL result.color, fragment.color.primary, R0.x;\n"
6932 "END\n"
6933 ;
6934
6935static const char *mask_fragment_program_sources[num_fragment_masks] = {
6936 FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
6937 FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA,
6938};
6939
6940static const char *painter_fragment_program_sources[num_fragment_brushes][num_fragment_composition_modes] = {
6941 {
6942 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
6943 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY,
6944 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN,
6945 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY,
6946 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN,
6947 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN,
6948 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE,
6949 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN,
6950 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT,
6951 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT,
6952 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE,
6953 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION,
6954 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
6955 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK,
6956 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK,
6957 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK,
6958 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK,
6959 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK,
6960 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK,
6961 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK,
6962 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK,
6963 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
6964 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK,
6965 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK,
6966 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK,
6967 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK,
6968 },
6969 {
6970 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
6971 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY,
6972 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN,
6973 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY,
6974 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN,
6975 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN,
6976 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE,
6977 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN,
6978 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT,
6979 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT,
6980 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE,
6981 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION,
6982 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
6983 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK,
6984 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK,
6985 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK,
6986 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK,
6987 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK,
6988 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK,
6989 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK,
6990 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK,
6991 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
6992 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK,
6993 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK,
6994 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK,
6995 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK,
6996 },
6997 {
6998 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
6999 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY,
7000 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN,
7001 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY,
7002 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN,
7003 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN,
7004 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE,
7005 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN,
7006 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT,
7007 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT,
7008 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE,
7009 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION,
7010 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7011 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK,
7012 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK,
7013 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK,
7014 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK,
7015 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK,
7016 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK,
7017 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK,
7018 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7019 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7020 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7021 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK,
7022 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK,
7023 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7024 },
7025 {
7026 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7027 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY,
7028 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN,
7029 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY,
7030 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN,
7031 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN,
7032 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE,
7033 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN,
7034 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT,
7035 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT,
7036 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE,
7037 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION,
7038 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7039 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK,
7040 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK,
7041 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK,
7042 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK,
7043 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK,
7044 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK,
7045 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK,
7046 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7047 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7048 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7049 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK,
7050 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK,
7051 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7052 },
7053 {
7054 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7055 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY,
7056 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN,
7057 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY,
7058 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN,
7059 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN,
7060 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE,
7061 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN,
7062 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT,
7063 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT,
7064 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE,
7065 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION,
7066 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7067 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK,
7068 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK,
7069 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK,
7070 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK,
7071 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK,
7072 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK,
7073 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK,
7074 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7075 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7076 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7077 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK,
7078 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK,
7079 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7080 },
7081 {
7082 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7083 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY,
7084 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN,
7085 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY,
7086 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN,
7087 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN,
7088 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE,
7089 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN,
7090 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT,
7091 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT,
7092 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE,
7093 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION,
7094 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7095 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK,
7096 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK,
7097 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK,
7098 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK,
7099 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK,
7100 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK,
7101 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK,
7102 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7103 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7104 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7105 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK,
7106 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK,
7107 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7108 },
7109};
7110
7111static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = {
7112 {
7113 { -1, -1, -1, 2, -1, 0, 5, -1, 1, 3, 1, 0, -1, 4, -1, -1, -1, -1, -1, },
7114 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7115 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7116 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7117 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7118 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7119 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7120 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7121 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7122 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7123 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7124 { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, },
7125 { -1, -1, -1, -1, -1, 0, -1, -1, 1, 2, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7126 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7127 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7128 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7129 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7130 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7131 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7132 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7133 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7134 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7135 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7136 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7137 { -1, -1, -1, 0, -1, -1, 2, -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, -1, -1, },
7138 { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
7139 },
7140 {
7141 { -1, -1, 3, 7, 4, 5, 10, -1, 6, 8, 1, 0, 2, 9, -1, 1, 0, 2, -1, },
7142 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7143 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7144 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7145 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7146 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7147 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7148 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7149 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7150 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7151 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7152 { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, },
7153 { -1, -1, 3, -1, 4, 5, -1, -1, 6, 7, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7154 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7155 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7156 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7157 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7158 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7159 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7160 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7161 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7162 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7163 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7164 { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, },
7165 { -1, -1, 3, 5, 4, -1, 7, -1, -1, -1, 0, -1, 1, 6, -1, 1, 0, 2, -1, },
7166 { -1, -1, 3, -1, 4, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, 0, 2, -1, },
7167 },
7168 {
7169 { -1, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, 0, },
7170 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7171 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7172 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7173 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7174 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7175 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7176 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7177 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7178 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7179 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7180 { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, },
7181 { -1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7182 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7183 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7184 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7185 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7186 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7187 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7188 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7189 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7190 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7191 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7192 { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, },
7193 { -1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, 0, },
7194 { -1, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, 0, },
7195 },
7196 {
7197 { -1, 0, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, -1, },
7198 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7199 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7200 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7201 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7202 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7203 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7204 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7205 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7206 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7207 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7208 { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, },
7209 { -1, 0, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7210 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7211 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7212 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7213 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7214 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7215 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7216 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7217 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7218 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7219 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7220 { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, },
7221 { -1, 0, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, -1, },
7222 { -1, 0, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, -1, },
7223 },
7224 {
7225 { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, },
7226 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7227 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7228 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7229 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7230 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7231 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7232 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7233 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7234 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7235 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7236 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7237 { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7238 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7239 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7240 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7241 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7242 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7243 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7244 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7245 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7246 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7247 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7248 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7249 { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, },
7250 { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, },
7251 },
7252 {
7253 { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, },
7254 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7255 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7256 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7257 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7258 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7259 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7260 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7261 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7262 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7263 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7264 { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, },
7265 { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7266 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7267 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7268 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7269 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7270 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7271 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7272 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7273 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7274 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7275 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7276 { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, },
7277 { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, },
7278 { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, },
7279 },
7280};
7281
7282static int mask_variable_locations[num_fragment_masks][num_fragment_variables] = {
7283 { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
7284 { -1, -1, 1, -1, 2, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, },
7285};
7286
7287#endif
Note: See TracBrowser for help on using the repository browser.