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

Last change on this file since 552 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 240.5 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the QtOpenGL module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
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 are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41#ifndef FRAGMENTPROGRAMS_H
42#define FRAGMENTPROGRAMS_H
43
44//
45// W A R N I N G
46// -------------
47//
48// This file is not part of the Qt API. It exists purely as an
49// implementation detail. This header file may change from version to
50// version without notice, or even be removed.
51//
52// We mean it.
53//
54
55enum FragmentVariable {
56 VAR_BRUSH_TEXTURE,
57 VAR_LINEAR,
58 VAR_INV_MATRIX_M1,
59 VAR_INV_MASK_SIZE,
60 VAR_INV_MATRIX_M2,
61 VAR_PORTERDUFF_AB,
62 VAR_MASK_CHANNEL,
63 VAR_ELLIPSE_OFFSET,
64 VAR_PORTERDUFF_XYZ,
65 VAR_INV_DST_SIZE,
66 VAR_MASK_TEXTURE,
67 VAR_DST_TEXTURE,
68 VAR_PALETTE,
69 VAR_MASK_OFFSET,
70 VAR_INV_BRUSH_TEXTURE_SIZE,
71 VAR_FMP2_M_RADIUS2,
72 VAR_FMP,
73 VAR_INV_MATRIX_M0,
74 VAR_ANGLE,
75};
76
77enum FragmentBrushType {
78 FRAGMENT_PROGRAM_BRUSH_SOLID,
79 FRAGMENT_PROGRAM_BRUSH_RADIAL,
80 FRAGMENT_PROGRAM_BRUSH_CONICAL,
81 FRAGMENT_PROGRAM_BRUSH_LINEAR,
82 FRAGMENT_PROGRAM_BRUSH_TEXTURE,
83 FRAGMENT_PROGRAM_BRUSH_PATTERN,
84};
85
86enum FragmentCompositionModeType {
87 COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
88 COMPOSITION_MODES_MULTIPLY,
89 COMPOSITION_MODES_SCREEN,
90 COMPOSITION_MODES_OVERLAY,
91 COMPOSITION_MODES_DARKEN,
92 COMPOSITION_MODES_LIGHTEN,
93 COMPOSITION_MODES_COLORDODGE,
94 COMPOSITION_MODES_COLORBURN,
95 COMPOSITION_MODES_HARDLIGHT,
96 COMPOSITION_MODES_SOFTLIGHT,
97 COMPOSITION_MODES_DIFFERENCE,
98 COMPOSITION_MODES_EXCLUSION,
99 COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
100 COMPOSITION_MODES_MULTIPLY_NOMASK,
101 COMPOSITION_MODES_SCREEN_NOMASK,
102 COMPOSITION_MODES_OVERLAY_NOMASK,
103 COMPOSITION_MODES_DARKEN_NOMASK,
104 COMPOSITION_MODES_LIGHTEN_NOMASK,
105 COMPOSITION_MODES_COLORDODGE_NOMASK,
106 COMPOSITION_MODES_COLORBURN_NOMASK,
107 COMPOSITION_MODES_HARDLIGHT_NOMASK,
108 COMPOSITION_MODES_SOFTLIGHT_NOMASK,
109 COMPOSITION_MODES_DIFFERENCE_NOMASK,
110 COMPOSITION_MODES_EXCLUSION_NOMASK,
111 COMPOSITION_MODE_BLEND_MODE_MASK,
112 COMPOSITION_MODE_BLEND_MODE_NOMASK,
113};
114
115enum FragmentMaskType {
116 FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
117 FRAGMENT_PROGRAM_MASK_ELLIPSE_AA,
118};
119
120static const unsigned int num_fragment_variables = 19;
121
122static const unsigned int num_fragment_brushes = 6;
123static const unsigned int num_fragment_composition_modes = 26;
124static const unsigned int num_fragment_masks = 2;
125
126static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA =
127 "!!ARBfp1.0\n"
128 "PARAM c[1] = { { 0.5, 2 } };\n"
129 "TEMP R0;\n"
130 "TEMP R1;\n"
131 "TEMP R2;\n"
132 "TEMP R3;\n"
133 "TEMP R4;\n"
134 "ADD R4.x, fragment.position, c[0];\n"
135 "ADD R0.y, fragment.position, -c[0].x;\n"
136 "MAX R2.x, R0.y, fragment.texcoord[0].y;\n"
137 "ADD R0.x, fragment.position.y, c[0];\n"
138 "MIN R2.y, R0.x, fragment.texcoord[0].x;\n"
139 "ADD R3.x, fragment.position, -c[0];\n"
140 "ADD R1.zw, -fragment.texcoord[0], -fragment.texcoord[0];\n"
141 "MOV R3.y, R4.x;\n"
142 "MOV R0.yw, R2.x;\n"
143 "MOV R0.xz, R2.y;\n"
144 "MAD R0, fragment.texcoord[1].xxzz, R0, fragment.texcoord[1].yyww;\n"
145 "MAD R1.xy, fragment.position.x, c[0].y, -R0.zwzw;\n"
146 "MOV R0.w, R1.x;\n"
147 "MOV R1.x, R0.y;\n"
148 "MOV R0.z, R0.x;\n"
149 "SGE R2.zw, R1.xyxy, R0;\n"
150 "MAX R0.xy, R0.zwzw, R1;\n"
151 "MIN R0.zw, R0, R1.xyxy;\n"
152 "MAD R2.zw, R2, R1, fragment.texcoord[0];\n"
153 "ADD R1, R3.xyxy, -R0.zzww;\n"
154 "MAD R1, R1, R2.zzww, R2.x;\n"
155 "ADD R3.zw, R0.xyxy, R0;\n"
156 "ADD R3.y, R2, -R2.x;\n"
157 "ADD R2.zw, R1.xyyw, -R2.x;\n"
158 "ADD R4.zw, R4.x, -R0;\n"
159 "MUL R2.zw, R4, R2;\n"
160 "ADD R4.zw, R1.xyyw, R1.xyxz;\n"
161 "ADD R1.xz, R2.y, -R1;\n"
162 "MAD R2.zw, -R2, c[0].x, R3.y;\n"
163 "MAD R3.zw, R3, c[0].x, -R3.x;\n"
164 "MAD R3.zw, R3, R3.y, -R2;\n"
165 "ADD R1.y, R4.x, -R3.x;\n"
166 "MAD R4.zw, -R4, c[0].x, R2.y;\n"
167 "MUL R4.zw, R4, R1.y;\n"
168 "ADD R1.yw, R0.xxzy, -R3.x;\n"
169 "MUL R1.xy, R1.xzzw, R1.ywzw;\n"
170 "MAD R1.zw, R1.xyxy, c[0].x, -R4;\n"
171 "SGE R1.xy, R4.x, R0;\n"
172 "MUL R1.zw, R1.xyxy, R1;\n"
173 "MAD R1.xy, R1, R3.zwzw, R2.zwzw;\n"
174 "SGE R2.zw, R3.x, R0;\n"
175 "ADD R1.zw, R4, R1;\n"
176 "ADD R1.zw, R1, -R1.xyxy;\n"
177 "MAD R1.xy, R2.zwzw, R1.zwzw, R1;\n"
178 "ADD R1.xy, R1, -R3.y;\n"
179 "SGE R0.zw, R4.x, R0;\n"
180 "MAD R0.zw, R0, R1.xyxy, R3.y;\n"
181 "SGE R0.xy, R0, R3.x;\n"
182 "MUL R0.xy, R0.zwzw, R0;\n"
183 "ADD R0.x, R3.y, -R0;\n"
184 "SGE R0.z, R2.y, R2.x;\n"
185 "ADD R0.x, R0, -R0.y;\n"
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[0];\n"
199 "MUL R1.xyz, R0.y, c[2];\n"
200 "MAD R0.xyz, R0.x, c[1], R1;\n"
201 "ADD R0.xyz, R0, c[3];\n"
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[1];\n"
206 "MOV R1.zw, c[2].xyxy;\n"
207 "MOV R0.x, c[1].z;\n"
208 "MOV R0.y, c[2].z;\n"
209 "MAD R0, -R0.xyxy, R0.zzww, R1.xzyw;\n"
210 "MUL R1.xy, R2, fragment.texcoord[0];\n"
211 "MUL R0, R0, R2.z;\n"
212 "MUL R1.xy, R1, c[4].x;\n"
213 "MUL R1.zw, R1.xyxy, R0.xyxz;\n"
214 "MUL R0.xy, R1, R0.ywzw;\n"
215 "ADD R0.w, R0.x, R0.y;\n"
216 "MUL R0.xy, R2, R2;\n"
217 "ADD R0.x, R0, R0.y;\n"
218 "ADD R0.z, R1, R1.w;\n"
219 "MUL R0.zw, R0, R0;\n"
220 "ADD R0.y, R0.z, R0.w;\n"
221 "RSQ R0.y, R0.y;\n"
222 "ADD R0.x, -R0, c[4].y;\n"
223 "MAD_SAT R0.x, R0.y, R0, -c[4].z;\n"
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..3],\n"
234 " { 1 },\n"
235 " program.local[5..6] };\n"
236 "TEMP R0;\n"
237 "TEMP R1;\n"
238 "TEMP R2;\n"
239 "TEMP R3;\n"
240 "MUL R0.xy, fragment.position, c[3];\n"
241 "TEX R1, R0, texture[0], 2D;\n"
242 "MUL R0.xyz, R1, c[6].y;\n"
243 "MUL R2.xyz, R0, fragment.color.primary.w;\n"
244 "MUL R0.xyz, fragment.color.primary, c[6].x;\n"
245 "MAD R2.xyz, R0, R1.w, R2;\n"
246 "ADD R3.xy, fragment.position, c[0];\n"
247 "ADD R0.w, -R1, c[4].x;\n"
248 "MUL R0.xyz, fragment.color.primary, c[5].y;\n"
249 "MAD R2.xyz, R0, R0.w, R2;\n"
250 "MUL R0.xyz, R1, c[5].z;\n"
251 "ADD R0.w, -fragment.color.primary, c[4].x;\n"
252 "MAD R2.xyz, R0, R0.w, R2;\n"
253 "ADD R0.y, -R1.w, c[4].x;\n"
254 "MUL R0.x, fragment.color.primary.w, R1.w;\n"
255 "MUL R0.y, fragment.color.primary.w, R0;\n"
256 "MUL R0.z, R1.w, R0.w;\n"
257 "DP3 R2.w, R0, c[5];\n"
258 "MUL R3.xy, R3, c[1];\n"
259 "TEX R0, R3, texture[1], 2D;\n"
260 "ADD R2, R2, -R1;\n"
261 "DP4 R0.x, R0, c[2];\n"
262 "MAD result.color, R0.x, R2, R1;\n"
263 "END\n"
264 ;
265
266static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY =
267 "!!ARBfp1.0\n"
268 "PARAM c[5] = { program.local[0..3],\n"
269 " { 1 } };\n"
270 "TEMP R0;\n"
271 "TEMP R1;\n"
272 "TEMP R2;\n"
273 "MUL R0.xy, fragment.position, c[3];\n"
274 "TEX R1, R0, texture[0], 2D;\n"
275 "ADD R0.x, -R1.w, c[4];\n"
276 "MUL R0.xyz, fragment.color.primary, R0.x;\n"
277 "MAD R0.xyz, fragment.color.primary, R1, R0;\n"
278 "ADD R0.w, -fragment.color.primary, c[4].x;\n"
279 "MAD R2.xyz, R1, R0.w, R0;\n"
280 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
281 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
282 "ADD R0.xy, fragment.position, c[0];\n"
283 "MUL R0.xy, R0, c[1];\n"
284 "TEX R0, R0, texture[1], 2D;\n"
285 "ADD R2, R2, -R1;\n"
286 "DP4 R0.x, R0, c[2];\n"
287 "MAD result.color, R0.x, R2, R1;\n"
288 "END\n"
289 ;
290
291static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN =
292 "!!ARBfp1.0\n"
293 "PARAM c[4] = { program.local[0..3] };\n"
294 "TEMP R0;\n"
295 "TEMP R1;\n"
296 "TEMP R2;\n"
297 "MUL R0.xy, fragment.position, c[3];\n"
298 "TEX R1, R0, texture[0], 2D;\n"
299 "ADD R0.xy, fragment.position, c[0];\n"
300 "ADD R2, fragment.color.primary, R1;\n"
301 "MUL R0.xy, R0, c[1];\n"
302 "MAD R2, -fragment.color.primary, R1, R2;\n"
303 "TEX R0, R0, texture[1], 2D;\n"
304 "ADD R2, R2, -R1;\n"
305 "DP4 R0.x, R0, c[2];\n"
306 "MAD result.color, R0.x, R2, R1;\n"
307 "END\n"
308 ;
309
310static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY =
311 "!!ARBfp1.0\n"
312 "PARAM c[5] = { program.local[0..3],\n"
313 " { 2, 1 } };\n"
314 "TEMP R0;\n"
315 "TEMP R1;\n"
316 "TEMP R2;\n"
317 "TEMP R3;\n"
318 "MUL R0.xy, fragment.position, c[3];\n"
319 "TEX R1, R0, texture[0], 2D;\n"
320 "ADD R0.w, -R1, c[4].y;\n"
321 "MUL R3.xyz, fragment.color.primary, R0.w;\n"
322 "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
323 "ADD R0.xyz, R1.w, -R1;\n"
324 "MUL R0.xyz, R0, R2;\n"
325 "MUL R0.xyz, R0, c[4].x;\n"
326 "MAD R0.xyz, fragment.color.primary.w, R1.w, -R0;\n"
327 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
328 "MUL R2.xyz, fragment.color.primary, R1;\n"
329 "MAD R2.xyz, R2, c[4].x, R3;\n"
330 "ADD R0.w, -fragment.color.primary, c[4].y;\n"
331 "MAD R3.xyz, R1, R0.w, R0;\n"
332 "MAD R2.xyz, R1, R0.w, R2;\n"
333 "MUL R0.xyz, R1, c[4].x;\n"
334 "SGE R0.xyz, R0, R1.w;\n"
335 "ADD R3.xyz, R3, -R2;\n"
336 "MAD R2.xyz, R0, R3, R2;\n"
337 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
338 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
339 "ADD R0.xy, fragment.position, c[0];\n"
340 "MUL R0.xy, R0, c[1];\n"
341 "TEX R0, R0, texture[1], 2D;\n"
342 "ADD R2, R2, -R1;\n"
343 "DP4 R0.x, R0, c[2];\n"
344 "MAD result.color, R0.x, R2, R1;\n"
345 "END\n"
346 ;
347
348static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN =
349 "!!ARBfp1.0\n"
350 "PARAM c[5] = { program.local[0..3],\n"
351 " { 1 } };\n"
352 "TEMP R0;\n"
353 "TEMP R1;\n"
354 "TEMP R2;\n"
355 "MUL R0.xy, fragment.position, c[3];\n"
356 "TEX R1, R0, texture[0], 2D;\n"
357 "MUL R2.xyz, R1, fragment.color.primary.w;\n"
358 "MUL R0.xyz, fragment.color.primary, R1.w;\n"
359 "MIN R0.xyz, R0, R2;\n"
360 "ADD R0.w, -R1, c[4].x;\n"
361 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
362 "ADD R0.w, -fragment.color.primary, c[4].x;\n"
363 "MAD R2.xyz, R1, R0.w, R0;\n"
364 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
365 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
366 "ADD R0.xy, fragment.position, c[0];\n"
367 "MUL R0.xy, R0, c[1];\n"
368 "TEX R0, R0, texture[1], 2D;\n"
369 "ADD R2, R2, -R1;\n"
370 "DP4 R0.x, R0, c[2];\n"
371 "MAD result.color, R0.x, R2, R1;\n"
372 "END\n"
373 ;
374
375static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN =
376 "!!ARBfp1.0\n"
377 "PARAM c[5] = { program.local[0..3],\n"
378 " { 1 } };\n"
379 "TEMP R0;\n"
380 "TEMP R1;\n"
381 "TEMP R2;\n"
382 "MUL R0.xy, fragment.position, c[3];\n"
383 "TEX R1, R0, texture[0], 2D;\n"
384 "MUL R2.xyz, R1, fragment.color.primary.w;\n"
385 "MUL R0.xyz, fragment.color.primary, R1.w;\n"
386 "MAX R0.xyz, R0, R2;\n"
387 "ADD R0.w, -R1, c[4].x;\n"
388 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
389 "ADD R0.w, -fragment.color.primary, c[4].x;\n"
390 "MAD R2.xyz, R1, R0.w, R0;\n"
391 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
392 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
393 "ADD R0.xy, fragment.position, c[0];\n"
394 "MUL R0.xy, R0, c[1];\n"
395 "TEX R0, R0, texture[1], 2D;\n"
396 "ADD R2, R2, -R1;\n"
397 "DP4 R0.x, R0, c[2];\n"
398 "MAD result.color, R0.x, R2, R1;\n"
399 "END\n"
400 ;
401
402static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE =
403 "!!ARBfp1.0\n"
404 "PARAM c[5] = { program.local[0..3],\n"
405 " { 1, 1e-06 } };\n"
406 "TEMP R0;\n"
407 "TEMP R1;\n"
408 "TEMP R2;\n"
409 "TEMP R3;\n"
410 "MUL R0.xy, fragment.position, c[3];\n"
411 "TEX R0, R0, texture[0], 2D;\n"
412 "ADD R1.y, -fragment.color.primary.w, c[4].x;\n"
413 "MAX R1.x, fragment.color.primary.w, c[4].y;\n"
414 "MUL R2.xyz, R0, R1.y;\n"
415 "ADD R1.w, -R0, c[4].x;\n"
416 "MAD R3.xyz, fragment.color.primary, R1.w, R2;\n"
417 "RCP R1.x, R1.x;\n"
418 "MAD R1.xyz, -fragment.color.primary, R1.x, c[4].x;\n"
419 "MAX R1.xyz, R1, c[4].y;\n"
420 "MUL R2.xyz, R0, fragment.color.primary.w;\n"
421 "MUL R1.w, fragment.color.primary, R0;\n"
422 "RCP R1.x, R1.x;\n"
423 "RCP R1.y, R1.y;\n"
424 "RCP R1.z, R1.z;\n"
425 "MAD R1.xyz, R2, R1, R3;\n"
426 "MAD R3.xyz, fragment.color.primary.w, R0.w, R3;\n"
427 "MAD R2.xyz, fragment.color.primary, R0.w, R2;\n"
428 "ADD R3.xyz, R3, -R1;\n"
429 "SGE R2.xyz, R2, R1.w;\n"
430 "MAD R2.xyz, R2, R3, R1;\n"
431 "ADD R1.z, fragment.color.primary.w, R0.w;\n"
432 "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
433 "ADD R1.xy, fragment.position, c[0];\n"
434 "MUL R1.xy, R1, c[1];\n"
435 "TEX R1, R1, texture[1], 2D;\n"
436 "ADD R2, R2, -R0;\n"
437 "DP4 R1.x, R1, c[2];\n"
438 "MAD result.color, R1.x, R2, R0;\n"
439 "END\n"
440 ;
441
442static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN =
443 "!!ARBfp1.0\n"
444 "PARAM c[5] = { program.local[0..3],\n"
445 " { 1, 9.9999997e-06 } };\n"
446 "TEMP R0;\n"
447 "TEMP R1;\n"
448 "TEMP R2;\n"
449 "TEMP R3;\n"
450 "TEMP R4;\n"
451 "MUL R0.xy, fragment.position, c[3];\n"
452 "TEX R0, R0, texture[0], 2D;\n"
453 "ADD R1.w, -R0, c[4].x;\n"
454 "MUL R1.xyz, R0, fragment.color.primary.w;\n"
455 "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
456 "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
457 "MUL R3.xyz, fragment.color.primary.w, R1;\n"
458 "MAX R1.xyz, fragment.color.primary, c[4].y;\n"
459 "MUL R4.xyz, fragment.color.primary, R1.w;\n"
460 "RCP R1.x, R1.x;\n"
461 "RCP R1.y, R1.y;\n"
462 "RCP R1.z, R1.z;\n"
463 "MAD R3.xyz, R3, R1, R4;\n"
464 "ADD R2.w, -fragment.color.primary, c[4].x;\n"
465 "MUL R1.xyz, R0, R2.w;\n"
466 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
467 "ADD R2.w, -fragment.color.primary, c[4].x;\n"
468 "MAD R3.xyz, R0, R2.w, R3;\n"
469 "MUL R1.w, fragment.color.primary, R0;\n"
470 "ADD R3.xyz, R3, -R1;\n"
471 "SGE R2.xyz, R2, R1.w;\n"
472 "MAD R2.xyz, R2, R3, R1;\n"
473 "ADD R1.z, fragment.color.primary.w, R0.w;\n"
474 "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
475 "ADD R1.xy, fragment.position, c[0];\n"
476 "MUL R1.xy, R1, c[1];\n"
477 "TEX R1, R1, texture[1], 2D;\n"
478 "ADD R2, R2, -R0;\n"
479 "DP4 R1.x, R1, c[2];\n"
480 "MAD result.color, R1.x, R2, R0;\n"
481 "END\n"
482 ;
483
484static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT =
485 "!!ARBfp1.0\n"
486 "PARAM c[5] = { program.local[0..3],\n"
487 " { 2, 1 } };\n"
488 "TEMP R0;\n"
489 "TEMP R1;\n"
490 "TEMP R2;\n"
491 "TEMP R3;\n"
492 "MUL R0.xy, fragment.position, c[3];\n"
493 "TEX R1, R0, texture[0], 2D;\n"
494 "ADD R0.w, -R1, c[4].y;\n"
495 "MUL R3.xyz, fragment.color.primary, R0.w;\n"
496 "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
497 "ADD R0.xyz, R1.w, -R1;\n"
498 "MUL R0.xyz, R0, R2;\n"
499 "MUL R0.xyz, R0, c[4].x;\n"
500 "MAD R0.xyz, fragment.color.primary.w, R1.w, -R0;\n"
501 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
502 "MUL R2.xyz, fragment.color.primary, R1;\n"
503 "MAD R2.xyz, R2, c[4].x, R3;\n"
504 "ADD R0.w, -fragment.color.primary, c[4].y;\n"
505 "MAD R3.xyz, R1, R0.w, R0;\n"
506 "MAD R2.xyz, R1, R0.w, R2;\n"
507 "MUL R0.xyz, fragment.color.primary, c[4].x;\n"
508 "SGE R0.xyz, R0, fragment.color.primary.w;\n"
509 "ADD R3.xyz, R3, -R2;\n"
510 "MAD R2.xyz, R0, R3, R2;\n"
511 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
512 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
513 "ADD R0.xy, fragment.position, c[0];\n"
514 "MUL R0.xy, R0, c[1];\n"
515 "TEX R0, R0, texture[1], 2D;\n"
516 "ADD R2, R2, -R1;\n"
517 "DP4 R0.x, R0, c[2];\n"
518 "MAD result.color, R0.x, R2, R1;\n"
519 "END\n"
520 ;
521
522static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT =
523 "!!ARBfp1.0\n"
524 "PARAM c[6] = { program.local[0..3],\n"
525 " { 1, 9.9999997e-06, 2, 8 },\n"
526 " { 3 } };\n"
527 "TEMP R0;\n"
528 "TEMP R1;\n"
529 "TEMP R2;\n"
530 "TEMP R3;\n"
531 "TEMP R4;\n"
532 "TEMP R5;\n"
533 "MUL R0.xy, fragment.position, c[3];\n"
534 "TEX R0, R0, texture[0], 2D;\n"
535 "MAX R1.x, R0.w, c[4].y;\n"
536 "RCP R1.w, R1.x;\n"
537 "MUL R2.xyz, R0, R1.w;\n"
538 "MUL R1.xyz, -R2, c[4].w;\n"
539 "RSQ R2.w, R2.x;\n"
540 "ADD R4.xyz, R1, c[5].x;\n"
541 "MAD R1.xyz, -R0, R1.w, c[4].x;\n"
542 "RSQ R2.z, R2.z;\n"
543 "RSQ R2.y, R2.y;\n"
544 "RCP R2.x, R2.w;\n"
545 "RCP R2.z, R2.z;\n"
546 "RCP R2.y, R2.y;\n"
547 "MAD R5.xyz, R2, R0.w, -R0;\n"
548 "MAD R2.xyz, fragment.color.primary, c[4].z, -fragment.color.primary.w;\n"
549 "MUL R3.xyz, R1, R2;\n"
550 "MAD R3.xyz, -R3, R4, fragment.color.primary.w;\n"
551 "MUL R4.xyz, R5, R2;\n"
552 "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n"
553 "MAD R5.xyz, R0, fragment.color.primary.w, R4;\n"
554 "MUL R3.xyz, R0, R3;\n"
555 "MUL R4.xyz, R0, c[4].w;\n"
556 "ADD R5.xyz, R5, -R3;\n"
557 "SGE R4.xyz, R4, R0.w;\n"
558 "MUL R4.xyz, R4, R5;\n"
559 "ADD R2.xyz, R3, R4;\n"
560 "MUL R1.xyz, R0, R1;\n"
561 "MUL R3.xyz, fragment.color.primary, c[4].z;\n"
562 "ADD R2.xyz, R2, -R1;\n"
563 "SGE R3.xyz, R3, fragment.color.primary.w;\n"
564 "MUL R2.xyz, R3, R2;\n"
565 "ADD R1.xyz, R1, R2;\n"
566 "ADD R1.w, -R0, c[4].x;\n"
567 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
568 "ADD R1.w, -fragment.color.primary, c[4].x;\n"
569 "MAD R2.xyz, R0, R1.w, R1;\n"
570 "ADD R1.z, fragment.color.primary.w, R0.w;\n"
571 "MAD R2.w, -fragment.color.primary, R0, R1.z;\n"
572 "ADD R1.xy, fragment.position, c[0];\n"
573 "MUL R1.xy, R1, c[1];\n"
574 "TEX R1, R1, texture[1], 2D;\n"
575 "ADD R2, R2, -R0;\n"
576 "DP4 R1.x, R1, c[2];\n"
577 "MAD result.color, R1.x, R2, R0;\n"
578 "END\n"
579 ;
580
581static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE =
582 "!!ARBfp1.0\n"
583 "PARAM c[5] = { program.local[0..3],\n"
584 " { 2 } };\n"
585 "TEMP R0;\n"
586 "TEMP R1;\n"
587 "TEMP R2;\n"
588 "TEMP R3;\n"
589 "MUL R0.xy, fragment.position, c[3];\n"
590 "TEX R1, R0, texture[0], 2D;\n"
591 "MUL R2.xyz, R1, fragment.color.primary.w;\n"
592 "MUL R0.xyz, fragment.color.primary, R1.w;\n"
593 "MIN R0.xyz, R0, R2;\n"
594 "ADD R3.xyz, fragment.color.primary, R1;\n"
595 "MAD R2.xyz, -R0, c[4].x, R3;\n"
596 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
597 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
598 "ADD R0.xy, fragment.position, c[0];\n"
599 "MUL R0.xy, R0, c[1];\n"
600 "TEX R0, R0, texture[1], 2D;\n"
601 "ADD R2, R2, -R1;\n"
602 "DP4 R0.x, R0, c[2];\n"
603 "MAD result.color, R0.x, R2, R1;\n"
604 "END\n"
605 ;
606
607static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION =
608 "!!ARBfp1.0\n"
609 "PARAM c[5] = { program.local[0..3],\n"
610 " { 1, 2 } };\n"
611 "TEMP R0;\n"
612 "TEMP R1;\n"
613 "TEMP R2;\n"
614 "MUL R0.xy, fragment.position, c[3];\n"
615 "TEX R1, R0, texture[0], 2D;\n"
616 "MUL R0.xyz, R1, fragment.color.primary.w;\n"
617 "MAD R2.xyz, fragment.color.primary, R1.w, R0;\n"
618 "MUL R0.xyz, fragment.color.primary, R1;\n"
619 "MAD R0.xyz, -R0, c[4].y, R2;\n"
620 "ADD R0.w, -R1, c[4].x;\n"
621 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
622 "ADD R0.w, -fragment.color.primary, c[4].x;\n"
623 "MAD R2.xyz, R1, R0.w, R0;\n"
624 "ADD R0.z, fragment.color.primary.w, R1.w;\n"
625 "MAD R2.w, -fragment.color.primary, R1, R0.z;\n"
626 "ADD R0.xy, fragment.position, c[0];\n"
627 "MUL R0.xy, R0, c[1];\n"
628 "TEX R0, R0, texture[1], 2D;\n"
629 "ADD R2, R2, -R1;\n"
630 "DP4 R0.x, R0, c[2];\n"
631 "MAD result.color, R0.x, R2, R1;\n"
632 "END\n"
633 ;
634
635static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
636 "!!ARBfp1.0\n"
637 "PARAM c[4] = { program.local[0],\n"
638 " { 1 },\n"
639 " program.local[2..3] };\n"
640 "TEMP R0;\n"
641 "TEMP R1;\n"
642 "TEMP R2;\n"
643 "MUL R0.xy, fragment.position, c[0];\n"
644 "TEX R0, R0, texture[0], 2D;\n"
645 "MUL R1.xyz, R0, c[3].y;\n"
646 "MUL R2.xyz, R1, fragment.color.primary.w;\n"
647 "MUL R1.xyz, fragment.color.primary, c[3].x;\n"
648 "MAD R2.xyz, R1, R0.w, R2;\n"
649 "MUL R0.xyz, R0, c[2].z;\n"
650 "ADD R1.w, -R0, c[1].x;\n"
651 "MUL R1.xyz, fragment.color.primary, c[2].y;\n"
652 "MAD R1.xyz, R1, R1.w, R2;\n"
653 "ADD R1.w, -fragment.color.primary, c[1].x;\n"
654 "MAD result.color.xyz, R0, R1.w, R1;\n"
655 "ADD R0.y, -R0.w, c[1].x;\n"
656 "MUL R0.x, fragment.color.primary.w, R0.w;\n"
657 "MUL R0.z, R0.w, R1.w;\n"
658 "MUL R0.y, fragment.color.primary.w, R0;\n"
659 "DP3 result.color.w, R0, c[2];\n"
660 "END\n"
661 ;
662
663static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK =
664 "!!ARBfp1.0\n"
665 "PARAM c[2] = { program.local[0],\n"
666 " { 1 } };\n"
667 "TEMP R0;\n"
668 "TEMP R1;\n"
669 "TEMP R2;\n"
670 "MUL R0.xy, fragment.position, c[0];\n"
671 "TEX R0, R0, texture[0], 2D;\n"
672 "ADD R1.x, -R0.w, c[1];\n"
673 "MUL R1.xyz, fragment.color.primary, R1.x;\n"
674 "ADD R1.w, fragment.color.primary, R0;\n"
675 "MAD R1.xyz, fragment.color.primary, R0, R1;\n"
676 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
677 "MAD result.color.xyz, R0, R2.x, R1;\n"
678 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
679 "END\n"
680 ;
681
682static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK =
683 "!!ARBfp1.0\n"
684 "PARAM c[1] = { program.local[0] };\n"
685 "TEMP R0;\n"
686 "TEMP R1;\n"
687 "MUL R0.xy, fragment.position, c[0];\n"
688 "TEX R0, R0, texture[0], 2D;\n"
689 "ADD R1, fragment.color.primary, R0;\n"
690 "MAD result.color, -fragment.color.primary, R0, R1;\n"
691 "END\n"
692 ;
693
694static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK =
695 "!!ARBfp1.0\n"
696 "PARAM c[2] = { program.local[0],\n"
697 " { 2, 1 } };\n"
698 "TEMP R0;\n"
699 "TEMP R1;\n"
700 "TEMP R2;\n"
701 "TEMP R3;\n"
702 "MUL R0.xy, fragment.position, c[0];\n"
703 "TEX R0, R0, texture[0], 2D;\n"
704 "ADD R1.w, -R0, c[1].y;\n"
705 "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
706 "ADD R1.xyz, R0.w, -R0;\n"
707 "MUL R1.xyz, R1, R2;\n"
708 "MUL R1.xyz, R1, c[1].x;\n"
709 "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n"
710 "MUL R3.xyz, fragment.color.primary, R1.w;\n"
711 "MUL R2.xyz, fragment.color.primary, R0;\n"
712 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
713 "ADD R1.w, -fragment.color.primary, c[1].y;\n"
714 "MAD R2.xyz, R2, c[1].x, R3;\n"
715 "MAD R2.xyz, R0, R1.w, R2;\n"
716 "MAD R1.xyz, R0, R1.w, R1;\n"
717 "MUL R0.xyz, R0, c[1].x;\n"
718 "ADD R1.w, fragment.color.primary, R0;\n"
719 "ADD R1.xyz, R1, -R2;\n"
720 "SGE R0.xyz, R0, R0.w;\n"
721 "MAD result.color.xyz, R0, R1, R2;\n"
722 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
723 "END\n"
724 ;
725
726static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK =
727 "!!ARBfp1.0\n"
728 "PARAM c[2] = { program.local[0],\n"
729 " { 1 } };\n"
730 "TEMP R0;\n"
731 "TEMP R1;\n"
732 "TEMP R2;\n"
733 "MUL R0.xy, fragment.position, c[0];\n"
734 "TEX R0, R0, texture[0], 2D;\n"
735 "MUL R2.xyz, R0, fragment.color.primary.w;\n"
736 "MUL R1.xyz, fragment.color.primary, R0.w;\n"
737 "MIN R1.xyz, R1, R2;\n"
738 "ADD R1.w, -R0, c[1].x;\n"
739 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
740 "ADD R1.w, fragment.color.primary, R0;\n"
741 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
742 "MAD result.color.xyz, R0, R2.x, R1;\n"
743 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
744 "END\n"
745 ;
746
747static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK =
748 "!!ARBfp1.0\n"
749 "PARAM c[2] = { program.local[0],\n"
750 " { 1 } };\n"
751 "TEMP R0;\n"
752 "TEMP R1;\n"
753 "TEMP R2;\n"
754 "MUL R0.xy, fragment.position, c[0];\n"
755 "TEX R0, R0, texture[0], 2D;\n"
756 "MUL R2.xyz, R0, fragment.color.primary.w;\n"
757 "MUL R1.xyz, fragment.color.primary, R0.w;\n"
758 "MAX R1.xyz, R1, R2;\n"
759 "ADD R1.w, -R0, c[1].x;\n"
760 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
761 "ADD R1.w, fragment.color.primary, R0;\n"
762 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
763 "MAD result.color.xyz, R0, R2.x, R1;\n"
764 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
765 "END\n"
766 ;
767
768static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK =
769 "!!ARBfp1.0\n"
770 "PARAM c[2] = { program.local[0],\n"
771 " { 1, 1e-06 } };\n"
772 "TEMP R0;\n"
773 "TEMP R1;\n"
774 "TEMP R2;\n"
775 "MAX R1.y, fragment.color.primary.w, c[1];\n"
776 "RCP R2.x, R1.y;\n"
777 "MUL R0.xy, fragment.position, c[0];\n"
778 "TEX R0, R0, texture[0], 2D;\n"
779 "ADD R1.x, -fragment.color.primary.w, c[1];\n"
780 "MUL R1.xyz, R0, R1.x;\n"
781 "ADD R1.w, -R0, c[1].x;\n"
782 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
783 "MAD R2.xyz, -fragment.color.primary, R2.x, c[1].x;\n"
784 "MAX R2.xyz, R2, c[1].y;\n"
785 "MUL R0.xyz, R0, fragment.color.primary.w;\n"
786 "MUL R1.w, fragment.color.primary, R0;\n"
787 "RCP R2.x, R2.x;\n"
788 "RCP R2.y, R2.y;\n"
789 "RCP R2.z, R2.z;\n"
790 "MAD R2.xyz, R0, R2, R1;\n"
791 "MAD R1.xyz, fragment.color.primary.w, R0.w, R1;\n"
792 "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n"
793 "SGE R0.xyz, R0, R1.w;\n"
794 "ADD R1.xyz, R1, -R2;\n"
795 "ADD R1.w, fragment.color.primary, R0;\n"
796 "MAD result.color.xyz, R0, R1, R2;\n"
797 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
798 "END\n"
799 ;
800
801static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK =
802 "!!ARBfp1.0\n"
803 "PARAM c[2] = { program.local[0],\n"
804 " { 1, 9.9999997e-06 } };\n"
805 "TEMP R0;\n"
806 "TEMP R1;\n"
807 "TEMP R2;\n"
808 "TEMP R3;\n"
809 "TEMP R4;\n"
810 "MUL R0.xy, fragment.position, c[0];\n"
811 "TEX R0, R0, texture[0], 2D;\n"
812 "MUL R1.xyz, R0, fragment.color.primary.w;\n"
813 "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
814 "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n"
815 "MUL R3.xyz, fragment.color.primary.w, R1;\n"
816 "MAX R1.xyz, fragment.color.primary, c[1].y;\n"
817 "ADD R1.w, -R0, c[1].x;\n"
818 "MUL R4.xyz, fragment.color.primary, R1.w;\n"
819 "ADD R2.w, -fragment.color.primary, c[1].x;\n"
820 "RCP R1.x, R1.x;\n"
821 "RCP R1.y, R1.y;\n"
822 "RCP R1.z, R1.z;\n"
823 "MAD R1.xyz, R3, R1, R4;\n"
824 "MUL R3.xyz, R0, R2.w;\n"
825 "ADD R2.w, -fragment.color.primary, c[1].x;\n"
826 "MAD R0.xyz, R0, R2.w, R1;\n"
827 "MAD R1.xyz, fragment.color.primary, R1.w, R3;\n"
828 "MUL R1.w, fragment.color.primary, R0;\n"
829 "SGE R2.xyz, R2, R1.w;\n"
830 "ADD R0.xyz, R0, -R1;\n"
831 "ADD R1.w, fragment.color.primary, R0;\n"
832 "MAD result.color.xyz, R2, R0, R1;\n"
833 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
834 "END\n"
835 ;
836
837static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK =
838 "!!ARBfp1.0\n"
839 "PARAM c[2] = { program.local[0],\n"
840 " { 2, 1 } };\n"
841 "TEMP R0;\n"
842 "TEMP R1;\n"
843 "TEMP R2;\n"
844 "TEMP R3;\n"
845 "MUL R0.xy, fragment.position, c[0];\n"
846 "TEX R0, R0, texture[0], 2D;\n"
847 "ADD R1.w, -R0, c[1].y;\n"
848 "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n"
849 "ADD R1.xyz, R0.w, -R0;\n"
850 "MUL R1.xyz, R1, R2;\n"
851 "MUL R1.xyz, R1, c[1].x;\n"
852 "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n"
853 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
854 "MUL R3.xyz, fragment.color.primary, R1.w;\n"
855 "MUL R2.xyz, fragment.color.primary, R0;\n"
856 "ADD R1.w, -fragment.color.primary, c[1].y;\n"
857 "MAD R2.xyz, R2, c[1].x, R3;\n"
858 "MAD R2.xyz, R0, R1.w, R2;\n"
859 "MAD R0.xyz, R0, R1.w, R1;\n"
860 "ADD R1.xyz, R0, -R2;\n"
861 "MUL R0.xyz, fragment.color.primary, c[1].x;\n"
862 "ADD R1.w, fragment.color.primary, R0;\n"
863 "SGE R0.xyz, R0, fragment.color.primary.w;\n"
864 "MAD result.color.xyz, R0, R1, R2;\n"
865 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
866 "END\n"
867 ;
868
869static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
870 "!!ARBfp1.0\n"
871 "PARAM c[3] = { program.local[0],\n"
872 " { 1, 9.9999997e-06, 2, 8 },\n"
873 " { 3 } };\n"
874 "TEMP R0;\n"
875 "TEMP R1;\n"
876 "TEMP R2;\n"
877 "TEMP R3;\n"
878 "TEMP R4;\n"
879 "TEMP R5;\n"
880 "MUL R0.xy, fragment.position, c[0];\n"
881 "TEX R0, R0, texture[0], 2D;\n"
882 "MAX R1.x, R0.w, c[1].y;\n"
883 "RCP R1.w, R1.x;\n"
884 "MUL R2.xyz, R0, R1.w;\n"
885 "MUL R1.xyz, -R2, c[1].w;\n"
886 "ADD R4.xyz, R1, c[2].x;\n"
887 "MAD R1.xyz, -R0, R1.w, c[1].x;\n"
888 "RSQ R2.w, R2.x;\n"
889 "RSQ R2.z, R2.z;\n"
890 "RSQ R2.y, R2.y;\n"
891 "RCP R2.x, R2.w;\n"
892 "RCP R2.z, R2.z;\n"
893 "RCP R2.y, R2.y;\n"
894 "MAD R5.xyz, R2, R0.w, -R0;\n"
895 "MAD R2.xyz, fragment.color.primary, c[1].z, -fragment.color.primary.w;\n"
896 "MUL R3.xyz, R1, R2;\n"
897 "MAD R3.xyz, -R3, R4, fragment.color.primary.w;\n"
898 "MUL R4.xyz, R5, R2;\n"
899 "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n"
900 "MAD R5.xyz, R0, fragment.color.primary.w, R4;\n"
901 "MUL R3.xyz, R0, R3;\n"
902 "MUL R4.xyz, R0, c[1].w;\n"
903 "ADD R5.xyz, R5, -R3;\n"
904 "SGE R4.xyz, R4, R0.w;\n"
905 "MUL R4.xyz, R4, R5;\n"
906 "ADD R2.xyz, R3, R4;\n"
907 "MUL R1.xyz, R0, R1;\n"
908 "MUL R3.xyz, fragment.color.primary, c[1].z;\n"
909 "ADD R2.xyz, R2, -R1;\n"
910 "SGE R3.xyz, R3, fragment.color.primary.w;\n"
911 "MUL R2.xyz, R3, R2;\n"
912 "ADD R1.xyz, R1, R2;\n"
913 "ADD R1.w, -R0, c[1].x;\n"
914 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
915 "ADD R1.w, fragment.color.primary, R0;\n"
916 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
917 "MAD result.color.xyz, R0, R2.x, R1;\n"
918 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
919 "END\n"
920 ;
921
922static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK =
923 "!!ARBfp1.0\n"
924 "PARAM c[2] = { program.local[0],\n"
925 " { 2 } };\n"
926 "TEMP R0;\n"
927 "TEMP R1;\n"
928 "TEMP R2;\n"
929 "MUL R0.xy, fragment.position, c[0];\n"
930 "TEX R0, R0, texture[0], 2D;\n"
931 "MUL R2.xyz, R0, fragment.color.primary.w;\n"
932 "MUL R1.xyz, fragment.color.primary, R0.w;\n"
933 "ADD R1.w, fragment.color.primary, R0;\n"
934 "MIN R1.xyz, R1, R2;\n"
935 "ADD R0.xyz, fragment.color.primary, R0;\n"
936 "MAD result.color.xyz, -R1, c[1].x, R0;\n"
937 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
938 "END\n"
939 ;
940
941static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK =
942 "!!ARBfp1.0\n"
943 "PARAM c[2] = { program.local[0],\n"
944 " { 1, 2 } };\n"
945 "TEMP R0;\n"
946 "TEMP R1;\n"
947 "TEMP R2;\n"
948 "MUL R0.xy, fragment.position, c[0];\n"
949 "TEX R0, R0, texture[0], 2D;\n"
950 "MUL R1.xyz, R0, fragment.color.primary.w;\n"
951 "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n"
952 "MUL R1.xyz, fragment.color.primary, R0;\n"
953 "MAD R1.xyz, -R1, c[1].y, R2;\n"
954 "ADD R1.w, -R0, c[1].x;\n"
955 "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n"
956 "ADD R1.w, fragment.color.primary, R0;\n"
957 "ADD R2.x, -fragment.color.primary.w, c[1];\n"
958 "MAD result.color.xyz, R0, R2.x, R1;\n"
959 "MAD result.color.w, -fragment.color.primary, R0, R1;\n"
960 "END\n"
961 ;
962
963static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK =
964 "!!ARBfp1.0\n"
965 "PARAM c[3] = { program.local[0..2] };\n"
966 "TEMP R0;\n"
967 "ADD R0.xy, fragment.position, c[0];\n"
968 "MUL R0.xy, R0, c[1];\n"
969 "TEX R0, R0, texture[0], 2D;\n"
970 "DP4 R0.x, R0, c[2];\n"
971 "MUL result.color, fragment.color.primary, R0.x;\n"
972 "END\n"
973 ;
974
975static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK =
976 "!!ARBfp1.0\n"
977 "PARAM c[1] = { program.local[0] };\n"
978 "MOV result.color, fragment.color.primary;\n"
979 "END\n"
980 ;
981
982static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
983 "!!ARBfp1.0\n"
984 "PARAM c[12] = { program.local[0..6],\n"
985 " { 2, 4, 1 },\n"
986 " program.local[8..11] };\n"
987 "TEMP R0;\n"
988 "TEMP R1;\n"
989 "TEMP R2;\n"
990 "TEMP R3;\n"
991 "MUL R0.xyz, fragment.position.y, c[4];\n"
992 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
993 "ADD R0.xyz, R0, c[5];\n"
994 "RCP R0.z, R0.z;\n"
995 "MUL R0.xy, R0, R0.z;\n"
996 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
997 "ADD R0.z, R0, R0.w;\n"
998 "MUL R0.xy, R0, c[6];\n"
999 "ADD R0.x, R0, R0.y;\n"
1000 "MUL R0.z, c[8].x, -R0;\n"
1001 "MUL R0.y, R0.z, c[7];\n"
1002 "MUL R0.x, R0, c[7];\n"
1003 "MAD R0.y, R0.x, R0.x, -R0;\n"
1004 "RSQ R0.z, R0.y;\n"
1005 "RCP R0.z, R0.z;\n"
1006 "ADD R0.x, -R0, R0.z;\n"
1007 "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
1008 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1009 "MOV R0.y, c[7].x;\n"
1010 "MUL R0.y, c[8].x, R0;\n"
1011 "RCP R0.y, R0.y;\n"
1012 "MUL R0.x, R0, R0.y;\n"
1013 "TEX R0, R0, texture[2], 1D;\n"
1014 "MUL R2.xyz, R1, c[11].y;\n"
1015 "MUL R3.xyz, R2, R0.w;\n"
1016 "MUL R2.xyz, R0, c[11].x;\n"
1017 "MAD R2.xyz, R2, R1.w, R3;\n"
1018 "ADD R3.xy, fragment.position, c[0];\n"
1019 "ADD R2.w, -R1, c[7].z;\n"
1020 "MUL R0.xyz, R0, c[10].y;\n"
1021 "MAD R2.xyz, R0, R2.w, R2;\n"
1022 "MUL R0.xyz, R1, c[10].z;\n"
1023 "ADD R3.z, -R0.w, c[7];\n"
1024 "MAD R2.xyz, R0, R3.z, R2;\n"
1025 "MUL R0.y, R0.w, R2.w;\n"
1026 "MUL R0.x, R0.w, R1.w;\n"
1027 "MUL R0.z, R1.w, R3;\n"
1028 "DP3 R2.w, R0, c[10];\n"
1029 "MUL R3.xy, R3, c[1];\n"
1030 "TEX R0, R3, texture[1], 2D;\n"
1031 "ADD R2, R2, -R1;\n"
1032 "DP4 R0.x, R0, c[2];\n"
1033 "MAD result.color, R0.x, R2, R1;\n"
1034 "END\n"
1035 ;
1036
1037static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY =
1038 "!!ARBfp1.0\n"
1039 "PARAM c[10] = { program.local[0..6],\n"
1040 " { 2, 4, 1 },\n"
1041 " program.local[8..9] };\n"
1042 "TEMP R0;\n"
1043 "TEMP R1;\n"
1044 "TEMP R2;\n"
1045 "MUL R0.xyz, fragment.position.y, c[4];\n"
1046 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1047 "ADD R0.xyz, R0, c[5];\n"
1048 "RCP R0.z, R0.z;\n"
1049 "MUL R0.xy, R0, R0.z;\n"
1050 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1051 "MUL R0.xy, R0, c[6];\n"
1052 "ADD R0.z, R0, R0.w;\n"
1053 "ADD R0.x, R0, R0.y;\n"
1054 "MUL R0.z, c[8].x, -R0;\n"
1055 "MUL R0.y, R0.z, c[7];\n"
1056 "MUL R0.x, R0, c[7];\n"
1057 "MAD R0.y, R0.x, R0.x, -R0;\n"
1058 "RSQ R0.y, R0.y;\n"
1059 "RCP R0.z, R0.y;\n"
1060 "ADD R0.x, -R0, R0.z;\n"
1061 "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
1062 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1063 "MOV R0.y, c[7].x;\n"
1064 "MUL R0.y, c[8].x, R0;\n"
1065 "RCP R0.y, R0.y;\n"
1066 "MUL R0.x, R0, R0.y;\n"
1067 "TEX R0, R0, texture[2], 1D;\n"
1068 "ADD R2.x, -R1.w, c[7].z;\n"
1069 "MUL R2.xyz, R0, R2.x;\n"
1070 "MAD R0.xyz, R0, R1, R2;\n"
1071 "ADD R2.x, -R0.w, c[7].z;\n"
1072 "MAD R2.xyz, R1, R2.x, R0;\n"
1073 "ADD R0.z, R0.w, R1.w;\n"
1074 "MAD R2.w, -R0, R1, R0.z;\n"
1075 "ADD R0.xy, fragment.position, c[0];\n"
1076 "MUL R0.xy, R0, c[1];\n"
1077 "TEX R0, R0, texture[1], 2D;\n"
1078 "ADD R2, R2, -R1;\n"
1079 "DP4 R0.x, R0, c[2];\n"
1080 "MAD result.color, R0.x, R2, R1;\n"
1081 "END\n"
1082 ;
1083
1084static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN =
1085 "!!ARBfp1.0\n"
1086 "PARAM c[10] = { program.local[0..6],\n"
1087 " { 2, 4 },\n"
1088 " program.local[8..9] };\n"
1089 "TEMP R0;\n"
1090 "TEMP R1;\n"
1091 "TEMP R2;\n"
1092 "TEMP R3;\n"
1093 "MUL R0.xyz, fragment.position.y, c[4];\n"
1094 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1095 "ADD R0.xyz, R0, c[5];\n"
1096 "RCP R0.z, R0.z;\n"
1097 "MUL R0.xy, R0, R0.z;\n"
1098 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1099 "MUL R0.xy, R0, c[6];\n"
1100 "ADD R0.z, R0, R0.w;\n"
1101 "ADD R0.x, R0, R0.y;\n"
1102 "MUL R0.z, c[8].x, -R0;\n"
1103 "MUL R0.y, R0.z, c[7];\n"
1104 "MUL R0.x, R0, c[7];\n"
1105 "MAD R0.y, R0.x, R0.x, -R0;\n"
1106 "MOV R0.z, c[7].x;\n"
1107 "RSQ R0.y, R0.y;\n"
1108 "RCP R0.y, R0.y;\n"
1109 "MUL R0.z, c[8].x, R0;\n"
1110 "MUL R1.xy, fragment.position, c[9];\n"
1111 "ADD R3.xy, fragment.position, c[0];\n"
1112 "TEX R1, R1, texture[0], 2D;\n"
1113 "ADD R0.x, -R0, R0.y;\n"
1114 "RCP R0.z, R0.z;\n"
1115 "MUL R0.x, R0, R0.z;\n"
1116 "TEX R0, R0, texture[2], 1D;\n"
1117 "ADD R2, R0, R1;\n"
1118 "MAD R2, -R0, R1, R2;\n"
1119 "MUL R3.xy, R3, c[1];\n"
1120 "TEX R0, R3, texture[1], 2D;\n"
1121 "ADD R2, R2, -R1;\n"
1122 "DP4 R0.x, R0, c[2];\n"
1123 "MAD result.color, R0.x, R2, R1;\n"
1124 "END\n"
1125 ;
1126
1127static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY =
1128 "!!ARBfp1.0\n"
1129 "PARAM c[10] = { program.local[0..6],\n"
1130 " { 2, 4, 1 },\n"
1131 " program.local[8..9] };\n"
1132 "TEMP R0;\n"
1133 "TEMP R1;\n"
1134 "TEMP R2;\n"
1135 "TEMP R3;\n"
1136 "TEMP R4;\n"
1137 "MUL R0.xyz, fragment.position.y, c[4];\n"
1138 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1139 "ADD R0.xyz, R0, c[5];\n"
1140 "RCP R0.z, R0.z;\n"
1141 "MUL R0.xy, R0, R0.z;\n"
1142 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1143 "MUL R0.xy, R0, c[6];\n"
1144 "ADD R0.z, R0, R0.w;\n"
1145 "ADD R0.x, R0, R0.y;\n"
1146 "MUL R0.z, c[8].x, -R0;\n"
1147 "MUL R0.y, R0.z, c[7];\n"
1148 "MUL R0.x, R0, c[7];\n"
1149 "MAD R0.y, R0.x, R0.x, -R0;\n"
1150 "MOV R0.z, c[7].x;\n"
1151 "RSQ R0.y, R0.y;\n"
1152 "RCP R0.y, R0.y;\n"
1153 "MUL R0.z, c[8].x, R0;\n"
1154 "MUL R1.xy, fragment.position, c[9];\n"
1155 "TEX R1, R1, texture[0], 2D;\n"
1156 "ADD R0.x, -R0, R0.y;\n"
1157 "RCP R0.z, R0.z;\n"
1158 "MUL R0.x, R0, R0.z;\n"
1159 "TEX R0, R0, texture[2], 1D;\n"
1160 "ADD R2.w, -R1, c[7].z;\n"
1161 "ADD R3.xyz, R0.w, -R0;\n"
1162 "ADD R2.xyz, R1.w, -R1;\n"
1163 "MUL R2.xyz, R2, R3;\n"
1164 "MUL R2.xyz, R2, c[7].x;\n"
1165 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
1166 "MUL R4.xyz, R0, R2.w;\n"
1167 "MUL R3.xyz, R0, R1;\n"
1168 "MAD R0.xyz, R0, R2.w, R2;\n"
1169 "ADD R2.x, -R0.w, c[7].z;\n"
1170 "MAD R3.xyz, R3, c[7].x, R4;\n"
1171 "MAD R3.xyz, R1, R2.x, R3;\n"
1172 "MAD R0.xyz, R1, R2.x, R0;\n"
1173 "MUL R2.xyz, R1, c[7].x;\n"
1174 "ADD R0.xyz, R0, -R3;\n"
1175 "SGE R2.xyz, R2, R1.w;\n"
1176 "MAD R2.xyz, R2, R0, R3;\n"
1177 "ADD R0.z, R0.w, R1.w;\n"
1178 "MAD R2.w, -R0, R1, R0.z;\n"
1179 "ADD R0.xy, fragment.position, c[0];\n"
1180 "MUL R0.xy, R0, c[1];\n"
1181 "TEX R0, R0, texture[1], 2D;\n"
1182 "ADD R2, R2, -R1;\n"
1183 "DP4 R0.x, R0, c[2];\n"
1184 "MAD result.color, R0.x, R2, R1;\n"
1185 "END\n"
1186 ;
1187
1188static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN =
1189 "!!ARBfp1.0\n"
1190 "PARAM c[10] = { program.local[0..6],\n"
1191 " { 2, 4, 1 },\n"
1192 " program.local[8..9] };\n"
1193 "TEMP R0;\n"
1194 "TEMP R1;\n"
1195 "TEMP R2;\n"
1196 "TEMP R3;\n"
1197 "MUL R0.xyz, fragment.position.y, c[4];\n"
1198 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1199 "ADD R0.xyz, R0, c[5];\n"
1200 "RCP R0.z, R0.z;\n"
1201 "MUL R0.xy, R0, R0.z;\n"
1202 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1203 "MUL R0.xy, R0, c[6];\n"
1204 "ADD R0.z, R0, R0.w;\n"
1205 "ADD R0.x, R0, R0.y;\n"
1206 "MUL R0.z, c[8].x, -R0;\n"
1207 "MUL R0.y, R0.z, c[7];\n"
1208 "MUL R0.x, R0, c[7];\n"
1209 "MAD R0.y, R0.x, R0.x, -R0;\n"
1210 "MOV R0.z, c[7].x;\n"
1211 "RSQ R0.y, R0.y;\n"
1212 "RCP R0.y, R0.y;\n"
1213 "MUL R0.z, c[8].x, R0;\n"
1214 "MUL R1.xy, fragment.position, c[9];\n"
1215 "TEX R1, R1, texture[0], 2D;\n"
1216 "ADD R0.x, -R0, R0.y;\n"
1217 "RCP R0.z, R0.z;\n"
1218 "MUL R0.x, R0, R0.z;\n"
1219 "TEX R0, R0, texture[2], 1D;\n"
1220 "MUL R3.xyz, R1, R0.w;\n"
1221 "MUL R2.xyz, R0, R1.w;\n"
1222 "MIN R2.xyz, R2, R3;\n"
1223 "ADD R2.w, -R1, c[7].z;\n"
1224 "MAD R0.xyz, R0, R2.w, R2;\n"
1225 "ADD R2.x, -R0.w, c[7].z;\n"
1226 "MAD R2.xyz, R1, R2.x, R0;\n"
1227 "ADD R0.z, R0.w, R1.w;\n"
1228 "MAD R2.w, -R0, R1, R0.z;\n"
1229 "ADD R0.xy, fragment.position, c[0];\n"
1230 "MUL R0.xy, R0, c[1];\n"
1231 "TEX R0, R0, texture[1], 2D;\n"
1232 "ADD R2, R2, -R1;\n"
1233 "DP4 R0.x, R0, c[2];\n"
1234 "MAD result.color, R0.x, R2, R1;\n"
1235 "END\n"
1236 ;
1237
1238static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN =
1239 "!!ARBfp1.0\n"
1240 "PARAM c[10] = { program.local[0..6],\n"
1241 " { 2, 4, 1 },\n"
1242 " program.local[8..9] };\n"
1243 "TEMP R0;\n"
1244 "TEMP R1;\n"
1245 "TEMP R2;\n"
1246 "TEMP R3;\n"
1247 "MUL R0.xyz, fragment.position.y, c[4];\n"
1248 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1249 "ADD R0.xyz, R0, c[5];\n"
1250 "RCP R0.z, R0.z;\n"
1251 "MUL R0.xy, R0, R0.z;\n"
1252 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1253 "MUL R0.xy, R0, c[6];\n"
1254 "ADD R0.z, R0, R0.w;\n"
1255 "ADD R0.x, R0, R0.y;\n"
1256 "MUL R0.z, c[8].x, -R0;\n"
1257 "MUL R0.y, R0.z, c[7];\n"
1258 "MUL R0.x, R0, c[7];\n"
1259 "MAD R0.y, R0.x, R0.x, -R0;\n"
1260 "MOV R0.z, c[7].x;\n"
1261 "RSQ R0.y, R0.y;\n"
1262 "RCP R0.y, R0.y;\n"
1263 "MUL R0.z, c[8].x, R0;\n"
1264 "MUL R1.xy, fragment.position, c[9];\n"
1265 "TEX R1, R1, texture[0], 2D;\n"
1266 "ADD R0.x, -R0, R0.y;\n"
1267 "RCP R0.z, R0.z;\n"
1268 "MUL R0.x, R0, R0.z;\n"
1269 "TEX R0, R0, texture[2], 1D;\n"
1270 "MUL R3.xyz, R1, R0.w;\n"
1271 "MUL R2.xyz, R0, R1.w;\n"
1272 "MAX R2.xyz, R2, R3;\n"
1273 "ADD R2.w, -R1, c[7].z;\n"
1274 "MAD R0.xyz, R0, R2.w, R2;\n"
1275 "ADD R2.x, -R0.w, c[7].z;\n"
1276 "MAD R2.xyz, R1, R2.x, R0;\n"
1277 "ADD R0.z, R0.w, R1.w;\n"
1278 "MAD R2.w, -R0, R1, R0.z;\n"
1279 "ADD R0.xy, fragment.position, c[0];\n"
1280 "MUL R0.xy, R0, c[1];\n"
1281 "TEX R0, R0, texture[1], 2D;\n"
1282 "ADD R2, R2, -R1;\n"
1283 "DP4 R0.x, R0, c[2];\n"
1284 "MAD result.color, R0.x, R2, R1;\n"
1285 "END\n"
1286 ;
1287
1288static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE =
1289 "!!ARBfp1.0\n"
1290 "PARAM c[10] = { program.local[0..6],\n"
1291 " { 2, 4, 1, 1e-06 },\n"
1292 " program.local[8..9] };\n"
1293 "TEMP R0;\n"
1294 "TEMP R1;\n"
1295 "TEMP R2;\n"
1296 "TEMP R3;\n"
1297 "TEMP R4;\n"
1298 "MUL R0.xyz, fragment.position.y, c[4];\n"
1299 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1300 "ADD R0.xyz, R0, c[5];\n"
1301 "RCP R0.z, R0.z;\n"
1302 "MUL R0.xy, R0, R0.z;\n"
1303 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1304 "MUL R0.xy, R0, c[6];\n"
1305 "ADD R0.z, R0, R0.w;\n"
1306 "ADD R0.x, R0, R0.y;\n"
1307 "MUL R0.z, c[8].x, -R0;\n"
1308 "MUL R0.y, R0.z, c[7];\n"
1309 "MUL R0.x, R0, c[7];\n"
1310 "MAD R0.y, R0.x, R0.x, -R0;\n"
1311 "MOV R0.z, c[7].x;\n"
1312 "RSQ R0.y, R0.y;\n"
1313 "RCP R0.y, R0.y;\n"
1314 "MUL R0.z, c[8].x, R0;\n"
1315 "ADD R0.x, -R0, R0.y;\n"
1316 "RCP R0.z, R0.z;\n"
1317 "MUL R0.x, R0, R0.z;\n"
1318 "TEX R0, R0, texture[2], 1D;\n"
1319 "MAX R1.x, R0.w, c[7].w;\n"
1320 "RCP R1.x, R1.x;\n"
1321 "MAD R1.xyz, -R0, R1.x, c[7].z;\n"
1322 "MAX R2.xyz, R1, c[7].w;\n"
1323 "MUL R1.xy, fragment.position, c[9];\n"
1324 "TEX R1, R1, texture[0], 2D;\n"
1325 "ADD R2.w, -R0, c[7].z;\n"
1326 "MUL R3.xyz, R1, R2.w;\n"
1327 "ADD R2.w, -R1, c[7].z;\n"
1328 "MAD R4.xyz, R0, R2.w, R3;\n"
1329 "MUL R3.xyz, R1, R0.w;\n"
1330 "MUL R2.w, R0, R1;\n"
1331 "MAD R0.xyz, R0, R1.w, R3;\n"
1332 "SGE R0.xyz, R0, R2.w;\n"
1333 "RCP R2.x, R2.x;\n"
1334 "RCP R2.y, R2.y;\n"
1335 "RCP R2.z, R2.z;\n"
1336 "MAD R2.xyz, R3, R2, R4;\n"
1337 "MAD R4.xyz, R0.w, R1.w, R4;\n"
1338 "ADD R4.xyz, R4, -R2;\n"
1339 "MAD R2.xyz, R0, R4, R2;\n"
1340 "ADD R0.z, R0.w, R1.w;\n"
1341 "MAD R2.w, -R0, R1, R0.z;\n"
1342 "ADD R0.xy, fragment.position, c[0];\n"
1343 "MUL R0.xy, R0, c[1];\n"
1344 "TEX R0, R0, texture[1], 2D;\n"
1345 "ADD R2, R2, -R1;\n"
1346 "DP4 R0.x, R0, c[2];\n"
1347 "MAD result.color, R0.x, R2, R1;\n"
1348 "END\n"
1349 ;
1350
1351static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN =
1352 "!!ARBfp1.0\n"
1353 "PARAM c[10] = { program.local[0..6],\n"
1354 " { 2, 4, 1, 9.9999997e-06 },\n"
1355 " program.local[8..9] };\n"
1356 "TEMP R0;\n"
1357 "TEMP R1;\n"
1358 "TEMP R2;\n"
1359 "TEMP R3;\n"
1360 "TEMP R4;\n"
1361 "TEMP R5;\n"
1362 "MUL R0.xyz, fragment.position.y, c[4];\n"
1363 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1364 "ADD R0.xyz, R0, c[5];\n"
1365 "RCP R0.z, R0.z;\n"
1366 "MUL R0.xy, R0, R0.z;\n"
1367 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1368 "MUL R0.xy, R0, c[6];\n"
1369 "ADD R0.z, R0, R0.w;\n"
1370 "ADD R0.x, R0, R0.y;\n"
1371 "MUL R0.z, c[8].x, -R0;\n"
1372 "MUL R0.y, R0.z, c[7];\n"
1373 "MUL R0.x, R0, c[7];\n"
1374 "MAD R0.y, R0.x, R0.x, -R0;\n"
1375 "MOV R0.z, c[7].x;\n"
1376 "RSQ R0.y, R0.y;\n"
1377 "RCP R0.y, R0.y;\n"
1378 "MUL R0.z, c[8].x, R0;\n"
1379 "MUL R1.xy, fragment.position, c[9];\n"
1380 "TEX R1, R1, texture[0], 2D;\n"
1381 "ADD R0.x, -R0, R0.y;\n"
1382 "RCP R0.z, R0.z;\n"
1383 "MUL R0.x, R0, R0.z;\n"
1384 "TEX R0, R0, texture[2], 1D;\n"
1385 "MUL R2.xyz, R1, R0.w;\n"
1386 "MAD R3.xyz, R0, R1.w, R2;\n"
1387 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
1388 "MUL R4.xyz, R0.w, R2;\n"
1389 "MAX R2.xyz, R0, c[7].w;\n"
1390 "ADD R2.w, -R1, c[7].z;\n"
1391 "MUL R5.xyz, R0, R2.w;\n"
1392 "ADD R3.w, -R0, c[7].z;\n"
1393 "RCP R2.x, R2.x;\n"
1394 "RCP R2.y, R2.y;\n"
1395 "RCP R2.z, R2.z;\n"
1396 "MAD R2.xyz, R4, R2, R5;\n"
1397 "MUL R4.xyz, R1, R3.w;\n"
1398 "MAD R0.xyz, R0, R2.w, R4;\n"
1399 "MUL R2.w, R0, R1;\n"
1400 "MAD R2.xyz, R1, R3.w, R2;\n"
1401 "ADD R2.xyz, R2, -R0;\n"
1402 "SGE R3.xyz, R3, R2.w;\n"
1403 "MAD R2.xyz, R3, R2, R0;\n"
1404 "ADD R0.z, R0.w, R1.w;\n"
1405 "MAD R2.w, -R0, R1, R0.z;\n"
1406 "ADD R0.xy, fragment.position, c[0];\n"
1407 "MUL R0.xy, R0, c[1];\n"
1408 "TEX R0, R0, texture[1], 2D;\n"
1409 "ADD R2, R2, -R1;\n"
1410 "DP4 R0.x, R0, c[2];\n"
1411 "MAD result.color, R0.x, R2, R1;\n"
1412 "END\n"
1413 ;
1414
1415static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT =
1416 "!!ARBfp1.0\n"
1417 "PARAM c[10] = { program.local[0..6],\n"
1418 " { 2, 4, 1 },\n"
1419 " program.local[8..9] };\n"
1420 "TEMP R0;\n"
1421 "TEMP R1;\n"
1422 "TEMP R2;\n"
1423 "TEMP R3;\n"
1424 "TEMP R4;\n"
1425 "MUL R0.xyz, fragment.position.y, c[4];\n"
1426 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1427 "ADD R0.xyz, R0, c[5];\n"
1428 "RCP R0.z, R0.z;\n"
1429 "MUL R0.xy, R0, R0.z;\n"
1430 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1431 "MUL R0.xy, R0, c[6];\n"
1432 "ADD R0.z, R0, R0.w;\n"
1433 "ADD R0.x, R0, R0.y;\n"
1434 "MUL R0.z, c[8].x, -R0;\n"
1435 "MUL R0.y, R0.z, c[7];\n"
1436 "MUL R0.x, R0, c[7];\n"
1437 "MAD R0.y, R0.x, R0.x, -R0;\n"
1438 "MOV R0.z, c[7].x;\n"
1439 "RSQ R0.y, R0.y;\n"
1440 "RCP R0.y, R0.y;\n"
1441 "MUL R0.z, c[8].x, R0;\n"
1442 "MUL R1.xy, fragment.position, c[9];\n"
1443 "TEX R1, R1, texture[0], 2D;\n"
1444 "ADD R0.x, -R0, R0.y;\n"
1445 "RCP R0.z, R0.z;\n"
1446 "MUL R0.x, R0, R0.z;\n"
1447 "TEX R0, R0, texture[2], 1D;\n"
1448 "ADD R2.w, -R1, c[7].z;\n"
1449 "ADD R3.xyz, R0.w, -R0;\n"
1450 "ADD R2.xyz, R1.w, -R1;\n"
1451 "MUL R2.xyz, R2, R3;\n"
1452 "MUL R2.xyz, R2, c[7].x;\n"
1453 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
1454 "MUL R4.xyz, R0, R2.w;\n"
1455 "MAD R2.xyz, R0, R2.w, R2;\n"
1456 "MUL R3.xyz, R0, R1;\n"
1457 "ADD R2.w, -R0, c[7].z;\n"
1458 "MAD R3.xyz, R3, c[7].x, R4;\n"
1459 "MUL R0.xyz, R0, c[7].x;\n"
1460 "SGE R0.xyz, R0, R0.w;\n"
1461 "MAD R3.xyz, R1, R2.w, R3;\n"
1462 "MAD R2.xyz, R1, R2.w, R2;\n"
1463 "ADD R2.xyz, R2, -R3;\n"
1464 "MAD R2.xyz, R0, R2, R3;\n"
1465 "ADD R0.z, R0.w, R1.w;\n"
1466 "MAD R2.w, -R0, R1, R0.z;\n"
1467 "ADD R0.xy, fragment.position, c[0];\n"
1468 "MUL R0.xy, R0, c[1];\n"
1469 "TEX R0, R0, texture[1], 2D;\n"
1470 "ADD R2, R2, -R1;\n"
1471 "DP4 R0.x, R0, c[2];\n"
1472 "MAD result.color, R0.x, R2, R1;\n"
1473 "END\n"
1474 ;
1475
1476static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT =
1477 "!!ARBfp1.0\n"
1478 "PARAM c[11] = { program.local[0..6],\n"
1479 " { 2, 4, 1, 9.9999997e-06 },\n"
1480 " program.local[8..9],\n"
1481 " { 8, 3 } };\n"
1482 "TEMP R0;\n"
1483 "TEMP R1;\n"
1484 "TEMP R2;\n"
1485 "TEMP R3;\n"
1486 "TEMP R4;\n"
1487 "TEMP R5;\n"
1488 "TEMP R6;\n"
1489 "MUL R0.xyz, fragment.position.y, c[4];\n"
1490 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1491 "ADD R0.xyz, R0, c[5];\n"
1492 "RCP R0.z, R0.z;\n"
1493 "MUL R0.xy, R0, R0.z;\n"
1494 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1495 "MUL R0.xy, R0, c[6];\n"
1496 "ADD R0.z, R0, R0.w;\n"
1497 "ADD R0.x, R0, R0.y;\n"
1498 "MUL R0.z, c[8].x, -R0;\n"
1499 "MUL R0.y, R0.z, c[7];\n"
1500 "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
1501 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1502 "MUL R0.x, R0, c[7];\n"
1503 "MAD R0.y, R0.x, R0.x, -R0;\n"
1504 "MAX R0.z, R1.w, c[7].w;\n"
1505 "RCP R2.w, R0.z;\n"
1506 "MUL R2.xyz, R1, R2.w;\n"
1507 "MUL R6.xyz, -R2, c[10].x;\n"
1508 "MAD R3.xyz, -R1, R2.w, c[7].z;\n"
1509 "RSQ R0.y, R0.y;\n"
1510 "RCP R0.y, R0.y;\n"
1511 "ADD R0.x, -R0, R0.y;\n"
1512 "MOV R0.y, c[7].x;\n"
1513 "MUL R0.y, c[8].x, R0;\n"
1514 "RCP R0.y, R0.y;\n"
1515 "MUL R0.x, R0, R0.y;\n"
1516 "TEX R0, R0, texture[2], 1D;\n"
1517 "MAD R4.xyz, R0, c[7].x, -R0.w;\n"
1518 "MUL R5.xyz, R3, R4;\n"
1519 "MAD R3.xyz, -R3, R4, R0.w;\n"
1520 "ADD R6.xyz, R6, c[10].y;\n"
1521 "RSQ R2.x, R2.x;\n"
1522 "RSQ R2.z, R2.z;\n"
1523 "RSQ R2.y, R2.y;\n"
1524 "MAD R5.xyz, -R5, R6, R0.w;\n"
1525 "MUL R3.xyz, R1, R3;\n"
1526 "ADD R2.w, -R1, c[7].z;\n"
1527 "RCP R2.x, R2.x;\n"
1528 "RCP R2.z, R2.z;\n"
1529 "RCP R2.y, R2.y;\n"
1530 "MAD R2.xyz, R2, R1.w, -R1;\n"
1531 "MUL R6.xyz, R2, R4;\n"
1532 "MUL R2.xyz, R1, R5;\n"
1533 "MAD R6.xyz, R1, R0.w, R6;\n"
1534 "MUL R4.xyz, R0, c[7].x;\n"
1535 "MUL R5.xyz, R1, c[10].x;\n"
1536 "ADD R6.xyz, R6, -R2;\n"
1537 "SGE R5.xyz, R5, R1.w;\n"
1538 "MUL R5.xyz, R5, R6;\n"
1539 "ADD R2.xyz, R2, R5;\n"
1540 "SGE R4.xyz, R4, R0.w;\n"
1541 "ADD R2.xyz, R2, -R3;\n"
1542 "MUL R2.xyz, R4, R2;\n"
1543 "ADD R2.xyz, R3, R2;\n"
1544 "MAD R0.xyz, R0, R2.w, R2;\n"
1545 "ADD R2.x, -R0.w, c[7].z;\n"
1546 "MAD R2.xyz, R1, R2.x, R0;\n"
1547 "ADD R0.z, R0.w, R1.w;\n"
1548 "MAD R2.w, -R0, R1, R0.z;\n"
1549 "ADD R0.xy, fragment.position, c[0];\n"
1550 "MUL R0.xy, R0, c[1];\n"
1551 "TEX R0, R0, texture[1], 2D;\n"
1552 "ADD R2, R2, -R1;\n"
1553 "DP4 R0.x, R0, c[2];\n"
1554 "MAD result.color, R0.x, R2, R1;\n"
1555 "END\n"
1556 ;
1557
1558static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE =
1559 "!!ARBfp1.0\n"
1560 "PARAM c[10] = { program.local[0..6],\n"
1561 " { 2, 4 },\n"
1562 " program.local[8..9] };\n"
1563 "TEMP R0;\n"
1564 "TEMP R1;\n"
1565 "TEMP R2;\n"
1566 "TEMP R3;\n"
1567 "MUL R0.xyz, fragment.position.y, c[4];\n"
1568 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1569 "ADD R0.xyz, R0, c[5];\n"
1570 "RCP R0.z, R0.z;\n"
1571 "MUL R0.xy, R0, R0.z;\n"
1572 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1573 "ADD R0.z, R0, R0.w;\n"
1574 "MUL R0.xy, R0, c[6];\n"
1575 "ADD R0.x, R0, R0.y;\n"
1576 "MUL R0.z, c[8].x, -R0;\n"
1577 "MUL R0.y, R0.z, c[7];\n"
1578 "MUL R0.x, R0, c[7];\n"
1579 "MAD R0.y, R0.x, R0.x, -R0;\n"
1580 "RSQ R0.z, R0.y;\n"
1581 "RCP R0.z, R0.z;\n"
1582 "ADD R0.x, -R0, R0.z;\n"
1583 "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n"
1584 "MOV R0.y, c[7].x;\n"
1585 "MUL R0.y, c[8].x, R0;\n"
1586 "RCP R0.y, R0.y;\n"
1587 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1588 "MUL R0.x, R0, R0.y;\n"
1589 "TEX R0, R0, texture[2], 1D;\n"
1590 "ADD R3.xyz, R0, R1;\n"
1591 "MUL R2.xyz, R1, R0.w;\n"
1592 "MUL R0.xyz, R0, R1.w;\n"
1593 "MIN R0.xyz, R0, R2;\n"
1594 "MAD R2.xyz, -R0, c[7].x, R3;\n"
1595 "ADD R0.z, R0.w, R1.w;\n"
1596 "MAD R2.w, -R0, R1, R0.z;\n"
1597 "ADD R0.xy, fragment.position, c[0];\n"
1598 "MUL R0.xy, R0, c[1];\n"
1599 "TEX R0, R0, texture[1], 2D;\n"
1600 "ADD R2, R2, -R1;\n"
1601 "DP4 R0.x, R0, c[2];\n"
1602 "MAD result.color, R0.x, R2, R1;\n"
1603 "END\n"
1604 ;
1605
1606static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION =
1607 "!!ARBfp1.0\n"
1608 "PARAM c[10] = { program.local[0..6],\n"
1609 " { 2, 4, 1 },\n"
1610 " program.local[8..9] };\n"
1611 "TEMP R0;\n"
1612 "TEMP R1;\n"
1613 "TEMP R2;\n"
1614 "TEMP R3;\n"
1615 "MUL R0.xyz, fragment.position.y, c[4];\n"
1616 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
1617 "ADD R0.xyz, R0, c[5];\n"
1618 "RCP R0.z, R0.z;\n"
1619 "MUL R0.xy, R0, R0.z;\n"
1620 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1621 "MUL R0.xy, R0, c[6];\n"
1622 "ADD R0.z, R0, R0.w;\n"
1623 "ADD R0.x, R0, R0.y;\n"
1624 "MUL R0.z, c[8].x, -R0;\n"
1625 "MUL R0.y, R0.z, c[7];\n"
1626 "MUL R0.x, R0, c[7];\n"
1627 "MAD R0.y, R0.x, R0.x, -R0;\n"
1628 "MOV R0.z, c[7].x;\n"
1629 "RSQ R0.y, R0.y;\n"
1630 "RCP R0.y, R0.y;\n"
1631 "MUL R0.z, c[8].x, R0;\n"
1632 "MUL R1.xy, fragment.position, c[9];\n"
1633 "TEX R1, R1, texture[0], 2D;\n"
1634 "ADD R0.x, -R0, R0.y;\n"
1635 "RCP R0.z, R0.z;\n"
1636 "MUL R0.x, R0, R0.z;\n"
1637 "TEX R0, R0, texture[2], 1D;\n"
1638 "MUL R2.xyz, R1, R0.w;\n"
1639 "MAD R3.xyz, R0, R1.w, R2;\n"
1640 "MUL R2.xyz, R0, R1;\n"
1641 "MAD R2.xyz, -R2, c[7].x, R3;\n"
1642 "ADD R2.w, -R1, c[7].z;\n"
1643 "MAD R0.xyz, R0, R2.w, R2;\n"
1644 "ADD R2.x, -R0.w, c[7].z;\n"
1645 "MAD R2.xyz, R1, R2.x, R0;\n"
1646 "ADD R0.z, R0.w, R1.w;\n"
1647 "MAD R2.w, -R0, R1, R0.z;\n"
1648 "ADD R0.xy, fragment.position, c[0];\n"
1649 "MUL R0.xy, R0, c[1];\n"
1650 "TEX R0, R0, texture[1], 2D;\n"
1651 "ADD R2, R2, -R1;\n"
1652 "DP4 R0.x, R0, c[2];\n"
1653 "MAD result.color, R0.x, R2, R1;\n"
1654 "END\n"
1655 ;
1656
1657static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
1658 "!!ARBfp1.0\n"
1659 "PARAM c[9] = { program.local[0..3],\n"
1660 " { 2, 4, 1 },\n"
1661 " program.local[5..8] };\n"
1662 "TEMP R0;\n"
1663 "TEMP R1;\n"
1664 "TEMP R2;\n"
1665 "TEMP R3;\n"
1666 "MUL R0.xyz, fragment.position.y, c[1];\n"
1667 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1668 "ADD R0.xyz, R0, c[2];\n"
1669 "RCP R0.z, R0.z;\n"
1670 "MUL R0.xy, R0, R0.z;\n"
1671 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1672 "ADD R0.z, R0, R0.w;\n"
1673 "MUL R0.xy, R0, c[3];\n"
1674 "ADD R0.x, R0, R0.y;\n"
1675 "MUL R0.z, c[5].x, -R0;\n"
1676 "MUL R0.y, R0.z, c[4];\n"
1677 "MUL R0.x, R0, c[4];\n"
1678 "MAD R0.y, R0.x, R0.x, -R0;\n"
1679 "RSQ R0.z, R0.y;\n"
1680 "RCP R0.z, R0.z;\n"
1681 "ADD R0.x, -R0, R0.z;\n"
1682 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
1683 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1684 "MUL R2.xyz, R1, c[8].y;\n"
1685 "MOV R0.y, c[4].x;\n"
1686 "MUL R0.y, c[5].x, R0;\n"
1687 "RCP R0.y, R0.y;\n"
1688 "MUL R0.x, R0, R0.y;\n"
1689 "TEX R0, R0, texture[1], 1D;\n"
1690 "MUL R3.xyz, R2, R0.w;\n"
1691 "MUL R2.xyz, R0, c[8].x;\n"
1692 "MAD R2.xyz, R2, R1.w, R3;\n"
1693 "ADD R2.w, -R1, c[4].z;\n"
1694 "MUL R0.xyz, R0, c[7].y;\n"
1695 "MAD R0.xyz, R0, R2.w, R2;\n"
1696 "ADD R2.x, -R0.w, c[4].z;\n"
1697 "MUL R1.xyz, R1, c[7].z;\n"
1698 "MAD result.color.xyz, R1, R2.x, R0;\n"
1699 "MUL R0.x, R0.w, R1.w;\n"
1700 "MUL R0.z, R1.w, R2.x;\n"
1701 "MUL R0.y, R0.w, R2.w;\n"
1702 "DP3 result.color.w, R0, c[7];\n"
1703 "END\n"
1704 ;
1705
1706static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
1707 "!!ARBfp1.0\n"
1708 "PARAM c[7] = { program.local[0..3],\n"
1709 " { 2, 4, 1 },\n"
1710 " program.local[5..6] };\n"
1711 "TEMP R0;\n"
1712 "TEMP R1;\n"
1713 "TEMP R2;\n"
1714 "MUL R0.xyz, fragment.position.y, c[1];\n"
1715 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1716 "ADD R0.xyz, R0, c[2];\n"
1717 "RCP R0.z, R0.z;\n"
1718 "MUL R0.xy, R0, R0.z;\n"
1719 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1720 "MUL R0.xy, R0, c[3];\n"
1721 "ADD R0.z, R0, R0.w;\n"
1722 "ADD R0.x, R0, R0.y;\n"
1723 "MUL R0.z, c[5].x, -R0;\n"
1724 "MUL R0.y, R0.z, c[4];\n"
1725 "MUL R0.x, R0, c[4];\n"
1726 "MAD R0.y, R0.x, R0.x, -R0;\n"
1727 "RSQ R0.y, R0.y;\n"
1728 "RCP R0.z, R0.y;\n"
1729 "ADD R0.x, -R0, R0.z;\n"
1730 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
1731 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1732 "MOV R0.y, c[4].x;\n"
1733 "MUL R0.y, c[5].x, R0;\n"
1734 "RCP R0.y, R0.y;\n"
1735 "MUL R0.x, R0, R0.y;\n"
1736 "TEX R0, R0, texture[1], 1D;\n"
1737 "ADD R2.x, -R1.w, c[4].z;\n"
1738 "MUL R2.xyz, R0, R2.x;\n"
1739 "MAD R0.xyz, R0, R1, R2;\n"
1740 "ADD R2.x, R0.w, R1.w;\n"
1741 "ADD R2.y, -R0.w, c[4].z;\n"
1742 "MAD result.color.xyz, R1, R2.y, R0;\n"
1743 "MAD result.color.w, -R0, R1, R2.x;\n"
1744 "END\n"
1745 ;
1746
1747static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK =
1748 "!!ARBfp1.0\n"
1749 "PARAM c[7] = { program.local[0..3],\n"
1750 " { 2, 4 },\n"
1751 " program.local[5..6] };\n"
1752 "TEMP R0;\n"
1753 "TEMP R1;\n"
1754 "TEMP R2;\n"
1755 "MUL R0.xyz, fragment.position.y, c[1];\n"
1756 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1757 "ADD R0.xyz, R0, c[2];\n"
1758 "RCP R0.z, R0.z;\n"
1759 "MUL R0.xy, R0, R0.z;\n"
1760 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1761 "ADD R0.z, R0, R0.w;\n"
1762 "MUL R0.xy, R0, c[3];\n"
1763 "ADD R0.x, R0, R0.y;\n"
1764 "MUL R0.z, c[5].x, -R0;\n"
1765 "MUL R0.y, R0.z, c[4];\n"
1766 "MUL R0.x, R0, c[4];\n"
1767 "MAD R0.y, R0.x, R0.x, -R0;\n"
1768 "RSQ R0.z, R0.y;\n"
1769 "RCP R0.z, R0.z;\n"
1770 "ADD R0.x, -R0, R0.z;\n"
1771 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
1772 "MOV R0.y, c[4].x;\n"
1773 "MUL R0.y, c[5].x, R0;\n"
1774 "RCP R0.y, R0.y;\n"
1775 "TEX R1, R0.zwzw, texture[0], 2D;\n"
1776 "MUL R0.x, R0, R0.y;\n"
1777 "TEX R0, R0, texture[1], 1D;\n"
1778 "ADD R2, R0, R1;\n"
1779 "MAD result.color, -R0, R1, R2;\n"
1780 "END\n"
1781 ;
1782
1783static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK =
1784 "!!ARBfp1.0\n"
1785 "PARAM c[7] = { program.local[0..3],\n"
1786 " { 2, 4, 1 },\n"
1787 " program.local[5..6] };\n"
1788 "TEMP R0;\n"
1789 "TEMP R1;\n"
1790 "TEMP R2;\n"
1791 "TEMP R3;\n"
1792 "MUL R0.xyz, fragment.position.y, c[1];\n"
1793 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1794 "ADD R0.xyz, R0, c[2];\n"
1795 "RCP R0.z, R0.z;\n"
1796 "MUL R0.xy, R0, R0.z;\n"
1797 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1798 "MUL R0.xy, R0, c[3];\n"
1799 "ADD R0.z, R0, R0.w;\n"
1800 "ADD R0.x, R0, R0.y;\n"
1801 "MUL R0.z, c[5].x, -R0;\n"
1802 "MUL R0.y, R0.z, c[4];\n"
1803 "MUL R0.x, R0, c[4];\n"
1804 "MAD R0.y, R0.x, R0.x, -R0;\n"
1805 "MOV R0.z, c[4].x;\n"
1806 "RSQ R0.y, R0.y;\n"
1807 "RCP R0.y, R0.y;\n"
1808 "MUL R0.z, c[5].x, R0;\n"
1809 "MUL R1.xy, fragment.position, c[6];\n"
1810 "TEX R1, R1, texture[0], 2D;\n"
1811 "ADD R0.x, -R0, R0.y;\n"
1812 "RCP R0.z, R0.z;\n"
1813 "MUL R0.x, R0, R0.z;\n"
1814 "TEX R0, R0, texture[1], 1D;\n"
1815 "ADD R3.xyz, R0.w, -R0;\n"
1816 "ADD R2.xyz, R1.w, -R1;\n"
1817 "MUL R2.xyz, R2, R3;\n"
1818 "ADD R2.w, -R1, c[4].z;\n"
1819 "MUL R2.xyz, R2, c[4].x;\n"
1820 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
1821 "MAD R2.xyz, R0, R2.w, R2;\n"
1822 "MUL R3.xyz, R0, R2.w;\n"
1823 "MUL R0.xyz, R0, R1;\n"
1824 "ADD R2.w, -R0, c[4].z;\n"
1825 "MAD R0.xyz, R0, c[4].x, R3;\n"
1826 "MAD R0.xyz, R1, R2.w, R0;\n"
1827 "MAD R2.xyz, R1, R2.w, R2;\n"
1828 "MUL R1.xyz, R1, c[4].x;\n"
1829 "ADD R2.w, R0, R1;\n"
1830 "ADD R2.xyz, R2, -R0;\n"
1831 "SGE R1.xyz, R1, R1.w;\n"
1832 "MAD result.color.xyz, R1, R2, R0;\n"
1833 "MAD result.color.w, -R0, R1, R2;\n"
1834 "END\n"
1835 ;
1836
1837static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK =
1838 "!!ARBfp1.0\n"
1839 "PARAM c[7] = { program.local[0..3],\n"
1840 " { 2, 4, 1 },\n"
1841 " program.local[5..6] };\n"
1842 "TEMP R0;\n"
1843 "TEMP R1;\n"
1844 "TEMP R2;\n"
1845 "TEMP R3;\n"
1846 "MUL R0.xyz, fragment.position.y, c[1];\n"
1847 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1848 "ADD R0.xyz, R0, c[2];\n"
1849 "RCP R0.z, R0.z;\n"
1850 "MUL R0.xy, R0, R0.z;\n"
1851 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1852 "MUL R0.xy, R0, c[3];\n"
1853 "ADD R0.z, R0, R0.w;\n"
1854 "ADD R0.x, R0, R0.y;\n"
1855 "MUL R0.z, c[5].x, -R0;\n"
1856 "MUL R0.y, R0.z, c[4];\n"
1857 "MUL R0.x, R0, c[4];\n"
1858 "MAD R0.y, R0.x, R0.x, -R0;\n"
1859 "MOV R0.z, c[4].x;\n"
1860 "RSQ R0.y, R0.y;\n"
1861 "RCP R0.y, R0.y;\n"
1862 "MUL R0.z, c[5].x, R0;\n"
1863 "MUL R1.xy, fragment.position, c[6];\n"
1864 "TEX R1, R1, texture[0], 2D;\n"
1865 "ADD R0.x, -R0, R0.y;\n"
1866 "RCP R0.z, R0.z;\n"
1867 "MUL R0.x, R0, R0.z;\n"
1868 "TEX R0, R0, texture[1], 1D;\n"
1869 "MUL R2.xyz, R0, R1.w;\n"
1870 "MUL R3.xyz, R1, R0.w;\n"
1871 "MIN R2.xyz, R2, R3;\n"
1872 "ADD R2.w, -R1, c[4].z;\n"
1873 "MAD R0.xyz, R0, R2.w, R2;\n"
1874 "ADD R2.x, R0.w, R1.w;\n"
1875 "ADD R2.y, -R0.w, c[4].z;\n"
1876 "MAD result.color.xyz, R1, R2.y, R0;\n"
1877 "MAD result.color.w, -R0, R1, R2.x;\n"
1878 "END\n"
1879 ;
1880
1881static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
1882 "!!ARBfp1.0\n"
1883 "PARAM c[7] = { program.local[0..3],\n"
1884 " { 2, 4, 1 },\n"
1885 " program.local[5..6] };\n"
1886 "TEMP R0;\n"
1887 "TEMP R1;\n"
1888 "TEMP R2;\n"
1889 "TEMP R3;\n"
1890 "MUL R0.xyz, fragment.position.y, c[1];\n"
1891 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1892 "ADD R0.xyz, R0, c[2];\n"
1893 "RCP R0.z, R0.z;\n"
1894 "MUL R0.xy, R0, R0.z;\n"
1895 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1896 "MUL R0.xy, R0, c[3];\n"
1897 "ADD R0.z, R0, R0.w;\n"
1898 "ADD R0.x, R0, R0.y;\n"
1899 "MUL R0.z, c[5].x, -R0;\n"
1900 "MUL R0.y, R0.z, c[4];\n"
1901 "MUL R0.x, R0, c[4];\n"
1902 "MAD R0.y, R0.x, R0.x, -R0;\n"
1903 "MOV R0.z, c[4].x;\n"
1904 "RSQ R0.y, R0.y;\n"
1905 "RCP R0.y, R0.y;\n"
1906 "MUL R0.z, c[5].x, R0;\n"
1907 "MUL R1.xy, fragment.position, c[6];\n"
1908 "TEX R1, R1, texture[0], 2D;\n"
1909 "ADD R0.x, -R0, R0.y;\n"
1910 "RCP R0.z, R0.z;\n"
1911 "MUL R0.x, R0, R0.z;\n"
1912 "TEX R0, R0, texture[1], 1D;\n"
1913 "MUL R2.xyz, R0, R1.w;\n"
1914 "MUL R3.xyz, R1, R0.w;\n"
1915 "MAX R2.xyz, R2, R3;\n"
1916 "ADD R2.w, -R1, c[4].z;\n"
1917 "MAD R0.xyz, R0, R2.w, R2;\n"
1918 "ADD R2.x, R0.w, R1.w;\n"
1919 "ADD R2.y, -R0.w, c[4].z;\n"
1920 "MAD result.color.xyz, R1, R2.y, R0;\n"
1921 "MAD result.color.w, -R0, R1, R2.x;\n"
1922 "END\n"
1923 ;
1924
1925static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
1926 "!!ARBfp1.0\n"
1927 "PARAM c[7] = { program.local[0..3],\n"
1928 " { 2, 4, 1, 1e-06 },\n"
1929 " program.local[5..6] };\n"
1930 "TEMP R0;\n"
1931 "TEMP R1;\n"
1932 "TEMP R2;\n"
1933 "TEMP R3;\n"
1934 "MUL R0.xyz, fragment.position.y, c[1];\n"
1935 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1936 "ADD R0.xyz, R0, c[2];\n"
1937 "RCP R0.z, R0.z;\n"
1938 "MUL R0.xy, R0, R0.z;\n"
1939 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1940 "MUL R0.xy, R0, c[3];\n"
1941 "ADD R0.z, R0, R0.w;\n"
1942 "ADD R0.x, R0, R0.y;\n"
1943 "MUL R0.z, c[5].x, -R0;\n"
1944 "MUL R0.y, R0.z, c[4];\n"
1945 "MUL R0.x, R0, c[4];\n"
1946 "MAD R0.y, R0.x, R0.x, -R0;\n"
1947 "MOV R0.z, c[4].x;\n"
1948 "RSQ R0.y, R0.y;\n"
1949 "RCP R0.y, R0.y;\n"
1950 "MUL R0.z, c[5].x, R0;\n"
1951 "ADD R0.x, -R0, R0.y;\n"
1952 "RCP R0.z, R0.z;\n"
1953 "MUL R0.x, R0, R0.z;\n"
1954 "TEX R0, R0, texture[1], 1D;\n"
1955 "MAX R1.x, R0.w, c[4].w;\n"
1956 "RCP R1.x, R1.x;\n"
1957 "MAD R1.xyz, -R0, R1.x, c[4].z;\n"
1958 "MAX R2.xyz, R1, c[4].w;\n"
1959 "MUL R1.xy, fragment.position, c[6];\n"
1960 "TEX R1, R1, texture[0], 2D;\n"
1961 "ADD R2.w, -R0, c[4].z;\n"
1962 "MUL R3.xyz, R1, R2.w;\n"
1963 "ADD R2.w, -R1, c[4].z;\n"
1964 "MAD R3.xyz, R0, R2.w, R3;\n"
1965 "MUL R1.xyz, R1, R0.w;\n"
1966 "MAD R0.xyz, R0, R1.w, R1;\n"
1967 "MUL R2.w, R0, R1;\n"
1968 "RCP R2.x, R2.x;\n"
1969 "RCP R2.y, R2.y;\n"
1970 "RCP R2.z, R2.z;\n"
1971 "MAD R2.xyz, R1, R2, R3;\n"
1972 "MAD R3.xyz, R0.w, R1.w, R3;\n"
1973 "ADD R1.x, R0.w, R1.w;\n"
1974 "ADD R3.xyz, R3, -R2;\n"
1975 "SGE R0.xyz, R0, R2.w;\n"
1976 "MAD result.color.xyz, R0, R3, R2;\n"
1977 "MAD result.color.w, -R0, R1, R1.x;\n"
1978 "END\n"
1979 ;
1980
1981static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK =
1982 "!!ARBfp1.0\n"
1983 "PARAM c[7] = { program.local[0..3],\n"
1984 " { 2, 4, 1, 9.9999997e-06 },\n"
1985 " program.local[5..6] };\n"
1986 "TEMP R0;\n"
1987 "TEMP R1;\n"
1988 "TEMP R2;\n"
1989 "TEMP R3;\n"
1990 "TEMP R4;\n"
1991 "TEMP R5;\n"
1992 "MUL R0.xyz, fragment.position.y, c[1];\n"
1993 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
1994 "ADD R0.xyz, R0, c[2];\n"
1995 "RCP R0.z, R0.z;\n"
1996 "MUL R0.xy, R0, R0.z;\n"
1997 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
1998 "MUL R0.xy, R0, c[3];\n"
1999 "ADD R0.z, R0, R0.w;\n"
2000 "ADD R0.x, R0, R0.y;\n"
2001 "MUL R0.z, c[5].x, -R0;\n"
2002 "MUL R0.y, R0.z, c[4];\n"
2003 "MUL R0.x, R0, c[4];\n"
2004 "MAD R0.y, R0.x, R0.x, -R0;\n"
2005 "MOV R0.z, c[4].x;\n"
2006 "RSQ R0.y, R0.y;\n"
2007 "RCP R0.y, R0.y;\n"
2008 "MUL R0.z, c[5].x, R0;\n"
2009 "MUL R1.xy, fragment.position, c[6];\n"
2010 "TEX R1, R1, texture[0], 2D;\n"
2011 "ADD R0.x, -R0, R0.y;\n"
2012 "RCP R0.z, R0.z;\n"
2013 "MUL R0.x, R0, R0.z;\n"
2014 "TEX R0, R0, texture[1], 1D;\n"
2015 "MUL R2.xyz, R1, R0.w;\n"
2016 "MAD R3.xyz, R0, R1.w, R2;\n"
2017 "ADD R2.w, -R1, c[4].z;\n"
2018 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
2019 "MUL R4.xyz, R0.w, R2;\n"
2020 "MAX R2.xyz, R0, c[4].w;\n"
2021 "MUL R5.xyz, R0, R2.w;\n"
2022 "ADD R3.w, -R0, c[4].z;\n"
2023 "RCP R2.x, R2.x;\n"
2024 "RCP R2.y, R2.y;\n"
2025 "RCP R2.z, R2.z;\n"
2026 "MAD R2.xyz, R4, R2, R5;\n"
2027 "MUL R4.xyz, R1, R3.w;\n"
2028 "MAD R1.xyz, R1, R3.w, R2;\n"
2029 "MAD R0.xyz, R0, R2.w, R4;\n"
2030 "MUL R2.x, R0.w, R1.w;\n"
2031 "ADD R2.w, R0, R1;\n"
2032 "ADD R1.xyz, R1, -R0;\n"
2033 "SGE R2.xyz, R3, R2.x;\n"
2034 "MAD result.color.xyz, R2, R1, R0;\n"
2035 "MAD result.color.w, -R0, R1, R2;\n"
2036 "END\n"
2037 ;
2038
2039static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
2040 "!!ARBfp1.0\n"
2041 "PARAM c[7] = { program.local[0..3],\n"
2042 " { 2, 4, 1 },\n"
2043 " program.local[5..6] };\n"
2044 "TEMP R0;\n"
2045 "TEMP R1;\n"
2046 "TEMP R2;\n"
2047 "TEMP R3;\n"
2048 "TEMP R4;\n"
2049 "MUL R0.xyz, fragment.position.y, c[1];\n"
2050 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
2051 "ADD R0.xyz, R0, c[2];\n"
2052 "RCP R0.z, R0.z;\n"
2053 "MUL R0.xy, R0, R0.z;\n"
2054 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2055 "MUL R0.xy, R0, c[3];\n"
2056 "ADD R0.z, R0, R0.w;\n"
2057 "ADD R0.x, R0, R0.y;\n"
2058 "MUL R0.z, c[5].x, -R0;\n"
2059 "MUL R0.y, R0.z, c[4];\n"
2060 "MUL R0.x, R0, c[4];\n"
2061 "MAD R0.y, R0.x, R0.x, -R0;\n"
2062 "MOV R0.z, c[4].x;\n"
2063 "RSQ R0.y, R0.y;\n"
2064 "RCP R0.y, R0.y;\n"
2065 "MUL R0.z, c[5].x, R0;\n"
2066 "MUL R1.xy, fragment.position, c[6];\n"
2067 "TEX R1, R1, texture[0], 2D;\n"
2068 "ADD R0.x, -R0, R0.y;\n"
2069 "RCP R0.z, R0.z;\n"
2070 "MUL R0.x, R0, R0.z;\n"
2071 "TEX R0, R0, texture[1], 1D;\n"
2072 "ADD R2.w, -R1, c[4].z;\n"
2073 "ADD R3.xyz, R0.w, -R0;\n"
2074 "ADD R2.xyz, R1.w, -R1;\n"
2075 "MUL R2.xyz, R2, R3;\n"
2076 "MUL R2.xyz, R2, c[4].x;\n"
2077 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
2078 "MUL R4.xyz, R0, R2.w;\n"
2079 "MUL R3.xyz, R0, R1;\n"
2080 "MAD R2.xyz, R0, R2.w, R2;\n"
2081 "ADD R2.w, -R0, c[4].z;\n"
2082 "MUL R0.xyz, R0, c[4].x;\n"
2083 "MAD R2.xyz, R1, R2.w, R2;\n"
2084 "MAD R3.xyz, R3, c[4].x, R4;\n"
2085 "MAD R1.xyz, R1, R2.w, R3;\n"
2086 "ADD R2.w, R0, R1;\n"
2087 "ADD R2.xyz, R2, -R1;\n"
2088 "SGE R0.xyz, R0, R0.w;\n"
2089 "MAD result.color.xyz, R0, R2, R1;\n"
2090 "MAD result.color.w, -R0, R1, R2;\n"
2091 "END\n"
2092 ;
2093
2094static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
2095 "!!ARBfp1.0\n"
2096 "PARAM c[8] = { program.local[0..3],\n"
2097 " { 2, 4, 1, 9.9999997e-06 },\n"
2098 " program.local[5..6],\n"
2099 " { 8, 3 } };\n"
2100 "TEMP R0;\n"
2101 "TEMP R1;\n"
2102 "TEMP R2;\n"
2103 "TEMP R3;\n"
2104 "TEMP R4;\n"
2105 "TEMP R5;\n"
2106 "TEMP R6;\n"
2107 "MUL R0.xyz, fragment.position.y, c[1];\n"
2108 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
2109 "ADD R0.xyz, R0, c[2];\n"
2110 "RCP R0.z, R0.z;\n"
2111 "MUL R0.xy, R0, R0.z;\n"
2112 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2113 "MUL R0.xy, R0, c[3];\n"
2114 "ADD R0.z, R0, R0.w;\n"
2115 "ADD R0.x, R0, R0.y;\n"
2116 "MUL R0.z, c[5].x, -R0;\n"
2117 "MUL R0.y, R0.z, c[4];\n"
2118 "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n"
2119 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2120 "MUL R0.x, R0, c[4];\n"
2121 "MAD R0.y, R0.x, R0.x, -R0;\n"
2122 "MAX R0.z, R1.w, c[4].w;\n"
2123 "RCP R2.w, R0.z;\n"
2124 "MUL R2.xyz, R1, R2.w;\n"
2125 "MUL R6.xyz, -R2, c[7].x;\n"
2126 "MAD R3.xyz, -R1, R2.w, c[4].z;\n"
2127 "RSQ R0.y, R0.y;\n"
2128 "RCP R0.y, R0.y;\n"
2129 "ADD R0.x, -R0, R0.y;\n"
2130 "MOV R0.y, c[4].x;\n"
2131 "MUL R0.y, c[5].x, R0;\n"
2132 "RCP R0.y, R0.y;\n"
2133 "MUL R0.x, R0, R0.y;\n"
2134 "TEX R0, R0, texture[1], 1D;\n"
2135 "MAD R4.xyz, R0, c[4].x, -R0.w;\n"
2136 "MUL R5.xyz, R3, R4;\n"
2137 "MAD R3.xyz, -R3, R4, R0.w;\n"
2138 "ADD R6.xyz, R6, c[7].y;\n"
2139 "RSQ R2.x, R2.x;\n"
2140 "RSQ R2.z, R2.z;\n"
2141 "RSQ R2.y, R2.y;\n"
2142 "MAD R5.xyz, -R5, R6, R0.w;\n"
2143 "MUL R3.xyz, R1, R3;\n"
2144 "RCP R2.x, R2.x;\n"
2145 "RCP R2.z, R2.z;\n"
2146 "RCP R2.y, R2.y;\n"
2147 "MAD R2.xyz, R2, R1.w, -R1;\n"
2148 "MUL R6.xyz, R2, R4;\n"
2149 "MUL R2.xyz, R1, R5;\n"
2150 "MUL R4.xyz, R0, c[4].x;\n"
2151 "MAD R6.xyz, R1, R0.w, R6;\n"
2152 "MUL R5.xyz, R1, c[7].x;\n"
2153 "ADD R6.xyz, R6, -R2;\n"
2154 "SGE R5.xyz, R5, R1.w;\n"
2155 "MUL R5.xyz, R5, R6;\n"
2156 "ADD R2.xyz, R2, R5;\n"
2157 "ADD R2.xyz, R2, -R3;\n"
2158 "SGE R4.xyz, R4, R0.w;\n"
2159 "MUL R2.xyz, R4, R2;\n"
2160 "ADD R2.xyz, R3, R2;\n"
2161 "ADD R2.w, -R1, c[4].z;\n"
2162 "MAD R0.xyz, R0, R2.w, R2;\n"
2163 "ADD R2.x, R0.w, R1.w;\n"
2164 "ADD R2.y, -R0.w, c[4].z;\n"
2165 "MAD result.color.xyz, R1, R2.y, R0;\n"
2166 "MAD result.color.w, -R0, R1, R2.x;\n"
2167 "END\n"
2168 ;
2169
2170static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
2171 "!!ARBfp1.0\n"
2172 "PARAM c[7] = { program.local[0..3],\n"
2173 " { 2, 4 },\n"
2174 " program.local[5..6] };\n"
2175 "TEMP R0;\n"
2176 "TEMP R1;\n"
2177 "TEMP R2;\n"
2178 "TEMP R3;\n"
2179 "MUL R0.xyz, fragment.position.y, c[1];\n"
2180 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
2181 "ADD R0.xyz, R0, c[2];\n"
2182 "RCP R0.z, R0.z;\n"
2183 "MUL R0.xy, R0, R0.z;\n"
2184 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2185 "MUL R0.xy, R0, c[3];\n"
2186 "ADD R0.z, R0, R0.w;\n"
2187 "ADD R0.x, R0, R0.y;\n"
2188 "MUL R0.z, c[5].x, -R0;\n"
2189 "MUL R0.y, R0.z, c[4];\n"
2190 "MUL R0.x, R0, c[4];\n"
2191 "MAD R0.y, R0.x, R0.x, -R0;\n"
2192 "MOV R0.z, c[4].x;\n"
2193 "RSQ R0.y, R0.y;\n"
2194 "RCP R0.y, R0.y;\n"
2195 "MUL R0.z, c[5].x, R0;\n"
2196 "MUL R1.xy, fragment.position, c[6];\n"
2197 "TEX R1, R1, texture[0], 2D;\n"
2198 "ADD R0.x, -R0, R0.y;\n"
2199 "RCP R0.z, R0.z;\n"
2200 "MUL R0.x, R0, R0.z;\n"
2201 "TEX R0, R0, texture[1], 1D;\n"
2202 "MUL R2.xyz, R0, R1.w;\n"
2203 "MUL R3.xyz, R1, R0.w;\n"
2204 "ADD R0.xyz, R0, R1;\n"
2205 "MIN R2.xyz, R2, R3;\n"
2206 "ADD R1.x, R0.w, R1.w;\n"
2207 "MAD result.color.xyz, -R2, c[4].x, R0;\n"
2208 "MAD result.color.w, -R0, R1, R1.x;\n"
2209 "END\n"
2210 ;
2211
2212static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
2213 "!!ARBfp1.0\n"
2214 "PARAM c[7] = { program.local[0..3],\n"
2215 " { 2, 4, 1 },\n"
2216 " program.local[5..6] };\n"
2217 "TEMP R0;\n"
2218 "TEMP R1;\n"
2219 "TEMP R2;\n"
2220 "TEMP R3;\n"
2221 "MUL R0.xyz, fragment.position.y, c[1];\n"
2222 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
2223 "ADD R0.xyz, R0, c[2];\n"
2224 "RCP R0.z, R0.z;\n"
2225 "MUL R0.xy, R0, R0.z;\n"
2226 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2227 "MUL R0.xy, R0, c[3];\n"
2228 "ADD R0.z, R0, R0.w;\n"
2229 "ADD R0.x, R0, R0.y;\n"
2230 "MUL R0.z, c[5].x, -R0;\n"
2231 "MUL R0.y, R0.z, c[4];\n"
2232 "MUL R0.x, R0, c[4];\n"
2233 "MAD R0.y, R0.x, R0.x, -R0;\n"
2234 "MOV R0.z, c[4].x;\n"
2235 "RSQ R0.y, R0.y;\n"
2236 "RCP R0.y, R0.y;\n"
2237 "MUL R0.z, c[5].x, R0;\n"
2238 "MUL R1.xy, fragment.position, c[6];\n"
2239 "TEX R1, R1, texture[0], 2D;\n"
2240 "ADD R0.x, -R0, R0.y;\n"
2241 "RCP R0.z, R0.z;\n"
2242 "MUL R0.x, R0, R0.z;\n"
2243 "TEX R0, R0, texture[1], 1D;\n"
2244 "MUL R2.xyz, R1, R0.w;\n"
2245 "MAD R3.xyz, R0, R1.w, R2;\n"
2246 "MUL R2.xyz, R0, R1;\n"
2247 "MAD R2.xyz, -R2, c[4].x, R3;\n"
2248 "ADD R2.w, -R1, c[4].z;\n"
2249 "MAD R0.xyz, R0, R2.w, R2;\n"
2250 "ADD R2.x, R0.w, R1.w;\n"
2251 "ADD R2.y, -R0.w, c[4].z;\n"
2252 "MAD result.color.xyz, R1, R2.y, R0;\n"
2253 "MAD result.color.w, -R0, R1, R2.x;\n"
2254 "END\n"
2255 ;
2256
2257static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK =
2258 "!!ARBfp1.0\n"
2259 "PARAM c[9] = { program.local[0..3],\n"
2260 " { 2, 4 },\n"
2261 " program.local[5..8] };\n"
2262 "TEMP R0;\n"
2263 "TEMP R1;\n"
2264 "MUL R0.xyz, fragment.position.y, c[1];\n"
2265 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
2266 "ADD R0.xyz, R0, c[2];\n"
2267 "RCP R0.z, R0.z;\n"
2268 "MUL R0.xy, R0, R0.z;\n"
2269 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2270 "MUL R0.xy, R0, c[3];\n"
2271 "ADD R0.z, R0, R0.w;\n"
2272 "ADD R0.x, R0, R0.y;\n"
2273 "MUL R0.z, c[5].x, -R0;\n"
2274 "MUL R0.y, R0.z, c[4];\n"
2275 "MUL R0.x, R0, c[4];\n"
2276 "MAD R0.y, R0.x, R0.x, -R0;\n"
2277 "RSQ R0.y, R0.y;\n"
2278 "RCP R0.y, R0.y;\n"
2279 "ADD R1.x, -R0, R0.y;\n"
2280 "MOV R0.z, c[4].x;\n"
2281 "MUL R0.z, c[5].x, R0;\n"
2282 "RCP R1.y, R0.z;\n"
2283 "ADD R0.xy, fragment.position, c[6];\n"
2284 "MUL R0.xy, R0, c[7];\n"
2285 "TEX R0, R0, texture[0], 2D;\n"
2286 "MUL R1.x, R1, R1.y;\n"
2287 "DP4 R1.y, R0, c[8];\n"
2288 "TEX R0, R1, texture[1], 1D;\n"
2289 "MUL result.color, R0, R1.y;\n"
2290 "END\n"
2291 ;
2292
2293static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
2294 "!!ARBfp1.0\n"
2295 "PARAM c[6] = { program.local[0..3],\n"
2296 " { 2, 4 },\n"
2297 " program.local[5] };\n"
2298 "TEMP R0;\n"
2299 "MUL R0.xyz, fragment.position.y, c[1];\n"
2300 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
2301 "ADD R0.xyz, R0, c[2];\n"
2302 "RCP R0.z, R0.z;\n"
2303 "MUL R0.xy, R0, R0.z;\n"
2304 "MUL R0.zw, R0.xyxy, R0.xyxy;\n"
2305 "MUL R0.xy, R0, c[3];\n"
2306 "ADD R0.x, R0, R0.y;\n"
2307 "ADD R0.z, R0, R0.w;\n"
2308 "MUL R0.z, c[5].x, -R0;\n"
2309 "MUL R0.y, R0.z, c[4];\n"
2310 "MUL R0.x, R0, c[4];\n"
2311 "MAD R0.y, R0.x, R0.x, -R0;\n"
2312 "MOV R0.z, c[4].x;\n"
2313 "RSQ R0.y, R0.y;\n"
2314 "MUL R0.z, c[5].x, R0;\n"
2315 "RCP R0.y, R0.y;\n"
2316 "RCP R0.z, R0.z;\n"
2317 "ADD R0.x, -R0, R0.y;\n"
2318 "MUL R0.x, R0, R0.z;\n"
2319 "TEX result.color, R0, texture[0], 1D;\n"
2320 "END\n"
2321 ;
2322
2323static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
2324 "!!ARBfp1.0\n"
2325 "PARAM c[13] = { program.local[0..5],\n"
2326 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2327 " { 2.3561945, 0.78539819, -1, 1 },\n"
2328 " program.local[8],\n"
2329 " { 0.15915494 },\n"
2330 " program.local[10..12] };\n"
2331 "TEMP R0;\n"
2332 "TEMP R1;\n"
2333 "TEMP R2;\n"
2334 "TEMP R3;\n"
2335 "MUL R0.xyz, fragment.position.y, c[4];\n"
2336 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2337 "ADD R0.xyz, R0, c[5];\n"
2338 "RCP R0.z, R0.z;\n"
2339 "MUL R0.xy, R0, R0.z;\n"
2340 "ABS R0.w, R0.x;\n"
2341 "ABS R0.z, R0.y;\n"
2342 "ADD R0.z, R0, -R0.w;\n"
2343 "ADD R0.w, R0.y, c[6].x;\n"
2344 "ABS R0.z, R0;\n"
2345 "CMP R0.y, -R0.z, R0, R0.w;\n"
2346 "ABS R0.z, -R0.y;\n"
2347 "ADD R0.z, R0, c[6].y;\n"
2348 "ADD R0.w, R0.x, R0.z;\n"
2349 "ADD R1.x, R0.z, -R0;\n"
2350 "RCP R1.y, R0.w;\n"
2351 "RCP R1.x, R1.x;\n"
2352 "MUL R0.w, R0, R1.x;\n"
2353 "ADD R0.z, R0.x, -R0;\n"
2354 "MUL R0.z, R0, R1.y;\n"
2355 "CMP R0.z, R0.x, R0.w, R0;\n"
2356 "MUL R0.w, R0.z, R0.z;\n"
2357 "MOV R1.x, c[7].y;\n"
2358 "CMP R0.x, R0, c[7], R1;\n"
2359 "MAD R0.w, R0, c[6].z, -c[6];\n"
2360 "MAD R0.x, R0.w, R0.z, R0;\n"
2361 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2362 "MAD R0.x, R0, R0.y, c[8];\n"
2363 "MUL R0.x, R0, c[9];\n"
2364 "FLR R0.y, R0.x;\n"
2365 "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
2366 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2367 "ADD R0.x, R0, -R0.y;\n"
2368 "TEX R0, R0, texture[2], 1D;\n"
2369 "MUL R2.xyz, R1, c[12].y;\n"
2370 "MUL R3.xyz, R2, R0.w;\n"
2371 "MUL R2.xyz, R0, c[12].x;\n"
2372 "MAD R2.xyz, R2, R1.w, R3;\n"
2373 "ADD R3.xy, fragment.position, c[0];\n"
2374 "ADD R2.w, -R1, c[7];\n"
2375 "MUL R0.xyz, R0, c[11].y;\n"
2376 "MAD R2.xyz, R0, R2.w, R2;\n"
2377 "MUL R0.xyz, R1, c[11].z;\n"
2378 "ADD R3.z, -R0.w, c[7].w;\n"
2379 "MAD R2.xyz, R0, R3.z, R2;\n"
2380 "MUL R0.y, R0.w, R2.w;\n"
2381 "MUL R0.x, R0.w, R1.w;\n"
2382 "MUL R0.z, R1.w, R3;\n"
2383 "DP3 R2.w, R0, c[11];\n"
2384 "MUL R3.xy, R3, c[1];\n"
2385 "TEX R0, R3, texture[1], 2D;\n"
2386 "ADD R2, R2, -R1;\n"
2387 "DP4 R0.x, R0, c[2];\n"
2388 "MAD result.color, R0.x, R2, R1;\n"
2389 "END\n"
2390 ;
2391
2392static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY =
2393 "!!ARBfp1.0\n"
2394 "PARAM c[11] = { program.local[0..5],\n"
2395 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2396 " { 2.3561945, 0.78539819, -1, 1 },\n"
2397 " program.local[8],\n"
2398 " { 0.15915494 },\n"
2399 " program.local[10] };\n"
2400 "TEMP R0;\n"
2401 "TEMP R1;\n"
2402 "TEMP R2;\n"
2403 "MUL R0.xyz, fragment.position.y, c[4];\n"
2404 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2405 "ADD R0.xyz, R0, c[5];\n"
2406 "RCP R0.z, R0.z;\n"
2407 "MUL R0.xy, R0, R0.z;\n"
2408 "ABS R0.w, R0.x;\n"
2409 "ABS R0.z, R0.y;\n"
2410 "ADD R0.z, R0, -R0.w;\n"
2411 "ADD R0.w, R0.y, c[6].x;\n"
2412 "ABS R0.z, R0;\n"
2413 "CMP R0.y, -R0.z, R0, R0.w;\n"
2414 "ABS R0.z, -R0.y;\n"
2415 "ADD R0.z, R0, c[6].y;\n"
2416 "ADD R0.w, R0.x, R0.z;\n"
2417 "ADD R1.x, R0.z, -R0;\n"
2418 "RCP R1.y, R0.w;\n"
2419 "RCP R1.x, R1.x;\n"
2420 "MUL R0.w, R0, R1.x;\n"
2421 "ADD R0.z, R0.x, -R0;\n"
2422 "MUL R0.z, R0, R1.y;\n"
2423 "CMP R0.z, R0.x, R0.w, R0;\n"
2424 "MUL R0.w, R0.z, R0.z;\n"
2425 "MOV R1.x, c[7].y;\n"
2426 "CMP R0.x, R0, c[7], R1;\n"
2427 "MAD R0.w, R0, c[6].z, -c[6];\n"
2428 "MAD R0.x, R0.w, R0.z, R0;\n"
2429 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2430 "MAD R0.x, R0, R0.y, c[8];\n"
2431 "MUL R0.x, R0, c[9];\n"
2432 "FLR R0.y, R0.x;\n"
2433 "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
2434 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2435 "ADD R0.x, R0, -R0.y;\n"
2436 "TEX R0, R0, texture[2], 1D;\n"
2437 "ADD R2.x, -R1.w, c[7].w;\n"
2438 "MUL R2.xyz, R0, R2.x;\n"
2439 "MAD R0.xyz, R0, R1, R2;\n"
2440 "ADD R2.x, -R0.w, c[7].w;\n"
2441 "MAD R2.xyz, R1, R2.x, R0;\n"
2442 "ADD R0.z, R0.w, R1.w;\n"
2443 "MAD R2.w, -R0, R1, R0.z;\n"
2444 "ADD R0.xy, fragment.position, c[0];\n"
2445 "MUL R0.xy, R0, c[1];\n"
2446 "TEX R0, R0, texture[1], 2D;\n"
2447 "ADD R2, R2, -R1;\n"
2448 "DP4 R0.x, R0, c[2];\n"
2449 "MAD result.color, R0.x, R2, R1;\n"
2450 "END\n"
2451 ;
2452
2453static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN =
2454 "!!ARBfp1.0\n"
2455 "PARAM c[11] = { program.local[0..5],\n"
2456 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2457 " { 2.3561945, 0.78539819, -1, 1 },\n"
2458 " program.local[8],\n"
2459 " { 0.15915494 },\n"
2460 " program.local[10] };\n"
2461 "TEMP R0;\n"
2462 "TEMP R1;\n"
2463 "TEMP R2;\n"
2464 "TEMP R3;\n"
2465 "MUL R0.xyz, fragment.position.y, c[4];\n"
2466 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2467 "ADD R0.xyz, R0, c[5];\n"
2468 "RCP R0.z, R0.z;\n"
2469 "MUL R0.xy, R0, R0.z;\n"
2470 "ADD R3.xy, fragment.position, c[0];\n"
2471 "ABS R0.w, R0.x;\n"
2472 "ABS R0.z, R0.y;\n"
2473 "ADD R0.z, R0, -R0.w;\n"
2474 "ADD R0.w, R0.y, c[6].x;\n"
2475 "ABS R0.z, R0;\n"
2476 "CMP R0.y, -R0.z, R0, R0.w;\n"
2477 "ABS R0.z, -R0.y;\n"
2478 "ADD R0.z, R0, c[6].y;\n"
2479 "ADD R0.w, R0.x, R0.z;\n"
2480 "ADD R1.x, R0.z, -R0;\n"
2481 "RCP R1.y, R0.w;\n"
2482 "RCP R1.x, R1.x;\n"
2483 "MUL R0.w, R0, R1.x;\n"
2484 "ADD R0.z, R0.x, -R0;\n"
2485 "MUL R0.z, R0, R1.y;\n"
2486 "CMP R0.z, R0.x, R0.w, R0;\n"
2487 "MUL R0.w, R0.z, R0.z;\n"
2488 "MOV R1.x, c[7].y;\n"
2489 "CMP R0.x, R0, c[7], R1;\n"
2490 "MAD R0.w, R0, c[6].z, -c[6];\n"
2491 "MUL R1.xy, fragment.position, c[10];\n"
2492 "TEX R1, R1, texture[0], 2D;\n"
2493 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2494 "MAD R0.x, R0.w, R0.z, R0;\n"
2495 "MAD R0.x, R0, R0.y, c[8];\n"
2496 "MUL R0.x, R0, c[9];\n"
2497 "FLR R0.y, R0.x;\n"
2498 "ADD R0.x, R0, -R0.y;\n"
2499 "TEX R0, R0, texture[2], 1D;\n"
2500 "ADD R2, R0, R1;\n"
2501 "MAD R2, -R0, R1, R2;\n"
2502 "MUL R3.xy, R3, c[1];\n"
2503 "TEX R0, R3, texture[1], 2D;\n"
2504 "ADD R2, R2, -R1;\n"
2505 "DP4 R0.x, R0, c[2];\n"
2506 "MAD result.color, R0.x, R2, R1;\n"
2507 "END\n"
2508 ;
2509
2510static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY =
2511 "!!ARBfp1.0\n"
2512 "PARAM c[11] = { program.local[0..5],\n"
2513 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2514 " { 2.3561945, 0.78539819, -1, 1 },\n"
2515 " program.local[8],\n"
2516 " { 0.15915494, 2 },\n"
2517 " program.local[10] };\n"
2518 "TEMP R0;\n"
2519 "TEMP R1;\n"
2520 "TEMP R2;\n"
2521 "TEMP R3;\n"
2522 "TEMP R4;\n"
2523 "MUL R0.xyz, fragment.position.y, c[4];\n"
2524 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2525 "ADD R0.xyz, R0, c[5];\n"
2526 "RCP R0.z, R0.z;\n"
2527 "MUL R0.xy, R0, R0.z;\n"
2528 "ABS R0.w, R0.x;\n"
2529 "ABS R0.z, R0.y;\n"
2530 "ADD R0.z, R0, -R0.w;\n"
2531 "ADD R0.w, R0.y, c[6].x;\n"
2532 "ABS R0.z, R0;\n"
2533 "CMP R0.y, -R0.z, R0, R0.w;\n"
2534 "ABS R0.z, -R0.y;\n"
2535 "ADD R0.z, R0, c[6].y;\n"
2536 "ADD R0.w, R0.x, R0.z;\n"
2537 "ADD R1.x, R0.z, -R0;\n"
2538 "RCP R1.y, R0.w;\n"
2539 "RCP R1.x, R1.x;\n"
2540 "MUL R0.w, R0, R1.x;\n"
2541 "ADD R0.z, R0.x, -R0;\n"
2542 "MUL R0.z, R0, R1.y;\n"
2543 "CMP R0.z, R0.x, R0.w, R0;\n"
2544 "MUL R0.w, R0.z, R0.z;\n"
2545 "MOV R1.x, c[7].y;\n"
2546 "CMP R0.x, R0, c[7], R1;\n"
2547 "MAD R0.w, R0, c[6].z, -c[6];\n"
2548 "MUL R1.xy, fragment.position, c[10];\n"
2549 "TEX R1, R1, texture[0], 2D;\n"
2550 "ADD R2.w, -R1, c[7];\n"
2551 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2552 "MAD R0.x, R0.w, R0.z, R0;\n"
2553 "MAD R0.x, R0, R0.y, c[8];\n"
2554 "MUL R0.x, R0, c[9];\n"
2555 "FLR R0.y, R0.x;\n"
2556 "ADD R0.x, R0, -R0.y;\n"
2557 "TEX R0, R0, texture[2], 1D;\n"
2558 "ADD R3.xyz, R0.w, -R0;\n"
2559 "ADD R2.xyz, R1.w, -R1;\n"
2560 "MUL R2.xyz, R2, R3;\n"
2561 "MUL R2.xyz, R2, c[9].y;\n"
2562 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
2563 "MUL R4.xyz, R0, R2.w;\n"
2564 "MUL R3.xyz, R0, R1;\n"
2565 "MAD R0.xyz, R0, R2.w, R2;\n"
2566 "ADD R2.x, -R0.w, c[7].w;\n"
2567 "MAD R3.xyz, R3, c[9].y, R4;\n"
2568 "MAD R3.xyz, R1, R2.x, R3;\n"
2569 "MAD R0.xyz, R1, R2.x, R0;\n"
2570 "MUL R2.xyz, R1, c[9].y;\n"
2571 "ADD R0.xyz, R0, -R3;\n"
2572 "SGE R2.xyz, R2, R1.w;\n"
2573 "MAD R2.xyz, R2, R0, R3;\n"
2574 "ADD R0.z, R0.w, R1.w;\n"
2575 "MAD R2.w, -R0, R1, R0.z;\n"
2576 "ADD R0.xy, fragment.position, c[0];\n"
2577 "MUL R0.xy, R0, c[1];\n"
2578 "TEX R0, R0, texture[1], 2D;\n"
2579 "ADD R2, R2, -R1;\n"
2580 "DP4 R0.x, R0, c[2];\n"
2581 "MAD result.color, R0.x, R2, R1;\n"
2582 "END\n"
2583 ;
2584
2585static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN =
2586 "!!ARBfp1.0\n"
2587 "PARAM c[11] = { program.local[0..5],\n"
2588 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2589 " { 2.3561945, 0.78539819, -1, 1 },\n"
2590 " program.local[8],\n"
2591 " { 0.15915494 },\n"
2592 " program.local[10] };\n"
2593 "TEMP R0;\n"
2594 "TEMP R1;\n"
2595 "TEMP R2;\n"
2596 "TEMP R3;\n"
2597 "MUL R0.xyz, fragment.position.y, c[4];\n"
2598 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2599 "ADD R0.xyz, R0, c[5];\n"
2600 "RCP R0.z, R0.z;\n"
2601 "MUL R0.xy, R0, R0.z;\n"
2602 "ABS R0.w, R0.x;\n"
2603 "ABS R0.z, R0.y;\n"
2604 "ADD R0.z, R0, -R0.w;\n"
2605 "ADD R0.w, R0.y, c[6].x;\n"
2606 "ABS R0.z, R0;\n"
2607 "CMP R0.y, -R0.z, R0, R0.w;\n"
2608 "ABS R0.z, -R0.y;\n"
2609 "ADD R0.z, R0, c[6].y;\n"
2610 "ADD R0.w, R0.x, R0.z;\n"
2611 "ADD R1.x, R0.z, -R0;\n"
2612 "RCP R1.y, R0.w;\n"
2613 "RCP R1.x, R1.x;\n"
2614 "MUL R0.w, R0, R1.x;\n"
2615 "ADD R0.z, R0.x, -R0;\n"
2616 "MUL R0.z, R0, R1.y;\n"
2617 "CMP R0.z, R0.x, R0.w, R0;\n"
2618 "MUL R0.w, R0.z, R0.z;\n"
2619 "MOV R1.x, c[7].y;\n"
2620 "CMP R0.x, R0, c[7], R1;\n"
2621 "MAD R0.w, R0, c[6].z, -c[6];\n"
2622 "MUL R1.xy, fragment.position, c[10];\n"
2623 "TEX R1, R1, texture[0], 2D;\n"
2624 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2625 "MAD R0.x, R0.w, R0.z, R0;\n"
2626 "MAD R0.x, R0, R0.y, c[8];\n"
2627 "MUL R0.x, R0, c[9];\n"
2628 "FLR R0.y, R0.x;\n"
2629 "ADD R0.x, R0, -R0.y;\n"
2630 "TEX R0, R0, texture[2], 1D;\n"
2631 "MUL R3.xyz, R1, R0.w;\n"
2632 "MUL R2.xyz, R0, R1.w;\n"
2633 "MIN R2.xyz, R2, R3;\n"
2634 "ADD R2.w, -R1, c[7];\n"
2635 "MAD R0.xyz, R0, R2.w, R2;\n"
2636 "ADD R2.x, -R0.w, c[7].w;\n"
2637 "MAD R2.xyz, R1, R2.x, R0;\n"
2638 "ADD R0.z, R0.w, R1.w;\n"
2639 "MAD R2.w, -R0, R1, R0.z;\n"
2640 "ADD R0.xy, fragment.position, c[0];\n"
2641 "MUL R0.xy, R0, c[1];\n"
2642 "TEX R0, R0, texture[1], 2D;\n"
2643 "ADD R2, R2, -R1;\n"
2644 "DP4 R0.x, R0, c[2];\n"
2645 "MAD result.color, R0.x, R2, R1;\n"
2646 "END\n"
2647 ;
2648
2649static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN =
2650 "!!ARBfp1.0\n"
2651 "PARAM c[11] = { program.local[0..5],\n"
2652 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2653 " { 2.3561945, 0.78539819, -1, 1 },\n"
2654 " program.local[8],\n"
2655 " { 0.15915494 },\n"
2656 " program.local[10] };\n"
2657 "TEMP R0;\n"
2658 "TEMP R1;\n"
2659 "TEMP R2;\n"
2660 "TEMP R3;\n"
2661 "MUL R0.xyz, fragment.position.y, c[4];\n"
2662 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2663 "ADD R0.xyz, R0, c[5];\n"
2664 "RCP R0.z, R0.z;\n"
2665 "MUL R0.xy, R0, R0.z;\n"
2666 "ABS R0.w, R0.x;\n"
2667 "ABS R0.z, R0.y;\n"
2668 "ADD R0.z, R0, -R0.w;\n"
2669 "ADD R0.w, R0.y, c[6].x;\n"
2670 "ABS R0.z, R0;\n"
2671 "CMP R0.y, -R0.z, R0, R0.w;\n"
2672 "ABS R0.z, -R0.y;\n"
2673 "ADD R0.z, R0, c[6].y;\n"
2674 "ADD R0.w, R0.x, R0.z;\n"
2675 "ADD R1.x, R0.z, -R0;\n"
2676 "RCP R1.y, R0.w;\n"
2677 "RCP R1.x, R1.x;\n"
2678 "MUL R0.w, R0, R1.x;\n"
2679 "ADD R0.z, R0.x, -R0;\n"
2680 "MUL R0.z, R0, R1.y;\n"
2681 "CMP R0.z, R0.x, R0.w, R0;\n"
2682 "MUL R0.w, R0.z, R0.z;\n"
2683 "MOV R1.x, c[7].y;\n"
2684 "CMP R0.x, R0, c[7], R1;\n"
2685 "MAD R0.w, R0, c[6].z, -c[6];\n"
2686 "MUL R1.xy, fragment.position, c[10];\n"
2687 "TEX R1, R1, texture[0], 2D;\n"
2688 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2689 "MAD R0.x, R0.w, R0.z, R0;\n"
2690 "MAD R0.x, R0, R0.y, c[8];\n"
2691 "MUL R0.x, R0, c[9];\n"
2692 "FLR R0.y, R0.x;\n"
2693 "ADD R0.x, R0, -R0.y;\n"
2694 "TEX R0, R0, texture[2], 1D;\n"
2695 "MUL R3.xyz, R1, R0.w;\n"
2696 "MUL R2.xyz, R0, R1.w;\n"
2697 "MAX R2.xyz, R2, R3;\n"
2698 "ADD R2.w, -R1, c[7];\n"
2699 "MAD R0.xyz, R0, R2.w, R2;\n"
2700 "ADD R2.x, -R0.w, c[7].w;\n"
2701 "MAD R2.xyz, R1, R2.x, R0;\n"
2702 "ADD R0.z, R0.w, R1.w;\n"
2703 "MAD R2.w, -R0, R1, R0.z;\n"
2704 "ADD R0.xy, fragment.position, c[0];\n"
2705 "MUL R0.xy, R0, c[1];\n"
2706 "TEX R0, R0, texture[1], 2D;\n"
2707 "ADD R2, R2, -R1;\n"
2708 "DP4 R0.x, R0, c[2];\n"
2709 "MAD result.color, R0.x, R2, R1;\n"
2710 "END\n"
2711 ;
2712
2713static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE =
2714 "!!ARBfp1.0\n"
2715 "PARAM c[11] = { program.local[0..5],\n"
2716 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2717 " { 2.3561945, 0.78539819, -1, 1 },\n"
2718 " program.local[8],\n"
2719 " { 0.15915494, 1e-06 },\n"
2720 " program.local[10] };\n"
2721 "TEMP R0;\n"
2722 "TEMP R1;\n"
2723 "TEMP R2;\n"
2724 "TEMP R3;\n"
2725 "TEMP R4;\n"
2726 "MUL R0.xyz, fragment.position.y, c[4];\n"
2727 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2728 "ADD R0.xyz, R0, c[5];\n"
2729 "RCP R0.z, R0.z;\n"
2730 "MUL R0.xy, R0, R0.z;\n"
2731 "ABS R0.w, R0.x;\n"
2732 "ABS R0.z, R0.y;\n"
2733 "ADD R0.z, R0, -R0.w;\n"
2734 "ADD R0.w, R0.y, c[6].x;\n"
2735 "ABS R0.z, R0;\n"
2736 "CMP R0.y, -R0.z, R0, R0.w;\n"
2737 "ABS R0.z, -R0.y;\n"
2738 "ADD R0.z, R0, c[6].y;\n"
2739 "ADD R0.w, R0.x, R0.z;\n"
2740 "ADD R1.x, R0.z, -R0;\n"
2741 "RCP R1.y, R0.w;\n"
2742 "RCP R1.x, R1.x;\n"
2743 "MUL R0.w, R0, R1.x;\n"
2744 "ADD R0.z, R0.x, -R0;\n"
2745 "MUL R0.z, R0, R1.y;\n"
2746 "CMP R0.z, R0.x, R0.w, R0;\n"
2747 "MUL R0.w, R0.z, R0.z;\n"
2748 "MOV R1.x, c[7].y;\n"
2749 "CMP R0.x, R0, c[7], R1;\n"
2750 "MAD R0.w, R0, c[6].z, -c[6];\n"
2751 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2752 "MAD R0.x, R0.w, R0.z, R0;\n"
2753 "MAD R0.x, R0, R0.y, c[8];\n"
2754 "MUL R0.x, R0, c[9];\n"
2755 "FLR R0.y, R0.x;\n"
2756 "ADD R0.x, R0, -R0.y;\n"
2757 "TEX R0, R0, texture[2], 1D;\n"
2758 "MAX R1.x, R0.w, c[9].y;\n"
2759 "RCP R1.x, R1.x;\n"
2760 "MAD R1.xyz, -R0, R1.x, c[7].w;\n"
2761 "MAX R2.xyz, R1, c[9].y;\n"
2762 "MUL R1.xy, fragment.position, c[10];\n"
2763 "TEX R1, R1, texture[0], 2D;\n"
2764 "ADD R2.w, -R0, c[7];\n"
2765 "MUL R3.xyz, R1, R2.w;\n"
2766 "ADD R2.w, -R1, c[7];\n"
2767 "MAD R4.xyz, R0, R2.w, R3;\n"
2768 "MUL R3.xyz, R1, R0.w;\n"
2769 "MUL R2.w, R0, R1;\n"
2770 "MAD R0.xyz, R0, R1.w, R3;\n"
2771 "SGE R0.xyz, R0, R2.w;\n"
2772 "RCP R2.x, R2.x;\n"
2773 "RCP R2.y, R2.y;\n"
2774 "RCP R2.z, R2.z;\n"
2775 "MAD R2.xyz, R3, R2, R4;\n"
2776 "MAD R4.xyz, R0.w, R1.w, R4;\n"
2777 "ADD R4.xyz, R4, -R2;\n"
2778 "MAD R2.xyz, R0, R4, R2;\n"
2779 "ADD R0.z, R0.w, R1.w;\n"
2780 "MAD R2.w, -R0, R1, R0.z;\n"
2781 "ADD R0.xy, fragment.position, c[0];\n"
2782 "MUL R0.xy, R0, c[1];\n"
2783 "TEX R0, R0, texture[1], 2D;\n"
2784 "ADD R2, R2, -R1;\n"
2785 "DP4 R0.x, R0, c[2];\n"
2786 "MAD result.color, R0.x, R2, R1;\n"
2787 "END\n"
2788 ;
2789
2790static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN =
2791 "!!ARBfp1.0\n"
2792 "PARAM c[11] = { program.local[0..5],\n"
2793 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2794 " { 2.3561945, 0.78539819, -1, 1 },\n"
2795 " program.local[8],\n"
2796 " { 0.15915494, 9.9999997e-06 },\n"
2797 " program.local[10] };\n"
2798 "TEMP R0;\n"
2799 "TEMP R1;\n"
2800 "TEMP R2;\n"
2801 "TEMP R3;\n"
2802 "TEMP R4;\n"
2803 "TEMP R5;\n"
2804 "MUL R0.xyz, fragment.position.y, c[4];\n"
2805 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2806 "ADD R0.xyz, R0, c[5];\n"
2807 "RCP R0.z, R0.z;\n"
2808 "MUL R0.xy, R0, R0.z;\n"
2809 "ABS R0.w, R0.x;\n"
2810 "ABS R0.z, R0.y;\n"
2811 "ADD R0.z, R0, -R0.w;\n"
2812 "ADD R0.w, R0.y, c[6].x;\n"
2813 "ABS R0.z, R0;\n"
2814 "CMP R0.y, -R0.z, R0, R0.w;\n"
2815 "ABS R0.z, -R0.y;\n"
2816 "ADD R0.z, R0, c[6].y;\n"
2817 "ADD R0.w, R0.x, R0.z;\n"
2818 "ADD R1.x, R0.z, -R0;\n"
2819 "RCP R1.y, R0.w;\n"
2820 "RCP R1.x, R1.x;\n"
2821 "MUL R0.w, R0, R1.x;\n"
2822 "ADD R0.z, R0.x, -R0;\n"
2823 "MUL R0.z, R0, R1.y;\n"
2824 "CMP R0.z, R0.x, R0.w, R0;\n"
2825 "MUL R0.w, R0.z, R0.z;\n"
2826 "MOV R1.x, c[7].y;\n"
2827 "CMP R0.x, R0, c[7], R1;\n"
2828 "MAD R0.w, R0, c[6].z, -c[6];\n"
2829 "MUL R1.xy, fragment.position, c[10];\n"
2830 "TEX R1, R1, texture[0], 2D;\n"
2831 "ADD R2.w, -R1, c[7];\n"
2832 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2833 "MAD R0.x, R0.w, R0.z, R0;\n"
2834 "MAD R0.x, R0, R0.y, c[8];\n"
2835 "MUL R0.x, R0, c[9];\n"
2836 "FLR R0.y, R0.x;\n"
2837 "ADD R0.x, R0, -R0.y;\n"
2838 "TEX R0, R0, texture[2], 1D;\n"
2839 "MUL R2.xyz, R1, R0.w;\n"
2840 "MAD R3.xyz, R0, R1.w, R2;\n"
2841 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
2842 "MUL R4.xyz, R0.w, R2;\n"
2843 "MAX R2.xyz, R0, c[9].y;\n"
2844 "ADD R3.w, -R0, c[7];\n"
2845 "MUL R5.xyz, R0, R2.w;\n"
2846 "RCP R2.x, R2.x;\n"
2847 "RCP R2.y, R2.y;\n"
2848 "RCP R2.z, R2.z;\n"
2849 "MAD R2.xyz, R4, R2, R5;\n"
2850 "MUL R4.xyz, R1, R3.w;\n"
2851 "MAD R0.xyz, R0, R2.w, R4;\n"
2852 "MUL R2.w, R0, R1;\n"
2853 "MAD R2.xyz, R1, R3.w, R2;\n"
2854 "ADD R2.xyz, R2, -R0;\n"
2855 "SGE R3.xyz, R3, R2.w;\n"
2856 "MAD R2.xyz, R3, R2, R0;\n"
2857 "ADD R0.z, R0.w, R1.w;\n"
2858 "MAD R2.w, -R0, R1, R0.z;\n"
2859 "ADD R0.xy, fragment.position, c[0];\n"
2860 "MUL R0.xy, R0, c[1];\n"
2861 "TEX R0, R0, texture[1], 2D;\n"
2862 "ADD R2, R2, -R1;\n"
2863 "DP4 R0.x, R0, c[2];\n"
2864 "MAD result.color, R0.x, R2, R1;\n"
2865 "END\n"
2866 ;
2867
2868static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT =
2869 "!!ARBfp1.0\n"
2870 "PARAM c[11] = { program.local[0..5],\n"
2871 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2872 " { 2.3561945, 0.78539819, -1, 1 },\n"
2873 " program.local[8],\n"
2874 " { 0.15915494, 2 },\n"
2875 " program.local[10] };\n"
2876 "TEMP R0;\n"
2877 "TEMP R1;\n"
2878 "TEMP R2;\n"
2879 "TEMP R3;\n"
2880 "TEMP R4;\n"
2881 "MUL R0.xyz, fragment.position.y, c[4];\n"
2882 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2883 "ADD R0.xyz, R0, c[5];\n"
2884 "RCP R0.z, R0.z;\n"
2885 "MUL R0.xy, R0, R0.z;\n"
2886 "ABS R0.w, R0.x;\n"
2887 "ABS R0.z, R0.y;\n"
2888 "ADD R0.z, R0, -R0.w;\n"
2889 "ADD R0.w, R0.y, c[6].x;\n"
2890 "ABS R0.z, R0;\n"
2891 "CMP R0.y, -R0.z, R0, R0.w;\n"
2892 "ABS R0.z, -R0.y;\n"
2893 "ADD R0.z, R0, c[6].y;\n"
2894 "ADD R0.w, R0.x, R0.z;\n"
2895 "ADD R1.x, R0.z, -R0;\n"
2896 "RCP R1.y, R0.w;\n"
2897 "RCP R1.x, R1.x;\n"
2898 "MUL R0.w, R0, R1.x;\n"
2899 "ADD R0.z, R0.x, -R0;\n"
2900 "MUL R0.z, R0, R1.y;\n"
2901 "CMP R0.z, R0.x, R0.w, R0;\n"
2902 "MUL R0.w, R0.z, R0.z;\n"
2903 "MOV R1.x, c[7].y;\n"
2904 "CMP R0.x, R0, c[7], R1;\n"
2905 "MAD R0.w, R0, c[6].z, -c[6];\n"
2906 "MUL R1.xy, fragment.position, c[10];\n"
2907 "TEX R1, R1, texture[0], 2D;\n"
2908 "ADD R2.w, -R1, c[7];\n"
2909 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2910 "MAD R0.x, R0.w, R0.z, R0;\n"
2911 "MAD R0.x, R0, R0.y, c[8];\n"
2912 "MUL R0.x, R0, c[9];\n"
2913 "FLR R0.y, R0.x;\n"
2914 "ADD R0.x, R0, -R0.y;\n"
2915 "TEX R0, R0, texture[2], 1D;\n"
2916 "ADD R3.xyz, R0.w, -R0;\n"
2917 "ADD R2.xyz, R1.w, -R1;\n"
2918 "MUL R2.xyz, R2, R3;\n"
2919 "MUL R2.xyz, R2, c[9].y;\n"
2920 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
2921 "MUL R4.xyz, R0, R2.w;\n"
2922 "MAD R2.xyz, R0, R2.w, R2;\n"
2923 "MUL R3.xyz, R0, R1;\n"
2924 "ADD R2.w, -R0, c[7];\n"
2925 "MAD R3.xyz, R3, c[9].y, R4;\n"
2926 "MUL R0.xyz, R0, c[9].y;\n"
2927 "SGE R0.xyz, R0, R0.w;\n"
2928 "MAD R3.xyz, R1, R2.w, R3;\n"
2929 "MAD R2.xyz, R1, R2.w, R2;\n"
2930 "ADD R2.xyz, R2, -R3;\n"
2931 "MAD R2.xyz, R0, R2, R3;\n"
2932 "ADD R0.z, R0.w, R1.w;\n"
2933 "MAD R2.w, -R0, R1, R0.z;\n"
2934 "ADD R0.xy, fragment.position, c[0];\n"
2935 "MUL R0.xy, R0, c[1];\n"
2936 "TEX R0, R0, texture[1], 2D;\n"
2937 "ADD R2, R2, -R1;\n"
2938 "DP4 R0.x, R0, c[2];\n"
2939 "MAD result.color, R0.x, R2, R1;\n"
2940 "END\n"
2941 ;
2942
2943static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT =
2944 "!!ARBfp1.0\n"
2945 "PARAM c[12] = { program.local[0..5],\n"
2946 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
2947 " { 2.3561945, 0.78539819, -1, 1 },\n"
2948 " program.local[8],\n"
2949 " { 0.15915494, 9.9999997e-06, 2, 8 },\n"
2950 " program.local[10],\n"
2951 " { 3 } };\n"
2952 "TEMP R0;\n"
2953 "TEMP R1;\n"
2954 "TEMP R2;\n"
2955 "TEMP R3;\n"
2956 "TEMP R4;\n"
2957 "TEMP R5;\n"
2958 "TEMP R6;\n"
2959 "MUL R0.xyz, fragment.position.y, c[4];\n"
2960 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
2961 "ADD R0.xyz, R0, c[5];\n"
2962 "RCP R0.z, R0.z;\n"
2963 "MUL R0.xy, R0, R0.z;\n"
2964 "ABS R0.w, R0.x;\n"
2965 "ABS R0.z, R0.y;\n"
2966 "ADD R0.z, R0, -R0.w;\n"
2967 "ADD R0.w, R0.y, c[6].x;\n"
2968 "ABS R0.z, R0;\n"
2969 "CMP R0.y, -R0.z, R0, R0.w;\n"
2970 "ABS R0.z, -R0.y;\n"
2971 "ADD R0.z, R0, c[6].y;\n"
2972 "ADD R0.w, R0.x, R0.z;\n"
2973 "ADD R1.x, R0.z, -R0;\n"
2974 "RCP R1.y, R0.w;\n"
2975 "RCP R1.x, R1.x;\n"
2976 "MUL R0.w, R0, R1.x;\n"
2977 "ADD R0.z, R0.x, -R0;\n"
2978 "MUL R0.z, R0, R1.y;\n"
2979 "CMP R0.z, R0.x, R0.w, R0;\n"
2980 "MOV R1.x, c[7].y;\n"
2981 "MUL R0.w, R0.z, R0.z;\n"
2982 "CMP R0.x, R0, c[7], R1;\n"
2983 "MAD R0.w, R0, c[6].z, -c[6];\n"
2984 "MAD R0.x, R0.w, R0.z, R0;\n"
2985 "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
2986 "TEX R1, R0.zwzw, texture[0], 2D;\n"
2987 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
2988 "MAD R0.x, R0, R0.y, c[8];\n"
2989 "MUL R0.x, R0, c[9];\n"
2990 "FLR R0.y, R0.x;\n"
2991 "MAX R0.z, R1.w, c[9].y;\n"
2992 "RCP R2.w, R0.z;\n"
2993 "MUL R2.xyz, R1, R2.w;\n"
2994 "RSQ R3.w, R2.x;\n"
2995 "RSQ R4.y, R2.z;\n"
2996 "RCP R4.x, R3.w;\n"
2997 "ADD R0.x, R0, -R0.y;\n"
2998 "TEX R0, R0, texture[2], 1D;\n"
2999 "MAD R3.xyz, R0, c[9].z, -R0.w;\n"
3000 "RSQ R3.w, R2.y;\n"
3001 "RCP R4.z, R4.y;\n"
3002 "RCP R4.y, R3.w;\n"
3003 "MAD R4.xyz, R4, R1.w, -R1;\n"
3004 "MUL R6.xyz, R4, R3;\n"
3005 "MUL R4.xyz, -R2, c[9].w;\n"
3006 "MAD R2.xyz, -R1, R2.w, c[7].w;\n"
3007 "ADD R5.xyz, R4, c[11].x;\n"
3008 "MUL R4.xyz, R2, R3;\n"
3009 "MAD R4.xyz, -R4, R5, R0.w;\n"
3010 "MAD R2.xyz, -R2, R3, R0.w;\n"
3011 "MAD R5.xyz, R1, R0.w, R6;\n"
3012 "MUL R4.xyz, R1, R4;\n"
3013 "MUL R6.xyz, R1, c[9].w;\n"
3014 "ADD R5.xyz, R5, -R4;\n"
3015 "SGE R6.xyz, R6, R1.w;\n"
3016 "MUL R5.xyz, R6, R5;\n"
3017 "ADD R3.xyz, R4, R5;\n"
3018 "MUL R2.xyz, R1, R2;\n"
3019 "MUL R4.xyz, R0, c[9].z;\n"
3020 "ADD R3.xyz, R3, -R2;\n"
3021 "SGE R4.xyz, R4, R0.w;\n"
3022 "MUL R3.xyz, R4, R3;\n"
3023 "ADD R2.xyz, R2, R3;\n"
3024 "ADD R2.w, -R1, c[7];\n"
3025 "MAD R0.xyz, R0, R2.w, R2;\n"
3026 "ADD R2.x, -R0.w, c[7].w;\n"
3027 "MAD R2.xyz, R1, R2.x, R0;\n"
3028 "ADD R0.z, R0.w, R1.w;\n"
3029 "MAD R2.w, -R0, R1, R0.z;\n"
3030 "ADD R0.xy, fragment.position, c[0];\n"
3031 "MUL R0.xy, R0, c[1];\n"
3032 "TEX R0, R0, texture[1], 2D;\n"
3033 "ADD R2, R2, -R1;\n"
3034 "DP4 R0.x, R0, c[2];\n"
3035 "MAD result.color, R0.x, R2, R1;\n"
3036 "END\n"
3037 ;
3038
3039static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE =
3040 "!!ARBfp1.0\n"
3041 "PARAM c[11] = { program.local[0..5],\n"
3042 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3043 " { 2.3561945, 0.78539819, -1, 1 },\n"
3044 " program.local[8],\n"
3045 " { 0.15915494, 2 },\n"
3046 " program.local[10] };\n"
3047 "TEMP R0;\n"
3048 "TEMP R1;\n"
3049 "TEMP R2;\n"
3050 "TEMP R3;\n"
3051 "MUL R0.xyz, fragment.position.y, c[4];\n"
3052 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
3053 "ADD R0.xyz, R0, c[5];\n"
3054 "RCP R0.z, R0.z;\n"
3055 "MUL R0.xy, R0, R0.z;\n"
3056 "ABS R0.w, R0.x;\n"
3057 "ABS R0.z, R0.y;\n"
3058 "ADD R0.z, R0, -R0.w;\n"
3059 "ADD R0.w, R0.y, c[6].x;\n"
3060 "ABS R0.z, R0;\n"
3061 "CMP R0.y, -R0.z, R0, R0.w;\n"
3062 "ABS R0.z, -R0.y;\n"
3063 "ADD R0.z, R0, c[6].y;\n"
3064 "ADD R0.w, R0.x, R0.z;\n"
3065 "ADD R1.x, R0.z, -R0;\n"
3066 "RCP R1.y, R0.w;\n"
3067 "RCP R1.x, R1.x;\n"
3068 "MUL R0.w, R0, R1.x;\n"
3069 "ADD R0.z, R0.x, -R0;\n"
3070 "MUL R0.z, R0, R1.y;\n"
3071 "CMP R0.z, R0.x, R0.w, R0;\n"
3072 "MUL R0.w, R0.z, R0.z;\n"
3073 "MOV R1.x, c[7].y;\n"
3074 "CMP R0.x, R0, c[7], R1;\n"
3075 "MAD R0.w, R0, c[6].z, -c[6];\n"
3076 "MAD R0.x, R0.w, R0.z, R0;\n"
3077 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
3078 "MAD R0.x, R0, R0.y, c[8];\n"
3079 "MUL R0.x, R0, c[9];\n"
3080 "FLR R0.y, R0.x;\n"
3081 "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n"
3082 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3083 "ADD R0.x, R0, -R0.y;\n"
3084 "TEX R0, R0, texture[2], 1D;\n"
3085 "ADD R3.xyz, R0, R1;\n"
3086 "MUL R2.xyz, R1, R0.w;\n"
3087 "MUL R0.xyz, R0, R1.w;\n"
3088 "MIN R0.xyz, R0, R2;\n"
3089 "MAD R2.xyz, -R0, c[9].y, R3;\n"
3090 "ADD R0.z, R0.w, R1.w;\n"
3091 "MAD R2.w, -R0, R1, R0.z;\n"
3092 "ADD R0.xy, fragment.position, c[0];\n"
3093 "MUL R0.xy, R0, c[1];\n"
3094 "TEX R0, R0, texture[1], 2D;\n"
3095 "ADD R2, R2, -R1;\n"
3096 "DP4 R0.x, R0, c[2];\n"
3097 "MAD result.color, R0.x, R2, R1;\n"
3098 "END\n"
3099 ;
3100
3101static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION =
3102 "!!ARBfp1.0\n"
3103 "PARAM c[11] = { program.local[0..5],\n"
3104 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3105 " { 2.3561945, 0.78539819, -1, 1 },\n"
3106 " program.local[8],\n"
3107 " { 0.15915494, 2 },\n"
3108 " program.local[10] };\n"
3109 "TEMP R0;\n"
3110 "TEMP R1;\n"
3111 "TEMP R2;\n"
3112 "TEMP R3;\n"
3113 "MUL R0.xyz, fragment.position.y, c[4];\n"
3114 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
3115 "ADD R0.xyz, R0, c[5];\n"
3116 "RCP R0.z, R0.z;\n"
3117 "MUL R0.xy, R0, R0.z;\n"
3118 "ABS R0.w, R0.x;\n"
3119 "ABS R0.z, R0.y;\n"
3120 "ADD R0.z, R0, -R0.w;\n"
3121 "ADD R0.w, R0.y, c[6].x;\n"
3122 "ABS R0.z, R0;\n"
3123 "CMP R0.y, -R0.z, R0, R0.w;\n"
3124 "ABS R0.z, -R0.y;\n"
3125 "ADD R0.z, R0, c[6].y;\n"
3126 "ADD R0.w, R0.x, R0.z;\n"
3127 "ADD R1.x, R0.z, -R0;\n"
3128 "RCP R1.y, R0.w;\n"
3129 "RCP R1.x, R1.x;\n"
3130 "MUL R0.w, R0, R1.x;\n"
3131 "ADD R0.z, R0.x, -R0;\n"
3132 "MUL R0.z, R0, R1.y;\n"
3133 "CMP R0.z, R0.x, R0.w, R0;\n"
3134 "MUL R0.w, R0.z, R0.z;\n"
3135 "MOV R1.x, c[7].y;\n"
3136 "CMP R0.x, R0, c[7], R1;\n"
3137 "MAD R0.w, R0, c[6].z, -c[6];\n"
3138 "MUL R1.xy, fragment.position, c[10];\n"
3139 "TEX R1, R1, texture[0], 2D;\n"
3140 "CMP R0.y, -R0, c[7].z, c[7].w;\n"
3141 "MAD R0.x, R0.w, R0.z, R0;\n"
3142 "MAD R0.x, R0, R0.y, c[8];\n"
3143 "MUL R0.x, R0, c[9];\n"
3144 "FLR R0.y, R0.x;\n"
3145 "ADD R0.x, R0, -R0.y;\n"
3146 "TEX R0, R0, texture[2], 1D;\n"
3147 "MUL R2.xyz, R1, R0.w;\n"
3148 "MAD R3.xyz, R0, R1.w, R2;\n"
3149 "MUL R2.xyz, R0, R1;\n"
3150 "MAD R2.xyz, -R2, c[9].y, R3;\n"
3151 "ADD R2.w, -R1, c[7];\n"
3152 "MAD R0.xyz, R0, R2.w, R2;\n"
3153 "ADD R2.x, -R0.w, c[7].w;\n"
3154 "MAD R2.xyz, R1, R2.x, R0;\n"
3155 "ADD R0.z, R0.w, R1.w;\n"
3156 "MAD R2.w, -R0, R1, R0.z;\n"
3157 "ADD R0.xy, fragment.position, c[0];\n"
3158 "MUL R0.xy, R0, c[1];\n"
3159 "TEX R0, R0, texture[1], 2D;\n"
3160 "ADD R2, R2, -R1;\n"
3161 "DP4 R0.x, R0, c[2];\n"
3162 "MAD result.color, R0.x, R2, R1;\n"
3163 "END\n"
3164 ;
3165
3166static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
3167 "!!ARBfp1.0\n"
3168 "PARAM c[10] = { program.local[0..2],\n"
3169 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3170 " { 2.3561945, 0.78539819, -1, 1 },\n"
3171 " program.local[5],\n"
3172 " { 0.15915494 },\n"
3173 " program.local[7..9] };\n"
3174 "TEMP R0;\n"
3175 "TEMP R1;\n"
3176 "TEMP R2;\n"
3177 "TEMP R3;\n"
3178 "MUL R0.xyz, fragment.position.y, c[1];\n"
3179 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3180 "ADD R0.xyz, R0, c[2];\n"
3181 "RCP R0.z, R0.z;\n"
3182 "MUL R0.xy, R0, R0.z;\n"
3183 "ABS R0.w, R0.x;\n"
3184 "ABS R0.z, R0.y;\n"
3185 "ADD R0.z, R0, -R0.w;\n"
3186 "ADD R0.w, R0.y, c[3].x;\n"
3187 "ABS R0.z, R0;\n"
3188 "CMP R0.y, -R0.z, R0, R0.w;\n"
3189 "ABS R0.z, -R0.y;\n"
3190 "ADD R0.z, R0, c[3].y;\n"
3191 "ADD R0.w, R0.x, R0.z;\n"
3192 "ADD R1.x, R0.z, -R0;\n"
3193 "RCP R1.y, R0.w;\n"
3194 "RCP R1.x, R1.x;\n"
3195 "MUL R0.w, R0, R1.x;\n"
3196 "ADD R0.z, R0.x, -R0;\n"
3197 "MUL R0.z, R0, R1.y;\n"
3198 "CMP R0.z, R0.x, R0.w, R0;\n"
3199 "MUL R0.w, R0.z, R0.z;\n"
3200 "MOV R1.x, c[4].y;\n"
3201 "CMP R0.x, R0, c[4], R1;\n"
3202 "MAD R0.w, R0, c[3].z, -c[3];\n"
3203 "MAD R0.x, R0.w, R0.z, R0;\n"
3204 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3205 "MAD R0.x, R0, R0.y, c[5];\n"
3206 "MUL R0.x, R0, c[6];\n"
3207 "FLR R0.y, R0.x;\n"
3208 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
3209 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3210 "MUL R2.xyz, R1, c[9].y;\n"
3211 "ADD R0.x, R0, -R0.y;\n"
3212 "TEX R0, R0, texture[1], 1D;\n"
3213 "MUL R3.xyz, R2, R0.w;\n"
3214 "MUL R2.xyz, R0, c[9].x;\n"
3215 "MAD R2.xyz, R2, R1.w, R3;\n"
3216 "ADD R2.w, -R1, c[4];\n"
3217 "MUL R0.xyz, R0, c[8].y;\n"
3218 "MAD R0.xyz, R0, R2.w, R2;\n"
3219 "ADD R2.x, -R0.w, c[4].w;\n"
3220 "MUL R1.xyz, R1, c[8].z;\n"
3221 "MAD result.color.xyz, R1, R2.x, R0;\n"
3222 "MUL R0.x, R0.w, R1.w;\n"
3223 "MUL R0.z, R1.w, R2.x;\n"
3224 "MUL R0.y, R0.w, R2.w;\n"
3225 "DP3 result.color.w, R0, c[8];\n"
3226 "END\n"
3227 ;
3228
3229static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK =
3230 "!!ARBfp1.0\n"
3231 "PARAM c[8] = { program.local[0..2],\n"
3232 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3233 " { 2.3561945, 0.78539819, -1, 1 },\n"
3234 " program.local[5],\n"
3235 " { 0.15915494 },\n"
3236 " program.local[7] };\n"
3237 "TEMP R0;\n"
3238 "TEMP R1;\n"
3239 "TEMP R2;\n"
3240 "MUL R0.xyz, fragment.position.y, c[1];\n"
3241 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3242 "ADD R0.xyz, R0, c[2];\n"
3243 "RCP R0.z, R0.z;\n"
3244 "MUL R0.xy, R0, R0.z;\n"
3245 "ABS R0.w, R0.x;\n"
3246 "ABS R0.z, R0.y;\n"
3247 "ADD R0.z, R0, -R0.w;\n"
3248 "ADD R0.w, R0.y, c[3].x;\n"
3249 "ABS R0.z, R0;\n"
3250 "CMP R0.y, -R0.z, R0, R0.w;\n"
3251 "ABS R0.z, -R0.y;\n"
3252 "ADD R0.z, R0, c[3].y;\n"
3253 "ADD R0.w, R0.x, R0.z;\n"
3254 "ADD R1.x, R0.z, -R0;\n"
3255 "RCP R1.y, R0.w;\n"
3256 "RCP R1.x, R1.x;\n"
3257 "MUL R0.w, R0, R1.x;\n"
3258 "ADD R0.z, R0.x, -R0;\n"
3259 "MUL R0.z, R0, R1.y;\n"
3260 "CMP R0.z, R0.x, R0.w, R0;\n"
3261 "MUL R0.w, R0.z, R0.z;\n"
3262 "MOV R1.x, c[4].y;\n"
3263 "CMP R0.x, R0, c[4], R1;\n"
3264 "MAD R0.w, R0, c[3].z, -c[3];\n"
3265 "MAD R0.x, R0.w, R0.z, R0;\n"
3266 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3267 "MAD R0.x, R0, R0.y, c[5];\n"
3268 "MUL R0.x, R0, c[6];\n"
3269 "FLR R0.y, R0.x;\n"
3270 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
3271 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3272 "ADD R0.x, R0, -R0.y;\n"
3273 "TEX R0, R0, texture[1], 1D;\n"
3274 "ADD R2.x, -R1.w, c[4].w;\n"
3275 "MUL R2.xyz, R0, R2.x;\n"
3276 "MAD R0.xyz, R0, R1, R2;\n"
3277 "ADD R2.x, R0.w, R1.w;\n"
3278 "ADD R2.y, -R0.w, c[4].w;\n"
3279 "MAD result.color.xyz, R1, R2.y, R0;\n"
3280 "MAD result.color.w, -R0, R1, R2.x;\n"
3281 "END\n"
3282 ;
3283
3284static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK =
3285 "!!ARBfp1.0\n"
3286 "PARAM c[8] = { program.local[0..2],\n"
3287 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3288 " { 2.3561945, 0.78539819, -1, 1 },\n"
3289 " program.local[5],\n"
3290 " { 0.15915494 },\n"
3291 " program.local[7] };\n"
3292 "TEMP R0;\n"
3293 "TEMP R1;\n"
3294 "TEMP R2;\n"
3295 "MUL R0.xyz, fragment.position.y, c[1];\n"
3296 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3297 "ADD R0.xyz, R0, c[2];\n"
3298 "RCP R0.z, R0.z;\n"
3299 "MUL R0.xy, R0, R0.z;\n"
3300 "ABS R0.w, R0.x;\n"
3301 "ABS R0.z, R0.y;\n"
3302 "ADD R0.z, R0, -R0.w;\n"
3303 "ADD R0.w, R0.y, c[3].x;\n"
3304 "ABS R0.z, R0;\n"
3305 "CMP R0.y, -R0.z, R0, R0.w;\n"
3306 "ABS R0.z, -R0.y;\n"
3307 "ADD R0.z, R0, c[3].y;\n"
3308 "ADD R0.w, R0.x, R0.z;\n"
3309 "ADD R1.x, R0.z, -R0;\n"
3310 "RCP R1.y, R0.w;\n"
3311 "RCP R1.x, R1.x;\n"
3312 "MUL R0.w, R0, R1.x;\n"
3313 "ADD R0.z, R0.x, -R0;\n"
3314 "MUL R0.z, R0, R1.y;\n"
3315 "CMP R0.z, R0.x, R0.w, R0;\n"
3316 "MUL R0.w, R0.z, R0.z;\n"
3317 "MOV R1.x, c[4].y;\n"
3318 "CMP R0.x, R0, c[4], R1;\n"
3319 "MAD R0.w, R0, c[3].z, -c[3];\n"
3320 "MAD R0.x, R0.w, R0.z, R0;\n"
3321 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3322 "MAD R0.x, R0, R0.y, c[5];\n"
3323 "MUL R0.x, R0, c[6];\n"
3324 "FLR R0.y, R0.x;\n"
3325 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
3326 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3327 "ADD R0.x, R0, -R0.y;\n"
3328 "TEX R0, R0, texture[1], 1D;\n"
3329 "ADD R2, R0, R1;\n"
3330 "MAD result.color, -R0, R1, R2;\n"
3331 "END\n"
3332 ;
3333
3334static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK =
3335 "!!ARBfp1.0\n"
3336 "PARAM c[8] = { program.local[0..2],\n"
3337 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3338 " { 2.3561945, 0.78539819, -1, 1 },\n"
3339 " program.local[5],\n"
3340 " { 0.15915494, 2 },\n"
3341 " program.local[7] };\n"
3342 "TEMP R0;\n"
3343 "TEMP R1;\n"
3344 "TEMP R2;\n"
3345 "TEMP R3;\n"
3346 "MUL R0.xyz, fragment.position.y, c[1];\n"
3347 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3348 "ADD R0.xyz, R0, c[2];\n"
3349 "RCP R0.z, R0.z;\n"
3350 "MUL R0.xy, R0, R0.z;\n"
3351 "ABS R0.w, R0.x;\n"
3352 "ABS R0.z, R0.y;\n"
3353 "ADD R0.z, R0, -R0.w;\n"
3354 "ADD R0.w, R0.y, c[3].x;\n"
3355 "ABS R0.z, R0;\n"
3356 "CMP R0.y, -R0.z, R0, R0.w;\n"
3357 "ABS R0.z, -R0.y;\n"
3358 "ADD R0.z, R0, c[3].y;\n"
3359 "ADD R0.w, R0.x, R0.z;\n"
3360 "ADD R1.x, R0.z, -R0;\n"
3361 "RCP R1.y, R0.w;\n"
3362 "RCP R1.x, R1.x;\n"
3363 "MUL R0.w, R0, R1.x;\n"
3364 "ADD R0.z, R0.x, -R0;\n"
3365 "MUL R0.z, R0, R1.y;\n"
3366 "CMP R0.z, R0.x, R0.w, R0;\n"
3367 "MUL R0.w, R0.z, R0.z;\n"
3368 "MOV R1.x, c[4].y;\n"
3369 "CMP R0.x, R0, c[4], R1;\n"
3370 "MAD R0.w, R0, c[3].z, -c[3];\n"
3371 "MUL R1.xy, fragment.position, c[7];\n"
3372 "TEX R1, R1, texture[0], 2D;\n"
3373 "ADD R2.w, -R1, c[4];\n"
3374 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3375 "MAD R0.x, R0.w, R0.z, R0;\n"
3376 "MAD R0.x, R0, R0.y, c[5];\n"
3377 "MUL R0.x, R0, c[6];\n"
3378 "FLR R0.y, R0.x;\n"
3379 "ADD R0.x, R0, -R0.y;\n"
3380 "TEX R0, R0, texture[1], 1D;\n"
3381 "ADD R3.xyz, R0.w, -R0;\n"
3382 "ADD R2.xyz, R1.w, -R1;\n"
3383 "MUL R2.xyz, R2, R3;\n"
3384 "MUL R2.xyz, R2, c[6].y;\n"
3385 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
3386 "MAD R2.xyz, R0, R2.w, R2;\n"
3387 "MUL R3.xyz, R0, R2.w;\n"
3388 "MUL R0.xyz, R0, R1;\n"
3389 "ADD R2.w, -R0, c[4];\n"
3390 "MAD R0.xyz, R0, c[6].y, R3;\n"
3391 "MAD R0.xyz, R1, R2.w, R0;\n"
3392 "MAD R2.xyz, R1, R2.w, R2;\n"
3393 "MUL R1.xyz, R1, c[6].y;\n"
3394 "ADD R2.w, R0, R1;\n"
3395 "ADD R2.xyz, R2, -R0;\n"
3396 "SGE R1.xyz, R1, R1.w;\n"
3397 "MAD result.color.xyz, R1, R2, R0;\n"
3398 "MAD result.color.w, -R0, R1, R2;\n"
3399 "END\n"
3400 ;
3401
3402static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK =
3403 "!!ARBfp1.0\n"
3404 "PARAM c[8] = { program.local[0..2],\n"
3405 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3406 " { 2.3561945, 0.78539819, -1, 1 },\n"
3407 " program.local[5],\n"
3408 " { 0.15915494 },\n"
3409 " program.local[7] };\n"
3410 "TEMP R0;\n"
3411 "TEMP R1;\n"
3412 "TEMP R2;\n"
3413 "TEMP R3;\n"
3414 "MUL R0.xyz, fragment.position.y, c[1];\n"
3415 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3416 "ADD R0.xyz, R0, c[2];\n"
3417 "RCP R0.z, R0.z;\n"
3418 "MUL R0.xy, R0, R0.z;\n"
3419 "ABS R0.w, R0.x;\n"
3420 "ABS R0.z, R0.y;\n"
3421 "ADD R0.z, R0, -R0.w;\n"
3422 "ADD R0.w, R0.y, c[3].x;\n"
3423 "ABS R0.z, R0;\n"
3424 "CMP R0.y, -R0.z, R0, R0.w;\n"
3425 "ABS R0.z, -R0.y;\n"
3426 "ADD R0.z, R0, c[3].y;\n"
3427 "ADD R0.w, R0.x, R0.z;\n"
3428 "ADD R1.x, R0.z, -R0;\n"
3429 "RCP R1.y, R0.w;\n"
3430 "RCP R1.x, R1.x;\n"
3431 "MUL R0.w, R0, R1.x;\n"
3432 "ADD R0.z, R0.x, -R0;\n"
3433 "MUL R0.z, R0, R1.y;\n"
3434 "CMP R0.z, R0.x, R0.w, R0;\n"
3435 "MUL R0.w, R0.z, R0.z;\n"
3436 "MOV R1.x, c[4].y;\n"
3437 "CMP R0.x, R0, c[4], R1;\n"
3438 "MAD R0.w, R0, c[3].z, -c[3];\n"
3439 "MUL R1.xy, fragment.position, c[7];\n"
3440 "TEX R1, R1, texture[0], 2D;\n"
3441 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3442 "MAD R0.x, R0.w, R0.z, R0;\n"
3443 "MAD R0.x, R0, R0.y, c[5];\n"
3444 "MUL R0.x, R0, c[6];\n"
3445 "FLR R0.y, R0.x;\n"
3446 "ADD R0.x, R0, -R0.y;\n"
3447 "TEX R0, R0, texture[1], 1D;\n"
3448 "MUL R2.xyz, R0, R1.w;\n"
3449 "MUL R3.xyz, R1, R0.w;\n"
3450 "MIN R2.xyz, R2, R3;\n"
3451 "ADD R2.w, -R1, c[4];\n"
3452 "MAD R0.xyz, R0, R2.w, R2;\n"
3453 "ADD R2.x, R0.w, R1.w;\n"
3454 "ADD R2.y, -R0.w, c[4].w;\n"
3455 "MAD result.color.xyz, R1, R2.y, R0;\n"
3456 "MAD result.color.w, -R0, R1, R2.x;\n"
3457 "END\n"
3458 ;
3459
3460static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK =
3461 "!!ARBfp1.0\n"
3462 "PARAM c[8] = { program.local[0..2],\n"
3463 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3464 " { 2.3561945, 0.78539819, -1, 1 },\n"
3465 " program.local[5],\n"
3466 " { 0.15915494 },\n"
3467 " program.local[7] };\n"
3468 "TEMP R0;\n"
3469 "TEMP R1;\n"
3470 "TEMP R2;\n"
3471 "TEMP R3;\n"
3472 "MUL R0.xyz, fragment.position.y, c[1];\n"
3473 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3474 "ADD R0.xyz, R0, c[2];\n"
3475 "RCP R0.z, R0.z;\n"
3476 "MUL R0.xy, R0, R0.z;\n"
3477 "ABS R0.w, R0.x;\n"
3478 "ABS R0.z, R0.y;\n"
3479 "ADD R0.z, R0, -R0.w;\n"
3480 "ADD R0.w, R0.y, c[3].x;\n"
3481 "ABS R0.z, R0;\n"
3482 "CMP R0.y, -R0.z, R0, R0.w;\n"
3483 "ABS R0.z, -R0.y;\n"
3484 "ADD R0.z, R0, c[3].y;\n"
3485 "ADD R0.w, R0.x, R0.z;\n"
3486 "ADD R1.x, R0.z, -R0;\n"
3487 "RCP R1.y, R0.w;\n"
3488 "RCP R1.x, R1.x;\n"
3489 "MUL R0.w, R0, R1.x;\n"
3490 "ADD R0.z, R0.x, -R0;\n"
3491 "MUL R0.z, R0, R1.y;\n"
3492 "CMP R0.z, R0.x, R0.w, R0;\n"
3493 "MUL R0.w, R0.z, R0.z;\n"
3494 "MOV R1.x, c[4].y;\n"
3495 "CMP R0.x, R0, c[4], R1;\n"
3496 "MAD R0.w, R0, c[3].z, -c[3];\n"
3497 "MUL R1.xy, fragment.position, c[7];\n"
3498 "TEX R1, R1, texture[0], 2D;\n"
3499 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3500 "MAD R0.x, R0.w, R0.z, R0;\n"
3501 "MAD R0.x, R0, R0.y, c[5];\n"
3502 "MUL R0.x, R0, c[6];\n"
3503 "FLR R0.y, R0.x;\n"
3504 "ADD R0.x, R0, -R0.y;\n"
3505 "TEX R0, R0, texture[1], 1D;\n"
3506 "MUL R2.xyz, R0, R1.w;\n"
3507 "MUL R3.xyz, R1, R0.w;\n"
3508 "MAX R2.xyz, R2, R3;\n"
3509 "ADD R2.w, -R1, c[4];\n"
3510 "MAD R0.xyz, R0, R2.w, R2;\n"
3511 "ADD R2.x, R0.w, R1.w;\n"
3512 "ADD R2.y, -R0.w, c[4].w;\n"
3513 "MAD result.color.xyz, R1, R2.y, R0;\n"
3514 "MAD result.color.w, -R0, R1, R2.x;\n"
3515 "END\n"
3516 ;
3517
3518static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK =
3519 "!!ARBfp1.0\n"
3520 "PARAM c[8] = { program.local[0..2],\n"
3521 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3522 " { 2.3561945, 0.78539819, -1, 1 },\n"
3523 " program.local[5],\n"
3524 " { 0.15915494, 1e-06 },\n"
3525 " program.local[7] };\n"
3526 "TEMP R0;\n"
3527 "TEMP R1;\n"
3528 "TEMP R2;\n"
3529 "TEMP R3;\n"
3530 "MUL R0.xyz, fragment.position.y, c[1];\n"
3531 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3532 "ADD R0.xyz, R0, c[2];\n"
3533 "RCP R0.z, R0.z;\n"
3534 "MUL R0.xy, R0, R0.z;\n"
3535 "ABS R0.w, R0.x;\n"
3536 "ABS R0.z, R0.y;\n"
3537 "ADD R0.z, R0, -R0.w;\n"
3538 "ADD R0.w, R0.y, c[3].x;\n"
3539 "ABS R0.z, R0;\n"
3540 "CMP R0.y, -R0.z, R0, R0.w;\n"
3541 "ABS R0.z, -R0.y;\n"
3542 "ADD R0.z, R0, c[3].y;\n"
3543 "ADD R0.w, R0.x, R0.z;\n"
3544 "ADD R1.x, R0.z, -R0;\n"
3545 "RCP R1.y, R0.w;\n"
3546 "RCP R1.x, R1.x;\n"
3547 "MUL R0.w, R0, R1.x;\n"
3548 "ADD R0.z, R0.x, -R0;\n"
3549 "MUL R0.z, R0, R1.y;\n"
3550 "CMP R0.z, R0.x, R0.w, R0;\n"
3551 "MUL R0.w, R0.z, R0.z;\n"
3552 "MOV R1.x, c[4].y;\n"
3553 "CMP R0.x, R0, c[4], R1;\n"
3554 "MAD R0.w, R0, c[3].z, -c[3];\n"
3555 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3556 "MAD R0.x, R0.w, R0.z, R0;\n"
3557 "MAD R0.x, R0, R0.y, c[5];\n"
3558 "MUL R0.x, R0, c[6];\n"
3559 "FLR R0.y, R0.x;\n"
3560 "ADD R0.x, R0, -R0.y;\n"
3561 "TEX R0, R0, texture[1], 1D;\n"
3562 "MAX R1.x, R0.w, c[6].y;\n"
3563 "RCP R1.x, R1.x;\n"
3564 "MAD R1.xyz, -R0, R1.x, c[4].w;\n"
3565 "MAX R2.xyz, R1, c[6].y;\n"
3566 "MUL R1.xy, fragment.position, c[7];\n"
3567 "TEX R1, R1, texture[0], 2D;\n"
3568 "ADD R2.w, -R0, c[4];\n"
3569 "MUL R3.xyz, R1, R2.w;\n"
3570 "ADD R2.w, -R1, c[4];\n"
3571 "MAD R3.xyz, R0, R2.w, R3;\n"
3572 "MUL R1.xyz, R1, R0.w;\n"
3573 "MAD R0.xyz, R0, R1.w, R1;\n"
3574 "MUL R2.w, R0, R1;\n"
3575 "RCP R2.x, R2.x;\n"
3576 "RCP R2.y, R2.y;\n"
3577 "RCP R2.z, R2.z;\n"
3578 "MAD R2.xyz, R1, R2, R3;\n"
3579 "MAD R3.xyz, R0.w, R1.w, R3;\n"
3580 "ADD R1.x, R0.w, R1.w;\n"
3581 "ADD R3.xyz, R3, -R2;\n"
3582 "SGE R0.xyz, R0, R2.w;\n"
3583 "MAD result.color.xyz, R0, R3, R2;\n"
3584 "MAD result.color.w, -R0, R1, R1.x;\n"
3585 "END\n"
3586 ;
3587
3588static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK =
3589 "!!ARBfp1.0\n"
3590 "PARAM c[8] = { program.local[0..2],\n"
3591 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3592 " { 2.3561945, 0.78539819, -1, 1 },\n"
3593 " program.local[5],\n"
3594 " { 0.15915494, 9.9999997e-06 },\n"
3595 " program.local[7] };\n"
3596 "TEMP R0;\n"
3597 "TEMP R1;\n"
3598 "TEMP R2;\n"
3599 "TEMP R3;\n"
3600 "TEMP R4;\n"
3601 "TEMP R5;\n"
3602 "MUL R0.xyz, fragment.position.y, c[1];\n"
3603 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3604 "ADD R0.xyz, R0, c[2];\n"
3605 "RCP R0.z, R0.z;\n"
3606 "MUL R0.xy, R0, R0.z;\n"
3607 "ABS R0.w, R0.x;\n"
3608 "ABS R0.z, R0.y;\n"
3609 "ADD R0.z, R0, -R0.w;\n"
3610 "ADD R0.w, R0.y, c[3].x;\n"
3611 "ABS R0.z, R0;\n"
3612 "CMP R0.y, -R0.z, R0, R0.w;\n"
3613 "ABS R0.z, -R0.y;\n"
3614 "ADD R0.z, R0, c[3].y;\n"
3615 "ADD R0.w, R0.x, R0.z;\n"
3616 "ADD R1.x, R0.z, -R0;\n"
3617 "RCP R1.y, R0.w;\n"
3618 "RCP R1.x, R1.x;\n"
3619 "MUL R0.w, R0, R1.x;\n"
3620 "ADD R0.z, R0.x, -R0;\n"
3621 "MUL R0.z, R0, R1.y;\n"
3622 "CMP R0.z, R0.x, R0.w, R0;\n"
3623 "MUL R0.w, R0.z, R0.z;\n"
3624 "MOV R1.x, c[4].y;\n"
3625 "CMP R0.x, R0, c[4], R1;\n"
3626 "MAD R0.w, R0, c[3].z, -c[3];\n"
3627 "MUL R1.xy, fragment.position, c[7];\n"
3628 "TEX R1, R1, texture[0], 2D;\n"
3629 "ADD R2.w, -R1, c[4];\n"
3630 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3631 "MAD R0.x, R0.w, R0.z, R0;\n"
3632 "MAD R0.x, R0, R0.y, c[5];\n"
3633 "MUL R0.x, R0, c[6];\n"
3634 "FLR R0.y, R0.x;\n"
3635 "ADD R0.x, R0, -R0.y;\n"
3636 "TEX R0, R0, texture[1], 1D;\n"
3637 "MUL R2.xyz, R1, R0.w;\n"
3638 "MAD R3.xyz, R0, R1.w, R2;\n"
3639 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
3640 "MUL R4.xyz, R0.w, R2;\n"
3641 "MAX R2.xyz, R0, c[6].y;\n"
3642 "MUL R5.xyz, R0, R2.w;\n"
3643 "ADD R3.w, -R0, c[4];\n"
3644 "RCP R2.x, R2.x;\n"
3645 "RCP R2.y, R2.y;\n"
3646 "RCP R2.z, R2.z;\n"
3647 "MAD R2.xyz, R4, R2, R5;\n"
3648 "MUL R4.xyz, R1, R3.w;\n"
3649 "MAD R1.xyz, R1, R3.w, R2;\n"
3650 "MAD R0.xyz, R0, R2.w, R4;\n"
3651 "MUL R2.x, R0.w, R1.w;\n"
3652 "ADD R2.w, R0, R1;\n"
3653 "ADD R1.xyz, R1, -R0;\n"
3654 "SGE R2.xyz, R3, R2.x;\n"
3655 "MAD result.color.xyz, R2, R1, R0;\n"
3656 "MAD result.color.w, -R0, R1, R2;\n"
3657 "END\n"
3658 ;
3659
3660static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK =
3661 "!!ARBfp1.0\n"
3662 "PARAM c[8] = { program.local[0..2],\n"
3663 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3664 " { 2.3561945, 0.78539819, -1, 1 },\n"
3665 " program.local[5],\n"
3666 " { 0.15915494, 2 },\n"
3667 " program.local[7] };\n"
3668 "TEMP R0;\n"
3669 "TEMP R1;\n"
3670 "TEMP R2;\n"
3671 "TEMP R3;\n"
3672 "TEMP R4;\n"
3673 "MUL R0.xyz, fragment.position.y, c[1];\n"
3674 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3675 "ADD R0.xyz, R0, c[2];\n"
3676 "RCP R0.z, R0.z;\n"
3677 "MUL R0.xy, R0, R0.z;\n"
3678 "ABS R0.w, R0.x;\n"
3679 "ABS R0.z, R0.y;\n"
3680 "ADD R0.z, R0, -R0.w;\n"
3681 "ADD R0.w, R0.y, c[3].x;\n"
3682 "ABS R0.z, R0;\n"
3683 "CMP R0.y, -R0.z, R0, R0.w;\n"
3684 "ABS R0.z, -R0.y;\n"
3685 "ADD R0.z, R0, c[3].y;\n"
3686 "ADD R0.w, R0.x, R0.z;\n"
3687 "ADD R1.x, R0.z, -R0;\n"
3688 "RCP R1.y, R0.w;\n"
3689 "RCP R1.x, R1.x;\n"
3690 "MUL R0.w, R0, R1.x;\n"
3691 "ADD R0.z, R0.x, -R0;\n"
3692 "MUL R0.z, R0, R1.y;\n"
3693 "CMP R0.z, R0.x, R0.w, R0;\n"
3694 "MUL R0.w, R0.z, R0.z;\n"
3695 "MOV R1.x, c[4].y;\n"
3696 "CMP R0.x, R0, c[4], R1;\n"
3697 "MAD R0.w, R0, c[3].z, -c[3];\n"
3698 "MUL R1.xy, fragment.position, c[7];\n"
3699 "TEX R1, R1, texture[0], 2D;\n"
3700 "ADD R2.w, -R1, c[4];\n"
3701 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3702 "MAD R0.x, R0.w, R0.z, R0;\n"
3703 "MAD R0.x, R0, R0.y, c[5];\n"
3704 "MUL R0.x, R0, c[6];\n"
3705 "FLR R0.y, R0.x;\n"
3706 "ADD R0.x, R0, -R0.y;\n"
3707 "TEX R0, R0, texture[1], 1D;\n"
3708 "ADD R3.xyz, R0.w, -R0;\n"
3709 "ADD R2.xyz, R1.w, -R1;\n"
3710 "MUL R2.xyz, R2, R3;\n"
3711 "MUL R2.xyz, R2, c[6].y;\n"
3712 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
3713 "MUL R4.xyz, R0, R2.w;\n"
3714 "MUL R3.xyz, R0, R1;\n"
3715 "MAD R2.xyz, R0, R2.w, R2;\n"
3716 "ADD R2.w, -R0, c[4];\n"
3717 "MUL R0.xyz, R0, c[6].y;\n"
3718 "MAD R2.xyz, R1, R2.w, R2;\n"
3719 "MAD R3.xyz, R3, c[6].y, R4;\n"
3720 "MAD R1.xyz, R1, R2.w, R3;\n"
3721 "ADD R2.w, R0, R1;\n"
3722 "ADD R2.xyz, R2, -R1;\n"
3723 "SGE R0.xyz, R0, R0.w;\n"
3724 "MAD result.color.xyz, R0, R2, R1;\n"
3725 "MAD result.color.w, -R0, R1, R2;\n"
3726 "END\n"
3727 ;
3728
3729static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
3730 "!!ARBfp1.0\n"
3731 "PARAM c[9] = { program.local[0..2],\n"
3732 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3733 " { 2.3561945, 0.78539819, -1, 1 },\n"
3734 " program.local[5],\n"
3735 " { 0.15915494, 9.9999997e-06, 2, 8 },\n"
3736 " program.local[7],\n"
3737 " { 3 } };\n"
3738 "TEMP R0;\n"
3739 "TEMP R1;\n"
3740 "TEMP R2;\n"
3741 "TEMP R3;\n"
3742 "TEMP R4;\n"
3743 "TEMP R5;\n"
3744 "TEMP R6;\n"
3745 "MUL R0.xyz, fragment.position.y, c[1];\n"
3746 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3747 "ADD R0.xyz, R0, c[2];\n"
3748 "RCP R0.z, R0.z;\n"
3749 "MUL R0.xy, R0, R0.z;\n"
3750 "ABS R0.w, R0.x;\n"
3751 "ABS R0.z, R0.y;\n"
3752 "ADD R0.z, R0, -R0.w;\n"
3753 "ADD R0.w, R0.y, c[3].x;\n"
3754 "ABS R0.z, R0;\n"
3755 "CMP R0.y, -R0.z, R0, R0.w;\n"
3756 "ABS R0.z, -R0.y;\n"
3757 "ADD R0.z, R0, c[3].y;\n"
3758 "ADD R0.w, R0.x, R0.z;\n"
3759 "ADD R1.x, R0.z, -R0;\n"
3760 "RCP R1.y, R0.w;\n"
3761 "RCP R1.x, R1.x;\n"
3762 "MUL R0.w, R0, R1.x;\n"
3763 "ADD R0.z, R0.x, -R0;\n"
3764 "MUL R0.z, R0, R1.y;\n"
3765 "CMP R0.z, R0.x, R0.w, R0;\n"
3766 "MOV R1.x, c[4].y;\n"
3767 "MUL R0.w, R0.z, R0.z;\n"
3768 "CMP R0.x, R0, c[4], R1;\n"
3769 "MAD R0.w, R0, c[3].z, -c[3];\n"
3770 "MAD R0.x, R0.w, R0.z, R0;\n"
3771 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
3772 "TEX R1, R0.zwzw, texture[0], 2D;\n"
3773 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3774 "MAD R0.x, R0, R0.y, c[5];\n"
3775 "MUL R0.x, R0, c[6];\n"
3776 "FLR R0.y, R0.x;\n"
3777 "MAX R0.z, R1.w, c[6].y;\n"
3778 "RCP R2.w, R0.z;\n"
3779 "MUL R2.xyz, R1, R2.w;\n"
3780 "RSQ R3.w, R2.x;\n"
3781 "RSQ R4.y, R2.z;\n"
3782 "RCP R4.x, R3.w;\n"
3783 "ADD R0.x, R0, -R0.y;\n"
3784 "TEX R0, R0, texture[1], 1D;\n"
3785 "MAD R3.xyz, R0, c[6].z, -R0.w;\n"
3786 "RSQ R3.w, R2.y;\n"
3787 "RCP R4.z, R4.y;\n"
3788 "RCP R4.y, R3.w;\n"
3789 "MAD R4.xyz, R4, R1.w, -R1;\n"
3790 "MUL R6.xyz, R4, R3;\n"
3791 "MUL R4.xyz, -R2, c[6].w;\n"
3792 "MAD R2.xyz, -R1, R2.w, c[4].w;\n"
3793 "ADD R5.xyz, R4, c[8].x;\n"
3794 "MUL R4.xyz, R2, R3;\n"
3795 "MAD R4.xyz, -R4, R5, R0.w;\n"
3796 "MAD R2.xyz, -R2, R3, R0.w;\n"
3797 "MAD R5.xyz, R1, R0.w, R6;\n"
3798 "MUL R4.xyz, R1, R4;\n"
3799 "MUL R6.xyz, R1, c[6].w;\n"
3800 "ADD R5.xyz, R5, -R4;\n"
3801 "SGE R6.xyz, R6, R1.w;\n"
3802 "MUL R5.xyz, R6, R5;\n"
3803 "ADD R3.xyz, R4, R5;\n"
3804 "MUL R2.xyz, R1, R2;\n"
3805 "MUL R4.xyz, R0, c[6].z;\n"
3806 "ADD R3.xyz, R3, -R2;\n"
3807 "SGE R4.xyz, R4, R0.w;\n"
3808 "MUL R3.xyz, R4, R3;\n"
3809 "ADD R2.xyz, R2, R3;\n"
3810 "ADD R2.w, -R1, c[4];\n"
3811 "MAD R0.xyz, R0, R2.w, R2;\n"
3812 "ADD R2.x, R0.w, R1.w;\n"
3813 "ADD R2.y, -R0.w, c[4].w;\n"
3814 "MAD result.color.xyz, R1, R2.y, R0;\n"
3815 "MAD result.color.w, -R0, R1, R2.x;\n"
3816 "END\n"
3817 ;
3818
3819static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK =
3820 "!!ARBfp1.0\n"
3821 "PARAM c[8] = { program.local[0..2],\n"
3822 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3823 " { 2.3561945, 0.78539819, -1, 1 },\n"
3824 " program.local[5],\n"
3825 " { 0.15915494, 2 },\n"
3826 " program.local[7] };\n"
3827 "TEMP R0;\n"
3828 "TEMP R1;\n"
3829 "TEMP R2;\n"
3830 "TEMP R3;\n"
3831 "MUL R0.xyz, fragment.position.y, c[1];\n"
3832 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3833 "ADD R0.xyz, R0, c[2];\n"
3834 "RCP R0.z, R0.z;\n"
3835 "MUL R0.xy, R0, R0.z;\n"
3836 "ABS R0.w, R0.x;\n"
3837 "ABS R0.z, R0.y;\n"
3838 "ADD R0.z, R0, -R0.w;\n"
3839 "ADD R0.w, R0.y, c[3].x;\n"
3840 "ABS R0.z, R0;\n"
3841 "CMP R0.y, -R0.z, R0, R0.w;\n"
3842 "ABS R0.z, -R0.y;\n"
3843 "ADD R0.z, R0, c[3].y;\n"
3844 "ADD R0.w, R0.x, R0.z;\n"
3845 "ADD R1.x, R0.z, -R0;\n"
3846 "RCP R1.y, R0.w;\n"
3847 "RCP R1.x, R1.x;\n"
3848 "MUL R0.w, R0, R1.x;\n"
3849 "ADD R0.z, R0.x, -R0;\n"
3850 "MUL R0.z, R0, R1.y;\n"
3851 "CMP R0.z, R0.x, R0.w, R0;\n"
3852 "MUL R0.w, R0.z, R0.z;\n"
3853 "MOV R1.x, c[4].y;\n"
3854 "CMP R0.x, R0, c[4], R1;\n"
3855 "MAD R0.w, R0, c[3].z, -c[3];\n"
3856 "MUL R1.xy, fragment.position, c[7];\n"
3857 "TEX R1, R1, texture[0], 2D;\n"
3858 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3859 "MAD R0.x, R0.w, R0.z, R0;\n"
3860 "MAD R0.x, R0, R0.y, c[5];\n"
3861 "MUL R0.x, R0, c[6];\n"
3862 "FLR R0.y, R0.x;\n"
3863 "ADD R0.x, R0, -R0.y;\n"
3864 "TEX R0, R0, texture[1], 1D;\n"
3865 "MUL R2.xyz, R0, R1.w;\n"
3866 "MUL R3.xyz, R1, R0.w;\n"
3867 "ADD R0.xyz, R0, R1;\n"
3868 "MIN R2.xyz, R2, R3;\n"
3869 "ADD R1.x, R0.w, R1.w;\n"
3870 "MAD result.color.xyz, -R2, c[6].y, R0;\n"
3871 "MAD result.color.w, -R0, R1, R1.x;\n"
3872 "END\n"
3873 ;
3874
3875static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK =
3876 "!!ARBfp1.0\n"
3877 "PARAM c[8] = { program.local[0..2],\n"
3878 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3879 " { 2.3561945, 0.78539819, -1, 1 },\n"
3880 " program.local[5],\n"
3881 " { 0.15915494, 2 },\n"
3882 " program.local[7] };\n"
3883 "TEMP R0;\n"
3884 "TEMP R1;\n"
3885 "TEMP R2;\n"
3886 "TEMP R3;\n"
3887 "MUL R0.xyz, fragment.position.y, c[1];\n"
3888 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3889 "ADD R0.xyz, R0, c[2];\n"
3890 "RCP R0.z, R0.z;\n"
3891 "MUL R0.xy, R0, R0.z;\n"
3892 "ABS R0.w, R0.x;\n"
3893 "ABS R0.z, R0.y;\n"
3894 "ADD R0.z, R0, -R0.w;\n"
3895 "ADD R0.w, R0.y, c[3].x;\n"
3896 "ABS R0.z, R0;\n"
3897 "CMP R0.y, -R0.z, R0, R0.w;\n"
3898 "ABS R0.z, -R0.y;\n"
3899 "ADD R0.z, R0, c[3].y;\n"
3900 "ADD R0.w, R0.x, R0.z;\n"
3901 "ADD R1.x, R0.z, -R0;\n"
3902 "RCP R1.y, R0.w;\n"
3903 "RCP R1.x, R1.x;\n"
3904 "MUL R0.w, R0, R1.x;\n"
3905 "ADD R0.z, R0.x, -R0;\n"
3906 "MUL R0.z, R0, R1.y;\n"
3907 "CMP R0.z, R0.x, R0.w, R0;\n"
3908 "MUL R0.w, R0.z, R0.z;\n"
3909 "MOV R1.x, c[4].y;\n"
3910 "CMP R0.x, R0, c[4], R1;\n"
3911 "MAD R0.w, R0, c[3].z, -c[3];\n"
3912 "MUL R1.xy, fragment.position, c[7];\n"
3913 "TEX R1, R1, texture[0], 2D;\n"
3914 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3915 "MAD R0.x, R0.w, R0.z, R0;\n"
3916 "MAD R0.x, R0, R0.y, c[5];\n"
3917 "MUL R0.x, R0, c[6];\n"
3918 "FLR R0.y, R0.x;\n"
3919 "ADD R0.x, R0, -R0.y;\n"
3920 "TEX R0, R0, texture[1], 1D;\n"
3921 "MUL R2.xyz, R1, R0.w;\n"
3922 "MAD R3.xyz, R0, R1.w, R2;\n"
3923 "MUL R2.xyz, R0, R1;\n"
3924 "MAD R2.xyz, -R2, c[6].y, R3;\n"
3925 "ADD R2.w, -R1, c[4];\n"
3926 "MAD R0.xyz, R0, R2.w, R2;\n"
3927 "ADD R2.x, R0.w, R1.w;\n"
3928 "ADD R2.y, -R0.w, c[4].w;\n"
3929 "MAD result.color.xyz, R1, R2.y, R0;\n"
3930 "MAD result.color.w, -R0, R1, R2.x;\n"
3931 "END\n"
3932 ;
3933
3934static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK =
3935 "!!ARBfp1.0\n"
3936 "PARAM c[10] = { program.local[0..2],\n"
3937 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3938 " { 2.3561945, 0.78539819, -1, 1 },\n"
3939 " program.local[5],\n"
3940 " { 0.15915494 },\n"
3941 " program.local[7..9] };\n"
3942 "TEMP R0;\n"
3943 "TEMP R1;\n"
3944 "MUL R0.xyz, fragment.position.y, c[1];\n"
3945 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3946 "ADD R0.xyz, R0, c[2];\n"
3947 "RCP R0.z, R0.z;\n"
3948 "MUL R0.xy, R0, R0.z;\n"
3949 "ABS R0.w, R0.x;\n"
3950 "ABS R0.z, R0.y;\n"
3951 "ADD R0.z, R0, -R0.w;\n"
3952 "ADD R0.w, R0.y, c[3].x;\n"
3953 "ABS R0.z, R0;\n"
3954 "CMP R0.y, -R0.z, R0, R0.w;\n"
3955 "ABS R0.z, -R0.y;\n"
3956 "ADD R0.z, R0, c[3].y;\n"
3957 "ADD R0.w, R0.x, R0.z;\n"
3958 "ADD R1.x, R0.z, -R0;\n"
3959 "RCP R1.y, R0.w;\n"
3960 "RCP R1.x, R1.x;\n"
3961 "MUL R0.w, R0, R1.x;\n"
3962 "ADD R0.z, R0.x, -R0;\n"
3963 "MUL R0.z, R0, R1.y;\n"
3964 "CMP R0.z, R0.x, R0.w, R0;\n"
3965 "MUL R0.w, R0.z, R0.z;\n"
3966 "MOV R1.x, c[4].y;\n"
3967 "CMP R0.x, R0, c[4], R1;\n"
3968 "MAD R0.w, R0, c[3].z, -c[3];\n"
3969 "MAD R0.x, R0.w, R0.z, R0;\n"
3970 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
3971 "MAD R0.z, R0.x, R0.y, c[5].x;\n"
3972 "MUL R1.x, R0.z, c[6];\n"
3973 "FLR R1.y, R1.x;\n"
3974 "ADD R0.xy, fragment.position, c[7];\n"
3975 "MUL R0.xy, R0, c[8];\n"
3976 "TEX R0, R0, texture[0], 2D;\n"
3977 "ADD R1.x, R1, -R1.y;\n"
3978 "DP4 R1.y, R0, c[9];\n"
3979 "TEX R0, R1, texture[1], 1D;\n"
3980 "MUL result.color, R0, R1.y;\n"
3981 "END\n"
3982 ;
3983
3984static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK =
3985 "!!ARBfp1.0\n"
3986 "PARAM c[7] = { program.local[0..2],\n"
3987 " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n"
3988 " { 2.3561945, 0.78539819, -1, 1 },\n"
3989 " program.local[5],\n"
3990 " { 0.15915494 } };\n"
3991 "TEMP R0;\n"
3992 "TEMP R1;\n"
3993 "MUL R0.xyz, fragment.position.y, c[1];\n"
3994 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
3995 "ADD R0.xyz, R0, c[2];\n"
3996 "RCP R0.z, R0.z;\n"
3997 "MUL R0.xy, R0, R0.z;\n"
3998 "ABS R0.w, R0.x;\n"
3999 "ABS R0.z, R0.y;\n"
4000 "ADD R0.z, R0, -R0.w;\n"
4001 "ADD R0.w, R0.y, c[3].x;\n"
4002 "ABS R0.z, R0;\n"
4003 "CMP R0.y, -R0.z, R0, R0.w;\n"
4004 "ABS R0.z, -R0.y;\n"
4005 "ADD R0.z, R0, c[3].y;\n"
4006 "ADD R0.w, R0.x, R0.z;\n"
4007 "ADD R1.x, R0.z, -R0;\n"
4008 "RCP R1.x, R1.x;\n"
4009 "RCP R1.y, R0.w;\n"
4010 "MUL R0.w, R0, R1.x;\n"
4011 "ADD R0.z, R0.x, -R0;\n"
4012 "MUL R0.z, R0, R1.y;\n"
4013 "CMP R0.z, R0.x, R0.w, R0;\n"
4014 "MUL R0.w, R0.z, R0.z;\n"
4015 "MOV R1.x, c[4].y;\n"
4016 "CMP R0.y, -R0, c[4].z, c[4].w;\n"
4017 "MAD R0.w, R0, c[3].z, -c[3];\n"
4018 "CMP R0.x, R0, c[4], R1;\n"
4019 "MAD R0.x, R0.w, R0.z, R0;\n"
4020 "MAD R0.x, R0, R0.y, c[5];\n"
4021 "MUL R0.x, R0, c[6];\n"
4022 "FLR R0.y, R0.x;\n"
4023 "ADD R0.x, R0, -R0.y;\n"
4024 "TEX result.color, R0, texture[0], 1D;\n"
4025 "END\n"
4026 ;
4027
4028static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
4029 "!!ARBfp1.0\n"
4030 "PARAM c[11] = { program.local[0..7],\n"
4031 " { 1 },\n"
4032 " program.local[9..10] };\n"
4033 "TEMP R0;\n"
4034 "TEMP R1;\n"
4035 "TEMP R2;\n"
4036 "TEMP R3;\n"
4037 "MUL R0.xyz, fragment.position.y, c[4];\n"
4038 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4039 "ADD R0.xyz, R0, c[5];\n"
4040 "RCP R0.z, R0.z;\n"
4041 "MUL R0.xy, R0, R0.z;\n"
4042 "MUL R0.xy, R0, c[6];\n"
4043 "ADD R0.x, R0, R0.y;\n"
4044 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
4045 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4046 "MUL R0.x, R0, c[6].z;\n"
4047 "TEX R0, R0, texture[2], 1D;\n"
4048 "MUL R2.xyz, R1, c[10].y;\n"
4049 "MUL R3.xyz, R2, R0.w;\n"
4050 "MUL R2.xyz, R0, c[10].x;\n"
4051 "MAD R2.xyz, R2, R1.w, R3;\n"
4052 "ADD R3.xy, fragment.position, c[0];\n"
4053 "MUL R0.xyz, R0, c[9].y;\n"
4054 "ADD R2.w, -R1, c[8].x;\n"
4055 "MAD R2.xyz, R0, R2.w, R2;\n"
4056 "MUL R0.xyz, R1, c[9].z;\n"
4057 "ADD R2.w, -R0, c[8].x;\n"
4058 "MAD R2.xyz, R0, R2.w, R2;\n"
4059 "ADD R0.y, -R1.w, c[8].x;\n"
4060 "MUL R0.z, R1.w, R2.w;\n"
4061 "MUL R0.x, R0.w, R1.w;\n"
4062 "MUL R0.y, R0.w, R0;\n"
4063 "DP3 R2.w, R0, c[9];\n"
4064 "MUL R3.xy, R3, c[1];\n"
4065 "TEX R0, R3, texture[1], 2D;\n"
4066 "ADD R2, R2, -R1;\n"
4067 "DP4 R0.x, R0, c[2];\n"
4068 "MAD result.color, R0.x, R2, R1;\n"
4069 "END\n"
4070 ;
4071
4072static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY =
4073 "!!ARBfp1.0\n"
4074 "PARAM c[9] = { program.local[0..7],\n"
4075 " { 1 } };\n"
4076 "TEMP R0;\n"
4077 "TEMP R1;\n"
4078 "TEMP R2;\n"
4079 "MUL R0.xyz, fragment.position.y, c[4];\n"
4080 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4081 "ADD R0.xyz, R0, c[5];\n"
4082 "RCP R0.z, R0.z;\n"
4083 "MUL R0.xy, R0, R0.z;\n"
4084 "MUL R0.xy, R0, c[6];\n"
4085 "ADD R0.x, R0, R0.y;\n"
4086 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
4087 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4088 "MUL R0.x, R0, c[6].z;\n"
4089 "TEX R0, R0, texture[2], 1D;\n"
4090 "ADD R2.x, -R1.w, c[8];\n"
4091 "MUL R2.xyz, R0, R2.x;\n"
4092 "MAD R0.xyz, R0, R1, R2;\n"
4093 "ADD R2.x, -R0.w, c[8];\n"
4094 "MAD R2.xyz, R1, R2.x, R0;\n"
4095 "ADD R0.z, R0.w, R1.w;\n"
4096 "MAD R2.w, -R0, R1, R0.z;\n"
4097 "ADD R0.xy, fragment.position, c[0];\n"
4098 "MUL R0.xy, R0, c[1];\n"
4099 "TEX R0, R0, texture[1], 2D;\n"
4100 "ADD R2, R2, -R1;\n"
4101 "DP4 R0.x, R0, c[2];\n"
4102 "MAD result.color, R0.x, R2, R1;\n"
4103 "END\n"
4104 ;
4105
4106static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN =
4107 "!!ARBfp1.0\n"
4108 "PARAM c[8] = { program.local[0..7] };\n"
4109 "TEMP R0;\n"
4110 "TEMP R1;\n"
4111 "TEMP R2;\n"
4112 "TEMP R3;\n"
4113 "MUL R0.xyz, fragment.position.y, c[4];\n"
4114 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4115 "ADD R0.xyz, R0, c[5];\n"
4116 "RCP R0.z, R0.z;\n"
4117 "MUL R0.xy, R0, R0.z;\n"
4118 "MUL R0.xy, R0, c[6];\n"
4119 "ADD R0.x, R0, R0.y;\n"
4120 "MUL R0.x, R0, c[6].z;\n"
4121 "MUL R1.xy, fragment.position, c[7];\n"
4122 "ADD R3.xy, fragment.position, c[0];\n"
4123 "TEX R1, R1, texture[0], 2D;\n"
4124 "TEX R0, R0, texture[2], 1D;\n"
4125 "ADD R2, R0, R1;\n"
4126 "MAD R2, -R0, R1, R2;\n"
4127 "MUL R3.xy, R3, c[1];\n"
4128 "TEX R0, R3, texture[1], 2D;\n"
4129 "ADD R2, R2, -R1;\n"
4130 "DP4 R0.x, R0, c[2];\n"
4131 "MAD result.color, R0.x, R2, R1;\n"
4132 "END\n"
4133 ;
4134
4135static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY =
4136 "!!ARBfp1.0\n"
4137 "PARAM c[9] = { program.local[0..7],\n"
4138 " { 2, 1 } };\n"
4139 "TEMP R0;\n"
4140 "TEMP R1;\n"
4141 "TEMP R2;\n"
4142 "TEMP R3;\n"
4143 "TEMP R4;\n"
4144 "MUL R0.xyz, fragment.position.y, c[4];\n"
4145 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4146 "ADD R0.xyz, R0, c[5];\n"
4147 "RCP R0.z, R0.z;\n"
4148 "MUL R0.xy, R0, R0.z;\n"
4149 "MUL R0.xy, R0, c[6];\n"
4150 "ADD R0.x, R0, R0.y;\n"
4151 "MUL R0.x, R0, c[6].z;\n"
4152 "TEX R0, R0, texture[2], 1D;\n"
4153 "MUL R1.xy, fragment.position, c[7];\n"
4154 "TEX R1, R1, texture[0], 2D;\n"
4155 "ADD R2.w, -R1, c[8].y;\n"
4156 "ADD R3.xyz, R0.w, -R0;\n"
4157 "ADD R2.xyz, R1.w, -R1;\n"
4158 "MUL R2.xyz, R2, R3;\n"
4159 "MUL R2.xyz, R2, c[8].x;\n"
4160 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4161 "MUL R4.xyz, R0, R2.w;\n"
4162 "MUL R3.xyz, R0, R1;\n"
4163 "MAD R0.xyz, R0, R2.w, R2;\n"
4164 "ADD R2.x, -R0.w, c[8].y;\n"
4165 "MAD R3.xyz, R3, c[8].x, R4;\n"
4166 "MAD R3.xyz, R1, R2.x, R3;\n"
4167 "MAD R0.xyz, R1, R2.x, R0;\n"
4168 "MUL R2.xyz, R1, c[8].x;\n"
4169 "ADD R0.xyz, R0, -R3;\n"
4170 "SGE R2.xyz, R2, R1.w;\n"
4171 "MAD R2.xyz, R2, R0, R3;\n"
4172 "ADD R0.z, R0.w, R1.w;\n"
4173 "MAD R2.w, -R0, R1, R0.z;\n"
4174 "ADD R0.xy, fragment.position, c[0];\n"
4175 "MUL R0.xy, R0, c[1];\n"
4176 "TEX R0, R0, texture[1], 2D;\n"
4177 "ADD R2, R2, -R1;\n"
4178 "DP4 R0.x, R0, c[2];\n"
4179 "MAD result.color, R0.x, R2, R1;\n"
4180 "END\n"
4181 ;
4182
4183static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN =
4184 "!!ARBfp1.0\n"
4185 "PARAM c[9] = { program.local[0..7],\n"
4186 " { 1 } };\n"
4187 "TEMP R0;\n"
4188 "TEMP R1;\n"
4189 "TEMP R2;\n"
4190 "TEMP R3;\n"
4191 "MUL R0.xyz, fragment.position.y, c[4];\n"
4192 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4193 "ADD R0.xyz, R0, c[5];\n"
4194 "RCP R0.z, R0.z;\n"
4195 "MUL R0.xy, R0, R0.z;\n"
4196 "MUL R0.xy, R0, c[6];\n"
4197 "ADD R0.x, R0, R0.y;\n"
4198 "MUL R0.x, R0, c[6].z;\n"
4199 "MUL R1.xy, fragment.position, c[7];\n"
4200 "TEX R1, R1, texture[0], 2D;\n"
4201 "TEX R0, R0, texture[2], 1D;\n"
4202 "MUL R3.xyz, R1, R0.w;\n"
4203 "MUL R2.xyz, R0, R1.w;\n"
4204 "MIN R2.xyz, R2, R3;\n"
4205 "ADD R2.w, -R1, c[8].x;\n"
4206 "MAD R0.xyz, R0, R2.w, R2;\n"
4207 "ADD R2.x, -R0.w, c[8];\n"
4208 "MAD R2.xyz, R1, R2.x, R0;\n"
4209 "ADD R0.z, R0.w, R1.w;\n"
4210 "MAD R2.w, -R0, R1, R0.z;\n"
4211 "ADD R0.xy, fragment.position, c[0];\n"
4212 "MUL R0.xy, R0, c[1];\n"
4213 "TEX R0, R0, texture[1], 2D;\n"
4214 "ADD R2, R2, -R1;\n"
4215 "DP4 R0.x, R0, c[2];\n"
4216 "MAD result.color, R0.x, R2, R1;\n"
4217 "END\n"
4218 ;
4219
4220static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN =
4221 "!!ARBfp1.0\n"
4222 "PARAM c[9] = { program.local[0..7],\n"
4223 " { 1 } };\n"
4224 "TEMP R0;\n"
4225 "TEMP R1;\n"
4226 "TEMP R2;\n"
4227 "TEMP R3;\n"
4228 "MUL R0.xyz, fragment.position.y, c[4];\n"
4229 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4230 "ADD R0.xyz, R0, c[5];\n"
4231 "RCP R0.z, R0.z;\n"
4232 "MUL R0.xy, R0, R0.z;\n"
4233 "MUL R0.xy, R0, c[6];\n"
4234 "ADD R0.x, R0, R0.y;\n"
4235 "MUL R0.x, R0, c[6].z;\n"
4236 "MUL R1.xy, fragment.position, c[7];\n"
4237 "TEX R1, R1, texture[0], 2D;\n"
4238 "TEX R0, R0, texture[2], 1D;\n"
4239 "MUL R3.xyz, R1, R0.w;\n"
4240 "MUL R2.xyz, R0, R1.w;\n"
4241 "MAX R2.xyz, R2, R3;\n"
4242 "ADD R2.w, -R1, c[8].x;\n"
4243 "MAD R0.xyz, R0, R2.w, R2;\n"
4244 "ADD R2.x, -R0.w, c[8];\n"
4245 "MAD R2.xyz, R1, R2.x, R0;\n"
4246 "ADD R0.z, R0.w, R1.w;\n"
4247 "MAD R2.w, -R0, R1, R0.z;\n"
4248 "ADD R0.xy, fragment.position, c[0];\n"
4249 "MUL R0.xy, R0, c[1];\n"
4250 "TEX R0, R0, texture[1], 2D;\n"
4251 "ADD R2, R2, -R1;\n"
4252 "DP4 R0.x, R0, c[2];\n"
4253 "MAD result.color, R0.x, R2, R1;\n"
4254 "END\n"
4255 ;
4256
4257static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE =
4258 "!!ARBfp1.0\n"
4259 "PARAM c[9] = { program.local[0..7],\n"
4260 " { 1, 1e-06 } };\n"
4261 "TEMP R0;\n"
4262 "TEMP R1;\n"
4263 "TEMP R2;\n"
4264 "TEMP R3;\n"
4265 "TEMP R4;\n"
4266 "MUL R0.xyz, fragment.position.y, c[4];\n"
4267 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4268 "ADD R0.xyz, R0, c[5];\n"
4269 "RCP R0.z, R0.z;\n"
4270 "MUL R0.xy, R0, R0.z;\n"
4271 "MUL R0.xy, R0, c[6];\n"
4272 "ADD R0.x, R0, R0.y;\n"
4273 "MUL R0.x, R0, c[6].z;\n"
4274 "TEX R0, R0, texture[2], 1D;\n"
4275 "MAX R1.x, R0.w, c[8].y;\n"
4276 "RCP R1.x, R1.x;\n"
4277 "MAD R2.xyz, -R0, R1.x, c[8].x;\n"
4278 "MAX R2.xyz, R2, c[8].y;\n"
4279 "MUL R1.xy, fragment.position, c[7];\n"
4280 "TEX R1, R1, texture[0], 2D;\n"
4281 "ADD R2.w, -R0, c[8].x;\n"
4282 "MUL R3.xyz, R1, R2.w;\n"
4283 "ADD R2.w, -R1, c[8].x;\n"
4284 "MAD R4.xyz, R0, R2.w, R3;\n"
4285 "MUL R3.xyz, R1, R0.w;\n"
4286 "MUL R2.w, R0, R1;\n"
4287 "MAD R0.xyz, R0, R1.w, R3;\n"
4288 "SGE R0.xyz, R0, R2.w;\n"
4289 "RCP R2.x, R2.x;\n"
4290 "RCP R2.y, R2.y;\n"
4291 "RCP R2.z, R2.z;\n"
4292 "MAD R2.xyz, R3, R2, R4;\n"
4293 "MAD R4.xyz, R0.w, R1.w, R4;\n"
4294 "ADD R4.xyz, R4, -R2;\n"
4295 "MAD R2.xyz, R0, R4, R2;\n"
4296 "ADD R0.z, R0.w, R1.w;\n"
4297 "MAD R2.w, -R0, R1, R0.z;\n"
4298 "ADD R0.xy, fragment.position, c[0];\n"
4299 "MUL R0.xy, R0, c[1];\n"
4300 "TEX R0, R0, texture[1], 2D;\n"
4301 "ADD R2, R2, -R1;\n"
4302 "DP4 R0.x, R0, c[2];\n"
4303 "MAD result.color, R0.x, R2, R1;\n"
4304 "END\n"
4305 ;
4306
4307static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN =
4308 "!!ARBfp1.0\n"
4309 "PARAM c[9] = { program.local[0..7],\n"
4310 " { 1, 9.9999997e-06 } };\n"
4311 "TEMP R0;\n"
4312 "TEMP R1;\n"
4313 "TEMP R2;\n"
4314 "TEMP R3;\n"
4315 "TEMP R4;\n"
4316 "TEMP R5;\n"
4317 "MUL R0.xyz, fragment.position.y, c[4];\n"
4318 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4319 "ADD R0.xyz, R0, c[5];\n"
4320 "RCP R0.z, R0.z;\n"
4321 "MUL R0.xy, R0, R0.z;\n"
4322 "MUL R0.xy, R0, c[6];\n"
4323 "ADD R0.x, R0, R0.y;\n"
4324 "MUL R0.x, R0, c[6].z;\n"
4325 "TEX R0, R0, texture[2], 1D;\n"
4326 "MUL R1.xy, fragment.position, c[7];\n"
4327 "TEX R1, R1, texture[0], 2D;\n"
4328 "MUL R2.xyz, R1, R0.w;\n"
4329 "MAD R3.xyz, R0, R1.w, R2;\n"
4330 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
4331 "MUL R4.xyz, R0.w, R2;\n"
4332 "MAX R2.xyz, R0, c[8].y;\n"
4333 "ADD R2.w, -R1, c[8].x;\n"
4334 "MUL R5.xyz, R0, R2.w;\n"
4335 "ADD R3.w, -R0, c[8].x;\n"
4336 "RCP R2.x, R2.x;\n"
4337 "RCP R2.y, R2.y;\n"
4338 "RCP R2.z, R2.z;\n"
4339 "MAD R2.xyz, R4, R2, R5;\n"
4340 "MUL R4.xyz, R1, R3.w;\n"
4341 "MAD R0.xyz, R0, R2.w, R4;\n"
4342 "MUL R2.w, R0, R1;\n"
4343 "ADD R3.w, -R0, c[8].x;\n"
4344 "MAD R2.xyz, R1, R3.w, R2;\n"
4345 "ADD R2.xyz, R2, -R0;\n"
4346 "SGE R3.xyz, R3, R2.w;\n"
4347 "MAD R2.xyz, R3, R2, R0;\n"
4348 "ADD R0.z, R0.w, R1.w;\n"
4349 "MAD R2.w, -R0, R1, R0.z;\n"
4350 "ADD R0.xy, fragment.position, c[0];\n"
4351 "MUL R0.xy, R0, c[1];\n"
4352 "TEX R0, R0, texture[1], 2D;\n"
4353 "ADD R2, R2, -R1;\n"
4354 "DP4 R0.x, R0, c[2];\n"
4355 "MAD result.color, R0.x, R2, R1;\n"
4356 "END\n"
4357 ;
4358
4359static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT =
4360 "!!ARBfp1.0\n"
4361 "PARAM c[9] = { program.local[0..7],\n"
4362 " { 2, 1 } };\n"
4363 "TEMP R0;\n"
4364 "TEMP R1;\n"
4365 "TEMP R2;\n"
4366 "TEMP R3;\n"
4367 "TEMP R4;\n"
4368 "MUL R0.xyz, fragment.position.y, c[4];\n"
4369 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4370 "ADD R0.xyz, R0, c[5];\n"
4371 "RCP R0.z, R0.z;\n"
4372 "MUL R0.xy, R0, R0.z;\n"
4373 "MUL R0.xy, R0, c[6];\n"
4374 "ADD R0.x, R0, R0.y;\n"
4375 "MUL R0.x, R0, c[6].z;\n"
4376 "TEX R0, R0, texture[2], 1D;\n"
4377 "MUL R1.xy, fragment.position, c[7];\n"
4378 "TEX R1, R1, texture[0], 2D;\n"
4379 "ADD R2.w, -R1, c[8].y;\n"
4380 "ADD R3.xyz, R0.w, -R0;\n"
4381 "ADD R2.xyz, R1.w, -R1;\n"
4382 "MUL R2.xyz, R2, R3;\n"
4383 "MUL R2.xyz, R2, c[8].x;\n"
4384 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4385 "MUL R4.xyz, R0, R2.w;\n"
4386 "MAD R2.xyz, R0, R2.w, R2;\n"
4387 "MUL R3.xyz, R0, R1;\n"
4388 "ADD R2.w, -R0, c[8].y;\n"
4389 "MAD R3.xyz, R3, c[8].x, R4;\n"
4390 "MUL R0.xyz, R0, c[8].x;\n"
4391 "SGE R0.xyz, R0, R0.w;\n"
4392 "MAD R3.xyz, R1, R2.w, R3;\n"
4393 "MAD R2.xyz, R1, R2.w, R2;\n"
4394 "ADD R2.xyz, R2, -R3;\n"
4395 "MAD R2.xyz, R0, R2, R3;\n"
4396 "ADD R0.z, R0.w, R1.w;\n"
4397 "MAD R2.w, -R0, R1, R0.z;\n"
4398 "ADD R0.xy, fragment.position, c[0];\n"
4399 "MUL R0.xy, R0, c[1];\n"
4400 "TEX R0, R0, texture[1], 2D;\n"
4401 "ADD R2, R2, -R1;\n"
4402 "DP4 R0.x, R0, c[2];\n"
4403 "MAD result.color, R0.x, R2, R1;\n"
4404 "END\n"
4405 ;
4406
4407static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT =
4408 "!!ARBfp1.0\n"
4409 "PARAM c[10] = { program.local[0..7],\n"
4410 " { 1, 9.9999997e-06, 2, 8 },\n"
4411 " { 3 } };\n"
4412 "TEMP R0;\n"
4413 "TEMP R1;\n"
4414 "TEMP R2;\n"
4415 "TEMP R3;\n"
4416 "TEMP R4;\n"
4417 "TEMP R5;\n"
4418 "TEMP R6;\n"
4419 "MUL R2.xyz, fragment.position.y, c[4];\n"
4420 "MAD R3.xyz, fragment.position.x, c[3], R2;\n"
4421 "MUL R0.xy, fragment.position, c[7];\n"
4422 "TEX R1, R0, texture[0], 2D;\n"
4423 "MAX R0.x, R1.w, c[8].y;\n"
4424 "RCP R2.w, R0.x;\n"
4425 "MUL R0.xyz, R1, R2.w;\n"
4426 "RSQ R0.w, R0.x;\n"
4427 "RSQ R2.y, R0.y;\n"
4428 "ADD R3.xyz, R3, c[5];\n"
4429 "RCP R2.x, R0.w;\n"
4430 "RCP R0.w, R3.z;\n"
4431 "MUL R3.xy, R3, R0.w;\n"
4432 "RSQ R0.w, R0.z;\n"
4433 "RCP R2.z, R0.w;\n"
4434 "RCP R2.y, R2.y;\n"
4435 "MAD R6.xyz, R2, R1.w, -R1;\n"
4436 "MUL R2.xyz, -R0, c[8].w;\n"
4437 "ADD R5.xyz, R2, c[9].x;\n"
4438 "MAD R2.xyz, -R1, R2.w, c[8].x;\n"
4439 "MUL R3.xy, R3, c[6];\n"
4440 "ADD R0.w, R3.x, R3.y;\n"
4441 "MUL R0.w, R0, c[6].z;\n"
4442 "TEX R0, R0.w, texture[2], 1D;\n"
4443 "MAD R3.xyz, R0, c[8].z, -R0.w;\n"
4444 "MUL R4.xyz, R2, R3;\n"
4445 "MAD R4.xyz, -R4, R5, R0.w;\n"
4446 "MUL R5.xyz, R6, R3;\n"
4447 "MAD R2.xyz, -R2, R3, R0.w;\n"
4448 "MAD R6.xyz, R1, R0.w, R5;\n"
4449 "MUL R4.xyz, R1, R4;\n"
4450 "MUL R5.xyz, R1, c[8].w;\n"
4451 "ADD R6.xyz, R6, -R4;\n"
4452 "SGE R5.xyz, R5, R1.w;\n"
4453 "MUL R5.xyz, R5, R6;\n"
4454 "ADD R3.xyz, R4, R5;\n"
4455 "MUL R2.xyz, R1, R2;\n"
4456 "MUL R4.xyz, R0, c[8].z;\n"
4457 "ADD R3.xyz, R3, -R2;\n"
4458 "SGE R4.xyz, R4, R0.w;\n"
4459 "MUL R3.xyz, R4, R3;\n"
4460 "ADD R2.xyz, R2, R3;\n"
4461 "ADD R2.w, -R1, c[8].x;\n"
4462 "MAD R0.xyz, R0, R2.w, R2;\n"
4463 "ADD R2.x, -R0.w, c[8];\n"
4464 "MAD R2.xyz, R1, R2.x, R0;\n"
4465 "ADD R0.z, R0.w, R1.w;\n"
4466 "MAD R2.w, -R0, R1, R0.z;\n"
4467 "ADD R0.xy, fragment.position, c[0];\n"
4468 "MUL R0.xy, R0, c[1];\n"
4469 "TEX R0, R0, texture[1], 2D;\n"
4470 "ADD R2, R2, -R1;\n"
4471 "DP4 R0.x, R0, c[2];\n"
4472 "MAD result.color, R0.x, R2, R1;\n"
4473 "END\n"
4474 ;
4475
4476static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE =
4477 "!!ARBfp1.0\n"
4478 "PARAM c[9] = { program.local[0..7],\n"
4479 " { 2 } };\n"
4480 "TEMP R0;\n"
4481 "TEMP R1;\n"
4482 "TEMP R2;\n"
4483 "TEMP R3;\n"
4484 "MUL R0.xyz, fragment.position.y, c[4];\n"
4485 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4486 "ADD R0.xyz, R0, c[5];\n"
4487 "RCP R0.z, R0.z;\n"
4488 "MUL R0.xy, R0, R0.z;\n"
4489 "MUL R0.xy, R0, c[6];\n"
4490 "ADD R0.x, R0, R0.y;\n"
4491 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
4492 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4493 "MUL R0.x, R0, c[6].z;\n"
4494 "TEX R0, R0, texture[2], 1D;\n"
4495 "ADD R3.xyz, R0, R1;\n"
4496 "MUL R2.xyz, R1, R0.w;\n"
4497 "MUL R0.xyz, R0, R1.w;\n"
4498 "MIN R0.xyz, R0, R2;\n"
4499 "MAD R2.xyz, -R0, c[8].x, R3;\n"
4500 "ADD R0.z, R0.w, R1.w;\n"
4501 "MAD R2.w, -R0, R1, R0.z;\n"
4502 "ADD R0.xy, fragment.position, c[0];\n"
4503 "MUL R0.xy, R0, c[1];\n"
4504 "TEX R0, R0, texture[1], 2D;\n"
4505 "ADD R2, R2, -R1;\n"
4506 "DP4 R0.x, R0, c[2];\n"
4507 "MAD result.color, R0.x, R2, R1;\n"
4508 "END\n"
4509 ;
4510
4511static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION =
4512 "!!ARBfp1.0\n"
4513 "PARAM c[9] = { program.local[0..7],\n"
4514 " { 1, 2 } };\n"
4515 "TEMP R0;\n"
4516 "TEMP R1;\n"
4517 "TEMP R2;\n"
4518 "TEMP R3;\n"
4519 "MUL R0.xyz, fragment.position.y, c[4];\n"
4520 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
4521 "ADD R0.xyz, R0, c[5];\n"
4522 "RCP R0.z, R0.z;\n"
4523 "MUL R0.xy, R0, R0.z;\n"
4524 "MUL R0.xy, R0, c[6];\n"
4525 "ADD R0.x, R0, R0.y;\n"
4526 "MUL R0.x, R0, c[6].z;\n"
4527 "MUL R1.xy, fragment.position, c[7];\n"
4528 "TEX R1, R1, texture[0], 2D;\n"
4529 "TEX R0, R0, texture[2], 1D;\n"
4530 "MUL R2.xyz, R1, R0.w;\n"
4531 "MAD R3.xyz, R0, R1.w, R2;\n"
4532 "MUL R2.xyz, R0, R1;\n"
4533 "MAD R2.xyz, -R2, c[8].y, R3;\n"
4534 "ADD R2.w, -R1, c[8].x;\n"
4535 "MAD R0.xyz, R0, R2.w, R2;\n"
4536 "ADD R2.x, -R0.w, c[8];\n"
4537 "MAD R2.xyz, R1, R2.x, R0;\n"
4538 "ADD R0.z, R0.w, R1.w;\n"
4539 "MAD R2.w, -R0, R1, R0.z;\n"
4540 "ADD R0.xy, fragment.position, c[0];\n"
4541 "MUL R0.xy, R0, c[1];\n"
4542 "TEX R0, R0, texture[1], 2D;\n"
4543 "ADD R2, R2, -R1;\n"
4544 "DP4 R0.x, R0, c[2];\n"
4545 "MAD result.color, R0.x, R2, R1;\n"
4546 "END\n"
4547 ;
4548
4549static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
4550 "!!ARBfp1.0\n"
4551 "PARAM c[8] = { program.local[0..4],\n"
4552 " { 1 },\n"
4553 " program.local[6..7] };\n"
4554 "TEMP R0;\n"
4555 "TEMP R1;\n"
4556 "TEMP R2;\n"
4557 "TEMP R3;\n"
4558 "MUL R0.xyz, fragment.position.y, c[1];\n"
4559 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4560 "ADD R0.xyz, R0, c[2];\n"
4561 "RCP R0.z, R0.z;\n"
4562 "MUL R0.xy, R0, R0.z;\n"
4563 "MUL R0.xy, R0, c[3];\n"
4564 "ADD R0.x, R0, R0.y;\n"
4565 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4566 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4567 "MUL R2.xyz, R1, c[7].y;\n"
4568 "MUL R0.x, R0, c[3].z;\n"
4569 "TEX R0, R0, texture[1], 1D;\n"
4570 "MUL R3.xyz, R2, R0.w;\n"
4571 "MUL R2.xyz, R0, c[7].x;\n"
4572 "MAD R2.xyz, R2, R1.w, R3;\n"
4573 "MUL R0.xyz, R0, c[6].y;\n"
4574 "ADD R2.w, -R1, c[5].x;\n"
4575 "MAD R0.xyz, R0, R2.w, R2;\n"
4576 "ADD R2.x, -R0.w, c[5];\n"
4577 "MUL R1.xyz, R1, c[6].z;\n"
4578 "MAD result.color.xyz, R1, R2.x, R0;\n"
4579 "ADD R0.y, -R1.w, c[5].x;\n"
4580 "MUL R0.x, R0.w, R1.w;\n"
4581 "MUL R0.z, R1.w, R2.x;\n"
4582 "MUL R0.y, R0.w, R0;\n"
4583 "DP3 result.color.w, R0, c[6];\n"
4584 "END\n"
4585 ;
4586
4587static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK =
4588 "!!ARBfp1.0\n"
4589 "PARAM c[6] = { program.local[0..4],\n"
4590 " { 1 } };\n"
4591 "TEMP R0;\n"
4592 "TEMP R1;\n"
4593 "TEMP R2;\n"
4594 "MUL R0.xyz, fragment.position.y, c[1];\n"
4595 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4596 "ADD R0.xyz, R0, c[2];\n"
4597 "RCP R0.z, R0.z;\n"
4598 "MUL R0.xy, R0, R0.z;\n"
4599 "MUL R0.xy, R0, c[3];\n"
4600 "ADD R0.x, R0, R0.y;\n"
4601 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4602 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4603 "MUL R0.x, R0, c[3].z;\n"
4604 "TEX R0, R0, texture[1], 1D;\n"
4605 "ADD R2.x, -R1.w, c[5];\n"
4606 "MUL R2.xyz, R0, R2.x;\n"
4607 "MAD R0.xyz, R0, R1, R2;\n"
4608 "ADD R2.x, R0.w, R1.w;\n"
4609 "ADD R2.y, -R0.w, c[5].x;\n"
4610 "MAD result.color.xyz, R1, R2.y, R0;\n"
4611 "MAD result.color.w, -R0, R1, R2.x;\n"
4612 "END\n"
4613 ;
4614
4615static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK =
4616 "!!ARBfp1.0\n"
4617 "PARAM c[5] = { program.local[0..4] };\n"
4618 "TEMP R0;\n"
4619 "TEMP R1;\n"
4620 "TEMP R2;\n"
4621 "MUL R0.xyz, fragment.position.y, c[1];\n"
4622 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4623 "ADD R0.xyz, R0, c[2];\n"
4624 "RCP R0.z, R0.z;\n"
4625 "MUL R0.xy, R0, R0.z;\n"
4626 "MUL R0.xy, R0, c[3];\n"
4627 "ADD R0.x, R0, R0.y;\n"
4628 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
4629 "TEX R1, R0.zwzw, texture[0], 2D;\n"
4630 "MUL R0.x, R0, c[3].z;\n"
4631 "TEX R0, R0, texture[1], 1D;\n"
4632 "ADD R2, R0, R1;\n"
4633 "MAD result.color, -R0, R1, R2;\n"
4634 "END\n"
4635 ;
4636
4637static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK =
4638 "!!ARBfp1.0\n"
4639 "PARAM c[6] = { program.local[0..4],\n"
4640 " { 2, 1 } };\n"
4641 "TEMP R0;\n"
4642 "TEMP R1;\n"
4643 "TEMP R2;\n"
4644 "TEMP R3;\n"
4645 "MUL R0.xyz, fragment.position.y, c[1];\n"
4646 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4647 "ADD R0.xyz, R0, c[2];\n"
4648 "RCP R0.z, R0.z;\n"
4649 "MUL R0.xy, R0, R0.z;\n"
4650 "MUL R0.xy, R0, c[3];\n"
4651 "ADD R0.x, R0, R0.y;\n"
4652 "MUL R0.x, R0, c[3].z;\n"
4653 "TEX R0, R0, texture[1], 1D;\n"
4654 "MUL R1.xy, fragment.position, c[4];\n"
4655 "TEX R1, R1, texture[0], 2D;\n"
4656 "ADD R3.xyz, R0.w, -R0;\n"
4657 "ADD R2.xyz, R1.w, -R1;\n"
4658 "MUL R2.xyz, R2, R3;\n"
4659 "ADD R2.w, -R1, c[5].y;\n"
4660 "MUL R2.xyz, R2, c[5].x;\n"
4661 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4662 "MAD R2.xyz, R0, R2.w, R2;\n"
4663 "MUL R3.xyz, R0, R2.w;\n"
4664 "MUL R0.xyz, R0, R1;\n"
4665 "ADD R2.w, -R0, c[5].y;\n"
4666 "MAD R0.xyz, R0, c[5].x, R3;\n"
4667 "MAD R0.xyz, R1, R2.w, R0;\n"
4668 "MAD R2.xyz, R1, R2.w, R2;\n"
4669 "MUL R1.xyz, R1, c[5].x;\n"
4670 "ADD R2.w, R0, R1;\n"
4671 "ADD R2.xyz, R2, -R0;\n"
4672 "SGE R1.xyz, R1, R1.w;\n"
4673 "MAD result.color.xyz, R1, R2, R0;\n"
4674 "MAD result.color.w, -R0, R1, R2;\n"
4675 "END\n"
4676 ;
4677
4678static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK =
4679 "!!ARBfp1.0\n"
4680 "PARAM c[6] = { program.local[0..4],\n"
4681 " { 1 } };\n"
4682 "TEMP R0;\n"
4683 "TEMP R1;\n"
4684 "TEMP R2;\n"
4685 "TEMP R3;\n"
4686 "MUL R0.xyz, fragment.position.y, c[1];\n"
4687 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4688 "ADD R0.xyz, R0, c[2];\n"
4689 "RCP R0.z, R0.z;\n"
4690 "MUL R0.xy, R0, R0.z;\n"
4691 "MUL R0.xy, R0, c[3];\n"
4692 "ADD R0.x, R0, R0.y;\n"
4693 "MUL R0.x, R0, c[3].z;\n"
4694 "MUL R1.xy, fragment.position, c[4];\n"
4695 "TEX R1, R1, texture[0], 2D;\n"
4696 "TEX R0, R0, texture[1], 1D;\n"
4697 "MUL R2.xyz, R0, R1.w;\n"
4698 "MUL R3.xyz, R1, R0.w;\n"
4699 "MIN R2.xyz, R2, R3;\n"
4700 "ADD R2.w, -R1, c[5].x;\n"
4701 "MAD R0.xyz, R0, R2.w, R2;\n"
4702 "ADD R2.x, R0.w, R1.w;\n"
4703 "ADD R2.y, -R0.w, c[5].x;\n"
4704 "MAD result.color.xyz, R1, R2.y, R0;\n"
4705 "MAD result.color.w, -R0, R1, R2.x;\n"
4706 "END\n"
4707 ;
4708
4709static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK =
4710 "!!ARBfp1.0\n"
4711 "PARAM c[6] = { program.local[0..4],\n"
4712 " { 1 } };\n"
4713 "TEMP R0;\n"
4714 "TEMP R1;\n"
4715 "TEMP R2;\n"
4716 "TEMP R3;\n"
4717 "MUL R0.xyz, fragment.position.y, c[1];\n"
4718 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4719 "ADD R0.xyz, R0, c[2];\n"
4720 "RCP R0.z, R0.z;\n"
4721 "MUL R0.xy, R0, R0.z;\n"
4722 "MUL R0.xy, R0, c[3];\n"
4723 "ADD R0.x, R0, R0.y;\n"
4724 "MUL R0.x, R0, c[3].z;\n"
4725 "MUL R1.xy, fragment.position, c[4];\n"
4726 "TEX R1, R1, texture[0], 2D;\n"
4727 "TEX R0, R0, texture[1], 1D;\n"
4728 "MUL R2.xyz, R0, R1.w;\n"
4729 "MUL R3.xyz, R1, R0.w;\n"
4730 "MAX R2.xyz, R2, R3;\n"
4731 "ADD R2.w, -R1, c[5].x;\n"
4732 "MAD R0.xyz, R0, R2.w, R2;\n"
4733 "ADD R2.x, R0.w, R1.w;\n"
4734 "ADD R2.y, -R0.w, c[5].x;\n"
4735 "MAD result.color.xyz, R1, R2.y, R0;\n"
4736 "MAD result.color.w, -R0, R1, R2.x;\n"
4737 "END\n"
4738 ;
4739
4740static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK =
4741 "!!ARBfp1.0\n"
4742 "PARAM c[6] = { program.local[0..4],\n"
4743 " { 1, 1e-06 } };\n"
4744 "TEMP R0;\n"
4745 "TEMP R1;\n"
4746 "TEMP R2;\n"
4747 "TEMP R3;\n"
4748 "MUL R0.xyz, fragment.position.y, c[1];\n"
4749 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4750 "ADD R0.xyz, R0, c[2];\n"
4751 "RCP R0.z, R0.z;\n"
4752 "MUL R0.xy, R0, R0.z;\n"
4753 "MUL R0.xy, R0, c[3];\n"
4754 "ADD R0.x, R0, R0.y;\n"
4755 "MUL R0.x, R0, c[3].z;\n"
4756 "TEX R0, R0, texture[1], 1D;\n"
4757 "MAX R1.x, R0.w, c[5].y;\n"
4758 "RCP R1.x, R1.x;\n"
4759 "MAD R3.xyz, -R0, R1.x, c[5].x;\n"
4760 "MAX R3.xyz, R3, c[5].y;\n"
4761 "MUL R1.xy, fragment.position, c[4];\n"
4762 "TEX R1, R1, texture[0], 2D;\n"
4763 "ADD R2.x, -R0.w, c[5];\n"
4764 "MUL R2.xyz, R1, R2.x;\n"
4765 "ADD R2.w, -R1, c[5].x;\n"
4766 "MAD R2.xyz, R0, R2.w, R2;\n"
4767 "MUL R1.xyz, R1, R0.w;\n"
4768 "MAD R0.xyz, R0, R1.w, R1;\n"
4769 "MUL R2.w, R0, R1;\n"
4770 "RCP R3.x, R3.x;\n"
4771 "RCP R3.y, R3.y;\n"
4772 "RCP R3.z, R3.z;\n"
4773 "MAD R3.xyz, R1, R3, R2;\n"
4774 "MAD R2.xyz, R0.w, R1.w, R2;\n"
4775 "ADD R1.x, R0.w, R1.w;\n"
4776 "ADD R2.xyz, R2, -R3;\n"
4777 "SGE R0.xyz, R0, R2.w;\n"
4778 "MAD result.color.xyz, R0, R2, R3;\n"
4779 "MAD result.color.w, -R0, R1, R1.x;\n"
4780 "END\n"
4781 ;
4782
4783static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK =
4784 "!!ARBfp1.0\n"
4785 "PARAM c[6] = { program.local[0..4],\n"
4786 " { 1, 9.9999997e-06 } };\n"
4787 "TEMP R0;\n"
4788 "TEMP R1;\n"
4789 "TEMP R2;\n"
4790 "TEMP R3;\n"
4791 "TEMP R4;\n"
4792 "TEMP R5;\n"
4793 "MUL R0.xyz, fragment.position.y, c[1];\n"
4794 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4795 "ADD R0.xyz, R0, c[2];\n"
4796 "RCP R0.z, R0.z;\n"
4797 "MUL R0.xy, R0, R0.z;\n"
4798 "MUL R0.xy, R0, c[3];\n"
4799 "ADD R0.x, R0, R0.y;\n"
4800 "MUL R0.x, R0, c[3].z;\n"
4801 "TEX R0, R0, texture[1], 1D;\n"
4802 "MUL R1.xy, fragment.position, c[4];\n"
4803 "TEX R1, R1, texture[0], 2D;\n"
4804 "MUL R2.xyz, R1, R0.w;\n"
4805 "MAD R3.xyz, R0, R1.w, R2;\n"
4806 "ADD R2.w, -R1, c[5].x;\n"
4807 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
4808 "MUL R4.xyz, R0.w, R2;\n"
4809 "MAX R2.xyz, R0, c[5].y;\n"
4810 "MUL R5.xyz, R0, R2.w;\n"
4811 "ADD R3.w, -R0, c[5].x;\n"
4812 "RCP R2.x, R2.x;\n"
4813 "RCP R2.y, R2.y;\n"
4814 "RCP R2.z, R2.z;\n"
4815 "MAD R2.xyz, R4, R2, R5;\n"
4816 "MUL R4.xyz, R1, R3.w;\n"
4817 "MAD R0.xyz, R0, R2.w, R4;\n"
4818 "ADD R3.w, -R0, c[5].x;\n"
4819 "MAD R1.xyz, R1, R3.w, R2;\n"
4820 "MUL R2.x, R0.w, R1.w;\n"
4821 "ADD R2.w, R0, R1;\n"
4822 "ADD R1.xyz, R1, -R0;\n"
4823 "SGE R2.xyz, R3, R2.x;\n"
4824 "MAD result.color.xyz, R2, R1, R0;\n"
4825 "MAD result.color.w, -R0, R1, R2;\n"
4826 "END\n"
4827 ;
4828
4829static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK =
4830 "!!ARBfp1.0\n"
4831 "PARAM c[6] = { program.local[0..4],\n"
4832 " { 2, 1 } };\n"
4833 "TEMP R0;\n"
4834 "TEMP R1;\n"
4835 "TEMP R2;\n"
4836 "TEMP R3;\n"
4837 "TEMP R4;\n"
4838 "MUL R0.xyz, fragment.position.y, c[1];\n"
4839 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4840 "ADD R0.xyz, R0, c[2];\n"
4841 "RCP R0.z, R0.z;\n"
4842 "MUL R0.xy, R0, R0.z;\n"
4843 "MUL R0.xy, R0, c[3];\n"
4844 "ADD R0.x, R0, R0.y;\n"
4845 "MUL R0.x, R0, c[3].z;\n"
4846 "TEX R0, R0, texture[1], 1D;\n"
4847 "MUL R1.xy, fragment.position, c[4];\n"
4848 "TEX R1, R1, texture[0], 2D;\n"
4849 "ADD R2.w, -R1, c[5].y;\n"
4850 "ADD R3.xyz, R0.w, -R0;\n"
4851 "ADD R2.xyz, R1.w, -R1;\n"
4852 "MUL R2.xyz, R2, R3;\n"
4853 "MUL R2.xyz, R2, c[5].x;\n"
4854 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
4855 "MAD R2.xyz, R0, R2.w, R2;\n"
4856 "MUL R4.xyz, R0, R2.w;\n"
4857 "MUL R3.xyz, R0, R1;\n"
4858 "MUL R0.xyz, R0, c[5].x;\n"
4859 "ADD R2.w, -R0, c[5].y;\n"
4860 "MAD R3.xyz, R3, c[5].x, R4;\n"
4861 "MAD R3.xyz, R1, R2.w, R3;\n"
4862 "MAD R1.xyz, R1, R2.w, R2;\n"
4863 "ADD R2.x, R0.w, R1.w;\n"
4864 "ADD R1.xyz, R1, -R3;\n"
4865 "SGE R0.xyz, R0, R0.w;\n"
4866 "MAD result.color.xyz, R0, R1, R3;\n"
4867 "MAD result.color.w, -R0, R1, R2.x;\n"
4868 "END\n"
4869 ;
4870
4871static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
4872 "!!ARBfp1.0\n"
4873 "PARAM c[7] = { program.local[0..4],\n"
4874 " { 1, 9.9999997e-06, 2, 8 },\n"
4875 " { 3 } };\n"
4876 "TEMP R0;\n"
4877 "TEMP R1;\n"
4878 "TEMP R2;\n"
4879 "TEMP R3;\n"
4880 "TEMP R4;\n"
4881 "TEMP R5;\n"
4882 "TEMP R6;\n"
4883 "MUL R2.xyz, fragment.position.y, c[1];\n"
4884 "MAD R3.xyz, fragment.position.x, c[0], R2;\n"
4885 "MUL R0.xy, fragment.position, c[4];\n"
4886 "TEX R1, R0, texture[0], 2D;\n"
4887 "MAX R0.x, R1.w, c[5].y;\n"
4888 "RCP R2.w, R0.x;\n"
4889 "MUL R0.xyz, R1, R2.w;\n"
4890 "RSQ R0.w, R0.x;\n"
4891 "RSQ R2.y, R0.y;\n"
4892 "ADD R3.xyz, R3, c[2];\n"
4893 "RCP R2.x, R0.w;\n"
4894 "RCP R0.w, R3.z;\n"
4895 "MUL R3.xy, R3, R0.w;\n"
4896 "RSQ R0.w, R0.z;\n"
4897 "RCP R2.z, R0.w;\n"
4898 "RCP R2.y, R2.y;\n"
4899 "MAD R6.xyz, R2, R1.w, -R1;\n"
4900 "MUL R2.xyz, -R0, c[5].w;\n"
4901 "ADD R5.xyz, R2, c[6].x;\n"
4902 "MAD R2.xyz, -R1, R2.w, c[5].x;\n"
4903 "MUL R3.xy, R3, c[3];\n"
4904 "ADD R0.w, R3.x, R3.y;\n"
4905 "MUL R0.w, R0, c[3].z;\n"
4906 "TEX R0, R0.w, texture[1], 1D;\n"
4907 "MAD R3.xyz, R0, c[5].z, -R0.w;\n"
4908 "MUL R4.xyz, R2, R3;\n"
4909 "MAD R4.xyz, -R4, R5, R0.w;\n"
4910 "MUL R5.xyz, R6, R3;\n"
4911 "MAD R2.xyz, -R2, R3, R0.w;\n"
4912 "MAD R6.xyz, R1, R0.w, R5;\n"
4913 "MUL R4.xyz, R1, R4;\n"
4914 "MUL R5.xyz, R1, c[5].w;\n"
4915 "ADD R6.xyz, R6, -R4;\n"
4916 "SGE R5.xyz, R5, R1.w;\n"
4917 "MUL R5.xyz, R5, R6;\n"
4918 "ADD R3.xyz, R4, R5;\n"
4919 "MUL R2.xyz, R1, R2;\n"
4920 "MUL R4.xyz, R0, c[5].z;\n"
4921 "ADD R3.xyz, R3, -R2;\n"
4922 "SGE R4.xyz, R4, R0.w;\n"
4923 "MUL R3.xyz, R4, R3;\n"
4924 "ADD R2.xyz, R2, R3;\n"
4925 "ADD R2.w, -R1, c[5].x;\n"
4926 "MAD R0.xyz, R0, R2.w, R2;\n"
4927 "ADD R2.x, R0.w, R1.w;\n"
4928 "ADD R2.y, -R0.w, c[5].x;\n"
4929 "MAD result.color.xyz, R1, R2.y, R0;\n"
4930 "MAD result.color.w, -R0, R1, R2.x;\n"
4931 "END\n"
4932 ;
4933
4934static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK =
4935 "!!ARBfp1.0\n"
4936 "PARAM c[6] = { program.local[0..4],\n"
4937 " { 2 } };\n"
4938 "TEMP R0;\n"
4939 "TEMP R1;\n"
4940 "TEMP R2;\n"
4941 "TEMP R3;\n"
4942 "MUL R0.xyz, fragment.position.y, c[1];\n"
4943 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4944 "ADD R0.xyz, R0, c[2];\n"
4945 "RCP R0.z, R0.z;\n"
4946 "MUL R0.xy, R0, R0.z;\n"
4947 "MUL R0.xy, R0, c[3];\n"
4948 "ADD R0.x, R0, R0.y;\n"
4949 "MUL R0.x, R0, c[3].z;\n"
4950 "MUL R1.xy, fragment.position, c[4];\n"
4951 "TEX R0, R0, texture[1], 1D;\n"
4952 "TEX R1, R1, texture[0], 2D;\n"
4953 "MUL R2.xyz, R0, R1.w;\n"
4954 "MUL R3.xyz, R1, R0.w;\n"
4955 "ADD R0.xyz, R0, R1;\n"
4956 "MIN R2.xyz, R2, R3;\n"
4957 "ADD R1.x, R0.w, R1.w;\n"
4958 "MAD result.color.xyz, -R2, c[5].x, R0;\n"
4959 "MAD result.color.w, -R0, R1, R1.x;\n"
4960 "END\n"
4961 ;
4962
4963static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK =
4964 "!!ARBfp1.0\n"
4965 "PARAM c[6] = { program.local[0..4],\n"
4966 " { 1, 2 } };\n"
4967 "TEMP R0;\n"
4968 "TEMP R1;\n"
4969 "TEMP R2;\n"
4970 "TEMP R3;\n"
4971 "MUL R0.xyz, fragment.position.y, c[1];\n"
4972 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
4973 "ADD R0.xyz, R0, c[2];\n"
4974 "RCP R0.z, R0.z;\n"
4975 "MUL R0.xy, R0, R0.z;\n"
4976 "MUL R0.xy, R0, c[3];\n"
4977 "ADD R0.x, R0, R0.y;\n"
4978 "MUL R0.x, R0, c[3].z;\n"
4979 "MUL R1.xy, fragment.position, c[4];\n"
4980 "TEX R1, R1, texture[0], 2D;\n"
4981 "TEX R0, R0, texture[1], 1D;\n"
4982 "MUL R2.xyz, R1, R0.w;\n"
4983 "MAD R3.xyz, R0, R1.w, R2;\n"
4984 "MUL R2.xyz, R0, R1;\n"
4985 "MAD R2.xyz, -R2, c[5].y, R3;\n"
4986 "ADD R2.w, -R1, c[5].x;\n"
4987 "MAD R0.xyz, R0, R2.w, R2;\n"
4988 "ADD R2.x, R0.w, R1.w;\n"
4989 "ADD R2.y, -R0.w, c[5].x;\n"
4990 "MAD result.color.xyz, R1, R2.y, R0;\n"
4991 "MAD result.color.w, -R0, R1, R2.x;\n"
4992 "END\n"
4993 ;
4994
4995static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK =
4996 "!!ARBfp1.0\n"
4997 "PARAM c[7] = { program.local[0..6] };\n"
4998 "TEMP R0;\n"
4999 "TEMP R1;\n"
5000 "MUL R0.xyz, fragment.position.y, c[1];\n"
5001 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5002 "ADD R0.xyz, R0, c[2];\n"
5003 "RCP R0.z, R0.z;\n"
5004 "MUL R0.zw, R0.xyxy, R0.z;\n"
5005 "MUL R0.zw, R0, c[3].xyxy;\n"
5006 "ADD R1.x, R0.z, R0.w;\n"
5007 "ADD R0.xy, fragment.position, c[4];\n"
5008 "MUL R0.xy, R0, c[5];\n"
5009 "TEX R0, R0, texture[0], 2D;\n"
5010 "DP4 R1.y, R0, c[6];\n"
5011 "MUL R1.x, R1, c[3].z;\n"
5012 "TEX R0, R1, texture[1], 1D;\n"
5013 "MUL result.color, R0, R1.y;\n"
5014 "END\n"
5015 ;
5016
5017static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK =
5018 "!!ARBfp1.0\n"
5019 "PARAM c[4] = { program.local[0..3] };\n"
5020 "TEMP R0;\n"
5021 "MUL R0.xyz, fragment.position.y, c[1];\n"
5022 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5023 "ADD R0.xyz, R0, c[2];\n"
5024 "RCP R0.z, R0.z;\n"
5025 "MUL R0.xy, R0, R0.z;\n"
5026 "MUL R0.xy, R0, c[3];\n"
5027 "ADD R0.x, R0, R0.y;\n"
5028 "MUL R0.x, R0, c[3].z;\n"
5029 "TEX result.color, R0, texture[0], 1D;\n"
5030 "END\n"
5031 ;
5032
5033static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
5034 "!!ARBfp1.0\n"
5035 "PARAM c[11] = { program.local[0..7],\n"
5036 " { 1 },\n"
5037 " program.local[9..10] };\n"
5038 "TEMP R0;\n"
5039 "TEMP R1;\n"
5040 "TEMP R2;\n"
5041 "TEMP R3;\n"
5042 "MUL R0.xyz, fragment.position.y, c[4];\n"
5043 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5044 "ADD R0.xyz, R0, c[5];\n"
5045 "RCP R0.z, R0.z;\n"
5046 "MUL R0.xy, R0, R0.z;\n"
5047 "MUL R0.xy, R0, c[6];\n"
5048 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
5049 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5050 "MOV R0.y, -R0;\n"
5051 "TEX R0, R0, texture[2], 2D;\n"
5052 "MUL R2.xyz, R1, c[10].y;\n"
5053 "MUL R3.xyz, R2, R0.w;\n"
5054 "MUL R2.xyz, R0, c[10].x;\n"
5055 "MAD R2.xyz, R2, R1.w, R3;\n"
5056 "ADD R3.xy, fragment.position, c[0];\n"
5057 "MUL R0.xyz, R0, c[9].y;\n"
5058 "ADD R2.w, -R1, c[8].x;\n"
5059 "MAD R2.xyz, R0, R2.w, R2;\n"
5060 "ADD R2.w, -R0, c[8].x;\n"
5061 "MUL R0.xyz, R1, c[9].z;\n"
5062 "MAD R2.xyz, R0, R2.w, R2;\n"
5063 "ADD R0.y, -R1.w, c[8].x;\n"
5064 "MUL R0.z, R1.w, R2.w;\n"
5065 "MUL R0.x, R0.w, R1.w;\n"
5066 "MUL R0.y, R0.w, R0;\n"
5067 "DP3 R2.w, R0, c[9];\n"
5068 "MUL R3.xy, R3, c[1];\n"
5069 "TEX R0, R3, texture[1], 2D;\n"
5070 "ADD R2, R2, -R1;\n"
5071 "DP4 R0.x, R0, c[2];\n"
5072 "MAD result.color, R0.x, R2, R1;\n"
5073 "END\n"
5074 ;
5075
5076static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY =
5077 "!!ARBfp1.0\n"
5078 "PARAM c[9] = { program.local[0..7],\n"
5079 " { 1 } };\n"
5080 "TEMP R0;\n"
5081 "TEMP R1;\n"
5082 "TEMP R2;\n"
5083 "MUL R0.xyz, fragment.position.y, c[4];\n"
5084 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5085 "ADD R0.xyz, R0, c[5];\n"
5086 "RCP R1.x, R0.z;\n"
5087 "MUL R0.xy, R0, R1.x;\n"
5088 "MUL R0.xy, R0, c[6];\n"
5089 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
5090 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5091 "MOV R0.y, -R0;\n"
5092 "TEX R0, R0, texture[2], 2D;\n"
5093 "ADD R2.x, -R1.w, c[8];\n"
5094 "MUL R2.xyz, R0, R2.x;\n"
5095 "MAD R0.xyz, R0, R1, R2;\n"
5096 "ADD R2.x, -R0.w, c[8];\n"
5097 "MAD R2.xyz, R1, R2.x, R0;\n"
5098 "ADD R0.z, R0.w, R1.w;\n"
5099 "MAD R2.w, -R0, R1, R0.z;\n"
5100 "ADD R0.xy, fragment.position, c[0];\n"
5101 "MUL R0.xy, R0, c[1];\n"
5102 "TEX R0, R0, texture[1], 2D;\n"
5103 "ADD R2, R2, -R1;\n"
5104 "DP4 R0.x, R0, c[2];\n"
5105 "MAD result.color, R0.x, R2, R1;\n"
5106 "END\n"
5107 ;
5108
5109static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN =
5110 "!!ARBfp1.0\n"
5111 "PARAM c[8] = { program.local[0..7] };\n"
5112 "TEMP R0;\n"
5113 "TEMP R1;\n"
5114 "TEMP R2;\n"
5115 "TEMP R3;\n"
5116 "MUL R0.xyz, fragment.position.y, c[4];\n"
5117 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5118 "ADD R0.xyz, R0, c[5];\n"
5119 "RCP R0.z, R0.z;\n"
5120 "MUL R0.xy, R0, R0.z;\n"
5121 "MUL R0.xy, R0, c[6];\n"
5122 "MOV R0.y, -R0;\n"
5123 "MUL R1.xy, fragment.position, c[7];\n"
5124 "ADD R3.xy, fragment.position, c[0];\n"
5125 "TEX R1, R1, texture[0], 2D;\n"
5126 "TEX R0, R0, texture[2], 2D;\n"
5127 "ADD R2, R0, R1;\n"
5128 "MAD R2, -R0, R1, R2;\n"
5129 "MUL R3.xy, R3, c[1];\n"
5130 "TEX R0, R3, texture[1], 2D;\n"
5131 "ADD R2, R2, -R1;\n"
5132 "DP4 R0.x, R0, c[2];\n"
5133 "MAD result.color, R0.x, R2, R1;\n"
5134 "END\n"
5135 ;
5136
5137static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY =
5138 "!!ARBfp1.0\n"
5139 "PARAM c[9] = { program.local[0..7],\n"
5140 " { 2, 1 } };\n"
5141 "TEMP R0;\n"
5142 "TEMP R1;\n"
5143 "TEMP R2;\n"
5144 "TEMP R3;\n"
5145 "TEMP R4;\n"
5146 "MUL R0.xyz, fragment.position.y, c[4];\n"
5147 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5148 "ADD R0.xyz, R0, c[5];\n"
5149 "RCP R0.z, R0.z;\n"
5150 "MUL R0.xy, R0, R0.z;\n"
5151 "MUL R0.xy, R0, c[6];\n"
5152 "MOV R0.y, -R0;\n"
5153 "TEX R0, R0, texture[2], 2D;\n"
5154 "MUL R1.xy, fragment.position, c[7];\n"
5155 "TEX R1, R1, texture[0], 2D;\n"
5156 "ADD R2.w, -R1, c[8].y;\n"
5157 "ADD R3.xyz, R0.w, -R0;\n"
5158 "ADD R2.xyz, R1.w, -R1;\n"
5159 "MUL R2.xyz, R2, R3;\n"
5160 "MUL R2.xyz, R2, c[8].x;\n"
5161 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5162 "MUL R4.xyz, R0, R2.w;\n"
5163 "MUL R3.xyz, R0, R1;\n"
5164 "MAD R0.xyz, R0, R2.w, R2;\n"
5165 "ADD R2.x, -R0.w, c[8].y;\n"
5166 "MAD R3.xyz, R3, c[8].x, R4;\n"
5167 "MAD R3.xyz, R1, R2.x, R3;\n"
5168 "MAD R0.xyz, R1, R2.x, R0;\n"
5169 "MUL R2.xyz, R1, c[8].x;\n"
5170 "ADD R0.xyz, R0, -R3;\n"
5171 "SGE R2.xyz, R2, R1.w;\n"
5172 "MAD R2.xyz, R2, R0, R3;\n"
5173 "ADD R0.z, R0.w, R1.w;\n"
5174 "MAD R2.w, -R0, R1, R0.z;\n"
5175 "ADD R0.xy, fragment.position, c[0];\n"
5176 "MUL R0.xy, R0, c[1];\n"
5177 "TEX R0, R0, texture[1], 2D;\n"
5178 "ADD R2, R2, -R1;\n"
5179 "DP4 R0.x, R0, c[2];\n"
5180 "MAD result.color, R0.x, R2, R1;\n"
5181 "END\n"
5182 ;
5183
5184static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN =
5185 "!!ARBfp1.0\n"
5186 "PARAM c[9] = { program.local[0..7],\n"
5187 " { 1 } };\n"
5188 "TEMP R0;\n"
5189 "TEMP R1;\n"
5190 "TEMP R2;\n"
5191 "TEMP R3;\n"
5192 "MUL R0.xyz, fragment.position.y, c[4];\n"
5193 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5194 "ADD R0.xyz, R0, c[5];\n"
5195 "RCP R0.z, R0.z;\n"
5196 "MUL R0.xy, R0, R0.z;\n"
5197 "MUL R0.xy, R0, c[6];\n"
5198 "MOV R0.y, -R0;\n"
5199 "MUL R1.xy, fragment.position, c[7];\n"
5200 "TEX R1, R1, texture[0], 2D;\n"
5201 "TEX R0, R0, texture[2], 2D;\n"
5202 "MUL R3.xyz, R1, R0.w;\n"
5203 "MUL R2.xyz, R0, R1.w;\n"
5204 "MIN R2.xyz, R2, R3;\n"
5205 "ADD R2.w, -R1, c[8].x;\n"
5206 "MAD R0.xyz, R0, R2.w, R2;\n"
5207 "ADD R2.x, -R0.w, c[8];\n"
5208 "MAD R2.xyz, R1, R2.x, R0;\n"
5209 "ADD R0.z, R0.w, R1.w;\n"
5210 "MAD R2.w, -R0, R1, R0.z;\n"
5211 "ADD R0.xy, fragment.position, c[0];\n"
5212 "MUL R0.xy, R0, c[1];\n"
5213 "TEX R0, R0, texture[1], 2D;\n"
5214 "ADD R2, R2, -R1;\n"
5215 "DP4 R0.x, R0, c[2];\n"
5216 "MAD result.color, R0.x, R2, R1;\n"
5217 "END\n"
5218 ;
5219
5220static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN =
5221 "!!ARBfp1.0\n"
5222 "PARAM c[9] = { program.local[0..7],\n"
5223 " { 1 } };\n"
5224 "TEMP R0;\n"
5225 "TEMP R1;\n"
5226 "TEMP R2;\n"
5227 "TEMP R3;\n"
5228 "MUL R0.xyz, fragment.position.y, c[4];\n"
5229 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5230 "ADD R0.xyz, R0, c[5];\n"
5231 "RCP R0.z, R0.z;\n"
5232 "MUL R0.xy, R0, R0.z;\n"
5233 "MUL R0.xy, R0, c[6];\n"
5234 "MOV R0.y, -R0;\n"
5235 "MUL R1.xy, fragment.position, c[7];\n"
5236 "TEX R1, R1, texture[0], 2D;\n"
5237 "TEX R0, R0, texture[2], 2D;\n"
5238 "MUL R3.xyz, R1, R0.w;\n"
5239 "MUL R2.xyz, R0, R1.w;\n"
5240 "MAX R2.xyz, R2, R3;\n"
5241 "ADD R2.w, -R1, c[8].x;\n"
5242 "MAD R0.xyz, R0, R2.w, R2;\n"
5243 "ADD R2.x, -R0.w, c[8];\n"
5244 "MAD R2.xyz, R1, R2.x, R0;\n"
5245 "ADD R0.z, R0.w, R1.w;\n"
5246 "MAD R2.w, -R0, R1, R0.z;\n"
5247 "ADD R0.xy, fragment.position, c[0];\n"
5248 "MUL R0.xy, R0, c[1];\n"
5249 "TEX R0, R0, texture[1], 2D;\n"
5250 "ADD R2, R2, -R1;\n"
5251 "DP4 R0.x, R0, c[2];\n"
5252 "MAD result.color, R0.x, R2, R1;\n"
5253 "END\n"
5254 ;
5255
5256static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE =
5257 "!!ARBfp1.0\n"
5258 "PARAM c[9] = { program.local[0..7],\n"
5259 " { 1, 1e-06 } };\n"
5260 "TEMP R0;\n"
5261 "TEMP R1;\n"
5262 "TEMP R2;\n"
5263 "TEMP R3;\n"
5264 "TEMP R4;\n"
5265 "MUL R0.xyz, fragment.position.y, c[4];\n"
5266 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5267 "ADD R0.xyz, R0, c[5];\n"
5268 "RCP R0.z, R0.z;\n"
5269 "MUL R0.xy, R0, R0.z;\n"
5270 "MUL R0.xy, R0, c[6];\n"
5271 "MOV R0.y, -R0;\n"
5272 "TEX R0, R0, texture[2], 2D;\n"
5273 "MAX R1.x, R0.w, c[8].y;\n"
5274 "RCP R1.x, R1.x;\n"
5275 "MAD R1.xyz, -R0, R1.x, c[8].x;\n"
5276 "MAX R2.xyz, R1, c[8].y;\n"
5277 "MUL R1.xy, fragment.position, c[7];\n"
5278 "TEX R1, R1, texture[0], 2D;\n"
5279 "ADD R2.w, -R0, c[8].x;\n"
5280 "MUL R3.xyz, R1, R2.w;\n"
5281 "ADD R2.w, -R1, c[8].x;\n"
5282 "MAD R4.xyz, R0, R2.w, R3;\n"
5283 "MUL R3.xyz, R1, R0.w;\n"
5284 "MUL R2.w, R0, R1;\n"
5285 "MAD R0.xyz, R0, R1.w, R3;\n"
5286 "SGE R0.xyz, R0, R2.w;\n"
5287 "RCP R2.x, R2.x;\n"
5288 "RCP R2.y, R2.y;\n"
5289 "RCP R2.z, R2.z;\n"
5290 "MAD R2.xyz, R3, R2, R4;\n"
5291 "MAD R4.xyz, R0.w, R1.w, R4;\n"
5292 "ADD R4.xyz, R4, -R2;\n"
5293 "MAD R2.xyz, R0, R4, R2;\n"
5294 "ADD R0.z, R0.w, R1.w;\n"
5295 "MAD R2.w, -R0, R1, R0.z;\n"
5296 "ADD R0.xy, fragment.position, c[0];\n"
5297 "MUL R0.xy, R0, c[1];\n"
5298 "TEX R0, R0, texture[1], 2D;\n"
5299 "ADD R2, R2, -R1;\n"
5300 "DP4 R0.x, R0, c[2];\n"
5301 "MAD result.color, R0.x, R2, R1;\n"
5302 "END\n"
5303 ;
5304
5305static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN =
5306 "!!ARBfp1.0\n"
5307 "PARAM c[9] = { program.local[0..7],\n"
5308 " { 1, 9.9999997e-06 } };\n"
5309 "TEMP R0;\n"
5310 "TEMP R1;\n"
5311 "TEMP R2;\n"
5312 "TEMP R3;\n"
5313 "TEMP R4;\n"
5314 "TEMP R5;\n"
5315 "MUL R0.xyz, fragment.position.y, c[4];\n"
5316 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5317 "ADD R0.xyz, R0, c[5];\n"
5318 "RCP R0.z, R0.z;\n"
5319 "MUL R0.xy, R0, R0.z;\n"
5320 "MUL R0.xy, R0, c[6];\n"
5321 "MOV R0.y, -R0;\n"
5322 "TEX R0, R0, texture[2], 2D;\n"
5323 "MUL R1.xy, fragment.position, c[7];\n"
5324 "TEX R1, R1, texture[0], 2D;\n"
5325 "MUL R2.xyz, R1, R0.w;\n"
5326 "MAD R3.xyz, R0, R1.w, R2;\n"
5327 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
5328 "MUL R4.xyz, R0.w, R2;\n"
5329 "MAX R2.xyz, R0, c[8].y;\n"
5330 "ADD R2.w, -R1, c[8].x;\n"
5331 "MUL R5.xyz, R0, R2.w;\n"
5332 "ADD R3.w, -R0, c[8].x;\n"
5333 "RCP R2.x, R2.x;\n"
5334 "RCP R2.y, R2.y;\n"
5335 "RCP R2.z, R2.z;\n"
5336 "MAD R2.xyz, R4, R2, R5;\n"
5337 "MUL R4.xyz, R1, R3.w;\n"
5338 "MAD R0.xyz, R0, R2.w, R4;\n"
5339 "MUL R2.w, R0, R1;\n"
5340 "ADD R3.w, -R0, c[8].x;\n"
5341 "MAD R2.xyz, R1, R3.w, R2;\n"
5342 "ADD R2.xyz, R2, -R0;\n"
5343 "SGE R3.xyz, R3, R2.w;\n"
5344 "MAD R2.xyz, R3, R2, R0;\n"
5345 "ADD R0.z, R0.w, R1.w;\n"
5346 "MAD R2.w, -R0, R1, R0.z;\n"
5347 "ADD R0.xy, fragment.position, c[0];\n"
5348 "MUL R0.xy, R0, c[1];\n"
5349 "TEX R0, R0, texture[1], 2D;\n"
5350 "ADD R2, R2, -R1;\n"
5351 "DP4 R0.x, R0, c[2];\n"
5352 "MAD result.color, R0.x, R2, R1;\n"
5353 "END\n"
5354 ;
5355
5356static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT =
5357 "!!ARBfp1.0\n"
5358 "PARAM c[9] = { program.local[0..7],\n"
5359 " { 2, 1 } };\n"
5360 "TEMP R0;\n"
5361 "TEMP R1;\n"
5362 "TEMP R2;\n"
5363 "TEMP R3;\n"
5364 "TEMP R4;\n"
5365 "MUL R0.xyz, fragment.position.y, c[4];\n"
5366 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5367 "ADD R0.xyz, R0, c[5];\n"
5368 "RCP R0.z, R0.z;\n"
5369 "MUL R0.xy, R0, R0.z;\n"
5370 "MUL R0.xy, R0, c[6];\n"
5371 "MOV R0.y, -R0;\n"
5372 "TEX R0, R0, texture[2], 2D;\n"
5373 "MUL R1.xy, fragment.position, c[7];\n"
5374 "TEX R1, R1, texture[0], 2D;\n"
5375 "ADD R2.w, -R1, c[8].y;\n"
5376 "ADD R3.xyz, R0.w, -R0;\n"
5377 "ADD R2.xyz, R1.w, -R1;\n"
5378 "MUL R2.xyz, R2, R3;\n"
5379 "MUL R2.xyz, R2, c[8].x;\n"
5380 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5381 "MUL R4.xyz, R0, R2.w;\n"
5382 "MAD R2.xyz, R0, R2.w, R2;\n"
5383 "MUL R3.xyz, R0, R1;\n"
5384 "ADD R2.w, -R0, c[8].y;\n"
5385 "MAD R3.xyz, R3, c[8].x, R4;\n"
5386 "MUL R0.xyz, R0, c[8].x;\n"
5387 "SGE R0.xyz, R0, R0.w;\n"
5388 "MAD R3.xyz, R1, R2.w, R3;\n"
5389 "MAD R2.xyz, R1, R2.w, R2;\n"
5390 "ADD R2.xyz, R2, -R3;\n"
5391 "MAD R2.xyz, R0, R2, R3;\n"
5392 "ADD R0.z, R0.w, R1.w;\n"
5393 "MAD R2.w, -R0, R1, R0.z;\n"
5394 "ADD R0.xy, fragment.position, c[0];\n"
5395 "MUL R0.xy, R0, c[1];\n"
5396 "TEX R0, R0, texture[1], 2D;\n"
5397 "ADD R2, R2, -R1;\n"
5398 "DP4 R0.x, R0, c[2];\n"
5399 "MAD result.color, R0.x, R2, R1;\n"
5400 "END\n"
5401 ;
5402
5403static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT =
5404 "!!ARBfp1.0\n"
5405 "PARAM c[10] = { program.local[0..7],\n"
5406 " { 1, 9.9999997e-06, 2, 8 },\n"
5407 " { 3 } };\n"
5408 "TEMP R0;\n"
5409 "TEMP R1;\n"
5410 "TEMP R2;\n"
5411 "TEMP R3;\n"
5412 "TEMP R4;\n"
5413 "TEMP R5;\n"
5414 "TEMP R6;\n"
5415 "MUL R0.xyz, fragment.position.y, c[4];\n"
5416 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5417 "ADD R0.xyz, R0, c[5];\n"
5418 "RCP R0.z, R0.z;\n"
5419 "MUL R0.xy, R0, R0.z;\n"
5420 "MUL R0.xy, R0, c[6];\n"
5421 "MUL R1.xy, fragment.position, c[7];\n"
5422 "TEX R1, R1, texture[0], 2D;\n"
5423 "MAX R0.z, R1.w, c[8].y;\n"
5424 "RCP R2.w, R0.z;\n"
5425 "MUL R2.xyz, R1, R2.w;\n"
5426 "MUL R6.xyz, -R2, c[8].w;\n"
5427 "MAD R3.xyz, -R1, R2.w, c[8].x;\n"
5428 "MOV R0.y, -R0;\n"
5429 "TEX R0, R0, texture[2], 2D;\n"
5430 "MAD R4.xyz, R0, c[8].z, -R0.w;\n"
5431 "MUL R5.xyz, R3, R4;\n"
5432 "MAD R3.xyz, -R3, R4, R0.w;\n"
5433 "ADD R6.xyz, R6, c[9].x;\n"
5434 "RSQ R2.x, R2.x;\n"
5435 "RSQ R2.z, R2.z;\n"
5436 "RSQ R2.y, R2.y;\n"
5437 "MAD R5.xyz, -R5, R6, R0.w;\n"
5438 "MUL R3.xyz, R1, R3;\n"
5439 "ADD R2.w, -R1, c[8].x;\n"
5440 "RCP R2.x, R2.x;\n"
5441 "RCP R2.z, R2.z;\n"
5442 "RCP R2.y, R2.y;\n"
5443 "MAD R2.xyz, R2, R1.w, -R1;\n"
5444 "MUL R6.xyz, R2, R4;\n"
5445 "MUL R2.xyz, R1, R5;\n"
5446 "MAD R6.xyz, R1, R0.w, R6;\n"
5447 "MUL R4.xyz, R0, c[8].z;\n"
5448 "MUL R5.xyz, R1, c[8].w;\n"
5449 "ADD R6.xyz, R6, -R2;\n"
5450 "SGE R5.xyz, R5, R1.w;\n"
5451 "MUL R5.xyz, R5, R6;\n"
5452 "ADD R2.xyz, R2, R5;\n"
5453 "SGE R4.xyz, R4, R0.w;\n"
5454 "ADD R2.xyz, R2, -R3;\n"
5455 "MUL R2.xyz, R4, R2;\n"
5456 "ADD R2.xyz, R3, R2;\n"
5457 "MAD R0.xyz, R0, R2.w, R2;\n"
5458 "ADD R2.x, -R0.w, c[8];\n"
5459 "MAD R2.xyz, R1, R2.x, R0;\n"
5460 "ADD R0.z, R0.w, R1.w;\n"
5461 "MAD R2.w, -R0, R1, R0.z;\n"
5462 "ADD R0.xy, fragment.position, c[0];\n"
5463 "MUL R0.xy, R0, c[1];\n"
5464 "TEX R0, R0, texture[1], 2D;\n"
5465 "ADD R2, R2, -R1;\n"
5466 "DP4 R0.x, R0, c[2];\n"
5467 "MAD result.color, R0.x, R2, R1;\n"
5468 "END\n"
5469 ;
5470
5471static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE =
5472 "!!ARBfp1.0\n"
5473 "PARAM c[9] = { program.local[0..7],\n"
5474 " { 2 } };\n"
5475 "TEMP R0;\n"
5476 "TEMP R1;\n"
5477 "TEMP R2;\n"
5478 "TEMP R3;\n"
5479 "MUL R0.xyz, fragment.position.y, c[4];\n"
5480 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5481 "ADD R0.xyz, R0, c[5];\n"
5482 "RCP R0.z, R0.z;\n"
5483 "MUL R0.xy, R0, R0.z;\n"
5484 "MUL R0.xy, R0, c[6];\n"
5485 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
5486 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5487 "MOV R0.y, -R0;\n"
5488 "TEX R0, R0, texture[2], 2D;\n"
5489 "ADD R3.xyz, R0, R1;\n"
5490 "MUL R2.xyz, R1, R0.w;\n"
5491 "MUL R0.xyz, R0, R1.w;\n"
5492 "MIN R0.xyz, R0, R2;\n"
5493 "MAD R2.xyz, -R0, c[8].x, R3;\n"
5494 "ADD R0.z, R0.w, R1.w;\n"
5495 "MAD R2.w, -R0, R1, R0.z;\n"
5496 "ADD R0.xy, fragment.position, c[0];\n"
5497 "MUL R0.xy, R0, c[1];\n"
5498 "TEX R0, R0, texture[1], 2D;\n"
5499 "ADD R2, R2, -R1;\n"
5500 "DP4 R0.x, R0, c[2];\n"
5501 "MAD result.color, R0.x, R2, R1;\n"
5502 "END\n"
5503 ;
5504
5505static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION =
5506 "!!ARBfp1.0\n"
5507 "PARAM c[9] = { program.local[0..7],\n"
5508 " { 1, 2 } };\n"
5509 "TEMP R0;\n"
5510 "TEMP R1;\n"
5511 "TEMP R2;\n"
5512 "TEMP R3;\n"
5513 "MUL R0.xyz, fragment.position.y, c[4];\n"
5514 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
5515 "ADD R0.xyz, R0, c[5];\n"
5516 "RCP R0.z, R0.z;\n"
5517 "MUL R0.xy, R0, R0.z;\n"
5518 "MUL R0.xy, R0, c[6];\n"
5519 "MOV R0.y, -R0;\n"
5520 "MUL R1.xy, fragment.position, c[7];\n"
5521 "TEX R1, R1, texture[0], 2D;\n"
5522 "TEX R0, R0, texture[2], 2D;\n"
5523 "MUL R2.xyz, R1, R0.w;\n"
5524 "MAD R3.xyz, R0, R1.w, R2;\n"
5525 "MUL R2.xyz, R0, R1;\n"
5526 "MAD R2.xyz, -R2, c[8].y, R3;\n"
5527 "ADD R2.w, -R1, c[8].x;\n"
5528 "MAD R0.xyz, R0, R2.w, R2;\n"
5529 "ADD R2.x, -R0.w, c[8];\n"
5530 "MAD R2.xyz, R1, R2.x, R0;\n"
5531 "ADD R0.z, R0.w, R1.w;\n"
5532 "MAD R2.w, -R0, R1, R0.z;\n"
5533 "ADD R0.xy, fragment.position, c[0];\n"
5534 "MUL R0.xy, R0, c[1];\n"
5535 "TEX R0, R0, texture[1], 2D;\n"
5536 "ADD R2, R2, -R1;\n"
5537 "DP4 R0.x, R0, c[2];\n"
5538 "MAD result.color, R0.x, R2, R1;\n"
5539 "END\n"
5540 ;
5541
5542static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
5543 "!!ARBfp1.0\n"
5544 "PARAM c[8] = { program.local[0..4],\n"
5545 " { 1 },\n"
5546 " program.local[6..7] };\n"
5547 "TEMP R0;\n"
5548 "TEMP R1;\n"
5549 "TEMP R2;\n"
5550 "TEMP R3;\n"
5551 "MUL R0.xyz, fragment.position.y, c[1];\n"
5552 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5553 "ADD R0.xyz, R0, c[2];\n"
5554 "RCP R0.z, R0.z;\n"
5555 "MUL R0.xy, R0, R0.z;\n"
5556 "MUL R0.xy, R0, c[3];\n"
5557 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5558 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5559 "MUL R2.xyz, R1, c[7].y;\n"
5560 "MOV R0.y, -R0;\n"
5561 "TEX R0, R0, texture[1], 2D;\n"
5562 "MUL R3.xyz, R2, R0.w;\n"
5563 "MUL R2.xyz, R0, c[7].x;\n"
5564 "MAD R2.xyz, R2, R1.w, R3;\n"
5565 "MUL R0.xyz, R0, c[6].y;\n"
5566 "ADD R2.w, -R1, c[5].x;\n"
5567 "MAD R0.xyz, R0, R2.w, R2;\n"
5568 "ADD R2.x, -R0.w, c[5];\n"
5569 "MUL R1.xyz, R1, c[6].z;\n"
5570 "MAD result.color.xyz, R1, R2.x, R0;\n"
5571 "ADD R0.y, -R1.w, c[5].x;\n"
5572 "MUL R0.x, R0.w, R1.w;\n"
5573 "MUL R0.z, R1.w, R2.x;\n"
5574 "MUL R0.y, R0.w, R0;\n"
5575 "DP3 result.color.w, R0, c[6];\n"
5576 "END\n"
5577 ;
5578
5579static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK =
5580 "!!ARBfp1.0\n"
5581 "PARAM c[6] = { program.local[0..4],\n"
5582 " { 1 } };\n"
5583 "TEMP R0;\n"
5584 "TEMP R1;\n"
5585 "TEMP R2;\n"
5586 "MUL R0.xyz, fragment.position.y, c[1];\n"
5587 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5588 "ADD R0.xyz, R0, c[2];\n"
5589 "RCP R1.x, R0.z;\n"
5590 "MUL R0.xy, R0, R1.x;\n"
5591 "MUL R0.xy, R0, c[3];\n"
5592 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5593 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5594 "MOV R0.y, -R0;\n"
5595 "TEX R0, R0, texture[1], 2D;\n"
5596 "ADD R2.x, -R1.w, c[5];\n"
5597 "MUL R2.xyz, R0, R2.x;\n"
5598 "MAD R0.xyz, R0, R1, R2;\n"
5599 "ADD R2.x, R0.w, R1.w;\n"
5600 "ADD R2.y, -R0.w, c[5].x;\n"
5601 "MAD result.color.xyz, R1, R2.y, R0;\n"
5602 "MAD result.color.w, -R0, R1, R2.x;\n"
5603 "END\n"
5604 ;
5605
5606static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK =
5607 "!!ARBfp1.0\n"
5608 "PARAM c[5] = { program.local[0..4] };\n"
5609 "TEMP R0;\n"
5610 "TEMP R1;\n"
5611 "TEMP R2;\n"
5612 "MUL R0.xyz, fragment.position.y, c[1];\n"
5613 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5614 "ADD R0.xyz, R0, c[2];\n"
5615 "RCP R0.z, R0.z;\n"
5616 "MUL R0.xy, R0, R0.z;\n"
5617 "MUL R0.xy, R0, c[3];\n"
5618 "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n"
5619 "TEX R1, R0.zwzw, texture[0], 2D;\n"
5620 "MOV R0.y, -R0;\n"
5621 "TEX R0, R0, texture[1], 2D;\n"
5622 "ADD R2, R0, R1;\n"
5623 "MAD result.color, -R0, R1, R2;\n"
5624 "END\n"
5625 ;
5626
5627static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK =
5628 "!!ARBfp1.0\n"
5629 "PARAM c[6] = { program.local[0..4],\n"
5630 " { 2, 1 } };\n"
5631 "TEMP R0;\n"
5632 "TEMP R1;\n"
5633 "TEMP R2;\n"
5634 "TEMP R3;\n"
5635 "MUL R0.xyz, fragment.position.y, c[1];\n"
5636 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5637 "ADD R0.xyz, R0, c[2];\n"
5638 "RCP R0.z, R0.z;\n"
5639 "MUL R0.xy, R0, R0.z;\n"
5640 "MUL R0.xy, R0, c[3];\n"
5641 "MOV R0.y, -R0;\n"
5642 "TEX R0, R0, texture[1], 2D;\n"
5643 "MUL R1.xy, fragment.position, c[4];\n"
5644 "TEX R1, R1, texture[0], 2D;\n"
5645 "ADD R3.xyz, R0.w, -R0;\n"
5646 "ADD R2.xyz, R1.w, -R1;\n"
5647 "MUL R2.xyz, R2, R3;\n"
5648 "ADD R2.w, -R1, c[5].y;\n"
5649 "MUL R2.xyz, R2, c[5].x;\n"
5650 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5651 "MAD R2.xyz, R0, R2.w, R2;\n"
5652 "MUL R3.xyz, R0, R2.w;\n"
5653 "MUL R0.xyz, R0, R1;\n"
5654 "ADD R2.w, -R0, c[5].y;\n"
5655 "MAD R0.xyz, R0, c[5].x, R3;\n"
5656 "MAD R0.xyz, R1, R2.w, R0;\n"
5657 "MAD R2.xyz, R1, R2.w, R2;\n"
5658 "MUL R1.xyz, R1, c[5].x;\n"
5659 "ADD R2.w, R0, R1;\n"
5660 "ADD R2.xyz, R2, -R0;\n"
5661 "SGE R1.xyz, R1, R1.w;\n"
5662 "MAD result.color.xyz, R1, R2, R0;\n"
5663 "MAD result.color.w, -R0, R1, R2;\n"
5664 "END\n"
5665 ;
5666
5667static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK =
5668 "!!ARBfp1.0\n"
5669 "PARAM c[6] = { program.local[0..4],\n"
5670 " { 1 } };\n"
5671 "TEMP R0;\n"
5672 "TEMP R1;\n"
5673 "TEMP R2;\n"
5674 "TEMP R3;\n"
5675 "MUL R0.xyz, fragment.position.y, c[1];\n"
5676 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5677 "ADD R0.xyz, R0, c[2];\n"
5678 "RCP R0.z, R0.z;\n"
5679 "MUL R0.xy, R0, R0.z;\n"
5680 "MUL R0.xy, R0, c[3];\n"
5681 "MOV R0.y, -R0;\n"
5682 "MUL R1.xy, fragment.position, c[4];\n"
5683 "TEX R1, R1, texture[0], 2D;\n"
5684 "TEX R0, R0, texture[1], 2D;\n"
5685 "MUL R2.xyz, R0, R1.w;\n"
5686 "MUL R3.xyz, R1, R0.w;\n"
5687 "MIN R2.xyz, R2, R3;\n"
5688 "ADD R2.w, -R1, c[5].x;\n"
5689 "MAD R0.xyz, R0, R2.w, R2;\n"
5690 "ADD R2.x, R0.w, R1.w;\n"
5691 "ADD R2.y, -R0.w, c[5].x;\n"
5692 "MAD result.color.xyz, R1, R2.y, R0;\n"
5693 "MAD result.color.w, -R0, R1, R2.x;\n"
5694 "END\n"
5695 ;
5696
5697static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK =
5698 "!!ARBfp1.0\n"
5699 "PARAM c[6] = { program.local[0..4],\n"
5700 " { 1 } };\n"
5701 "TEMP R0;\n"
5702 "TEMP R1;\n"
5703 "TEMP R2;\n"
5704 "TEMP R3;\n"
5705 "MUL R0.xyz, fragment.position.y, c[1];\n"
5706 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5707 "ADD R0.xyz, R0, c[2];\n"
5708 "RCP R0.z, R0.z;\n"
5709 "MUL R0.xy, R0, R0.z;\n"
5710 "MUL R0.xy, R0, c[3];\n"
5711 "MOV R0.y, -R0;\n"
5712 "MUL R1.xy, fragment.position, c[4];\n"
5713 "TEX R1, R1, texture[0], 2D;\n"
5714 "TEX R0, R0, texture[1], 2D;\n"
5715 "MUL R2.xyz, R0, R1.w;\n"
5716 "MUL R3.xyz, R1, R0.w;\n"
5717 "MAX R2.xyz, R2, R3;\n"
5718 "ADD R2.w, -R1, c[5].x;\n"
5719 "MAD R0.xyz, R0, R2.w, R2;\n"
5720 "ADD R2.x, R0.w, R1.w;\n"
5721 "ADD R2.y, -R0.w, c[5].x;\n"
5722 "MAD result.color.xyz, R1, R2.y, R0;\n"
5723 "MAD result.color.w, -R0, R1, R2.x;\n"
5724 "END\n"
5725 ;
5726
5727static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK =
5728 "!!ARBfp1.0\n"
5729 "PARAM c[6] = { program.local[0..4],\n"
5730 " { 1, 1e-06 } };\n"
5731 "TEMP R0;\n"
5732 "TEMP R1;\n"
5733 "TEMP R2;\n"
5734 "TEMP R3;\n"
5735 "MUL R0.xyz, fragment.position.y, c[1];\n"
5736 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5737 "ADD R0.xyz, R0, c[2];\n"
5738 "RCP R0.z, R0.z;\n"
5739 "MUL R0.xy, R0, R0.z;\n"
5740 "MUL R0.xy, R0, c[3];\n"
5741 "MOV R0.y, -R0;\n"
5742 "TEX R0, R0, texture[1], 2D;\n"
5743 "MAX R1.x, R0.w, c[5].y;\n"
5744 "RCP R1.x, R1.x;\n"
5745 "MAD R1.xyz, -R0, R1.x, c[5].x;\n"
5746 "MAX R2.xyz, R1, c[5].y;\n"
5747 "MUL R1.xy, fragment.position, c[4];\n"
5748 "TEX R1, R1, texture[0], 2D;\n"
5749 "ADD R2.w, -R0, c[5].x;\n"
5750 "MUL R3.xyz, R1, R2.w;\n"
5751 "ADD R2.w, -R1, c[5].x;\n"
5752 "MAD R3.xyz, R0, R2.w, R3;\n"
5753 "MUL R1.xyz, R1, R0.w;\n"
5754 "MAD R0.xyz, R0, R1.w, R1;\n"
5755 "MUL R2.w, R0, R1;\n"
5756 "RCP R2.x, R2.x;\n"
5757 "RCP R2.y, R2.y;\n"
5758 "RCP R2.z, R2.z;\n"
5759 "MAD R2.xyz, R1, R2, R3;\n"
5760 "MAD R3.xyz, R0.w, R1.w, R3;\n"
5761 "ADD R1.x, R0.w, R1.w;\n"
5762 "ADD R3.xyz, R3, -R2;\n"
5763 "SGE R0.xyz, R0, R2.w;\n"
5764 "MAD result.color.xyz, R0, R3, R2;\n"
5765 "MAD result.color.w, -R0, R1, R1.x;\n"
5766 "END\n"
5767 ;
5768
5769static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK =
5770 "!!ARBfp1.0\n"
5771 "PARAM c[6] = { program.local[0..4],\n"
5772 " { 1, 9.9999997e-06 } };\n"
5773 "TEMP R0;\n"
5774 "TEMP R1;\n"
5775 "TEMP R2;\n"
5776 "TEMP R3;\n"
5777 "TEMP R4;\n"
5778 "TEMP R5;\n"
5779 "MUL R0.xyz, fragment.position.y, c[1];\n"
5780 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5781 "ADD R0.xyz, R0, c[2];\n"
5782 "RCP R0.z, R0.z;\n"
5783 "MUL R0.xy, R0, R0.z;\n"
5784 "MUL R0.xy, R0, c[3];\n"
5785 "MOV R0.y, -R0;\n"
5786 "TEX R0, R0, texture[1], 2D;\n"
5787 "MUL R1.xy, fragment.position, c[4];\n"
5788 "TEX R1, R1, texture[0], 2D;\n"
5789 "MUL R2.xyz, R1, R0.w;\n"
5790 "MAD R3.xyz, R0, R1.w, R2;\n"
5791 "ADD R2.w, -R1, c[5].x;\n"
5792 "MAD R2.xyz, -R0.w, R1.w, R3;\n"
5793 "MUL R4.xyz, R0.w, R2;\n"
5794 "MAX R2.xyz, R0, c[5].y;\n"
5795 "MUL R5.xyz, R0, R2.w;\n"
5796 "ADD R3.w, -R0, c[5].x;\n"
5797 "RCP R2.x, R2.x;\n"
5798 "RCP R2.y, R2.y;\n"
5799 "RCP R2.z, R2.z;\n"
5800 "MAD R2.xyz, R4, R2, R5;\n"
5801 "MUL R4.xyz, R1, R3.w;\n"
5802 "MAD R0.xyz, R0, R2.w, R4;\n"
5803 "ADD R3.w, -R0, c[5].x;\n"
5804 "MAD R1.xyz, R1, R3.w, R2;\n"
5805 "MUL R2.x, R0.w, R1.w;\n"
5806 "ADD R2.w, R0, R1;\n"
5807 "ADD R1.xyz, R1, -R0;\n"
5808 "SGE R2.xyz, R3, R2.x;\n"
5809 "MAD result.color.xyz, R2, R1, R0;\n"
5810 "MAD result.color.w, -R0, R1, R2;\n"
5811 "END\n"
5812 ;
5813
5814static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK =
5815 "!!ARBfp1.0\n"
5816 "PARAM c[6] = { program.local[0..4],\n"
5817 " { 2, 1 } };\n"
5818 "TEMP R0;\n"
5819 "TEMP R1;\n"
5820 "TEMP R2;\n"
5821 "TEMP R3;\n"
5822 "TEMP R4;\n"
5823 "MUL R0.xyz, fragment.position.y, c[1];\n"
5824 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5825 "ADD R0.xyz, R0, c[2];\n"
5826 "RCP R0.z, R0.z;\n"
5827 "MUL R0.xy, R0, R0.z;\n"
5828 "MUL R0.xy, R0, c[3];\n"
5829 "MOV R0.y, -R0;\n"
5830 "TEX R0, R0, texture[1], 2D;\n"
5831 "MUL R1.xy, fragment.position, c[4];\n"
5832 "TEX R1, R1, texture[0], 2D;\n"
5833 "ADD R2.w, -R1, c[5].y;\n"
5834 "ADD R3.xyz, R0.w, -R0;\n"
5835 "ADD R2.xyz, R1.w, -R1;\n"
5836 "MUL R2.xyz, R2, R3;\n"
5837 "MUL R2.xyz, R2, c[5].x;\n"
5838 "MAD R2.xyz, R0.w, R1.w, -R2;\n"
5839 "MUL R4.xyz, R0, R2.w;\n"
5840 "MUL R3.xyz, R0, R1;\n"
5841 "MAD R2.xyz, R0, R2.w, R2;\n"
5842 "ADD R2.w, -R0, c[5].y;\n"
5843 "MUL R0.xyz, R0, c[5].x;\n"
5844 "MAD R2.xyz, R1, R2.w, R2;\n"
5845 "MAD R3.xyz, R3, c[5].x, R4;\n"
5846 "MAD R1.xyz, R1, R2.w, R3;\n"
5847 "ADD R2.w, R0, R1;\n"
5848 "ADD R2.xyz, R2, -R1;\n"
5849 "SGE R0.xyz, R0, R0.w;\n"
5850 "MAD result.color.xyz, R0, R2, R1;\n"
5851 "MAD result.color.w, -R0, R1, R2;\n"
5852 "END\n"
5853 ;
5854
5855static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
5856 "!!ARBfp1.0\n"
5857 "PARAM c[7] = { program.local[0..4],\n"
5858 " { 1, 9.9999997e-06, 2, 8 },\n"
5859 " { 3 } };\n"
5860 "TEMP R0;\n"
5861 "TEMP R1;\n"
5862 "TEMP R2;\n"
5863 "TEMP R3;\n"
5864 "TEMP R4;\n"
5865 "TEMP R5;\n"
5866 "TEMP R6;\n"
5867 "MUL R0.xyz, fragment.position.y, c[1];\n"
5868 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5869 "ADD R0.xyz, R0, c[2];\n"
5870 "RCP R0.z, R0.z;\n"
5871 "MUL R0.xy, R0, R0.z;\n"
5872 "MUL R0.xy, R0, c[3];\n"
5873 "MUL R1.xy, fragment.position, c[4];\n"
5874 "TEX R1, R1, texture[0], 2D;\n"
5875 "MAX R0.z, R1.w, c[5].y;\n"
5876 "RCP R2.w, R0.z;\n"
5877 "MUL R2.xyz, R1, R2.w;\n"
5878 "MUL R6.xyz, -R2, c[5].w;\n"
5879 "MAD R3.xyz, -R1, R2.w, c[5].x;\n"
5880 "MOV R0.y, -R0;\n"
5881 "TEX R0, R0, texture[1], 2D;\n"
5882 "MAD R4.xyz, R0, c[5].z, -R0.w;\n"
5883 "MUL R5.xyz, R3, R4;\n"
5884 "MAD R3.xyz, -R3, R4, R0.w;\n"
5885 "ADD R6.xyz, R6, c[6].x;\n"
5886 "RSQ R2.x, R2.x;\n"
5887 "RSQ R2.z, R2.z;\n"
5888 "RSQ R2.y, R2.y;\n"
5889 "MAD R5.xyz, -R5, R6, R0.w;\n"
5890 "MUL R3.xyz, R1, R3;\n"
5891 "RCP R2.x, R2.x;\n"
5892 "RCP R2.z, R2.z;\n"
5893 "RCP R2.y, R2.y;\n"
5894 "MAD R2.xyz, R2, R1.w, -R1;\n"
5895 "MUL R6.xyz, R2, R4;\n"
5896 "MUL R2.xyz, R1, R5;\n"
5897 "MUL R4.xyz, R0, c[5].z;\n"
5898 "MAD R6.xyz, R1, R0.w, R6;\n"
5899 "MUL R5.xyz, R1, c[5].w;\n"
5900 "ADD R6.xyz, R6, -R2;\n"
5901 "SGE R5.xyz, R5, R1.w;\n"
5902 "MUL R5.xyz, R5, R6;\n"
5903 "ADD R2.xyz, R2, R5;\n"
5904 "ADD R2.xyz, R2, -R3;\n"
5905 "SGE R4.xyz, R4, R0.w;\n"
5906 "MUL R2.xyz, R4, R2;\n"
5907 "ADD R2.xyz, R3, R2;\n"
5908 "ADD R2.w, -R1, c[5].x;\n"
5909 "MAD R0.xyz, R0, R2.w, R2;\n"
5910 "ADD R2.x, R0.w, R1.w;\n"
5911 "ADD R2.y, -R0.w, c[5].x;\n"
5912 "MAD result.color.xyz, R1, R2.y, R0;\n"
5913 "MAD result.color.w, -R0, R1, R2.x;\n"
5914 "END\n"
5915 ;
5916
5917static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK =
5918 "!!ARBfp1.0\n"
5919 "PARAM c[6] = { program.local[0..4],\n"
5920 " { 2 } };\n"
5921 "TEMP R0;\n"
5922 "TEMP R1;\n"
5923 "TEMP R2;\n"
5924 "TEMP R3;\n"
5925 "MUL R0.xyz, fragment.position.y, c[1];\n"
5926 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5927 "ADD R0.xyz, R0, c[2];\n"
5928 "RCP R0.z, R0.z;\n"
5929 "MUL R0.xy, R0, R0.z;\n"
5930 "MUL R0.xy, R0, c[3];\n"
5931 "MOV R0.y, -R0;\n"
5932 "MUL R1.xy, fragment.position, c[4];\n"
5933 "TEX R0, R0, texture[1], 2D;\n"
5934 "TEX R1, R1, texture[0], 2D;\n"
5935 "MUL R2.xyz, R0, R1.w;\n"
5936 "MUL R3.xyz, R1, R0.w;\n"
5937 "ADD R0.xyz, R0, R1;\n"
5938 "MIN R2.xyz, R2, R3;\n"
5939 "ADD R1.x, R0.w, R1.w;\n"
5940 "MAD result.color.xyz, -R2, c[5].x, R0;\n"
5941 "MAD result.color.w, -R0, R1, R1.x;\n"
5942 "END\n"
5943 ;
5944
5945static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK =
5946 "!!ARBfp1.0\n"
5947 "PARAM c[6] = { program.local[0..4],\n"
5948 " { 1, 2 } };\n"
5949 "TEMP R0;\n"
5950 "TEMP R1;\n"
5951 "TEMP R2;\n"
5952 "TEMP R3;\n"
5953 "MUL R0.xyz, fragment.position.y, c[1];\n"
5954 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5955 "ADD R0.xyz, R0, c[2];\n"
5956 "RCP R0.z, R0.z;\n"
5957 "MUL R0.xy, R0, R0.z;\n"
5958 "MUL R0.xy, R0, c[3];\n"
5959 "MOV R0.y, -R0;\n"
5960 "MUL R1.xy, fragment.position, c[4];\n"
5961 "TEX R1, R1, texture[0], 2D;\n"
5962 "TEX R0, R0, texture[1], 2D;\n"
5963 "MUL R2.xyz, R1, R0.w;\n"
5964 "MAD R3.xyz, R0, R1.w, R2;\n"
5965 "MUL R2.xyz, R0, R1;\n"
5966 "MAD R2.xyz, -R2, c[5].y, R3;\n"
5967 "ADD R2.w, -R1, c[5].x;\n"
5968 "MAD R0.xyz, R0, R2.w, R2;\n"
5969 "ADD R2.x, R0.w, R1.w;\n"
5970 "ADD R2.y, -R0.w, c[5].x;\n"
5971 "MAD result.color.xyz, R1, R2.y, R0;\n"
5972 "MAD result.color.w, -R0, R1, R2.x;\n"
5973 "END\n"
5974 ;
5975
5976static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK =
5977 "!!ARBfp1.0\n"
5978 "PARAM c[7] = { program.local[0..6] };\n"
5979 "TEMP R0;\n"
5980 "TEMP R1;\n"
5981 "MUL R0.xyz, fragment.position.y, c[1];\n"
5982 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
5983 "ADD R1.xyz, R0, c[2];\n"
5984 "RCP R0.z, R1.z;\n"
5985 "MUL R1.xy, R1, R0.z;\n"
5986 "ADD R0.xy, fragment.position, c[4];\n"
5987 "MUL R0.xy, R0, c[5];\n"
5988 "TEX R0, R0, texture[0], 2D;\n"
5989 "DP4 R1.z, R0, c[6];\n"
5990 "MUL R1.xy, R1, c[3];\n"
5991 "MOV R0.x, R1;\n"
5992 "MOV R0.y, -R1;\n"
5993 "TEX R0, R0, texture[1], 2D;\n"
5994 "MUL result.color, R0, R1.z;\n"
5995 "END\n"
5996 ;
5997
5998static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK =
5999 "!!ARBfp1.0\n"
6000 "PARAM c[4] = { program.local[0..3] };\n"
6001 "TEMP R0;\n"
6002 "MUL R0.xyz, fragment.position.y, c[1];\n"
6003 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6004 "ADD R0.xyz, R0, c[2];\n"
6005 "RCP R0.z, R0.z;\n"
6006 "MUL R0.xy, R0, R0.z;\n"
6007 "MUL R0.xy, R0, c[3];\n"
6008 "MOV R0.y, -R0;\n"
6009 "TEX result.color, R0, texture[0], 2D;\n"
6010 "END\n"
6011 ;
6012
6013static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF =
6014 "!!ARBfp1.0\n"
6015 "PARAM c[11] = { program.local[0..7],\n"
6016 " { 1 },\n"
6017 " program.local[9..10] };\n"
6018 "TEMP R0;\n"
6019 "TEMP R1;\n"
6020 "TEMP R2;\n"
6021 "TEMP R3;\n"
6022 "MUL R0.xyz, fragment.position.y, c[4];\n"
6023 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6024 "ADD R0.xyz, R0, c[5];\n"
6025 "RCP R0.z, R0.z;\n"
6026 "MUL R0.xy, R0, R0.z;\n"
6027 "MUL R0.xy, R0, c[6];\n"
6028 "MOV R0.y, -R0;\n"
6029 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
6030 "TEX R1, R0.zwzw, texture[0], 2D;\n"
6031 "TEX R0.x, R0, texture[2], 2D;\n"
6032 "MUL R0, fragment.color.primary, R0.x;\n"
6033 "MUL R2.xyz, R1, c[10].y;\n"
6034 "MUL R3.xyz, R2, R0.w;\n"
6035 "MUL R2.xyz, R0, c[10].x;\n"
6036 "MAD R2.xyz, R2, R1.w, R3;\n"
6037 "ADD R3.xy, fragment.position, c[0];\n"
6038 "MUL R0.xyz, R0, c[9].y;\n"
6039 "ADD R2.w, -R1, c[8].x;\n"
6040 "MAD R2.xyz, R0, R2.w, R2;\n"
6041 "ADD R2.w, -R0, c[8].x;\n"
6042 "MUL R0.xyz, R1, c[9].z;\n"
6043 "MAD R2.xyz, R0, R2.w, R2;\n"
6044 "ADD R0.y, -R1.w, c[8].x;\n"
6045 "MUL R0.z, R1.w, R2.w;\n"
6046 "MUL R0.x, R0.w, R1.w;\n"
6047 "MUL R0.y, R0.w, R0;\n"
6048 "DP3 R2.w, R0, c[9];\n"
6049 "MUL R3.xy, R3, c[1];\n"
6050 "TEX R0, R3, texture[1], 2D;\n"
6051 "ADD R2, R2, -R1;\n"
6052 "DP4 R0.x, R0, c[2];\n"
6053 "MAD result.color, R0.x, R2, R1;\n"
6054 "END\n"
6055 ;
6056
6057static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY =
6058 "!!ARBfp1.0\n"
6059 "PARAM c[9] = { program.local[0..7],\n"
6060 " { 1 } };\n"
6061 "TEMP R0;\n"
6062 "TEMP R1;\n"
6063 "TEMP R2;\n"
6064 "MUL R0.xyz, fragment.position.y, c[4];\n"
6065 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6066 "ADD R0.xyz, R0, c[5];\n"
6067 "RCP R0.z, R0.z;\n"
6068 "MUL R0.xy, R0, R0.z;\n"
6069 "MUL R0.xy, R0, c[6];\n"
6070 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
6071 "TEX R1, R0.zwzw, texture[0], 2D;\n"
6072 "MOV R0.y, -R0;\n"
6073 "TEX R0.x, R0, texture[2], 2D;\n"
6074 "MUL R0, fragment.color.primary, R0.x;\n"
6075 "ADD R2.x, -R1.w, c[8];\n"
6076 "MUL R2.xyz, R0, R2.x;\n"
6077 "MAD R0.xyz, R0, R1, R2;\n"
6078 "ADD R2.x, -R0.w, c[8];\n"
6079 "MAD R2.xyz, R1, R2.x, R0;\n"
6080 "ADD R0.z, R0.w, R1.w;\n"
6081 "MAD R2.w, -R0, R1, R0.z;\n"
6082 "ADD R0.xy, fragment.position, c[0];\n"
6083 "MUL R0.xy, R0, c[1];\n"
6084 "TEX R0, R0, texture[1], 2D;\n"
6085 "ADD R2, R2, -R1;\n"
6086 "DP4 R0.x, R0, c[2];\n"
6087 "MAD result.color, R0.x, R2, R1;\n"
6088 "END\n"
6089 ;
6090
6091static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN =
6092 "!!ARBfp1.0\n"
6093 "PARAM c[8] = { program.local[0..7] };\n"
6094 "TEMP R0;\n"
6095 "TEMP R1;\n"
6096 "TEMP R2;\n"
6097 "TEMP R3;\n"
6098 "MUL R0.xyz, fragment.position.y, c[4];\n"
6099 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6100 "ADD R0.xyz, R0, c[5];\n"
6101 "RCP R0.z, R0.z;\n"
6102 "MUL R0.xy, R0, R0.z;\n"
6103 "MUL R0.xy, R0, c[6];\n"
6104 "MOV R0.y, -R0;\n"
6105 "TEX R1.x, R0, texture[2], 2D;\n"
6106 "MUL R0.xy, fragment.position, c[7];\n"
6107 "ADD R3.xy, fragment.position, c[0];\n"
6108 "TEX R0, R0, texture[0], 2D;\n"
6109 "MUL R1, fragment.color.primary, R1.x;\n"
6110 "ADD R2, R1, R0;\n"
6111 "MAD R2, -R1, R0, R2;\n"
6112 "MUL R3.xy, R3, c[1];\n"
6113 "TEX R1, R3, texture[1], 2D;\n"
6114 "ADD R2, R2, -R0;\n"
6115 "DP4 R1.x, R1, c[2];\n"
6116 "MAD result.color, R1.x, R2, R0;\n"
6117 "END\n"
6118 ;
6119
6120static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY =
6121 "!!ARBfp1.0\n"
6122 "PARAM c[9] = { program.local[0..7],\n"
6123 " { 2, 1 } };\n"
6124 "TEMP R0;\n"
6125 "TEMP R1;\n"
6126 "TEMP R2;\n"
6127 "TEMP R3;\n"
6128 "TEMP R4;\n"
6129 "MUL R0.xyz, fragment.position.y, c[4];\n"
6130 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6131 "ADD R0.xyz, R0, c[5];\n"
6132 "RCP R0.z, R0.z;\n"
6133 "MUL R0.xy, R0, R0.z;\n"
6134 "MUL R0.xy, R0, c[6];\n"
6135 "MOV R0.y, -R0;\n"
6136 "TEX R1.x, R0, texture[2], 2D;\n"
6137 "MUL R1, fragment.color.primary, R1.x;\n"
6138 "MUL R0.xy, fragment.position, c[7];\n"
6139 "TEX R0, R0, texture[0], 2D;\n"
6140 "ADD R2.w, -R0, c[8].y;\n"
6141 "ADD R3.xyz, R1.w, -R1;\n"
6142 "ADD R2.xyz, R0.w, -R0;\n"
6143 "MUL R2.xyz, R2, R3;\n"
6144 "MUL R2.xyz, R2, c[8].x;\n"
6145 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6146 "MUL R4.xyz, R1, R2.w;\n"
6147 "MUL R3.xyz, R1, R0;\n"
6148 "MAD R1.xyz, R1, R2.w, R2;\n"
6149 "ADD R2.x, -R1.w, c[8].y;\n"
6150 "MAD R3.xyz, R3, c[8].x, R4;\n"
6151 "MAD R3.xyz, R0, R2.x, R3;\n"
6152 "MAD R1.xyz, R0, R2.x, R1;\n"
6153 "MUL R2.xyz, R0, c[8].x;\n"
6154 "ADD R1.xyz, R1, -R3;\n"
6155 "SGE R2.xyz, R2, R0.w;\n"
6156 "MAD R2.xyz, R2, R1, R3;\n"
6157 "ADD R1.z, R1.w, R0.w;\n"
6158 "MAD R2.w, -R1, R0, R1.z;\n"
6159 "ADD R1.xy, fragment.position, c[0];\n"
6160 "MUL R1.xy, R1, c[1];\n"
6161 "TEX R1, R1, texture[1], 2D;\n"
6162 "ADD R2, R2, -R0;\n"
6163 "DP4 R1.x, R1, c[2];\n"
6164 "MAD result.color, R1.x, R2, R0;\n"
6165 "END\n"
6166 ;
6167
6168static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN =
6169 "!!ARBfp1.0\n"
6170 "PARAM c[9] = { program.local[0..7],\n"
6171 " { 1 } };\n"
6172 "TEMP R0;\n"
6173 "TEMP R1;\n"
6174 "TEMP R2;\n"
6175 "TEMP R3;\n"
6176 "MUL R0.xyz, fragment.position.y, c[4];\n"
6177 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6178 "ADD R0.xyz, R0, c[5];\n"
6179 "RCP R0.z, R0.z;\n"
6180 "MUL R0.xy, R0, R0.z;\n"
6181 "MUL R0.xy, R0, c[6];\n"
6182 "MOV R0.y, -R0;\n"
6183 "TEX R0.x, R0, texture[2], 2D;\n"
6184 "MUL R1.xy, fragment.position, c[7];\n"
6185 "TEX R1, R1, texture[0], 2D;\n"
6186 "MUL R0, fragment.color.primary, R0.x;\n"
6187 "MUL R3.xyz, R1, R0.w;\n"
6188 "MUL R2.xyz, R0, R1.w;\n"
6189 "MIN R2.xyz, R2, R3;\n"
6190 "ADD R2.w, -R1, c[8].x;\n"
6191 "MAD R0.xyz, R0, R2.w, R2;\n"
6192 "ADD R2.x, -R0.w, c[8];\n"
6193 "MAD R2.xyz, R1, R2.x, R0;\n"
6194 "ADD R0.z, R0.w, R1.w;\n"
6195 "MAD R2.w, -R0, R1, R0.z;\n"
6196 "ADD R0.xy, fragment.position, c[0];\n"
6197 "MUL R0.xy, R0, c[1];\n"
6198 "TEX R0, R0, texture[1], 2D;\n"
6199 "ADD R2, R2, -R1;\n"
6200 "DP4 R0.x, R0, c[2];\n"
6201 "MAD result.color, R0.x, R2, R1;\n"
6202 "END\n"
6203 ;
6204
6205static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN =
6206 "!!ARBfp1.0\n"
6207 "PARAM c[9] = { program.local[0..7],\n"
6208 " { 1 } };\n"
6209 "TEMP R0;\n"
6210 "TEMP R1;\n"
6211 "TEMP R2;\n"
6212 "TEMP R3;\n"
6213 "MUL R0.xyz, fragment.position.y, c[4];\n"
6214 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6215 "ADD R0.xyz, R0, c[5];\n"
6216 "RCP R0.z, R0.z;\n"
6217 "MUL R0.xy, R0, R0.z;\n"
6218 "MUL R0.xy, R0, c[6];\n"
6219 "MOV R0.y, -R0;\n"
6220 "TEX R0.x, R0, texture[2], 2D;\n"
6221 "MUL R1.xy, fragment.position, c[7];\n"
6222 "TEX R1, R1, texture[0], 2D;\n"
6223 "MUL R0, fragment.color.primary, R0.x;\n"
6224 "MUL R3.xyz, R1, R0.w;\n"
6225 "MUL R2.xyz, R0, R1.w;\n"
6226 "MAX R2.xyz, R2, R3;\n"
6227 "ADD R2.w, -R1, c[8].x;\n"
6228 "MAD R0.xyz, R0, R2.w, R2;\n"
6229 "ADD R2.x, -R0.w, c[8];\n"
6230 "MAD R2.xyz, R1, R2.x, R0;\n"
6231 "ADD R0.z, R0.w, R1.w;\n"
6232 "MAD R2.w, -R0, R1, R0.z;\n"
6233 "ADD R0.xy, fragment.position, c[0];\n"
6234 "MUL R0.xy, R0, c[1];\n"
6235 "TEX R0, R0, texture[1], 2D;\n"
6236 "ADD R2, R2, -R1;\n"
6237 "DP4 R0.x, R0, c[2];\n"
6238 "MAD result.color, R0.x, R2, R1;\n"
6239 "END\n"
6240 ;
6241
6242static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE =
6243 "!!ARBfp1.0\n"
6244 "PARAM c[9] = { program.local[0..7],\n"
6245 " { 1, 1e-06 } };\n"
6246 "TEMP R0;\n"
6247 "TEMP R1;\n"
6248 "TEMP R2;\n"
6249 "TEMP R3;\n"
6250 "TEMP R4;\n"
6251 "MUL R0.xyz, fragment.position.y, c[4];\n"
6252 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6253 "ADD R0.xyz, R0, c[5];\n"
6254 "RCP R0.z, R0.z;\n"
6255 "MUL R0.xy, R0, R0.z;\n"
6256 "MUL R0.xy, R0, c[6];\n"
6257 "MOV R0.y, -R0;\n"
6258 "TEX R0.x, R0, texture[2], 2D;\n"
6259 "MUL R1, fragment.color.primary, R0.x;\n"
6260 "MAX R0.x, R1.w, c[8].y;\n"
6261 "RCP R0.x, R0.x;\n"
6262 "MAD R0.xyz, -R1, R0.x, c[8].x;\n"
6263 "MAX R2.xyz, R0, c[8].y;\n"
6264 "MUL R0.xy, fragment.position, c[7];\n"
6265 "TEX R0, R0, texture[0], 2D;\n"
6266 "ADD R2.w, -R1, c[8].x;\n"
6267 "MUL R3.xyz, R0, R2.w;\n"
6268 "ADD R2.w, -R0, c[8].x;\n"
6269 "MAD R4.xyz, R1, R2.w, R3;\n"
6270 "MUL R3.xyz, R0, R1.w;\n"
6271 "MUL R2.w, R1, R0;\n"
6272 "MAD R1.xyz, R1, R0.w, R3;\n"
6273 "SGE R1.xyz, R1, R2.w;\n"
6274 "RCP R2.x, R2.x;\n"
6275 "RCP R2.y, R2.y;\n"
6276 "RCP R2.z, R2.z;\n"
6277 "MAD R2.xyz, R3, R2, R4;\n"
6278 "MAD R4.xyz, R1.w, R0.w, R4;\n"
6279 "ADD R4.xyz, R4, -R2;\n"
6280 "MAD R2.xyz, R1, R4, R2;\n"
6281 "ADD R1.z, R1.w, R0.w;\n"
6282 "MAD R2.w, -R1, R0, R1.z;\n"
6283 "ADD R1.xy, fragment.position, c[0];\n"
6284 "MUL R1.xy, R1, c[1];\n"
6285 "TEX R1, R1, texture[1], 2D;\n"
6286 "ADD R2, R2, -R0;\n"
6287 "DP4 R1.x, R1, c[2];\n"
6288 "MAD result.color, R1.x, R2, R0;\n"
6289 "END\n"
6290 ;
6291
6292static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN =
6293 "!!ARBfp1.0\n"
6294 "PARAM c[9] = { program.local[0..7],\n"
6295 " { 1, 9.9999997e-06 } };\n"
6296 "TEMP R0;\n"
6297 "TEMP R1;\n"
6298 "TEMP R2;\n"
6299 "TEMP R3;\n"
6300 "TEMP R4;\n"
6301 "TEMP R5;\n"
6302 "MUL R0.xyz, fragment.position.y, c[4];\n"
6303 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6304 "ADD R0.xyz, R0, c[5];\n"
6305 "RCP R0.z, R0.z;\n"
6306 "MUL R0.xy, R0, R0.z;\n"
6307 "MUL R0.xy, R0, c[6];\n"
6308 "MOV R0.y, -R0;\n"
6309 "TEX R1.x, R0, texture[2], 2D;\n"
6310 "MUL R1, fragment.color.primary, R1.x;\n"
6311 "MUL R0.xy, fragment.position, c[7];\n"
6312 "TEX R0, R0, texture[0], 2D;\n"
6313 "MUL R2.xyz, R0, R1.w;\n"
6314 "MAD R3.xyz, R1, R0.w, R2;\n"
6315 "MAD R2.xyz, -R1.w, R0.w, R3;\n"
6316 "MUL R4.xyz, R1.w, R2;\n"
6317 "MAX R2.xyz, R1, c[8].y;\n"
6318 "ADD R2.w, -R0, c[8].x;\n"
6319 "MUL R5.xyz, R1, R2.w;\n"
6320 "ADD R3.w, -R1, c[8].x;\n"
6321 "RCP R2.x, R2.x;\n"
6322 "RCP R2.y, R2.y;\n"
6323 "RCP R2.z, R2.z;\n"
6324 "MAD R2.xyz, R4, R2, R5;\n"
6325 "MUL R4.xyz, R0, R3.w;\n"
6326 "MAD R1.xyz, R1, R2.w, R4;\n"
6327 "MUL R2.w, R1, R0;\n"
6328 "ADD R3.w, -R1, c[8].x;\n"
6329 "MAD R2.xyz, R0, R3.w, R2;\n"
6330 "ADD R2.xyz, R2, -R1;\n"
6331 "SGE R3.xyz, R3, R2.w;\n"
6332 "MAD R2.xyz, R3, R2, R1;\n"
6333 "ADD R1.z, R1.w, R0.w;\n"
6334 "MAD R2.w, -R1, R0, R1.z;\n"
6335 "ADD R1.xy, fragment.position, c[0];\n"
6336 "MUL R1.xy, R1, c[1];\n"
6337 "TEX R1, R1, texture[1], 2D;\n"
6338 "ADD R2, R2, -R0;\n"
6339 "DP4 R1.x, R1, c[2];\n"
6340 "MAD result.color, R1.x, R2, R0;\n"
6341 "END\n"
6342 ;
6343
6344static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT =
6345 "!!ARBfp1.0\n"
6346 "PARAM c[9] = { program.local[0..7],\n"
6347 " { 2, 1 } };\n"
6348 "TEMP R0;\n"
6349 "TEMP R1;\n"
6350 "TEMP R2;\n"
6351 "TEMP R3;\n"
6352 "TEMP R4;\n"
6353 "MUL R0.xyz, fragment.position.y, c[4];\n"
6354 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6355 "ADD R0.xyz, R0, c[5];\n"
6356 "RCP R0.z, R0.z;\n"
6357 "MUL R0.xy, R0, R0.z;\n"
6358 "MUL R0.xy, R0, c[6];\n"
6359 "MOV R0.y, -R0;\n"
6360 "TEX R1.x, R0, texture[2], 2D;\n"
6361 "MUL R1, fragment.color.primary, R1.x;\n"
6362 "MUL R0.xy, fragment.position, c[7];\n"
6363 "TEX R0, R0, texture[0], 2D;\n"
6364 "ADD R2.w, -R0, c[8].y;\n"
6365 "ADD R3.xyz, R1.w, -R1;\n"
6366 "ADD R2.xyz, R0.w, -R0;\n"
6367 "MUL R2.xyz, R2, R3;\n"
6368 "MUL R2.xyz, R2, c[8].x;\n"
6369 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6370 "MUL R4.xyz, R1, R2.w;\n"
6371 "MAD R2.xyz, R1, R2.w, R2;\n"
6372 "MUL R3.xyz, R1, R0;\n"
6373 "ADD R2.w, -R1, c[8].y;\n"
6374 "MAD R3.xyz, R3, c[8].x, R4;\n"
6375 "MUL R1.xyz, R1, c[8].x;\n"
6376 "SGE R1.xyz, R1, R1.w;\n"
6377 "MAD R3.xyz, R0, R2.w, R3;\n"
6378 "MAD R2.xyz, R0, R2.w, R2;\n"
6379 "ADD R2.xyz, R2, -R3;\n"
6380 "MAD R2.xyz, R1, R2, R3;\n"
6381 "ADD R1.z, R1.w, R0.w;\n"
6382 "MAD R2.w, -R1, R0, R1.z;\n"
6383 "ADD R1.xy, fragment.position, c[0];\n"
6384 "MUL R1.xy, R1, c[1];\n"
6385 "TEX R1, R1, texture[1], 2D;\n"
6386 "ADD R2, R2, -R0;\n"
6387 "DP4 R1.x, R1, c[2];\n"
6388 "MAD result.color, R1.x, R2, R0;\n"
6389 "END\n"
6390 ;
6391
6392static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT =
6393 "!!ARBfp1.0\n"
6394 "PARAM c[10] = { program.local[0..7],\n"
6395 " { 1, 9.9999997e-06, 2, 8 },\n"
6396 " { 3 } };\n"
6397 "TEMP R0;\n"
6398 "TEMP R1;\n"
6399 "TEMP R2;\n"
6400 "TEMP R3;\n"
6401 "TEMP R4;\n"
6402 "TEMP R5;\n"
6403 "MUL R0.xyz, fragment.position.y, c[4];\n"
6404 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6405 "ADD R1.xyz, R0, c[5];\n"
6406 "RCP R0.z, R1.z;\n"
6407 "MUL R1.xy, R1, R0.z;\n"
6408 "MUL R1.xy, R1, c[6];\n"
6409 "MOV R1.y, -R1;\n"
6410 "MUL R0.xy, fragment.position, c[7];\n"
6411 "TEX R0, R0, texture[0], 2D;\n"
6412 "MAX R1.z, R0.w, c[8].y;\n"
6413 "RCP R2.w, R1.z;\n"
6414 "MUL R2.xyz, R0, R2.w;\n"
6415 "MUL R5.xyz, -R2, c[8].w;\n"
6416 "MAD R4.xyz, -R0, R2.w, c[8].x;\n"
6417 "TEX R1.x, R1, texture[2], 2D;\n"
6418 "MUL R1, fragment.color.primary, R1.x;\n"
6419 "MAD R3.xyz, R1, c[8].z, -R1.w;\n"
6420 "RSQ R2.x, R2.x;\n"
6421 "RSQ R2.z, R2.z;\n"
6422 "RSQ R2.y, R2.y;\n"
6423 "MUL R4.xyz, R4, R3;\n"
6424 "ADD R5.xyz, R5, c[9].x;\n"
6425 "MUL R5.xyz, R4, R5;\n"
6426 "ADD R4.xyz, R1.w, -R4;\n"
6427 "ADD R2.w, -R0, c[8].x;\n"
6428 "RCP R2.x, R2.x;\n"
6429 "RCP R2.z, R2.z;\n"
6430 "RCP R2.y, R2.y;\n"
6431 "MAD R2.xyz, R2, R0.w, -R0;\n"
6432 "MUL R3.xyz, R2, R3;\n"
6433 "ADD R2.xyz, R1.w, -R5;\n"
6434 "MAD R5.xyz, R0, R1.w, R3;\n"
6435 "MUL R2.xyz, R0, R2;\n"
6436 "MUL R3.xyz, R0, c[8].w;\n"
6437 "ADD R5.xyz, R5, -R2;\n"
6438 "SGE R3.xyz, R3, R0.w;\n"
6439 "MUL R3.xyz, R3, R5;\n"
6440 "ADD R2.xyz, R2, R3;\n"
6441 "MUL R3.xyz, R0, R4;\n"
6442 "MUL R4.xyz, R1, c[8].z;\n"
6443 "SGE R4.xyz, R4, R1.w;\n"
6444 "ADD R2.xyz, R2, -R3;\n"
6445 "MUL R2.xyz, R4, R2;\n"
6446 "ADD R2.xyz, R3, R2;\n"
6447 "MAD R1.xyz, R1, R2.w, R2;\n"
6448 "ADD R2.x, -R1.w, c[8];\n"
6449 "MAD R2.xyz, R0, R2.x, R1;\n"
6450 "ADD R1.z, R1.w, R0.w;\n"
6451 "MAD R2.w, -R1, R0, R1.z;\n"
6452 "ADD R1.xy, fragment.position, c[0];\n"
6453 "MUL R1.xy, R1, c[1];\n"
6454 "TEX R1, R1, texture[1], 2D;\n"
6455 "ADD R2, R2, -R0;\n"
6456 "DP4 R1.x, R1, c[2];\n"
6457 "MAD result.color, R1.x, R2, R0;\n"
6458 "END\n"
6459 ;
6460
6461static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE =
6462 "!!ARBfp1.0\n"
6463 "PARAM c[9] = { program.local[0..7],\n"
6464 " { 2 } };\n"
6465 "TEMP R0;\n"
6466 "TEMP R1;\n"
6467 "TEMP R2;\n"
6468 "TEMP R3;\n"
6469 "MUL R0.xyz, fragment.position.y, c[4];\n"
6470 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6471 "ADD R0.xyz, R0, c[5];\n"
6472 "RCP R0.z, R0.z;\n"
6473 "MUL R0.xy, R0, R0.z;\n"
6474 "MUL R0.xy, R0, c[6];\n"
6475 "MOV R0.y, -R0;\n"
6476 "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n"
6477 "TEX R1, R0.zwzw, texture[0], 2D;\n"
6478 "TEX R0.x, R0, texture[2], 2D;\n"
6479 "MUL R0, fragment.color.primary, R0.x;\n"
6480 "ADD R3.xyz, R0, R1;\n"
6481 "MUL R2.xyz, R1, R0.w;\n"
6482 "MUL R0.xyz, R0, R1.w;\n"
6483 "MIN R0.xyz, R0, R2;\n"
6484 "MAD R2.xyz, -R0, c[8].x, R3;\n"
6485 "ADD R0.z, R0.w, R1.w;\n"
6486 "MAD R2.w, -R0, R1, R0.z;\n"
6487 "ADD R0.xy, fragment.position, c[0];\n"
6488 "MUL R0.xy, R0, c[1];\n"
6489 "TEX R0, R0, texture[1], 2D;\n"
6490 "ADD R2, R2, -R1;\n"
6491 "DP4 R0.x, R0, c[2];\n"
6492 "MAD result.color, R0.x, R2, R1;\n"
6493 "END\n"
6494 ;
6495
6496static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION =
6497 "!!ARBfp1.0\n"
6498 "PARAM c[9] = { program.local[0..7],\n"
6499 " { 1, 2 } };\n"
6500 "TEMP R0;\n"
6501 "TEMP R1;\n"
6502 "TEMP R2;\n"
6503 "TEMP R3;\n"
6504 "MUL R0.xyz, fragment.position.y, c[4];\n"
6505 "MAD R0.xyz, fragment.position.x, c[3], R0;\n"
6506 "ADD R0.xyz, R0, c[5];\n"
6507 "RCP R0.z, R0.z;\n"
6508 "MUL R0.xy, R0, R0.z;\n"
6509 "MUL R0.xy, R0, c[6];\n"
6510 "MOV R0.y, -R0;\n"
6511 "TEX R0.x, R0, texture[2], 2D;\n"
6512 "MUL R1.xy, fragment.position, c[7];\n"
6513 "TEX R1, R1, texture[0], 2D;\n"
6514 "MUL R0, fragment.color.primary, R0.x;\n"
6515 "MUL R2.xyz, R1, R0.w;\n"
6516 "MAD R3.xyz, R0, R1.w, R2;\n"
6517 "MUL R2.xyz, R0, R1;\n"
6518 "MAD R2.xyz, -R2, c[8].y, R3;\n"
6519 "ADD R2.w, -R1, c[8].x;\n"
6520 "MAD R0.xyz, R0, R2.w, R2;\n"
6521 "ADD R2.x, -R0.w, c[8];\n"
6522 "MAD R2.xyz, R1, R2.x, R0;\n"
6523 "ADD R0.z, R0.w, R1.w;\n"
6524 "MAD R2.w, -R0, R1, R0.z;\n"
6525 "ADD R0.xy, fragment.position, c[0];\n"
6526 "MUL R0.xy, R0, c[1];\n"
6527 "TEX R0, R0, texture[1], 2D;\n"
6528 "ADD R2, R2, -R1;\n"
6529 "DP4 R0.x, R0, c[2];\n"
6530 "MAD result.color, R0.x, R2, R1;\n"
6531 "END\n"
6532 ;
6533
6534static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK =
6535 "!!ARBfp1.0\n"
6536 "PARAM c[8] = { program.local[0..4],\n"
6537 " { 1 },\n"
6538 " program.local[6..7] };\n"
6539 "TEMP R0;\n"
6540 "TEMP R1;\n"
6541 "TEMP R2;\n"
6542 "TEMP R3;\n"
6543 "MUL R0.xyz, fragment.position.y, c[1];\n"
6544 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6545 "ADD R0.xyz, R0, c[2];\n"
6546 "RCP R0.z, R0.z;\n"
6547 "MUL R0.xy, R0, R0.z;\n"
6548 "MUL R0.xy, R0, c[3];\n"
6549 "MOV R0.w, -R0.y;\n"
6550 "MOV R0.z, R0.x;\n"
6551 "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
6552 "MUL R0.xy, fragment.position, c[4];\n"
6553 "TEX R0, R0, texture[0], 2D;\n"
6554 "MUL R2.xyz, R0, c[7].y;\n"
6555 "MUL R1, fragment.color.primary, R1.x;\n"
6556 "MUL R3.xyz, R2, R1.w;\n"
6557 "MUL R2.xyz, R1, c[7].x;\n"
6558 "MUL R0.xyz, R0, c[6].z;\n"
6559 "MAD R2.xyz, R2, R0.w, R3;\n"
6560 "MUL R1.xyz, R1, c[6].y;\n"
6561 "ADD R2.w, -R0, c[5].x;\n"
6562 "MAD R1.xyz, R1, R2.w, R2;\n"
6563 "ADD R2.x, -R1.w, c[5];\n"
6564 "MAD result.color.xyz, R0, R2.x, R1;\n"
6565 "ADD R0.y, -R0.w, c[5].x;\n"
6566 "MUL R0.x, R1.w, R0.w;\n"
6567 "MUL R0.z, R0.w, R2.x;\n"
6568 "MUL R0.y, R1.w, R0;\n"
6569 "DP3 result.color.w, R0, c[6];\n"
6570 "END\n"
6571 ;
6572
6573static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK =
6574 "!!ARBfp1.0\n"
6575 "PARAM c[6] = { program.local[0..4],\n"
6576 " { 1 } };\n"
6577 "TEMP R0;\n"
6578 "TEMP R1;\n"
6579 "TEMP R2;\n"
6580 "MUL R0.xyz, fragment.position.y, c[1];\n"
6581 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6582 "ADD R0.xyz, R0, c[2];\n"
6583 "RCP R0.z, R0.z;\n"
6584 "MUL R0.zw, R0.xyxy, R0.z;\n"
6585 "MUL R1.xy, R0.zwzw, c[3];\n"
6586 "MOV R1.y, -R1;\n"
6587 "MUL R0.xy, fragment.position, c[4];\n"
6588 "TEX R0, R0, texture[0], 2D;\n"
6589 "TEX R1.x, R1, texture[1], 2D;\n"
6590 "MUL R1, fragment.color.primary, R1.x;\n"
6591 "ADD R2.x, -R0.w, c[5];\n"
6592 "MUL R2.xyz, R1, R2.x;\n"
6593 "MAD R1.xyz, R1, R0, R2;\n"
6594 "ADD R2.x, R1.w, R0.w;\n"
6595 "ADD R2.y, -R1.w, c[5].x;\n"
6596 "MAD result.color.xyz, R0, R2.y, R1;\n"
6597 "MAD result.color.w, -R1, R0, R2.x;\n"
6598 "END\n"
6599 ;
6600
6601static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK =
6602 "!!ARBfp1.0\n"
6603 "PARAM c[5] = { program.local[0..4] };\n"
6604 "TEMP R0;\n"
6605 "TEMP R1;\n"
6606 "TEMP R2;\n"
6607 "MUL R0.xyz, fragment.position.y, c[1];\n"
6608 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6609 "ADD R0.xyz, R0, c[2];\n"
6610 "RCP R0.z, R0.z;\n"
6611 "MUL R0.xy, R0, R0.z;\n"
6612 "MUL R0.xy, R0, c[3];\n"
6613 "MOV R0.w, -R0.y;\n"
6614 "MOV R0.z, R0.x;\n"
6615 "TEX R1.x, R0.zwzw, texture[1], 2D;\n"
6616 "MUL R0.xy, fragment.position, c[4];\n"
6617 "TEX R0, R0, texture[0], 2D;\n"
6618 "MUL R1, fragment.color.primary, R1.x;\n"
6619 "ADD R2, R1, R0;\n"
6620 "MAD result.color, -R1, R0, R2;\n"
6621 "END\n"
6622 ;
6623
6624static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK =
6625 "!!ARBfp1.0\n"
6626 "PARAM c[6] = { program.local[0..4],\n"
6627 " { 2, 1 } };\n"
6628 "TEMP R0;\n"
6629 "TEMP R1;\n"
6630 "TEMP R2;\n"
6631 "TEMP R3;\n"
6632 "MUL R0.xyz, fragment.position.y, c[1];\n"
6633 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6634 "ADD R0.xyz, R0, c[2];\n"
6635 "RCP R0.z, R0.z;\n"
6636 "MUL R0.xy, R0, R0.z;\n"
6637 "MUL R0.xy, R0, c[3];\n"
6638 "MOV R0.y, -R0;\n"
6639 "TEX R1.x, R0, texture[1], 2D;\n"
6640 "MUL R1, fragment.color.primary, R1.x;\n"
6641 "MUL R0.xy, fragment.position, c[4];\n"
6642 "TEX R0, R0, texture[0], 2D;\n"
6643 "ADD R3.xyz, R1.w, -R1;\n"
6644 "ADD R2.xyz, R0.w, -R0;\n"
6645 "MUL R2.xyz, R2, R3;\n"
6646 "ADD R2.w, -R0, c[5].y;\n"
6647 "MUL R2.xyz, R2, c[5].x;\n"
6648 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6649 "MAD R2.xyz, R1, R2.w, R2;\n"
6650 "MUL R3.xyz, R1, R2.w;\n"
6651 "MUL R1.xyz, R1, R0;\n"
6652 "ADD R2.w, -R1, c[5].y;\n"
6653 "MAD R1.xyz, R1, c[5].x, R3;\n"
6654 "MAD R1.xyz, R0, R2.w, R1;\n"
6655 "MAD R2.xyz, R0, R2.w, R2;\n"
6656 "MUL R0.xyz, R0, c[5].x;\n"
6657 "ADD R2.w, R1, R0;\n"
6658 "ADD R2.xyz, R2, -R1;\n"
6659 "SGE R0.xyz, R0, R0.w;\n"
6660 "MAD result.color.xyz, R0, R2, R1;\n"
6661 "MAD result.color.w, -R1, R0, R2;\n"
6662 "END\n"
6663 ;
6664
6665static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK =
6666 "!!ARBfp1.0\n"
6667 "PARAM c[6] = { program.local[0..4],\n"
6668 " { 1 } };\n"
6669 "TEMP R0;\n"
6670 "TEMP R1;\n"
6671 "TEMP R2;\n"
6672 "TEMP R3;\n"
6673 "MUL R0.xyz, fragment.position.y, c[1];\n"
6674 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6675 "ADD R0.xyz, R0, c[2];\n"
6676 "RCP R0.z, R0.z;\n"
6677 "MUL R0.xy, R0, R0.z;\n"
6678 "MUL R0.xy, R0, c[3];\n"
6679 "MOV R0.y, -R0;\n"
6680 "TEX R1.x, R0, texture[1], 2D;\n"
6681 "MUL R0.xy, fragment.position, c[4];\n"
6682 "TEX R0, R0, texture[0], 2D;\n"
6683 "MUL R1, fragment.color.primary, R1.x;\n"
6684 "MUL R2.xyz, R1, R0.w;\n"
6685 "MUL R3.xyz, R0, R1.w;\n"
6686 "MIN R2.xyz, R2, R3;\n"
6687 "ADD R2.w, -R0, c[5].x;\n"
6688 "MAD R1.xyz, R1, R2.w, R2;\n"
6689 "ADD R2.x, R1.w, R0.w;\n"
6690 "ADD R2.y, -R1.w, c[5].x;\n"
6691 "MAD result.color.xyz, R0, R2.y, R1;\n"
6692 "MAD result.color.w, -R1, R0, R2.x;\n"
6693 "END\n"
6694 ;
6695
6696static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK =
6697 "!!ARBfp1.0\n"
6698 "PARAM c[6] = { program.local[0..4],\n"
6699 " { 1 } };\n"
6700 "TEMP R0;\n"
6701 "TEMP R1;\n"
6702 "TEMP R2;\n"
6703 "TEMP R3;\n"
6704 "MUL R0.xyz, fragment.position.y, c[1];\n"
6705 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6706 "ADD R0.xyz, R0, c[2];\n"
6707 "RCP R0.z, R0.z;\n"
6708 "MUL R0.xy, R0, R0.z;\n"
6709 "MUL R0.xy, R0, c[3];\n"
6710 "MOV R0.y, -R0;\n"
6711 "TEX R1.x, R0, texture[1], 2D;\n"
6712 "MUL R0.xy, fragment.position, c[4];\n"
6713 "TEX R0, R0, texture[0], 2D;\n"
6714 "MUL R1, fragment.color.primary, R1.x;\n"
6715 "MUL R2.xyz, R1, R0.w;\n"
6716 "MUL R3.xyz, R0, R1.w;\n"
6717 "MAX R2.xyz, R2, R3;\n"
6718 "ADD R2.w, -R0, c[5].x;\n"
6719 "MAD R1.xyz, R1, R2.w, R2;\n"
6720 "ADD R2.x, R1.w, R0.w;\n"
6721 "ADD R2.y, -R1.w, c[5].x;\n"
6722 "MAD result.color.xyz, R0, R2.y, R1;\n"
6723 "MAD result.color.w, -R1, R0, R2.x;\n"
6724 "END\n"
6725 ;
6726
6727static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK =
6728 "!!ARBfp1.0\n"
6729 "PARAM c[6] = { program.local[0..4],\n"
6730 " { 1, 1e-06 } };\n"
6731 "TEMP R0;\n"
6732 "TEMP R1;\n"
6733 "TEMP R2;\n"
6734 "TEMP R3;\n"
6735 "MUL R0.xyz, fragment.position.y, c[1];\n"
6736 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6737 "ADD R0.xyz, R0, c[2];\n"
6738 "RCP R0.z, R0.z;\n"
6739 "MUL R0.xy, R0, R0.z;\n"
6740 "MUL R0.xy, R0, c[3];\n"
6741 "MOV R0.y, -R0;\n"
6742 "TEX R0.x, R0, texture[1], 2D;\n"
6743 "MUL R1, fragment.color.primary, R0.x;\n"
6744 "MAX R0.x, R1.w, c[5].y;\n"
6745 "RCP R0.x, R0.x;\n"
6746 "MAD R0.xyz, -R1, R0.x, c[5].x;\n"
6747 "MAX R2.xyz, R0, c[5].y;\n"
6748 "MUL R0.xy, fragment.position, c[4];\n"
6749 "TEX R0, R0, texture[0], 2D;\n"
6750 "ADD R2.w, -R1, c[5].x;\n"
6751 "MUL R3.xyz, R0, R2.w;\n"
6752 "ADD R2.w, -R0, c[5].x;\n"
6753 "MAD R3.xyz, R1, R2.w, R3;\n"
6754 "MUL R0.xyz, R0, R1.w;\n"
6755 "RCP R2.x, R2.x;\n"
6756 "RCP R2.y, R2.y;\n"
6757 "RCP R2.z, R2.z;\n"
6758 "MAD R2.xyz, R0, R2, R3;\n"
6759 "MAD R0.xyz, R1, R0.w, R0;\n"
6760 "MAD R3.xyz, R1.w, R0.w, R3;\n"
6761 "MUL R2.w, R1, R0;\n"
6762 "ADD R1.x, R1.w, R0.w;\n"
6763 "ADD R3.xyz, R3, -R2;\n"
6764 "SGE R0.xyz, R0, R2.w;\n"
6765 "MAD result.color.xyz, R0, R3, R2;\n"
6766 "MAD result.color.w, -R1, R0, R1.x;\n"
6767 "END\n"
6768 ;
6769
6770static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK =
6771 "!!ARBfp1.0\n"
6772 "PARAM c[6] = { program.local[0..4],\n"
6773 " { 1, 9.9999997e-06 } };\n"
6774 "TEMP R0;\n"
6775 "TEMP R1;\n"
6776 "TEMP R2;\n"
6777 "TEMP R3;\n"
6778 "TEMP R4;\n"
6779 "TEMP R5;\n"
6780 "MUL R0.xyz, fragment.position.y, c[1];\n"
6781 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6782 "ADD R0.xyz, R0, c[2];\n"
6783 "RCP R0.z, R0.z;\n"
6784 "MUL R0.xy, R0, R0.z;\n"
6785 "MUL R0.xy, R0, c[3];\n"
6786 "MOV R0.y, -R0;\n"
6787 "TEX R1.x, R0, texture[1], 2D;\n"
6788 "MUL R1, fragment.color.primary, R1.x;\n"
6789 "MUL R0.xy, fragment.position, c[4];\n"
6790 "TEX R0, R0, texture[0], 2D;\n"
6791 "MUL R2.xyz, R0, R1.w;\n"
6792 "MAD R3.xyz, R1, R0.w, R2;\n"
6793 "ADD R2.w, -R0, c[5].x;\n"
6794 "MAD R2.xyz, -R1.w, R0.w, R3;\n"
6795 "MUL R4.xyz, R1.w, R2;\n"
6796 "MAX R2.xyz, R1, c[5].y;\n"
6797 "MUL R5.xyz, R1, R2.w;\n"
6798 "ADD R3.w, -R1, c[5].x;\n"
6799 "RCP R2.x, R2.x;\n"
6800 "RCP R2.y, R2.y;\n"
6801 "RCP R2.z, R2.z;\n"
6802 "MAD R2.xyz, R4, R2, R5;\n"
6803 "MUL R4.xyz, R0, R3.w;\n"
6804 "MAD R1.xyz, R1, R2.w, R4;\n"
6805 "ADD R3.w, -R1, c[5].x;\n"
6806 "MAD R0.xyz, R0, R3.w, R2;\n"
6807 "MUL R2.x, R1.w, R0.w;\n"
6808 "ADD R2.w, R1, R0;\n"
6809 "ADD R0.xyz, R0, -R1;\n"
6810 "SGE R2.xyz, R3, R2.x;\n"
6811 "MAD result.color.xyz, R2, R0, R1;\n"
6812 "MAD result.color.w, -R1, R0, R2;\n"
6813 "END\n"
6814 ;
6815
6816static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK =
6817 "!!ARBfp1.0\n"
6818 "PARAM c[6] = { program.local[0..4],\n"
6819 " { 2, 1 } };\n"
6820 "TEMP R0;\n"
6821 "TEMP R1;\n"
6822 "TEMP R2;\n"
6823 "TEMP R3;\n"
6824 "TEMP R4;\n"
6825 "MUL R0.xyz, fragment.position.y, c[1];\n"
6826 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6827 "ADD R0.xyz, R0, c[2];\n"
6828 "RCP R0.z, R0.z;\n"
6829 "MUL R0.xy, R0, R0.z;\n"
6830 "MUL R0.xy, R0, c[3];\n"
6831 "MOV R0.y, -R0;\n"
6832 "TEX R1.x, R0, texture[1], 2D;\n"
6833 "MUL R1, fragment.color.primary, R1.x;\n"
6834 "MUL R0.xy, fragment.position, c[4];\n"
6835 "TEX R0, R0, texture[0], 2D;\n"
6836 "ADD R2.w, -R0, c[5].y;\n"
6837 "ADD R3.xyz, R1.w, -R1;\n"
6838 "ADD R2.xyz, R0.w, -R0;\n"
6839 "MUL R2.xyz, R2, R3;\n"
6840 "MUL R2.xyz, R2, c[5].x;\n"
6841 "MAD R2.xyz, R1.w, R0.w, -R2;\n"
6842 "MUL R4.xyz, R1, R2.w;\n"
6843 "MUL R3.xyz, R1, R0;\n"
6844 "MAD R2.xyz, R1, R2.w, R2;\n"
6845 "ADD R2.w, -R1, c[5].y;\n"
6846 "MUL R1.xyz, R1, c[5].x;\n"
6847 "MAD R2.xyz, R0, R2.w, R2;\n"
6848 "MAD R3.xyz, R3, c[5].x, R4;\n"
6849 "MAD R0.xyz, R0, R2.w, R3;\n"
6850 "ADD R2.w, R1, R0;\n"
6851 "ADD R2.xyz, R2, -R0;\n"
6852 "SGE R1.xyz, R1, R1.w;\n"
6853 "MAD result.color.xyz, R1, R2, R0;\n"
6854 "MAD result.color.w, -R1, R0, R2;\n"
6855 "END\n"
6856 ;
6857
6858static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK =
6859 "!!ARBfp1.0\n"
6860 "PARAM c[7] = { program.local[0..4],\n"
6861 " { 1, 9.9999997e-06, 2, 8 },\n"
6862 " { 3 } };\n"
6863 "TEMP R0;\n"
6864 "TEMP R1;\n"
6865 "TEMP R2;\n"
6866 "TEMP R3;\n"
6867 "TEMP R4;\n"
6868 "TEMP R5;\n"
6869 "MUL R0.xyz, fragment.position.y, c[1];\n"
6870 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6871 "ADD R1.xyz, R0, c[2];\n"
6872 "RCP R0.z, R1.z;\n"
6873 "MUL R1.xy, R1, R0.z;\n"
6874 "MUL R1.xy, R1, c[3];\n"
6875 "MOV R1.y, -R1;\n"
6876 "MUL R0.xy, fragment.position, c[4];\n"
6877 "TEX R0, R0, texture[0], 2D;\n"
6878 "MAX R1.z, R0.w, c[5].y;\n"
6879 "RCP R2.w, R1.z;\n"
6880 "MUL R2.xyz, R0, R2.w;\n"
6881 "MUL R5.xyz, -R2, c[5].w;\n"
6882 "MAD R4.xyz, -R0, R2.w, c[5].x;\n"
6883 "TEX R1.x, R1, texture[1], 2D;\n"
6884 "MUL R1, fragment.color.primary, R1.x;\n"
6885 "MAD R3.xyz, R1, c[5].z, -R1.w;\n"
6886 "RSQ R2.x, R2.x;\n"
6887 "RSQ R2.z, R2.z;\n"
6888 "RSQ R2.y, R2.y;\n"
6889 "MUL R4.xyz, R4, R3;\n"
6890 "ADD R5.xyz, R5, c[6].x;\n"
6891 "MUL R5.xyz, R4, R5;\n"
6892 "ADD R4.xyz, R1.w, -R4;\n"
6893 "RCP R2.x, R2.x;\n"
6894 "RCP R2.z, R2.z;\n"
6895 "RCP R2.y, R2.y;\n"
6896 "MAD R2.xyz, R2, R0.w, -R0;\n"
6897 "MUL R3.xyz, R2, R3;\n"
6898 "ADD R2.xyz, R1.w, -R5;\n"
6899 "MAD R5.xyz, R0, R1.w, R3;\n"
6900 "MUL R2.xyz, R0, R2;\n"
6901 "MUL R3.xyz, R0, c[5].w;\n"
6902 "ADD R5.xyz, R5, -R2;\n"
6903 "SGE R3.xyz, R3, R0.w;\n"
6904 "MUL R3.xyz, R3, R5;\n"
6905 "ADD R2.xyz, R2, R3;\n"
6906 "MUL R3.xyz, R0, R4;\n"
6907 "MUL R4.xyz, R1, c[5].z;\n"
6908 "ADD R2.xyz, R2, -R3;\n"
6909 "SGE R4.xyz, R4, R1.w;\n"
6910 "MUL R2.xyz, R4, R2;\n"
6911 "ADD R2.xyz, R3, R2;\n"
6912 "ADD R2.w, -R0, c[5].x;\n"
6913 "MAD R1.xyz, R1, R2.w, R2;\n"
6914 "ADD R2.x, R1.w, R0.w;\n"
6915 "ADD R2.y, -R1.w, c[5].x;\n"
6916 "MAD result.color.xyz, R0, R2.y, R1;\n"
6917 "MAD result.color.w, -R1, R0, R2.x;\n"
6918 "END\n"
6919 ;
6920
6921static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK =
6922 "!!ARBfp1.0\n"
6923 "PARAM c[6] = { program.local[0..4],\n"
6924 " { 2 } };\n"
6925 "TEMP R0;\n"
6926 "TEMP R1;\n"
6927 "TEMP R2;\n"
6928 "TEMP R3;\n"
6929 "MUL R0.xyz, fragment.position.y, c[1];\n"
6930 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6931 "ADD R0.xyz, R0, c[2];\n"
6932 "RCP R0.z, R0.z;\n"
6933 "MUL R0.xy, R0, R0.z;\n"
6934 "MUL R0.xy, R0, c[3];\n"
6935 "MOV R0.y, -R0;\n"
6936 "TEX R1.x, R0, texture[1], 2D;\n"
6937 "MUL R0.xy, fragment.position, c[4];\n"
6938 "MUL R1, fragment.color.primary, R1.x;\n"
6939 "TEX R0, R0, texture[0], 2D;\n"
6940 "MUL R3.xyz, R0, R1.w;\n"
6941 "MUL R2.xyz, R1, R0.w;\n"
6942 "ADD R0.xyz, R1, R0;\n"
6943 "MIN R2.xyz, R2, R3;\n"
6944 "ADD R1.x, R1.w, R0.w;\n"
6945 "MAD result.color.xyz, -R2, c[5].x, R0;\n"
6946 "MAD result.color.w, -R1, R0, R1.x;\n"
6947 "END\n"
6948 ;
6949
6950static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK =
6951 "!!ARBfp1.0\n"
6952 "PARAM c[6] = { program.local[0..4],\n"
6953 " { 1, 2 } };\n"
6954 "TEMP R0;\n"
6955 "TEMP R1;\n"
6956 "TEMP R2;\n"
6957 "TEMP R3;\n"
6958 "MUL R0.xyz, fragment.position.y, c[1];\n"
6959 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6960 "ADD R0.xyz, R0, c[2];\n"
6961 "RCP R0.z, R0.z;\n"
6962 "MUL R0.xy, R0, R0.z;\n"
6963 "MUL R0.xy, R0, c[3];\n"
6964 "MOV R0.y, -R0;\n"
6965 "TEX R1.x, R0, texture[1], 2D;\n"
6966 "MUL R0.xy, fragment.position, c[4];\n"
6967 "TEX R0, R0, texture[0], 2D;\n"
6968 "MUL R1, fragment.color.primary, R1.x;\n"
6969 "MUL R2.xyz, R0, R1.w;\n"
6970 "MAD R3.xyz, R1, R0.w, R2;\n"
6971 "MUL R2.xyz, R1, R0;\n"
6972 "MAD R2.xyz, -R2, c[5].y, R3;\n"
6973 "ADD R2.w, -R0, c[5].x;\n"
6974 "MAD R1.xyz, R1, R2.w, R2;\n"
6975 "ADD R2.x, R1.w, R0.w;\n"
6976 "ADD R2.y, -R1.w, c[5].x;\n"
6977 "MAD result.color.xyz, R0, R2.y, R1;\n"
6978 "MAD result.color.w, -R1, R0, R2.x;\n"
6979 "END\n"
6980 ;
6981
6982static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK =
6983 "!!ARBfp1.0\n"
6984 "PARAM c[7] = { program.local[0..6] };\n"
6985 "TEMP R0;\n"
6986 "TEMP R1;\n"
6987 "MUL R0.xyz, fragment.position.y, c[1];\n"
6988 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
6989 "ADD R1.xyz, R0, c[2];\n"
6990 "RCP R0.z, R1.z;\n"
6991 "MUL R0.zw, R1.xyxy, R0.z;\n"
6992 "MUL R1.xy, R0.zwzw, c[3];\n"
6993 "MOV R1.y, -R1;\n"
6994 "ADD R0.xy, fragment.position, c[4];\n"
6995 "MUL R0.xy, R0, c[5];\n"
6996 "TEX R0, R0, texture[0], 2D;\n"
6997 "TEX R1.x, R1, texture[1], 2D;\n"
6998 "DP4 R0.x, R0, c[6];\n"
6999 "MUL R1, fragment.color.primary, R1.x;\n"
7000 "MUL result.color, R1, R0.x;\n"
7001 "END\n"
7002 ;
7003
7004static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK =
7005 "!!ARBfp1.0\n"
7006 "PARAM c[4] = { program.local[0..3] };\n"
7007 "TEMP R0;\n"
7008 "MUL R0.xyz, fragment.position.y, c[1];\n"
7009 "MAD R0.xyz, fragment.position.x, c[0], R0;\n"
7010 "ADD R0.xyz, R0, c[2];\n"
7011 "RCP R0.z, R0.z;\n"
7012 "MUL R0.xy, R0, R0.z;\n"
7013 "MUL R0.xy, R0, c[3];\n"
7014 "MOV R0.y, -R0;\n"
7015 "TEX R0.x, R0, texture[0], 2D;\n"
7016 "MUL result.color, fragment.color.primary, R0.x;\n"
7017 "END\n"
7018 ;
7019
7020static const char *mask_fragment_program_sources[num_fragment_masks] = {
7021 FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA,
7022 FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA,
7023};
7024
7025static const char *painter_fragment_program_sources[num_fragment_brushes][num_fragment_composition_modes] = {
7026 {
7027 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7028 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY,
7029 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN,
7030 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY,
7031 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN,
7032 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN,
7033 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE,
7034 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN,
7035 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT,
7036 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT,
7037 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE,
7038 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION,
7039 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7040 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK,
7041 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK,
7042 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK,
7043 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK,
7044 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK,
7045 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK,
7046 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK,
7047 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7048 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7049 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7050 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK,
7051 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK,
7052 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7053 },
7054 {
7055 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7056 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY,
7057 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN,
7058 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY,
7059 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN,
7060 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN,
7061 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE,
7062 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN,
7063 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT,
7064 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT,
7065 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE,
7066 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION,
7067 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7068 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK,
7069 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK,
7070 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK,
7071 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK,
7072 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK,
7073 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK,
7074 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK,
7075 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7076 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7077 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7078 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK,
7079 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK,
7080 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7081 },
7082 {
7083 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7084 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY,
7085 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN,
7086 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY,
7087 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN,
7088 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN,
7089 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE,
7090 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN,
7091 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT,
7092 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT,
7093 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE,
7094 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION,
7095 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7096 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK,
7097 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK,
7098 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK,
7099 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK,
7100 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK,
7101 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK,
7102 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK,
7103 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7104 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7105 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7106 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK,
7107 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK,
7108 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7109 },
7110 {
7111 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7112 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY,
7113 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN,
7114 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY,
7115 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN,
7116 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN,
7117 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE,
7118 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN,
7119 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT,
7120 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT,
7121 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE,
7122 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION,
7123 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7124 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK,
7125 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK,
7126 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK,
7127 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK,
7128 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK,
7129 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK,
7130 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK,
7131 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7132 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7133 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7134 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK,
7135 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK,
7136 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7137 },
7138 {
7139 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7140 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY,
7141 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN,
7142 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY,
7143 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN,
7144 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN,
7145 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE,
7146 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN,
7147 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT,
7148 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT,
7149 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE,
7150 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION,
7151 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7152 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK,
7153 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK,
7154 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK,
7155 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK,
7156 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK,
7157 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK,
7158 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK,
7159 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7160 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7161 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7162 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK,
7163 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK,
7164 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7165 },
7166 {
7167 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF,
7168 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY,
7169 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN,
7170 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY,
7171 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN,
7172 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN,
7173 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE,
7174 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN,
7175 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT,
7176 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT,
7177 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE,
7178 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION,
7179 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK,
7180 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK,
7181 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK,
7182 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK,
7183 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK,
7184 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK,
7185 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK,
7186 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK,
7187 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK,
7188 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK,
7189 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK,
7190 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK,
7191 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK,
7192 FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK,
7193 },
7194};
7195
7196static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = {
7197 {
7198 { -1, -1, -1, 1, -1, 6, 2, -1, 5, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7199 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7200 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7201 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7202 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7203 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7204 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7205 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7206 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7207 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7208 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7209 { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, },
7210 { -1, -1, -1, -1, -1, 3, -1, -1, 2, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7211 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7212 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7213 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7214 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7215 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7216 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7217 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7218 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7219 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7220 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7221 { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, },
7222 { -1, -1, -1, 1, -1, -1, 2, -1, -1, -1, 0, -1, -1, 0, -1, -1, -1, -1, -1, },
7223 { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
7224 },
7225 {
7226 { -1, -1, 4, 1, 5, 11, 2, -1, 10, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7227 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7228 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7229 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7230 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7231 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7232 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7233 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7234 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7235 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7236 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7237 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, },
7238 { -1, -1, 1, -1, 2, 8, -1, -1, 7, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7239 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7240 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7241 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7242 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7243 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7244 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7245 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7246 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7247 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7248 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7249 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, },
7250 { -1, -1, 1, 7, 2, -1, 8, -1, -1, -1, 0, -1, 1, 6, -1, 5, 3, 0, -1, },
7251 { -1, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 5, 3, 0, -1, },
7252 },
7253 {
7254 { -1, -1, 4, 1, 5, 12, 2, -1, 11, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7255 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7256 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7257 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7258 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7259 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7260 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7261 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7262 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7263 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7264 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7265 { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, },
7266 { -1, -1, 1, -1, 2, 9, -1, -1, 8, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7267 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7268 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7269 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7270 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7271 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7272 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7273 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7274 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7275 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7276 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7277 { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, },
7278 { -1, -1, 1, 8, 2, -1, 9, -1, -1, -1, 0, -1, 1, 7, -1, -1, -1, 0, 5, },
7279 { -1, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, 5, },
7280 },
7281 {
7282 { -1, 6, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7283 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7284 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7285 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7286 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7287 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7288 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7289 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7290 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7291 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7292 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7293 { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, },
7294 { -1, 3, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7295 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7296 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7297 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7298 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7299 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7300 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7301 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7302 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7303 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7304 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7305 { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, },
7306 { -1, 3, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, 1, 4, -1, -1, -1, 0, -1, },
7307 { -1, 3, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, -1, },
7308 },
7309 {
7310 { 2, -1, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7311 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7312 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7313 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7314 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7315 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7316 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7317 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7318 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7319 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7320 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7321 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7322 { 1, -1, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7323 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7324 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7325 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7326 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7327 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7328 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7329 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7330 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7331 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7332 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7333 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7334 { 1, -1, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, -1, 4, 3, -1, -1, 0, -1, },
7335 { 0, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, },
7336 },
7337 {
7338 { 2, -1, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7339 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7340 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7341 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7342 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7343 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7344 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7345 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7346 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7347 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7348 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7349 { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, },
7350 { 1, -1, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7351 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7352 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7353 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7354 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7355 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7356 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7357 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7358 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7359 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7360 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7361 { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, },
7362 { 1, -1, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, -1, 4, 3, -1, -1, 0, -1, },
7363 { 0, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, },
7364 },
7365};
7366
7367static int mask_variable_locations[num_fragment_masks][num_fragment_variables] = {
7368 { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
7369 { -1, -1, 2, -1, 3, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, },
7370};
7371
7372#endif
Note: See TracBrowser for help on using the repository browser.