blob: dd5baf56ba277692406fb65a35c335b0f2563e05 [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
Olli Etuahoa20af6d2017-09-18 13:32:29 +030031 const std::string vsSource =
32 R"(precision highp float;
Geoff Lang066230a2013-10-30 12:59:30 -040033 attribute vec4 position;
34 varying vec2 texcoord;
35
36 void main()
37 {
38 gl_Position = position;
39 texcoord = (position.xy * 0.5) + 0.5;
40 texcoord.y = 1.0 - texcoord.y;
Olli Etuahoa20af6d2017-09-18 13:32:29 +030041 })";
Geoff Lang066230a2013-10-30 12:59:30 -040042
Olli Etuahoa20af6d2017-09-18 13:32:29 +030043 const std::string textureFSSource =
44 R"(precision highp float;
Geoff Lang066230a2013-10-30 12:59:30 -040045 uniform sampler2D tex;
46 varying vec2 texcoord;
47
48 void main()
49 {
50 gl_FragColor = texture2D(tex, texcoord);
Olli Etuahoa20af6d2017-09-18 13:32:29 +030051 })";
Geoff Lang066230a2013-10-30 12:59:30 -040052
Jamie Madill5599c8f2014-08-26 13:16:39 -040053 mTextureProgram = CompileProgram(vsSource, textureFSSource);
Geoff Lang066230a2013-10-30 12:59:30 -040054 if (mTextureProgram == 0)
55 {
56 FAIL() << "shader compilation failed.";
57 }
58
59 mTextureUniformLocation = glGetUniformLocation(mTextureProgram, "tex");
60
61 ASSERT_GL_NO_ERROR();
62 }
63
64 virtual void TearDown()
65 {
66 glDeleteProgram(mTextureProgram);
67
68 ANGLETest::TearDown();
69 }
70
71 GLuint mTextureProgram;
72 GLint mTextureUniformLocation;
73};
74
Yuly Novikovfea6e952016-06-23 16:29:20 -040075TEST_P(DXT1CompressedTextureTest, CompressedTexImage)
Geoff Lang066230a2013-10-30 12:59:30 -040076{
Geoff Langa8091652015-04-27 10:53:55 -040077 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
Geoff Lang066230a2013-10-30 12:59:30 -040078 {
Geoff Langa8091652015-04-27 10:53:55 -040079 std::cout << "Test skipped because GL_EXT_texture_compression_dxt1 is not available." << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -040080 return;
81 }
82
83 GLuint texture;
84 glGenTextures(1, &texture);
85 glBindTexture(GL_TEXTURE_2D, texture);
86 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
87 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
88 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
89 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
90
Geoff Langd701ea12014-01-10 15:53:35 -050091 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, pixel_0_data);
92 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, pixel_1_data);
93 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, pixel_2_data);
94 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, pixel_3_data);
95 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, pixel_4_data);
96 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, pixel_5_data);
97 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, pixel_6_data);
98 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, pixel_7_data);
99 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, pixel_8_data);
100 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 -0400101
102 EXPECT_GL_NO_ERROR();
103
104 glUseProgram(mTextureProgram);
105 glUniform1i(mTextureUniformLocation, 0);
106
107 drawQuad(mTextureProgram, "position", 0.5f);
108
109 EXPECT_GL_NO_ERROR();
110
111 glDeleteTextures(1, &texture);
112
113 EXPECT_GL_NO_ERROR();
114}
115
Yuly Novikovfea6e952016-06-23 16:29:20 -0400116TEST_P(DXT1CompressedTextureTest, CompressedTexStorage)
Geoff Lang066230a2013-10-30 12:59:30 -0400117{
Geoff Langa8091652015-04-27 10:53:55 -0400118 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
Geoff Lang066230a2013-10-30 12:59:30 -0400119 {
Geoff Langa8091652015-04-27 10:53:55 -0400120 std::cout << "Test skipped due to missing GL_EXT_texture_compression_dxt1" << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -0400121 return;
122 }
123
Martin Radev1be913c2016-07-11 17:59:16 +0300124 if (getClientMajorVersion() < 3 &&
125 (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
Geoff Lang066230a2013-10-30 12:59:30 -0400126 {
Geoff Langa8091652015-04-27 10:53:55 -0400127 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 -0400128 return;
129 }
130
131 GLuint texture;
132 glGenTextures(1, &texture);
133 glBindTexture(GL_TEXTURE_2D, texture);
134 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
135 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
136 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
137 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
138
Martin Radev1be913c2016-07-11 17:59:16 +0300139 if (getClientMajorVersion() < 3)
Geoff Lang066230a2013-10-30 12:59:30 -0400140 {
Geoff Langa836e482014-04-28 10:08:27 -0400141 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 -0400142 }
143 else
144 {
Geoff Langa836e482014-04-28 10:08:27 -0400145 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 -0400146 }
147 EXPECT_GL_NO_ERROR();
148
Geoff Langd701ea12014-01-10 15:53:35 -0500149 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 -0400150 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);
151 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);
152 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);
153 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);
154 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);
155 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);
156 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);
157 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);
158 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 -0400159
160 EXPECT_GL_NO_ERROR();
161
162 glUseProgram(mTextureProgram);
163 glUniform1i(mTextureUniformLocation, 0);
164
165 drawQuad(mTextureProgram, "position", 0.5f);
166
167 EXPECT_GL_NO_ERROR();
168
169 glDeleteTextures(1, &texture);
170
171 EXPECT_GL_NO_ERROR();
172}
Jamie Madillc751d1e2014-10-21 17:46:29 -0400173
Geoff Lang44ff5a72017-02-03 15:15:43 -0500174// Test validation of glCompressedTexSubImage2D with DXT formats
175TEST_P(DXT1CompressedTextureTest, CompressedTexSubImageValidation)
176{
177 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
178 {
179 std::cout << "Test skipped due to missing GL_EXT_texture_compression_dxt1" << std::endl;
180 return;
181 }
182
183 GLTexture texture;
184 glBindTexture(GL_TEXTURE_2D, texture.get());
185
186 // Size mip 0 to a large size
187 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width,
188 pixel_0_height, 0, pixel_0_size, nullptr);
189 ASSERT_GL_NO_ERROR();
190
191 // Set a sub image with an offset that isn't a multiple of the block size
192 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 1, 3, pixel_1_width, pixel_1_height,
193 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, pixel_1_data);
194 ASSERT_GL_ERROR(GL_INVALID_OPERATION);
195}
196
Yuly Novikovfea6e952016-06-23 16:29:20 -0400197class DXT1CompressedTextureTestES3 : public DXT1CompressedTextureTest { };
Jamie Madillc751d1e2014-10-21 17:46:29 -0400198
Yuly Novikovfea6e952016-06-23 16:29:20 -0400199class DXT1CompressedTextureTestD3D11 : public DXT1CompressedTextureTest { };
Jamie Madillc751d1e2014-10-21 17:46:29 -0400200
Yuly Novikovfea6e952016-06-23 16:29:20 -0400201TEST_P(DXT1CompressedTextureTestES3, PBOCompressedTexImage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400202{
Yuly Novikovfea6e952016-06-23 16:29:20 -0400203 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
204 {
205 std::cout << "Test skipped because GL_EXT_texture_compression_dxt1 is not available."
206 << std::endl;
207 return;
208 }
209
Jamie Madillc751d1e2014-10-21 17:46:29 -0400210 GLuint texture;
211 glGenTextures(1, &texture);
212 glBindTexture(GL_TEXTURE_2D, texture);
213 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
214 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
215 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
216 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
217
218 GLuint buffer;
219 glGenBuffers(1, &buffer);
220 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800221 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, nullptr, GL_STREAM_DRAW);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400222 EXPECT_GL_NO_ERROR();
223
224 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800225 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width,
226 pixel_0_height, 0, pixel_0_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400227 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800228 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width,
229 pixel_1_height, 0, pixel_1_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400230 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800231 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width,
232 pixel_2_height, 0, pixel_2_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400233 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800234 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width,
235 pixel_3_height, 0, pixel_3_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400236 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800237 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width,
238 pixel_4_height, 0, pixel_4_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400239 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800240 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width,
241 pixel_5_height, 0, pixel_5_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400242 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800243 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width,
244 pixel_6_height, 0, pixel_6_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400245 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800246 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width,
247 pixel_7_height, 0, pixel_7_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400248 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800249 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width,
250 pixel_8_height, 0, pixel_8_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400251 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800252 glCompressedTexImage2D(GL_TEXTURE_2D, 9, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_width,
253 pixel_9_height, 0, pixel_9_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400254
255 EXPECT_GL_NO_ERROR();
256
257 glUseProgram(mTextureProgram);
258 glUniform1i(mTextureUniformLocation, 0);
259
260 drawQuad(mTextureProgram, "position", 0.5f);
261
262 EXPECT_GL_NO_ERROR();
263
264 glDeleteTextures(1, &buffer);
265 glDeleteTextures(1, &texture);
266
267 EXPECT_GL_NO_ERROR();
268}
269
270
Yuly Novikovfea6e952016-06-23 16:29:20 -0400271TEST_P(DXT1CompressedTextureTestD3D11, PBOCompressedTexStorage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400272{
Martin Radev1be913c2016-07-11 17:59:16 +0300273 if (getClientMajorVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
Jamie Madillc751d1e2014-10-21 17:46:29 -0400274 {
275 return;
276 }
277
Martin Radev1be913c2016-07-11 17:59:16 +0300278 if (getClientMajorVersion() < 3 &&
279 (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
Jamie Madillc751d1e2014-10-21 17:46:29 -0400280 {
281 return;
282 }
283
284 GLuint texture;
285 glGenTextures(1, &texture);
286 glBindTexture(GL_TEXTURE_2D, texture);
287 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
288 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
289 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
290 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
291
Martin Radev1be913c2016-07-11 17:59:16 +0300292 if (getClientMajorVersion() < 3)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400293 {
294 glTexStorage2DEXT(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
295 }
296 else
297 {
298 glTexStorage2D(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
299 }
300 EXPECT_GL_NO_ERROR();
301
302 GLuint buffer;
303 glGenBuffers(1, &buffer);
304 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800305 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, nullptr, GL_STREAM_DRAW);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400306 EXPECT_GL_NO_ERROR();
307
308 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800309 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixel_0_width, pixel_0_height,
310 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400311 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800312 glCompressedTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, pixel_1_width, pixel_1_height,
313 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400314 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800315 glCompressedTexSubImage2D(GL_TEXTURE_2D, 2, 0, 0, pixel_2_width, pixel_2_height,
316 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400317 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800318 glCompressedTexSubImage2D(GL_TEXTURE_2D, 3, 0, 0, pixel_3_width, pixel_3_height,
319 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400320 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800321 glCompressedTexSubImage2D(GL_TEXTURE_2D, 4, 0, 0, pixel_4_width, pixel_4_height,
322 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400323 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800324 glCompressedTexSubImage2D(GL_TEXTURE_2D, 5, 0, 0, pixel_5_width, pixel_5_height,
325 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400326 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800327 glCompressedTexSubImage2D(GL_TEXTURE_2D, 6, 0, 0, pixel_6_width, pixel_6_height,
328 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400329 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800330 glCompressedTexSubImage2D(GL_TEXTURE_2D, 7, 0, 0, pixel_7_width, pixel_7_height,
331 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400332 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800333 glCompressedTexSubImage2D(GL_TEXTURE_2D, 8, 0, 0, pixel_8_width, pixel_8_height,
334 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400335 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
Yunchao Hef81ce4a2017-04-24 10:49:17 +0800336 glCompressedTexSubImage2D(GL_TEXTURE_2D, 9, 0, 0, pixel_9_width, pixel_9_height,
337 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_size, nullptr);
Jamie Madillc751d1e2014-10-21 17:46:29 -0400338
339 EXPECT_GL_NO_ERROR();
340
341 glUseProgram(mTextureProgram);
342 glUniform1i(mTextureUniformLocation, 0);
343
344 drawQuad(mTextureProgram, "position", 0.5f);
345
346 EXPECT_GL_NO_ERROR();
347
348 glDeleteTextures(1, &texture);
349
350 EXPECT_GL_NO_ERROR();
351}
Jamie Madillfa05f602015-05-07 13:47:11 -0400352
353// 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 -0400354ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTest,
Geoff Lange0cc2a42016-01-20 10:58:17 -0500355 ES2_D3D9(),
356 ES2_D3D11(),
357 ES2_D3D11_FL9_3(),
358 ES2_OPENGL(),
359 ES3_OPENGL(),
360 ES2_OPENGLES(),
361 ES3_OPENGLES());
Jamie Madillfa05f602015-05-07 13:47:11 -0400362
363// 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 -0400364ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
Jamie Madillfa05f602015-05-07 13:47:11 -0400365
Yuly Novikovfea6e952016-06-23 16:29:20 -0400366ANGLE_INSTANTIATE_TEST(DXT1CompressedTextureTestD3D11, ES2_D3D11(), ES3_D3D11(), ES2_D3D11_FL9_3());