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 (1 + 2 + 3 > 5) { sk_FragColor = vec4(0.75); } else { discard; }" | 46 "if (sqrt(2) > 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 ((1 + 2) + 3 > 5) {\n" | 58 " if (sqrt(2.0) > 5.0) {\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 >= 5 && y <= z && 12 != 11;" | 107 "bool b = (x > 4) == x < 2 || 2 >= sqrt(2) && y <= z;" |
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 >= 5 && y <= float(z)) && 12 !=
11;\n" | 129 " bool b = x > 4.0 == x < 2.0 || 2.0 >= sqrt(2.0) && y <= float(z);\
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 |