blob: 7f4983e8b582d45dff86063347619a459d5d0bc0 [file] [log] [blame]
Jamie Madill96509e42014-05-29 14:33:27 -04001#include "ANGLETest.h"
2
Jamie Madill2bf8b372014-06-16 17:18:51 -04003class GLSLTest : public ANGLETest
Jamie Madill96509e42014-05-29 14:33:27 -04004{
5protected:
Jamie Madill2bf8b372014-06-16 17:18:51 -04006 GLSLTest()
Jamie Madill96509e42014-05-29 14:33:27 -04007 {
8 setWindowWidth(128);
9 setWindowHeight(128);
10 setConfigRedBits(8);
11 setConfigGreenBits(8);
12 setConfigBlueBits(8);
13 setConfigAlphaBits(8);
14 }
Jamie Madillbfa91f42014-06-05 15:45:18 -040015
16 virtual void SetUp()
17 {
18 ANGLETest::SetUp();
19
Jamie Madill2bf8b372014-06-16 17:18:51 -040020 mSimpleVSSource = SHADER_SOURCE
Jamie Madillbfa91f42014-06-05 15:45:18 -040021 (
22 attribute vec4 inputAttribute;
23 void main()
24 {
25 gl_Position = inputAttribute;
26 }
27 );
28 }
29
Jamie Madill2bf8b372014-06-16 17:18:51 -040030 std::string mSimpleVSSource;
Jamie Madill96509e42014-05-29 14:33:27 -040031};
32
Jamie Madill2bf8b372014-06-16 17:18:51 -040033TEST_F(GLSLTest, nameless_scoped_structs)
Jamie Madill96509e42014-05-29 14:33:27 -040034{
Jamie Madillbfa91f42014-06-05 15:45:18 -040035 const std::string fragmentShaderSource = SHADER_SOURCE
Jamie Madill96509e42014-05-29 14:33:27 -040036 (
Jamie Madillbfa91f42014-06-05 15:45:18 -040037 precision mediump float;
38
Jamie Madill96509e42014-05-29 14:33:27 -040039 void main()
40 {
Jamie Madillbfa91f42014-06-05 15:45:18 -040041 struct
42 {
43 float q;
44 } b;
45
46 gl_FragColor = vec4(1, 0, 0, 1);
47 gl_FragColor.a += b.q;
Jamie Madill96509e42014-05-29 14:33:27 -040048 }
49 );
50
Jamie Madill2bf8b372014-06-16 17:18:51 -040051 GLuint program = compileProgram(mSimpleVSSource, fragmentShaderSource);
Jamie Madillbfa91f42014-06-05 15:45:18 -040052 EXPECT_NE(0u, program);
53}
Jamie Madill2bf8b372014-06-16 17:18:51 -040054TEST_F(GLSLTest, scoped_structs_order_bug)
Jamie Madillbfa91f42014-06-05 15:45:18 -040055{
56 const std::string fragmentShaderSource = SHADER_SOURCE
57 (
58 precision mediump float;
59
60 struct T
61 {
62 float f;
63 };
64
65 void main()
66 {
67 T a;
68
69 struct T
70 {
71 float q;
72 };
73
74 T b;
75
76 gl_FragColor = vec4(1, 0, 0, 1);
77 gl_FragColor.a += a.f;
78 gl_FragColor.a += b.q;
79 }
80 );
81
Jamie Madill2bf8b372014-06-16 17:18:51 -040082 GLuint program = compileProgram(mSimpleVSSource, fragmentShaderSource);
Jamie Madillbfa91f42014-06-05 15:45:18 -040083 EXPECT_NE(0u, program);
84}
85
Jamie Madill2bf8b372014-06-16 17:18:51 -040086TEST_F(GLSLTest, scoped_structs_bug)
Jamie Madillbfa91f42014-06-05 15:45:18 -040087{
Jamie Madill96509e42014-05-29 14:33:27 -040088 const std::string fragmentShaderSource = SHADER_SOURCE
89 (
90 precision mediump float;
91
92 struct T_0
93 {
94 float f;
95 };
96
97 void main()
98 {
99 gl_FragColor = vec4(1, 0, 0, 1);
100
101 struct T
102 {
103 vec2 v;
104 };
105
106 T_0 a;
107 T b;
108
109 gl_FragColor.a += a.f;
110 gl_FragColor.a += b.v.x;
111 }
112 );
113
Jamie Madill2bf8b372014-06-16 17:18:51 -0400114 GLuint program = compileProgram(mSimpleVSSource, fragmentShaderSource);
115 EXPECT_NE(0u, program);
116}
117
118TEST_F(GLSLTest, dx_position_bug)
119{
120 const std::string &vertexShaderSource = SHADER_SOURCE
121 (
122 attribute vec4 inputAttribute;
123 varying float dx_Position;
124 void main()
125 {
126 gl_Position = vec4(inputAttribute);
127 dx_Position = 0.0;
128 }
129 );
130
131 const std::string &fragmentShaderSource = SHADER_SOURCE
132 (
133 precision mediump float;
134
135 varying float dx_Position;
136
137 void main()
138 {
139 gl_FragColor = vec4(dx_Position, 0, 0, 1);
140 }
141 );
142
143 GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
Jamie Madill96509e42014-05-29 14:33:27 -0400144 EXPECT_NE(0u, program);
145}