blob: 93659800b08c0bac2e99594eb975ed15595c4e11 [file] [log] [blame]
Geoff Lang066230a2013-10-30 12:59:30 -04001#include "ANGLETest.h"
Geoff Langd701ea12014-01-10 15:53:35 -05002#include "media/pixel.inl"
Geoff Lang066230a2013-10-30 12:59:30 -04003
Austin Kinross18b931d2014-09-29 12:58:31 -07004// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
Cooper Partind28f6112015-02-12 16:11:00 -08005ANGLE_TYPED_TEST_CASE(CompressedTextureTest, ES2_D3D9, ES2_D3D11, ES2_D3D11_FL9_3);
Austin Kinross18b931d2014-09-29 12:58:31 -07006
7template<typename T>
Geoff Lang066230a2013-10-30 12:59:30 -04008class CompressedTextureTest : public ANGLETest
9{
10protected:
Geoff Lang0d3683c2014-10-23 11:08:16 -040011 CompressedTextureTest() : ANGLETest(T::GetGlesMajorVersion(), T::GetPlatform())
Geoff Lang066230a2013-10-30 12:59:30 -040012 {
13 setWindowWidth(512);
14 setWindowHeight(512);
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 vsSource = SHADER_SOURCE
26 (
27 precision highp float;
28 attribute vec4 position;
29 varying vec2 texcoord;
30
31 void main()
32 {
33 gl_Position = position;
34 texcoord = (position.xy * 0.5) + 0.5;
35 texcoord.y = 1.0 - texcoord.y;
36 }
37 );
38
39 const std::string textureFSSource = SHADER_SOURCE
40 (
41 precision highp float;
42 uniform sampler2D tex;
43 varying vec2 texcoord;
44
45 void main()
46 {
47 gl_FragColor = texture2D(tex, texcoord);
48 }
49 );
50
Jamie Madill5599c8f2014-08-26 13:16:39 -040051 mTextureProgram = CompileProgram(vsSource, textureFSSource);
Geoff Lang066230a2013-10-30 12:59:30 -040052 if (mTextureProgram == 0)
53 {
54 FAIL() << "shader compilation failed.";
55 }
56
57 mTextureUniformLocation = glGetUniformLocation(mTextureProgram, "tex");
58
59 ASSERT_GL_NO_ERROR();
60 }
61
62 virtual void TearDown()
63 {
64 glDeleteProgram(mTextureProgram);
65
66 ANGLETest::TearDown();
67 }
68
69 GLuint mTextureProgram;
70 GLint mTextureUniformLocation;
71};
72
Austin Kinross18b931d2014-09-29 12:58:31 -070073TYPED_TEST(CompressedTextureTest, CompressedTexImage)
Geoff Lang066230a2013-10-30 12:59:30 -040074{
75 if (getClientVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
76 {
77 return;
78 }
79
80 GLuint texture;
81 glGenTextures(1, &texture);
82 glBindTexture(GL_TEXTURE_2D, texture);
83 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
84 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
85 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
86 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
87
Geoff Langd701ea12014-01-10 15:53:35 -050088 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, pixel_0_data);
89 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, pixel_1_data);
90 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, pixel_2_data);
91 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, pixel_3_data);
92 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, pixel_4_data);
93 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, pixel_5_data);
94 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, pixel_6_data);
95 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, pixel_7_data);
96 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, pixel_8_data);
97 glCompressedTexImage2D(GL_TEXTURE_2D, 9, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_width, pixel_9_height, 0, pixel_9_size, pixel_9_data);
Geoff Lang066230a2013-10-30 12:59:30 -040098
99 EXPECT_GL_NO_ERROR();
100
101 glUseProgram(mTextureProgram);
102 glUniform1i(mTextureUniformLocation, 0);
103
104 drawQuad(mTextureProgram, "position", 0.5f);
105
106 EXPECT_GL_NO_ERROR();
107
108 glDeleteTextures(1, &texture);
109
110 EXPECT_GL_NO_ERROR();
111}
112
Austin Kinross18b931d2014-09-29 12:58:31 -0700113TYPED_TEST(CompressedTextureTest, CompressedTexStorage)
Geoff Lang066230a2013-10-30 12:59:30 -0400114{
115 if (getClientVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
116 {
117 return;
118 }
119
120 if (getClientVersion() < 3 && (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
121 {
122 return;
123 }
124
125 GLuint texture;
126 glGenTextures(1, &texture);
127 glBindTexture(GL_TEXTURE_2D, texture);
128 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
129 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
130 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
131 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
132
133 if (getClientVersion() < 3)
134 {
Geoff Langa836e482014-04-28 10:08:27 -0400135 glTexStorage2DEXT(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
Geoff Lang066230a2013-10-30 12:59:30 -0400136 }
137 else
138 {
Geoff Langa836e482014-04-28 10:08:27 -0400139 glTexStorage2D(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
Geoff Lang066230a2013-10-30 12:59:30 -0400140 }
141 EXPECT_GL_NO_ERROR();
142
Geoff Langd701ea12014-01-10 15:53:35 -0500143 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixel_0_width, pixel_0_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_size, pixel_0_data);
Geoff Langa836e482014-04-28 10:08:27 -0400144 glCompressedTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, pixel_1_width, pixel_1_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, pixel_1_data);
145 glCompressedTexSubImage2D(GL_TEXTURE_2D, 2, 0, 0, pixel_2_width, pixel_2_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_size, pixel_2_data);
146 glCompressedTexSubImage2D(GL_TEXTURE_2D, 3, 0, 0, pixel_3_width, pixel_3_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_size, pixel_3_data);
147 glCompressedTexSubImage2D(GL_TEXTURE_2D, 4, 0, 0, pixel_4_width, pixel_4_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_size, pixel_4_data);
148 glCompressedTexSubImage2D(GL_TEXTURE_2D, 5, 0, 0, pixel_5_width, pixel_5_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_size, pixel_5_data);
149 glCompressedTexSubImage2D(GL_TEXTURE_2D, 6, 0, 0, pixel_6_width, pixel_6_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_size, pixel_6_data);
150 glCompressedTexSubImage2D(GL_TEXTURE_2D, 7, 0, 0, pixel_7_width, pixel_7_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_size, pixel_7_data);
151 glCompressedTexSubImage2D(GL_TEXTURE_2D, 8, 0, 0, pixel_8_width, pixel_8_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_size, pixel_8_data);
152 glCompressedTexSubImage2D(GL_TEXTURE_2D, 9, 0, 0, pixel_9_width, pixel_9_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_size, pixel_9_data);
Geoff Lang066230a2013-10-30 12:59:30 -0400153
154 EXPECT_GL_NO_ERROR();
155
156 glUseProgram(mTextureProgram);
157 glUniform1i(mTextureUniformLocation, 0);
158
159 drawQuad(mTextureProgram, "position", 0.5f);
160
161 EXPECT_GL_NO_ERROR();
162
163 glDeleteTextures(1, &texture);
164
165 EXPECT_GL_NO_ERROR();
166}
Jamie Madillc751d1e2014-10-21 17:46:29 -0400167
168// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
Geoff Lang0d3683c2014-10-23 11:08:16 -0400169ANGLE_TYPED_TEST_CASE(CompressedTextureTestES3, ES3_D3D11);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400170
171template<typename T>
172class CompressedTextureTestES3 : public CompressedTextureTest<T> { };
173
Cooper Partind28f6112015-02-12 16:11:00 -0800174ANGLE_TYPED_TEST_CASE(CompressedTextureTestD3D11, ES2_D3D11, ES3_D3D11, ES2_D3D11_FL9_3);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400175
176template<typename T>
177class CompressedTextureTestD3D11 : public CompressedTextureTest<T> { };
178
179TYPED_TEST(CompressedTextureTestES3, PBOCompressedTexImage)
180{
181 GLuint texture;
182 glGenTextures(1, &texture);
183 glBindTexture(GL_TEXTURE_2D, texture);
184 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
185 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
186 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
187 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
188
189 GLuint buffer;
190 glGenBuffers(1, &buffer);
191 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
192 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, NULL, GL_STREAM_DRAW);
193 EXPECT_GL_NO_ERROR();
194
195 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
196 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, NULL);
197 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
198 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, NULL);
199 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
200 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, NULL);
201 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
202 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, NULL);
203 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
204 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, NULL);
205 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
206 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, NULL);
207 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
208 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, NULL);
209 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
210 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, NULL);
211 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
212 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, NULL);
213 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
214 glCompressedTexImage2D(GL_TEXTURE_2D, 9, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_width, pixel_9_height, 0, pixel_9_size, NULL);
215
216 EXPECT_GL_NO_ERROR();
217
218 glUseProgram(mTextureProgram);
219 glUniform1i(mTextureUniformLocation, 0);
220
221 drawQuad(mTextureProgram, "position", 0.5f);
222
223 EXPECT_GL_NO_ERROR();
224
225 glDeleteTextures(1, &buffer);
226 glDeleteTextures(1, &texture);
227
228 EXPECT_GL_NO_ERROR();
229}
230
231
232TYPED_TEST(CompressedTextureTestD3D11, PBOCompressedTexStorage)
233{
234 if (getClientVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
235 {
236 return;
237 }
238
239 if (getClientVersion() < 3 && (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
240 {
241 return;
242 }
243
244 GLuint texture;
245 glGenTextures(1, &texture);
246 glBindTexture(GL_TEXTURE_2D, texture);
247 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
248 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
249 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
250 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
251
252 if (getClientVersion() < 3)
253 {
254 glTexStorage2DEXT(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
255 }
256 else
257 {
258 glTexStorage2D(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
259 }
260 EXPECT_GL_NO_ERROR();
261
262 GLuint buffer;
263 glGenBuffers(1, &buffer);
264 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
265 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, NULL, GL_STREAM_DRAW);
266 EXPECT_GL_NO_ERROR();
267
268 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
269 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixel_0_width, pixel_0_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_size, NULL);
270 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
271 glCompressedTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, pixel_1_width, pixel_1_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, NULL);
272 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
273 glCompressedTexSubImage2D(GL_TEXTURE_2D, 2, 0, 0, pixel_2_width, pixel_2_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_size, NULL);
274 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
275 glCompressedTexSubImage2D(GL_TEXTURE_2D, 3, 0, 0, pixel_3_width, pixel_3_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_size, NULL);
276 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
277 glCompressedTexSubImage2D(GL_TEXTURE_2D, 4, 0, 0, pixel_4_width, pixel_4_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_size, NULL);
278 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
279 glCompressedTexSubImage2D(GL_TEXTURE_2D, 5, 0, 0, pixel_5_width, pixel_5_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_size, NULL);
280 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
281 glCompressedTexSubImage2D(GL_TEXTURE_2D, 6, 0, 0, pixel_6_width, pixel_6_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_size, NULL);
282 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
283 glCompressedTexSubImage2D(GL_TEXTURE_2D, 7, 0, 0, pixel_7_width, pixel_7_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_size, NULL);
284 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
285 glCompressedTexSubImage2D(GL_TEXTURE_2D, 8, 0, 0, pixel_8_width, pixel_8_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_size, NULL);
286 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
287 glCompressedTexSubImage2D(GL_TEXTURE_2D, 9, 0, 0, pixel_9_width, pixel_9_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_size, NULL);
288
289 EXPECT_GL_NO_ERROR();
290
291 glUseProgram(mTextureProgram);
292 glUniform1i(mTextureUniformLocation, 0);
293
294 drawQuad(mTextureProgram, "position", 0.5f);
295
296 EXPECT_GL_NO_ERROR();
297
298 glDeleteTextures(1, &texture);
299
300 EXPECT_GL_NO_ERROR();
301}