blob: ce538810962c1ea5af9f77158cb74fb85515d23c [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);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800225 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, nullptr, GL_STREAM_DRAW);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400226 EXPECT_GL_NO_ERROR();
227
228 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800229 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width,
230 pixel_0_height, 0, pixel_0_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400231 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800232 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width,
233 pixel_1_height, 0, pixel_1_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400234 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800235 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width,
236 pixel_2_height, 0, pixel_2_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400237 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800238 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width,
239 pixel_3_height, 0, pixel_3_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400240 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800241 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width,
242 pixel_4_height, 0, pixel_4_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400243 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800244 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width,
245 pixel_5_height, 0, pixel_5_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400246 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800247 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width,
248 pixel_6_height, 0, pixel_6_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400249 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800250 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width,
251 pixel_7_height, 0, pixel_7_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400252 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800253 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width,
254 pixel_8_height, 0, pixel_8_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400255 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800256 glCompressedTexImage2D(GL_TEXTURE_2D, 9, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_width,
257 pixel_9_height, 0, pixel_9_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400258
259 EXPECT_GL_NO_ERROR();
260
261 glUseProgram(mTextureProgram);
262 glUniform1i(mTextureUniformLocation, 0);
263
264 drawQuad(mTextureProgram, "position", 0.5f);
265
266 EXPECT_GL_NO_ERROR();
267
268 glDeleteTextures(1, &buffer);
269 glDeleteTextures(1, &texture);
270
271 EXPECT_GL_NO_ERROR();
272}
273
274
Yuly Novikovfea6e952016-06-23 16:29:20 -0400275TEST_P(DXT1CompressedTextureTestD3D11, PBOCompressedTexStorage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400276{
Martin Radev1be913c2016-07-11 17:59:16 +0300277 if (getClientMajorVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
Jamie Madillc751d1e2014-10-21 17:46:29 -0400278 {
279 return;
280 }
281
Martin Radev1be913c2016-07-11 17:59:16 +0300282 if (getClientMajorVersion() < 3 &&
283 (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
Jamie Madillc751d1e2014-10-21 17:46:29 -0400284 {
285 return;
286 }
287
288 GLuint texture;
289 glGenTextures(1, &texture);
290 glBindTexture(GL_TEXTURE_2D, texture);
291 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
292 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
293 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
294 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
295
Martin Radev1be913c2016-07-11 17:59:16 +0300296 if (getClientMajorVersion() < 3)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400297 {
298 glTexStorage2DEXT(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
299 }
300 else
301 {
302 glTexStorage2D(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
303 }
304 EXPECT_GL_NO_ERROR();
305
306 GLuint buffer;
307 glGenBuffers(1, &buffer);
308 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800309 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, nullptr, GL_STREAM_DRAW);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400310 EXPECT_GL_NO_ERROR();
311
312 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800313 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixel_0_width, pixel_0_height,
314 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400315 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800316 glCompressedTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, pixel_1_width, pixel_1_height,
317 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400318 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800319 glCompressedTexSubImage2D(GL_TEXTURE_2D, 2, 0, 0, pixel_2_width, pixel_2_height,
320 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400321 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800322 glCompressedTexSubImage2D(GL_TEXTURE_2D, 3, 0, 0, pixel_3_width, pixel_3_height,
323 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400324 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800325 glCompressedTexSubImage2D(GL_TEXTURE_2D, 4, 0, 0, pixel_4_width, pixel_4_height,
326 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400327 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800328 glCompressedTexSubImage2D(GL_TEXTURE_2D, 5, 0, 0, pixel_5_width, pixel_5_height,
329 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400330 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800331 glCompressedTexSubImage2D(GL_TEXTURE_2D, 6, 0, 0, pixel_6_width, pixel_6_height,
332 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400333 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800334 glCompressedTexSubImage2D(GL_TEXTURE_2D, 7, 0, 0, pixel_7_width, pixel_7_height,
335 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400336 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800337 glCompressedTexSubImage2D(GL_TEXTURE_2D, 8, 0, 0, pixel_8_width, pixel_8_height,
338 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400339 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800340 glCompressedTexSubImage2D(GL_TEXTURE_2D, 9, 0, 0, pixel_9_width, pixel_9_height,
341 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400342
343 EXPECT_GL_NO_ERROR();
344
345 glUseProgram(mTextureProgram);
346 glUniform1i(mTextureUniformLocation, 0);
347
348 drawQuad(mTextureProgram, "position", 0.5f);
349
350 EXPECT_GL_NO_ERROR();
351
352 glDeleteTextures(1, &texture);
353
354 EXPECT_GL_NO_ERROR();
355}
Jamie Madillfa05f602015-05-07 13:47:11 -0400356
357// 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 -0400358ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTest,
Geoff Lange0cc2a42016-01-20 10:58:17 -0500359 ES2_D3D9(),
360 ES2_D3D11(),
361 ES2_D3D11_FL9_3(),
362 ES2_OPENGL(),
363 ES3_OPENGL(),
364 ES2_OPENGLES(),
365 ES3_OPENGLES());
Jamie Madillfa05f602015-05-07 13:47:11 -0400366
367// 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 -0400368ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
Jamie Madillfa05f602015-05-07 13:47:11 -0400369
Yuly Novikovfea6e952016-06-23 16:29:20 -0400370ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTestD3D11, ES2_D3D11(), ES3_D3D11(), ES2_D3D11_FL9_3());