blob: b2a932fadc16b3dd091f8f31b1d86ac40072a3e1 [file] [log] [blame]
Jamie Madillfa05f602015-05-07 13:47:11 -04001//
2// Copyright 2015 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
Corentin Wallezd3970de2015-05-14 11:07:48 -04007#include "test_utils/ANGLETest.h"
Geoff Lang44ff5a72017-02-03 15:15:43 -05008#include "test_utils/gl_raii.h"
Jamie Madillfa05f602015-05-07 13:47:11 -04009
Geoff Langd701ea12014-01-10 15:53:35 -050010#include "media/pixel.inl"
Geoff Lang066230a2013-10-30 12:59:30 -040011
Jamie Madillfa05f602015-05-07 13:47:11 -040012using namespace angle;
Austin Kinross18b931d2014-09-29 12:58:31 -070013
Yuly Novikovfea6e952016-06-23 16:29:20 -040014class DXT1CompressedTextureTest : public ANGLETest
Geoff Lang066230a2013-10-30 12:59:30 -040015{
Jamie Madillfa05f602015-05-07 13:47:11 -040016 protected:
Yuly Novikovfea6e952016-06-23 16:29:20 -040017 DXT1CompressedTextureTest()
Geoff Lang066230a2013-10-30 12:59:30 -040018 {
19 setWindowWidth(512);
20 setWindowHeight(512);
21 setConfigRedBits(8);
22 setConfigGreenBits(8);
23 setConfigBlueBits(8);
24 setConfigAlphaBits(8);
25 }
26
27 virtual void SetUp()
28 {
29 ANGLETest::SetUp();
30
31 const std::string vsSource = SHADER_SOURCE
32 (
33 precision highp float;
34 attribute vec4 position;
35 varying vec2 texcoord;
36
37 void main()
38 {
39 gl_Position = position;
40 texcoord = (position.xy * 0.5) + 0.5;
41 texcoord.y = 1.0 - texcoord.y;
42 }
43 );
44
45 const std::string textureFSSource = SHADER_SOURCE
46 (
47 precision highp float;
48 uniform sampler2D tex;
49 varying vec2 texcoord;
50
51 void main()
52 {
53 gl_FragColor = texture2D(tex, texcoord);
54 }
55 );
56
Jamie Madill5599c8f2014-08-26 13:16:39 -040057 mTextureProgram = CompileProgram(vsSource, textureFSSource);
Geoff Lang066230a2013-10-30 12:59:30 -040058 if (mTextureProgram == 0)
59 {
60 FAIL() << "shader compilation failed.";
61 }
62
63 mTextureUniformLocation = glGetUniformLocation(mTextureProgram, "tex");
64
65 ASSERT_GL_NO_ERROR();
66 }
67
68 virtual void TearDown()
69 {
70 glDeleteProgram(mTextureProgram);
71
72 ANGLETest::TearDown();
73 }
74
75 GLuint mTextureProgram;
76 GLint mTextureUniformLocation;
77};
78
Yuly Novikovfea6e952016-06-23 16:29:20 -040079TEST_P(DXT1CompressedTextureTest, CompressedTexImage)
Geoff Lang066230a2013-10-30 12:59:30 -040080{
Geoff Langa8091652015-04-27 10:53:55 -040081 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
Geoff Lang066230a2013-10-30 12:59:30 -040082 {
Geoff Langa8091652015-04-27 10:53:55 -040083 std::cout << "Test skipped because GL_EXT_texture_compression_dxt1 is not available." << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -040084 return;
85 }
86
87 GLuint texture;
88 glGenTextures(1, &texture);
89 glBindTexture(GL_TEXTURE_2D, texture);
90 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
91 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
92 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
93 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
94
Geoff Langd701ea12014-01-10 15:53:35 -050095 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, pixel_0_data);
96 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, pixel_1_data);
97 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, pixel_2_data);
98 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, pixel_3_data);
99 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, pixel_4_data);
100 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, pixel_5_data);
101 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, pixel_6_data);
102 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, pixel_7_data);
103 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, pixel_8_data);
104 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 -0400105
106 EXPECT_GL_NO_ERROR();
107
108 glUseProgram(mTextureProgram);
109 glUniform1i(mTextureUniformLocation, 0);
110
111 drawQuad(mTextureProgram, "position", 0.5f);
112
113 EXPECT_GL_NO_ERROR();
114
115 glDeleteTextures(1, &texture);
116
117 EXPECT_GL_NO_ERROR();
118}
119
Yuly Novikovfea6e952016-06-23 16:29:20 -0400120TEST_P(DXT1CompressedTextureTest, CompressedTexStorage)
Geoff Lang066230a2013-10-30 12:59:30 -0400121{
Geoff Langa8091652015-04-27 10:53:55 -0400122 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
Geoff Lang066230a2013-10-30 12:59:30 -0400123 {
Geoff Langa8091652015-04-27 10:53:55 -0400124 std::cout << "Test skipped due to missing GL_EXT_texture_compression_dxt1" << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -0400125 return;
126 }
127
Martin Radev1be913c2016-07-11 17:59:16 +0300128 if (getClientMajorVersion() < 3 &&
129 (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
Geoff Lang066230a2013-10-30 12:59:30 -0400130 {
Geoff Langa8091652015-04-27 10:53:55 -0400131 std::cout << "Test skipped due to missing ES3 or GL_EXT_texture_storage or GL_OES_rgb8_rgba8" << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -0400132 return;
133 }
134
135 GLuint texture;
136 glGenTextures(1, &texture);
137 glBindTexture(GL_TEXTURE_2D, texture);
138 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
139 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
140 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
141 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
142
Martin Radev1be913c2016-07-11 17:59:16 +0300143 if (getClientMajorVersion() < 3)
Geoff Lang066230a2013-10-30 12:59:30 -0400144 {
Geoff Langa836e482014-04-28 10:08:27 -0400145 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 -0400146 }
147 else
148 {
Geoff Langa836e482014-04-28 10:08:27 -0400149 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 -0400150 }
151 EXPECT_GL_NO_ERROR();
152
Geoff Langd701ea12014-01-10 15:53:35 -0500153 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 -0400154 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);
155 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);
156 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);
157 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);
158 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);
159 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);
160 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);
161 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);
162 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 -0400163
164 EXPECT_GL_NO_ERROR();
165
166 glUseProgram(mTextureProgram);
167 glUniform1i(mTextureUniformLocation, 0);
168
169 drawQuad(mTextureProgram, "position", 0.5f);
170
171 EXPECT_GL_NO_ERROR();
172
173 glDeleteTextures(1, &texture);
174
175 EXPECT_GL_NO_ERROR();
176}
Jamie Madillc751d1e2014-10-21 17:46:29 -0400177
Geoff Lang44ff5a72017-02-03 15:15:43 -0500178// Test validation of glCompressedTexSubImage2D with DXT formats
179TEST_P(DXT1CompressedTextureTest, CompressedTexSubImageValidation)
180{
181 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
182 {
183 std::cout << "Test skipped due to missing GL_EXT_texture_compression_dxt1" << std::endl;
184 return;
185 }
186
187 GLTexture texture;
188 glBindTexture(GL_TEXTURE_2D, texture.get());
189
190 // Size mip 0 to a large size
191 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width,
192 pixel_0_height, 0, pixel_0_size, nullptr);
193 ASSERT_GL_NO_ERROR();
194
195 // Set a sub image with an offset that isn't a multiple of the block size
196 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 1, 3, pixel_1_width, pixel_1_height,
197 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, pixel_1_data);
198 ASSERT_GL_ERROR(GL_INVALID_OPERATION);
199}
200
Yuly Novikovfea6e952016-06-23 16:29:20 -0400201class DXT1CompressedTextureTestES3 : public DXT1CompressedTextureTest { };
Jamie Madillc751d1e2014-10-21 17:46:29 -0400202
Yuly Novikovfea6e952016-06-23 16:29:20 -0400203class DXT1CompressedTextureTestD3D11 : public DXT1CompressedTextureTest { };
Jamie Madillc751d1e2014-10-21 17:46:29 -0400204
Yuly Novikovfea6e952016-06-23 16:29:20 -0400205TEST_P(DXT1CompressedTextureTestES3, PBOCompressedTexImage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400206{
Yuly Novikovfea6e952016-06-23 16:29:20 -0400207 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
208 {
209 std::cout << "Test skipped because GL_EXT_texture_compression_dxt1 is not available."
210 << std::endl;
211 return;
212 }
213
Jamie Madillc751d1e2014-10-21 17:46:29 -0400214 GLuint texture;
215 glGenTextures(1, &texture);
216 glBindTexture(GL_TEXTURE_2D, texture);
217 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
218 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
219 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
220 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
221
222 GLuint buffer;
223 glGenBuffers(1, &buffer);
224 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
225 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, NULL, GL_STREAM_DRAW);
226 EXPECT_GL_NO_ERROR();
227
228 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
229 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, NULL);
230 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
231 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, NULL);
232 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
233 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, NULL);
234 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
235 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, NULL);
236 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
237 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, NULL);
238 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
239 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, NULL);
240 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
241 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, NULL);
242 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
243 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, NULL);
244 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
245 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, NULL);
246 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
247 glCompressedTexImage2D(GL_TEXTURE_2D, 9, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_width, pixel_9_height, 0, pixel_9_size, NULL);
248
249 EXPECT_GL_NO_ERROR();
250
251 glUseProgram(mTextureProgram);
252 glUniform1i(mTextureUniformLocation, 0);
253
254 drawQuad(mTextureProgram, "position", 0.5f);
255
256 EXPECT_GL_NO_ERROR();
257
258 glDeleteTextures(1, &buffer);
259 glDeleteTextures(1, &texture);
260
261 EXPECT_GL_NO_ERROR();
262}
263
264
Yuly Novikovfea6e952016-06-23 16:29:20 -0400265TEST_P(DXT1CompressedTextureTestD3D11, PBOCompressedTexStorage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400266{
Martin Radev1be913c2016-07-11 17:59:16 +0300267 if (getClientMajorVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
Jamie Madillc751d1e2014-10-21 17:46:29 -0400268 {
269 return;
270 }
271
Martin Radev1be913c2016-07-11 17:59:16 +0300272 if (getClientMajorVersion() < 3 &&
273 (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
Jamie Madillc751d1e2014-10-21 17:46:29 -0400274 {
275 return;
276 }
277
278 GLuint texture;
279 glGenTextures(1, &texture);
280 glBindTexture(GL_TEXTURE_2D, texture);
281 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
282 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
283 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
284 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
285
Martin Radev1be913c2016-07-11 17:59:16 +0300286 if (getClientMajorVersion() < 3)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400287 {
288 glTexStorage2DEXT(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
289 }
290 else
291 {
292 glTexStorage2D(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
293 }
294 EXPECT_GL_NO_ERROR();
295
296 GLuint buffer;
297 glGenBuffers(1, &buffer);
298 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
299 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, NULL, GL_STREAM_DRAW);
300 EXPECT_GL_NO_ERROR();
301
302 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
303 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixel_0_width, pixel_0_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_size, NULL);
304 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
305 glCompressedTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, pixel_1_width, pixel_1_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, NULL);
306 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
307 glCompressedTexSubImage2D(GL_TEXTURE_2D, 2, 0, 0, pixel_2_width, pixel_2_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_size, NULL);
308 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
309 glCompressedTexSubImage2D(GL_TEXTURE_2D, 3, 0, 0, pixel_3_width, pixel_3_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_size, NULL);
310 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
311 glCompressedTexSubImage2D(GL_TEXTURE_2D, 4, 0, 0, pixel_4_width, pixel_4_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_size, NULL);
312 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
313 glCompressedTexSubImage2D(GL_TEXTURE_2D, 5, 0, 0, pixel_5_width, pixel_5_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_size, NULL);
314 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
315 glCompressedTexSubImage2D(GL_TEXTURE_2D, 6, 0, 0, pixel_6_width, pixel_6_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_size, NULL);
316 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
317 glCompressedTexSubImage2D(GL_TEXTURE_2D, 7, 0, 0, pixel_7_width, pixel_7_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_size, NULL);
318 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
319 glCompressedTexSubImage2D(GL_TEXTURE_2D, 8, 0, 0, pixel_8_width, pixel_8_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_size, NULL);
320 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
321 glCompressedTexSubImage2D(GL_TEXTURE_2D, 9, 0, 0, pixel_9_width, pixel_9_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_size, NULL);
322
323 EXPECT_GL_NO_ERROR();
324
325 glUseProgram(mTextureProgram);
326 glUniform1i(mTextureUniformLocation, 0);
327
328 drawQuad(mTextureProgram, "position", 0.5f);
329
330 EXPECT_GL_NO_ERROR();
331
332 glDeleteTextures(1, &texture);
333
334 EXPECT_GL_NO_ERROR();
335}
Jamie Madillfa05f602015-05-07 13:47:11 -0400336
337// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
Yuly Novikovfea6e952016-06-23 16:29:20 -0400338ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTest,
Geoff Lange0cc2a42016-01-20 10:58:17 -0500339 ES2_D3D9(),
340 ES2_D3D11(),
341 ES2_D3D11_FL9_3(),
342 ES2_OPENGL(),
343 ES3_OPENGL(),
344 ES2_OPENGLES(),
345 ES3_OPENGLES());
Jamie Madillfa05f602015-05-07 13:47:11 -0400346
347// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
Yuly Novikovfea6e952016-06-23 16:29:20 -0400348ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
Jamie Madillfa05f602015-05-07 13:47:11 -0400349
Yuly Novikovfea6e952016-06-23 16:29:20 -0400350ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTestD3D11, ES2_D3D11(), ES3_D3D11(), ES2_D3D11_FL9_3());