blob: df144c3ad7ce145a272c51ac0338cf7cb5688041 [file] [log] [blame]
Jamie Madill7a29e4a2014-05-02 10:41:48 -04001#include "ANGLETest.h"
2
3class ProgramBinaryTest : public ANGLETest
4{
5protected:
6 ProgramBinaryTest()
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 const std::string vertexShaderSource = SHADER_SOURCE
21 (
22 attribute vec4 inputAttribute;
23 void main()
24 {
25 gl_Position = inputAttribute;
26 }
27 );
28
29 const std::string fragmentShaderSource = SHADER_SOURCE
30 (
31 void main()
32 {
33 gl_FragColor = vec4(1,0,0,1);
34 }
35 );
36
Jamie Madill5599c8f2014-08-26 13:16:39 -040037 mProgram = CompileProgram(vertexShaderSource, fragmentShaderSource);
Jamie Madill7a29e4a2014-05-02 10:41:48 -040038 if (mProgram == 0)
39 {
40 FAIL() << "shader compilation failed.";
41 }
42
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);
47
48 ASSERT_GL_NO_ERROR();
49 }
50
51 virtual void TearDown()
52 {
53 glDeleteProgram(mProgram);
54 glDeleteBuffers(1, &mBuffer);
55
56 ANGLETest::TearDown();
57 }
58
59 GLuint mProgram;
60 GLuint mBuffer;
61};
62
63// This tests the assumption that float attribs of different size
64// should not internally cause a vertex shader recompile (for conversion).
Jamie Madillb759a742014-07-17 10:40:49 -040065TEST_F(ProgramBinaryTest, FloatDynamicShaderSize)
Jamie Madill7a29e4a2014-05-02 10:41:48 -040066{
67 glUseProgram(mProgram);
68 glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
69
70 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 8, NULL);
71 glEnableVertexAttribArray(0);
72 glDrawArrays(GL_POINTS, 0, 1);
73
74 GLint programLength;
75 glGetProgramiv(mProgram, GL_PROGRAM_BINARY_LENGTH_OES, &programLength);
76
77 EXPECT_GL_NO_ERROR();
78
79 for (GLsizei size = 1; size <= 3; size++)
80 {
81 glVertexAttribPointer(0, size, GL_FLOAT, GL_FALSE, 8, NULL);
82 glEnableVertexAttribArray(0);
83 glDrawArrays(GL_POINTS, 0, 1);
84
85 GLint newProgramLength;
86 glGetProgramiv(mProgram, GL_PROGRAM_BINARY_LENGTH_OES, &newProgramLength);
87 EXPECT_GL_NO_ERROR();
88 EXPECT_EQ(programLength, newProgramLength);
89 }
90}