blob: 4a108858c9051cedc22f79838e45bc1eb9244c12 [file] [log] [blame]
Geoff Langf1e85922015-02-23 14:40:04 -05001#include "ANGLETest.h"
2
3#include <vector>
4
5// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
6ANGLE_TYPED_TEST_CASE(SimpleOperationTest, ES2_D3D9, ES2_D3D11, ES3_D3D11, ES2_OPENGL, ES3_OPENGL);
7
8template<typename T>
9class SimpleOperationTest : public ANGLETest
10{
11 protected:
12 SimpleOperationTest() : ANGLETest(T::GetGlesMajorVersion(), T::GetPlatform())
13 {
14 setWindowWidth(128);
15 setWindowHeight(128);
16 setConfigRedBits(8);
17 setConfigGreenBits(8);
18 setConfigBlueBits(8);
19 setConfigAlphaBits(8);
20 }
21};
22
23TYPED_TEST(SimpleOperationTest, CompileVertexShader)
24{
25 const std::string source = SHADER_SOURCE
26 (
27 attribute vec4 a_input;
28 void main()
29 {
30 gl_Position = a_input;
31 }
32 );
33
34 GLuint shader = CompileShader(GL_VERTEX_SHADER, source);
35 EXPECT_NE(shader, 0u);
36 glDeleteShader(shader);
37
38 EXPECT_GL_NO_ERROR();
39}
40
41TYPED_TEST(SimpleOperationTest, CompileFragmentShader)
42{
43 const std::string source = SHADER_SOURCE
44 (
45 precision mediump float;
46 varying vec4 v_input;
47 void main()
48 {
49 gl_FragColor = v_input;
50 }
51 );
52
53 GLuint shader = CompileShader(GL_FRAGMENT_SHADER, source);
54 EXPECT_NE(shader, 0u);
55 glDeleteShader(shader);
56
57 EXPECT_GL_NO_ERROR();
58}
Geoff Langb1f435e2015-02-20 10:01:01 -050059
60TYPED_TEST(SimpleOperationTest, LinkProgram)
61{
62 const std::string vsSource = SHADER_SOURCE
63 (
64 void main()
65 {
66 gl_Position = vec4(1.0, 1.0, 1.0, 1.0);
67 }
68 );
69
70 const std::string fsSource = SHADER_SOURCE
71 (
72 void main()
73 {
74 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
75 }
76 );
77
78 GLuint program = CompileProgram(vsSource, fsSource);
79 EXPECT_NE(program, 0u);
80 glDeleteProgram(program);
81
82 EXPECT_GL_NO_ERROR();
83}
84
85TYPED_TEST(SimpleOperationTest, LinkProgramWithUniforms)
86{
87 const std::string vsSource = SHADER_SOURCE
88 (
89 void main()
90 {
91 gl_Position = vec4(1.0, 1.0, 1.0, 1.0);
92 }
93 );
94
95 const std::string fsSource = SHADER_SOURCE
96 (
97 precision mediump float;
98 uniform vec4 u_input;
99 void main()
100 {
101 gl_FragColor = u_input;
102 }
103 );
104
105 GLuint program = CompileProgram(vsSource, fsSource);
106 EXPECT_NE(program, 0u);
107
108 GLint uniformLoc = glGetUniformLocation(program, "u_input");
109 EXPECT_NE(-1, uniformLoc);
110
111 glDeleteProgram(program);
112
113 EXPECT_GL_NO_ERROR();
114}
115
116TYPED_TEST(SimpleOperationTest, LinkProgramWithAttributes)
117{
118 const std::string vsSource = SHADER_SOURCE
119 (
120 attribute vec4 a_input;
121 void main()
122 {
123 gl_Position = a_input;
124 }
125 );
126
127 const std::string fsSource = SHADER_SOURCE
128 (
129 void main()
130 {
131 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
132 }
133 );
134
135 GLuint program = CompileProgram(vsSource, fsSource);
136 EXPECT_NE(program, 0u);
137
138 GLint attribLoc = glGetAttribLocation(program, "a_input");
139 EXPECT_NE(-1, attribLoc);
140
141 glDeleteProgram(program);
142
143 EXPECT_GL_NO_ERROR();
144}
Geoff Lang36c79012015-02-24 11:47:20 -0500145
146TYPED_TEST(SimpleOperationTest, BufferDataWithData)
147{
148 GLuint buffer;
149 glGenBuffers(1, &buffer);
150 glBindBuffer(GL_ARRAY_BUFFER, buffer);
151
152 std::vector<uint8_t> data(1024);
153 glBufferData(GL_ARRAY_BUFFER, data.size(), &data[0], GL_STATIC_DRAW);
154
155 glDeleteBuffers(1, &buffer);
156
157 EXPECT_GL_NO_ERROR();
158}
159
160TYPED_TEST(SimpleOperationTest, BufferDataWithNoData)
161{
162 GLuint buffer;
163 glGenBuffers(1, &buffer);
164 glBindBuffer(GL_ARRAY_BUFFER, buffer);
165 glBufferData(GL_ARRAY_BUFFER, 1024, nullptr, GL_STATIC_DRAW);
166 glDeleteBuffers(1, &buffer);
167
168 EXPECT_GL_NO_ERROR();
169}
170
171TYPED_TEST(SimpleOperationTest, BufferSubData)
172{
173 GLuint buffer;
174 glGenBuffers(1, &buffer);
175 glBindBuffer(GL_ARRAY_BUFFER, buffer);
176
177 const size_t bufferSize = 1024;
178 glBufferData(GL_ARRAY_BUFFER, bufferSize, nullptr, GL_STATIC_DRAW);
179
180 const size_t subDataCount = 16;
181 std::vector<uint8_t> data(bufferSize / subDataCount);
182 for (size_t i = 0; i < subDataCount; i++)
183 {
184 glBufferSubData(GL_ARRAY_BUFFER, data.size() * i, data.size(), &data[0]);
185 }
186
187 glDeleteBuffers(1, &buffer);
188
189 EXPECT_GL_NO_ERROR();
190}