#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); }