3 class ProgramBinaryTest : public ANGLETest
11 setConfigGreenBits(8);
13 setConfigAlphaBits(8);
20 const std::string vertexShaderSource = SHADER_SOURCE
22 attribute vec4 inputAttribute;
25 gl_Position = inputAttribute;
29 const std::string fragmentShaderSource = SHADER_SOURCE
33 gl_FragColor = vec4(1,0,0,1);
37 mProgram = compileProgram(vertexShaderSource, fragmentShaderSource);
40 FAIL() << "shader compilation failed.";
43 glGenBuffers(1, &mBuffer);
44 glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
45 glBufferData(GL_ARRAY_BUFFER, 128, NULL, GL_STATIC_DRAW);
46 glBindBuffer(GL_ARRAY_BUFFER, 0);
51 virtual void TearDown()
53 glDeleteProgram(mProgram);
54 glDeleteBuffers(1, &mBuffer);
56 ANGLETest::TearDown();
63 // This tests the assumption that float attribs of different size
64 // should not internally cause a vertex shader recompile (for conversion).
65 TEST_F(ProgramBinaryTest, float_dynamic_shader_size)
67 glUseProgram(mProgram);
68 glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
70 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 8, NULL);
71 glEnableVertexAttribArray(0);
72 glDrawArrays(GL_POINTS, 0, 1);
75 glGetProgramiv(mProgram, GL_PROGRAM_BINARY_LENGTH_OES, &programLength);
79 for (GLsizei size = 1; size <= 3; size++)
81 glVertexAttribPointer(0, size, GL_FLOAT, GL_FALSE, 8, NULL);
82 glEnableVertexAttribArray(0);
83 glDrawArrays(GL_POINTS, 0, 1);
85 GLint newProgramLength;
86 glGetProgramiv(mProgram, GL_PROGRAM_BINARY_LENGTH_OES, &newProgramLength);
88 EXPECT_EQ(programLength, newProgramLength);