Home | History | Annotate | Download | only in angle_tests
      1 #include "ANGLETest.h"
      2 
      3 class GLSLStructTest : public ANGLETest
      4 {
      5 protected:
      6     GLSLStructTest()
      7     {
      8         setWindowWidth(128);
      9         setWindowHeight(128);
     10         setConfigRedBits(8);
     11         setConfigGreenBits(8);
     12         setConfigBlueBits(8);
     13         setConfigAlphaBits(8);
     14     }
     15 
     16     virtual void SetUp()
     17     {
     18         ANGLETest::SetUp();
     19 
     20         mVertexShaderSource = SHADER_SOURCE
     21         (
     22             attribute vec4 inputAttribute;
     23             void main()
     24             {
     25                 gl_Position = inputAttribute;
     26             }
     27         );
     28     }
     29 
     30     std::string mVertexShaderSource;
     31 };
     32 
     33 TEST_F(GLSLStructTest, nameless_scoped_structs)
     34 {
     35     const std::string fragmentShaderSource = SHADER_SOURCE
     36     (
     37         precision mediump float;
     38 
     39         void main()
     40         {
     41             struct
     42             {
     43                 float q;
     44             } b;
     45 
     46             gl_FragColor = vec4(1, 0, 0, 1);
     47             gl_FragColor.a += b.q;
     48         }
     49     );
     50 
     51     GLuint program = compileProgram(mVertexShaderSource, fragmentShaderSource);
     52     EXPECT_NE(0u, program);
     53 }
     54 TEST_F(GLSLStructTest, scoped_structs_order_bug)
     55 {
     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 
     82     GLuint program = compileProgram(mVertexShaderSource, fragmentShaderSource);
     83     EXPECT_NE(0u, program);
     84 }
     85 
     86 TEST_F(GLSLStructTest, scoped_structs_bug)
     87 {
     88     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 
    114     GLuint program = compileProgram(mVertexShaderSource, fragmentShaderSource);
    115     EXPECT_NE(0u, program);
    116 }
    117