| #include "ANGLETest.h" |
| |
| class GLSLStructTest : public ANGLETest |
| { |
| protected: |
| GLSLStructTest() |
| { |
| setWindowWidth(128); |
| setWindowHeight(128); |
| setConfigRedBits(8); |
| setConfigGreenBits(8); |
| setConfigBlueBits(8); |
| setConfigAlphaBits(8); |
| } |
| |
| virtual void SetUp() |
| { |
| ANGLETest::SetUp(); |
| |
| mVertexShaderSource = SHADER_SOURCE |
| ( |
| attribute vec4 inputAttribute; |
| void main() |
| { |
| gl_Position = inputAttribute; |
| } |
| ); |
| } |
| |
| std::string mVertexShaderSource; |
| }; |
| |
| TEST_F(GLSLStructTest, nameless_scoped_structs) |
| { |
| const std::string fragmentShaderSource = SHADER_SOURCE |
| ( |
| precision mediump float; |
| |
| void main() |
| { |
| struct |
| { |
| float q; |
| } b; |
| |
| gl_FragColor = vec4(1, 0, 0, 1); |
| gl_FragColor.a += b.q; |
| } |
| ); |
| |
| GLuint program = compileProgram(mVertexShaderSource, fragmentShaderSource); |
| EXPECT_NE(0u, program); |
| } |
| TEST_F(GLSLStructTest, scoped_structs_order_bug) |
| { |
| const std::string fragmentShaderSource = SHADER_SOURCE |
| ( |
| precision mediump float; |
| |
| struct T |
| { |
| float f; |
| }; |
| |
| void main() |
| { |
| T a; |
| |
| struct T |
| { |
| float q; |
| }; |
| |
| T b; |
| |
| gl_FragColor = vec4(1, 0, 0, 1); |
| gl_FragColor.a += a.f; |
| gl_FragColor.a += b.q; |
| } |
| ); |
| |
| GLuint program = compileProgram(mVertexShaderSource, fragmentShaderSource); |
| EXPECT_NE(0u, program); |
| } |
| |
| TEST_F(GLSLStructTest, scoped_structs_bug) |
| { |
| const std::string fragmentShaderSource = SHADER_SOURCE |
| ( |
| precision mediump float; |
| |
| struct T_0 |
| { |
| float f; |
| }; |
| |
| void main() |
| { |
| gl_FragColor = vec4(1, 0, 0, 1); |
| |
| struct T |
| { |
| vec2 v; |
| }; |
| |
| T_0 a; |
| T b; |
| |
| gl_FragColor.a += a.f; |
| gl_FragColor.a += b.v.x; |
| } |
| ); |
| |
| GLuint program = compileProgram(mVertexShaderSource, fragmentShaderSource); |
| EXPECT_NE(0u, program); |
| } |