OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkSLCompiler.h" | 8 #include "SkSLCompiler.h" |
9 | 9 |
10 #include "Test.h" | 10 #include "Test.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 default_caps(), | 36 default_caps(), |
37 "#version 400\n" | 37 "#version 400\n" |
38 "void main() {\n" | 38 "void main() {\n" |
39 " gl_FragColor = vec4(0.75);\n" | 39 " gl_FragColor = vec4(0.75);\n" |
40 "}\n"); | 40 "}\n"); |
41 } | 41 } |
42 | 42 |
43 DEF_TEST(SkSLControl, r) { | 43 DEF_TEST(SkSLControl, r) { |
44 test(r, | 44 test(r, |
45 "void main() {" | 45 "void main() {" |
46 "if (sqrt(2) > 5) { sk_FragColor = vec4(0.75); } else { discard; }" | 46 "if (1 + 2 + 3 > 5) { sk_FragColor = vec4(0.75); } else { discard; }" |
47 "int i = 0;" | 47 "int i = 0;" |
48 "while (i < 10) sk_FragColor *= 0.5;" | 48 "while (i < 10) sk_FragColor *= 0.5;" |
49 "do { sk_FragColor += 0.01; } while (sk_FragColor.x < 0.7);" | 49 "do { sk_FragColor += 0.01; } while (sk_FragColor.x < 0.7);" |
50 "for (int i = 0; i < 10; i++) {" | 50 "for (int i = 0; i < 10; i++) {" |
51 "if (i % 0 == 1) break; else continue;" | 51 "if (i % 0 == 1) break; else continue;" |
52 "}" | 52 "}" |
53 "return;" | 53 "return;" |
54 "}", | 54 "}", |
55 default_caps(), | 55 default_caps(), |
56 "#version 400\n" | 56 "#version 400\n" |
57 "void main() {\n" | 57 "void main() {\n" |
58 " if (sqrt(2.0) > 5.0) {\n" | 58 " if ((1 + 2) + 3 > 5) {\n" |
59 " gl_FragColor = vec4(0.75);\n" | 59 " gl_FragColor = vec4(0.75);\n" |
60 " } else {\n" | 60 " } else {\n" |
61 " discard;\n" | 61 " discard;\n" |
62 " }\n" | 62 " }\n" |
63 " int i = 0;\n" | 63 " int i = 0;\n" |
64 " while (i < 10) gl_FragColor *= 0.5;\n" | 64 " while (i < 10) gl_FragColor *= 0.5;\n" |
65 " do {\n" | 65 " do {\n" |
66 " gl_FragColor += 0.01;\n" | 66 " gl_FragColor += 0.01;\n" |
67 " } while (gl_FragColor.x < 0.7);\n" | 67 " } while (gl_FragColor.x < 0.7);\n" |
68 " for (int i = 0;i < 10; i++) {\n" | 68 " for (int i = 0;i < 10; i++) {\n" |
(...skipping 28 matching lines...) Expand all Loading... |
97 } | 97 } |
98 | 98 |
99 DEF_TEST(SkSLOperators, r) { | 99 DEF_TEST(SkSLOperators, r) { |
100 test(r, | 100 test(r, |
101 "void main() {" | 101 "void main() {" |
102 "float x = 1, y = 2;" | 102 "float x = 1, y = 2;" |
103 "int z = 3;" | 103 "int z = 3;" |
104 "x = x + y * z * x * (y - z);" | 104 "x = x + y * z * x * (y - z);" |
105 "y = x / y / z;" | 105 "y = x / y / z;" |
106 "z = (z / 2 % 3 << 4) >> 2 << 1;" | 106 "z = (z / 2 % 3 << 4) >> 2 << 1;" |
107 "bool b = (x > 4) == x < 2 || 2 >= sqrt(2) && y <= z;" | 107 "bool b = (x > 4) == x < 2 || 2 >= 5 && y <= z && 12 != 11;" |
108 "x += 12;" | 108 "x += 12;" |
109 "x -= 12;" | 109 "x -= 12;" |
110 "x *= y /= z = 10;" | 110 "x *= y /= z = 10;" |
111 "b ||= false;" | 111 "b ||= false;" |
112 "b &&= true;" | 112 "b &&= true;" |
113 "b ^^= false;" | 113 "b ^^= false;" |
114 "z |= 0;" | 114 "z |= 0;" |
115 "z &= -1;" | 115 "z &= -1;" |
116 "z ^= 0;" | 116 "z ^= 0;" |
117 "z >>= 2;" | 117 "z >>= 2;" |
118 "z <<= 4;" | 118 "z <<= 4;" |
119 "z %= 5;" | 119 "z %= 5;" |
120 "}", | 120 "}", |
121 default_caps(), | 121 default_caps(), |
122 "#version 400\n" | 122 "#version 400\n" |
123 "void main() {\n" | 123 "void main() {\n" |
124 " float x = 1.0, y = 2.0;\n" | 124 " float x = 1.0, y = 2.0;\n" |
125 " int z = 3;\n" | 125 " int z = 3;\n" |
126 " x = x + ((y * float(z)) * x) * (y - float(z));\n" | 126 " x = x + ((y * float(z)) * x) * (y - float(z));\n" |
127 " y = (x / y) / float(z);\n" | 127 " y = (x / y) / float(z);\n" |
128 " z = (((z / 2) % 3 << 4) >> 2) << 1;\n" | 128 " z = (((z / 2) % 3 << 4) >> 2) << 1;\n" |
129 " bool b = x > 4.0 == x < 2.0 || 2.0 >= sqrt(2.0) && y <= float(z);\
n" | 129 " bool b = x > 4.0 == x < 2.0 || (2 >= 5 && y <= float(z)) && 12 !=
11;\n" |
130 " x += 12.0;\n" | 130 " x += 12.0;\n" |
131 " x -= 12.0;\n" | 131 " x -= 12.0;\n" |
132 " x *= (y /= float(z = 10));\n" | 132 " x *= (y /= float(z = 10));\n" |
133 " b ||= false;\n" | 133 " b ||= false;\n" |
134 " b &&= true;\n" | 134 " b &&= true;\n" |
135 " b ^^= false;\n" | 135 " b ^^= false;\n" |
136 " z |= 0;\n" | 136 " z |= 0;\n" |
137 " z &= -1;\n" | 137 " z &= -1;\n" |
138 " z ^= 0;\n" | 138 " z ^= 0;\n" |
139 " z >>= 2;\n" | 139 " z >>= 2;\n" |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 "}\n"); | 423 "}\n"); |
424 test(r, | 424 test(r, |
425 "void main() { float x = dFdx(1); }", | 425 "void main() { float x = dFdx(1); }", |
426 caps, | 426 caps, |
427 "#version 400\n" | 427 "#version 400\n" |
428 "#extension GL_OES_standard_derivatives : require\n" | 428 "#extension GL_OES_standard_derivatives : require\n" |
429 "void main() {\n" | 429 "void main() {\n" |
430 " float x = dFdx(1.0);\n" | 430 " float x = dFdx(1.0);\n" |
431 "}\n"); | 431 "}\n"); |
432 } | 432 } |
433 | |
434 DEF_TEST(SkSLConstantFolding, r) { | |
435 test(r, | |
436 "void main() {" | |
437 "float f_add = 32 + 2;" | |
438 "float f_sub = 32 - 2;" | |
439 "float f_mul = 32 * 2;" | |
440 "float f_div = 32 / 2;" | |
441 "float mixed = (12 > 2.0) ? (10 * 2 / 5 + 18 - 3) : 0;" | |
442 "int i_add = 32 + 2;" | |
443 "int i_sub = 32 - 2;" | |
444 "int i_mul = 32 * 2;" | |
445 "int i_div = 32 / 2;" | |
446 "int i_or = 12 | 6;" | |
447 "int i_and = 254 & 7;" | |
448 "int i_xor = 2 ^ 7;" | |
449 "int i_shl = 1 << 4;" | |
450 "int i_shr = 128 >> 2;" | |
451 "bool gt_it = 6 > 5;" | |
452 "bool gt_if = 6 > 6;" | |
453 "bool gt_ft = 6.0 > 5.0;" | |
454 "bool gt_ff = 6.0 > 6.0;" | |
455 "bool gte_it = 6 >= 6;" | |
456 "bool gte_if = 6 >= 7;" | |
457 "bool gte_ft = 6.0 >= 6.0;" | |
458 "bool gte_ff = 6.0 >= 7.0;" | |
459 "bool lte_it = 6 <= 6;" | |
460 "bool lte_if = 6 <= 5;" | |
461 "bool lte_ft = 6.0 <= 6.0;" | |
462 "bool lte_ff = 6.0 <= 5.0;" | |
463 "bool or_t = 1 == 1 || 2 == 8;" | |
464 "bool or_f = 1 > 1 || 2 == 8;" | |
465 "bool and_t = 1 == 1 && 2 <= 8;" | |
466 "bool and_f = 1 == 2 && 2 == 8;" | |
467 "bool xor_t = 1 == 1 ^^ 1 != 1;" | |
468 "bool xor_f = 1 == 1 ^^ 1 == 1;" | |
469 "int ternary = 10 > 5 ? 10 : 5;" | |
470 "}", | |
471 default_caps(), | |
472 "#version 400\n" | |
473 "void main() {\n" | |
474 " float f_add = 34.0;\n" | |
475 " float f_sub = 30.0;\n" | |
476 " float f_mul = 64.0;\n" | |
477 " float f_div = 16.0;\n" | |
478 " float mixed = 19.0;\n" | |
479 " int i_add = 34;\n" | |
480 " int i_sub = 30;\n" | |
481 " int i_mul = 64;\n" | |
482 " int i_div = 16;\n" | |
483 " int i_or = 14;\n" | |
484 " int i_and = 6;\n" | |
485 " int i_xor = 5;\n" | |
486 " int i_shl = 16;\n" | |
487 " int i_shr = 32;\n" | |
488 " bool gt_it = true;\n" | |
489 " bool gt_if = false;\n" | |
490 " bool gt_ft = true;\n" | |
491 " bool gt_ff = false;\n" | |
492 " bool gte_it = true;\n" | |
493 " bool gte_if = false;\n" | |
494 " bool gte_ft = true;\n" | |
495 " bool gte_ff = false;\n" | |
496 " bool lte_it = true;\n" | |
497 " bool lte_if = false;\n" | |
498 " bool lte_ft = true;\n" | |
499 " bool lte_ff = false;\n" | |
500 " bool or_t = true;\n" | |
501 " bool or_f = false;\n" | |
502 " bool and_t = true;\n" | |
503 " bool and_f = false;\n" | |
504 " bool xor_t = true;\n" | |
505 " bool xor_f = false;\n" | |
506 " int ternary = 10;\n" | |
507 "}\n"); | |
508 } | |
509 | |
510 DEF_TEST(SkSLStaticIf, r) { | |
511 test(r, | |
512 "void main() {" | |
513 "int x;" | |
514 "if (true) x = 1;" | |
515 "if (2 > 1) x = 2; else x = 3;" | |
516 "if (1 > 2) x = 4; else x = 5;" | |
517 "if (false) x = 6;" | |
518 "}", | |
519 default_caps(), | |
520 "#version 400\n" | |
521 "void main() {\n" | |
522 " int x;\n" | |
523 " x = 1;\n" | |
524 " x = 2;\n" | |
525 " x = 5;\n" | |
526 " {\n" | |
527 " }\n" | |
528 "}\n"); | |
529 } | |
OLD | NEW |