blob: a5fc41be690095a683079871825eb41e58cae9d6 [file] [log] [blame]
Jamie Madill7a29e4a2014-05-02 10:41:48 -04001#include "ANGLETest.h"
2
Austin Kinross18b931d2014-09-29 12:58:31 -07003// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
4typedef ::testing::Types<TFT<Gles::Two, Rend::D3D11>, TFT<Gles::Two, Rend::D3D9>> TestFixtureTypes;
5TYPED_TEST_CASE(ProgramBinaryTest, TestFixtureTypes);
6
7template<typename T>
Jamie Madill7a29e4a2014-05-02 10:41:48 -04008class ProgramBinaryTest : public ANGLETest
9{
10protected:
Austin Kinross18b931d2014-09-29 12:58:31 -070011 ProgramBinaryTest() : ANGLETest(T::GetGlesMajorVersion(), T::GetRequestedRenderer())
Jamie Madill7a29e4a2014-05-02 10:41:48 -040012 {
13 setWindowWidth(128);
14 setWindowHeight(128);
15 setConfigRedBits(8);
16 setConfigGreenBits(8);
17 setConfigBlueBits(8);
18 setConfigAlphaBits(8);
19 }
20
21 virtual void SetUp()
22 {
23 ANGLETest::SetUp();
24
25 const std::string vertexShaderSource = SHADER_SOURCE
26 (
27 attribute vec4 inputAttribute;
28 void main()
29 {
30 gl_Position = inputAttribute;
31 }
32 );
33
34 const std::string fragmentShaderSource = SHADER_SOURCE
35 (
36 void main()
37 {
38 gl_FragColor = vec4(1,0,0,1);
39 }
40 );
41
Jamie Madill5599c8f2014-08-26 13:16:39 -040042 mProgram = CompileProgram(vertexShaderSource, fragmentShaderSource);
Jamie Madill7a29e4a2014-05-02 10:41:48 -040043 if (mProgram == 0)
44 {
45 FAIL() << "shader compilation failed.";
46 }
47
48 glGenBuffers(1, &mBuffer);
49 glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
50 glBufferData(GL_ARRAY_BUFFER, 128, NULL, GL_STATIC_DRAW);
51 glBindBuffer(GL_ARRAY_BUFFER, 0);
52
53 ASSERT_GL_NO_ERROR();
54 }
55
56 virtual void TearDown()
57 {
58 glDeleteProgram(mProgram);
59 glDeleteBuffers(1, &mBuffer);
60
61 ANGLETest::TearDown();
62 }
63
64 GLuint mProgram;
65 GLuint mBuffer;
66};
67
68// This tests the assumption that float attribs of different size
69// should not internally cause a vertex shader recompile (for conversion).
Austin Kinross18b931d2014-09-29 12:58:31 -070070TYPED_TEST(ProgramBinaryTest, FloatDynamicShaderSize)
Jamie Madill7a29e4a2014-05-02 10:41:48 -040071{
72 glUseProgram(mProgram);
73 glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
74
75 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 8, NULL);
76 glEnableVertexAttribArray(0);
77 glDrawArrays(GL_POINTS, 0, 1);
78
79 GLint programLength;
80 glGetProgramiv(mProgram, GL_PROGRAM_BINARY_LENGTH_OES, &programLength);
81
82 EXPECT_GL_NO_ERROR();
83
84 for (GLsizei size = 1; size <= 3; size++)
85 {
86 glVertexAttribPointer(0, size, GL_FLOAT, GL_FALSE, 8, NULL);
87 glEnableVertexAttribArray(0);
88 glDrawArrays(GL_POINTS, 0, 1);
89
90 GLint newProgramLength;
91 glGetProgramiv(mProgram, GL_PROGRAM_BINARY_LENGTH_OES, &newProgramLength);
92 EXPECT_GL_NO_ERROR();
93 EXPECT_EQ(programLength, newProgramLength);
94 }
95}