blob: 7fecf3876a05857b440a6e146129c9310adbffed [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
Geoff Lang066230a2013-10-30 12:59:30 -04007#include "ANGLETest.h"
Jamie Madillfa05f602015-05-07 13:47:11 -04008
Geoff Langd701ea12014-01-10 15:53:35 -05009#include "media/pixel.inl"
Geoff Lang066230a2013-10-30 12:59:30 -040010
Jamie Madillfa05f602015-05-07 13:47:11 -040011using namespace angle;
Austin Kinross18b931d2014-09-29 12:58:31 -070012
Geoff Lang066230a2013-10-30 12:59:30 -040013class CompressedTextureTest : public ANGLETest
14{
Jamie Madillfa05f602015-05-07 13:47:11 -040015 protected:
16 CompressedTextureTest()
Geoff Lang066230a2013-10-30 12:59:30 -040017 {
18 setWindowWidth(512);
19 setWindowHeight(512);
20 setConfigRedBits(8);
21 setConfigGreenBits(8);
22 setConfigBlueBits(8);
23 setConfigAlphaBits(8);
24 }
25
26 virtual void SetUp()
27 {
28 ANGLETest::SetUp();
29
30 const std::string vsSource = SHADER_SOURCE
31 (
32 precision highp float;
33 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;
41 }
42 );
43
44 const std::string textureFSSource = SHADER_SOURCE
45 (
46 precision highp float;
47 uniform sampler2D tex;
48 varying vec2 texcoord;
49
50 void main()
51 {
52 gl_FragColor = texture2D(tex, texcoord);
53 }
54 );
55
Jamie Madill5599c8f2014-08-26 13:16:39 -040056 mTextureProgram = CompileProgram(vsSource, textureFSSource);
Geoff Lang066230a2013-10-30 12:59:30 -040057 if (mTextureProgram == 0)
58 {
59 FAIL() << "shader compilation failed.";
60 }
61
62 mTextureUniformLocation = glGetUniformLocation(mTextureProgram, "tex");
63
64 ASSERT_GL_NO_ERROR();
65 }
66
67 virtual void TearDown()
68 {
69 glDeleteProgram(mTextureProgram);
70
71 ANGLETest::TearDown();
72 }
73
74 GLuint mTextureProgram;
75 GLint mTextureUniformLocation;
76};
77
Jamie Madillfa05f602015-05-07 13:47:11 -040078TEST_P(CompressedTextureTest, CompressedTexImage)
Geoff Lang066230a2013-10-30 12:59:30 -040079{
Geoff Langa8091652015-04-27 10:53:55 -040080 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
Geoff Lang066230a2013-10-30 12:59:30 -040081 {
Geoff Langa8091652015-04-27 10:53:55 -040082 std::cout << "Test skipped because GL_EXT_texture_compression_dxt1 is not available." << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -040083 return;
84 }
85
86 GLuint texture;
87 glGenTextures(1, &texture);
88 glBindTexture(GL_TEXTURE_2D, texture);
89 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
90 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
91 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
92 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
93
Geoff Langd701ea12014-01-10 15:53:35 -050094 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, pixel_0_data);
95 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, pixel_1_data);
96 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, pixel_2_data);
97 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, pixel_3_data);
98 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, pixel_4_data);
99 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, pixel_5_data);
100 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, pixel_6_data);
101 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, pixel_7_data);
102 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, pixel_8_data);
103 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 -0400104
105 EXPECT_GL_NO_ERROR();
106
107 glUseProgram(mTextureProgram);
108 glUniform1i(mTextureUniformLocation, 0);
109
110 drawQuad(mTextureProgram, "position", 0.5f);
111
112 EXPECT_GL_NO_ERROR();
113
114 glDeleteTextures(1, &texture);
115
116 EXPECT_GL_NO_ERROR();
117}
118
Jamie Madillfa05f602015-05-07 13:47:11 -0400119TEST_P(CompressedTextureTest, CompressedTexStorage)
Geoff Lang066230a2013-10-30 12:59:30 -0400120{
Geoff Langa8091652015-04-27 10:53:55 -0400121 if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
Geoff Lang066230a2013-10-30 12:59:30 -0400122 {
Geoff Langa8091652015-04-27 10:53:55 -0400123 std::cout << "Test skipped due to missing GL_EXT_texture_compression_dxt1" << std::endl;
Geoff Lang066230a2013-10-30 12:59:30 -0400124 return;
125 }
126
127 if (getClientVersion() < 3 && (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
128 {
Geoff Langa8091652015-04-27 10:53:55 -0400129 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 -0400130 return;
131 }
132
133 GLuint texture;
134 glGenTextures(1, &texture);
135 glBindTexture(GL_TEXTURE_2D, texture);
136 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
137 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
138 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
139 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
140
141 if (getClientVersion() < 3)
142 {
Geoff Langa836e482014-04-28 10:08:27 -0400143 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 -0400144 }
145 else
146 {
Geoff Langa836e482014-04-28 10:08:27 -0400147 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 -0400148 }
149 EXPECT_GL_NO_ERROR();
150
Geoff Langd701ea12014-01-10 15:53:35 -0500151 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 -0400152 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);
153 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);
154 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);
155 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);
156 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);
157 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);
158 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);
159 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);
160 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 -0400161
162 EXPECT_GL_NO_ERROR();
163
164 glUseProgram(mTextureProgram);
165 glUniform1i(mTextureUniformLocation, 0);
166
167 drawQuad(mTextureProgram, "position", 0.5f);
168
169 EXPECT_GL_NO_ERROR();
170
171 glDeleteTextures(1, &texture);
172
173 EXPECT_GL_NO_ERROR();
174}
Jamie Madillc751d1e2014-10-21 17:46:29 -0400175
Jamie Madillfa05f602015-05-07 13:47:11 -0400176class CompressedTextureTestES3 : public CompressedTextureTest { };
Jamie Madillc751d1e2014-10-21 17:46:29 -0400177
Jamie Madillfa05f602015-05-07 13:47:11 -0400178class CompressedTextureTestD3D11 : public CompressedTextureTest { };
Jamie Madillc751d1e2014-10-21 17:46:29 -0400179
Jamie Madillfa05f602015-05-07 13:47:11 -0400180TEST_P(CompressedTextureTestES3, PBOCompressedTexImage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400181{
182 GLuint texture;
183 glGenTextures(1, &texture);
184 glBindTexture(GL_TEXTURE_2D, texture);
185 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
186 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
187 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
188 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
189
190 GLuint buffer;
191 glGenBuffers(1, &buffer);
192 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
193 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, NULL, GL_STREAM_DRAW);
194 EXPECT_GL_NO_ERROR();
195
196 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
197 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, 0, pixel_0_size, NULL);
198 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
199 glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_width, pixel_1_height, 0, pixel_1_size, NULL);
200 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
201 glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_width, pixel_2_height, 0, pixel_2_size, NULL);
202 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
203 glCompressedTexImage2D(GL_TEXTURE_2D, 3, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_width, pixel_3_height, 0, pixel_3_size, NULL);
204 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
205 glCompressedTexImage2D(GL_TEXTURE_2D, 4, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_width, pixel_4_height, 0, pixel_4_size, NULL);
206 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
207 glCompressedTexImage2D(GL_TEXTURE_2D, 5, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_width, pixel_5_height, 0, pixel_5_size, NULL);
208 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
209 glCompressedTexImage2D(GL_TEXTURE_2D, 6, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_width, pixel_6_height, 0, pixel_6_size, NULL);
210 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
211 glCompressedTexImage2D(GL_TEXTURE_2D, 7, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_width, pixel_7_height, 0, pixel_7_size, NULL);
212 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
213 glCompressedTexImage2D(GL_TEXTURE_2D, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_width, pixel_8_height, 0, pixel_8_size, NULL);
214 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
215 glCompressedTexImage2D(GL_TEXTURE_2D, 9, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_width, pixel_9_height, 0, pixel_9_size, NULL);
216
217 EXPECT_GL_NO_ERROR();
218
219 glUseProgram(mTextureProgram);
220 glUniform1i(mTextureUniformLocation, 0);
221
222 drawQuad(mTextureProgram, "position", 0.5f);
223
224 EXPECT_GL_NO_ERROR();
225
226 glDeleteTextures(1, &buffer);
227 glDeleteTextures(1, &texture);
228
229 EXPECT_GL_NO_ERROR();
230}
231
232
Jamie Madillfa05f602015-05-07 13:47:11 -0400233TEST_P(CompressedTextureTestD3D11, PBOCompressedTexStorage)
Jamie Madillc751d1e2014-10-21 17:46:29 -0400234{
235 if (getClientVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
236 {
237 return;
238 }
239
240 if (getClientVersion() < 3 && (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
241 {
242 return;
243 }
244
245 GLuint texture;
246 glGenTextures(1, &texture);
247 glBindTexture(GL_TEXTURE_2D, texture);
248 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
249 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
250 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
251 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
252
253 if (getClientVersion() < 3)
254 {
255 glTexStorage2DEXT(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
256 }
257 else
258 {
259 glTexStorage2D(GL_TEXTURE_2D, pixel_levels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height);
260 }
261 EXPECT_GL_NO_ERROR();
262
263 GLuint buffer;
264 glGenBuffers(1, &buffer);
265 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
266 glBufferData(GL_PIXEL_UNPACK_BUFFER, pixel_0_size, NULL, GL_STREAM_DRAW);
267 EXPECT_GL_NO_ERROR();
268
269 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_0_size, pixel_0_data);
270 glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixel_0_width, pixel_0_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_size, NULL);
271 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_1_size, pixel_1_data);
272 glCompressedTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, pixel_1_width, pixel_1_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_1_size, NULL);
273 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_2_size, pixel_2_data);
274 glCompressedTexSubImage2D(GL_TEXTURE_2D, 2, 0, 0, pixel_2_width, pixel_2_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_2_size, NULL);
275 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_3_size, pixel_3_data);
276 glCompressedTexSubImage2D(GL_TEXTURE_2D, 3, 0, 0, pixel_3_width, pixel_3_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_3_size, NULL);
277 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_4_size, pixel_4_data);
278 glCompressedTexSubImage2D(GL_TEXTURE_2D, 4, 0, 0, pixel_4_width, pixel_4_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_4_size, NULL);
279 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_5_size, pixel_5_data);
280 glCompressedTexSubImage2D(GL_TEXTURE_2D, 5, 0, 0, pixel_5_width, pixel_5_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_5_size, NULL);
281 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_6_size, pixel_6_data);
282 glCompressedTexSubImage2D(GL_TEXTURE_2D, 6, 0, 0, pixel_6_width, pixel_6_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_6_size, NULL);
283 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_7_size, pixel_7_data);
284 glCompressedTexSubImage2D(GL_TEXTURE_2D, 7, 0, 0, pixel_7_width, pixel_7_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_7_size, NULL);
285 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_8_size, pixel_8_data);
286 glCompressedTexSubImage2D(GL_TEXTURE_2D, 8, 0, 0, pixel_8_width, pixel_8_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_8_size, NULL);
287 glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pixel_9_size, pixel_9_data);
288 glCompressedTexSubImage2D(GL_TEXTURE_2D, 9, 0, 0, pixel_9_width, pixel_9_height, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_9_size, NULL);
289
290 EXPECT_GL_NO_ERROR();
291
292 glUseProgram(mTextureProgram);
293 glUniform1i(mTextureUniformLocation, 0);
294
295 drawQuad(mTextureProgram, "position", 0.5f);
296
297 EXPECT_GL_NO_ERROR();
298
299 glDeleteTextures(1, &texture);
300
301 EXPECT_GL_NO_ERROR();
302}
Jamie Madillfa05f602015-05-07 13:47:11 -0400303
304// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
305ANGLE_INSTANTIATE_TEST(
306 CompressedTextureTest,
307 ES2_D3D9(), ES2_D3D11(), ES2_D3D11_FL9_3(), ES2_OPENGL(), ES3_OPENGL());
308
309// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
310ANGLE_INSTANTIATE_TEST(CompressedTextureTestES3, ES3_D3D11());
311
312ANGLE_INSTANTIATE_TEST(CompressedTextureTestD3D11, ES2_D3D11(), ES3_D3D11(), ES2_D3D11_FL9_3());