Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / gpu / command_buffer / service / feature_info_unittest.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/service/feature_info.h"
6
7 #include "base/command_line.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/string_number_conversions.h"
10 #include "gpu/command_buffer/service/gpu_service_test.h"
11 #include "gpu/command_buffer/service/gpu_switches.h"
12 #include "gpu/command_buffer/service/test_helper.h"
13 #include "gpu/command_buffer/service/texture_manager.h"
14 #include "gpu/config/gpu_driver_bug_workaround_type.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "ui/gl/gl_fence.h"
17 #include "ui/gl/gl_implementation.h"
18 #include "ui/gl/gl_mock.h"
19
20 using ::testing::_;
21 using ::testing::DoAll;
22 using ::testing::HasSubstr;
23 using ::testing::InSequence;
24 using ::testing::MatcherCast;
25 using ::testing::Not;
26 using ::testing::Pointee;
27 using ::testing::Return;
28 using ::testing::SetArrayArgument;
29 using ::testing::SetArgumentPointee;
30 using ::testing::StrEq;
31
32 namespace gpu {
33 namespace gles2 {
34
35 namespace {
36 const char kGLRendererStringANGLE[] = "ANGLE (some renderer)";
37 }  // anonymous namespace
38
39 class FeatureInfoTest : public GpuServiceTest {
40  public:
41   FeatureInfoTest() {
42   }
43
44   void SetupInitExpectations(const char* extensions) {
45     SetupInitExpectationsWithGLVersion(extensions, "", "");
46   }
47
48   void SetupInitExpectationsWithGLVersion(
49       const char* extensions, const char* renderer, const char* version) {
50     GpuServiceTest::SetUpWithGLVersion(version, extensions);
51     TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
52         gl_.get(), extensions, renderer, version);
53     info_ = new FeatureInfo();
54     info_->Initialize();
55   }
56
57   void SetupWithCommandLine(const CommandLine& command_line) {
58     GpuServiceTest::SetUp();
59     info_ = new FeatureInfo(command_line);
60   }
61
62   void SetupInitExpectationsWithCommandLine(
63       const char* extensions, const CommandLine& command_line) {
64     GpuServiceTest::SetUpWithGLVersion("2.0", extensions);
65     TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
66         gl_.get(), extensions, "", "");
67     info_ = new FeatureInfo(command_line);
68     info_->Initialize();
69   }
70
71   void SetupWithoutInit() {
72     GpuServiceTest::SetUp();
73     info_ = new FeatureInfo();
74   }
75
76  protected:
77   virtual void SetUp() OVERRIDE {
78     // Do nothing here, since we are using the explicit Setup*() functions.
79   }
80
81   virtual void TearDown() OVERRIDE {
82     info_ = NULL;
83     GpuServiceTest::TearDown();
84   }
85
86   scoped_refptr<FeatureInfo> info_;
87 };
88
89 namespace {
90
91 struct FormatInfo {
92    GLenum format;
93    const GLenum* types;
94    size_t count;
95 };
96
97 }  // anonymous namespace.
98
99 TEST_F(FeatureInfoTest, Basic) {
100   SetupWithoutInit();
101   // Test it starts off uninitialized.
102   EXPECT_FALSE(info_->feature_flags().chromium_framebuffer_multisample);
103   EXPECT_FALSE(info_->feature_flags().use_core_framebuffer_multisample);
104   EXPECT_FALSE(info_->feature_flags().multisampled_render_to_texture);
105   EXPECT_FALSE(info_->feature_flags(
106       ).use_img_for_multisampled_render_to_texture);
107   EXPECT_FALSE(info_->feature_flags().oes_standard_derivatives);
108   EXPECT_FALSE(info_->feature_flags().npot_ok);
109   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
110   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
111   EXPECT_FALSE(info_->feature_flags().oes_egl_image_external);
112   EXPECT_FALSE(info_->feature_flags().oes_depth24);
113   EXPECT_FALSE(info_->feature_flags().packed_depth24_stencil8);
114   EXPECT_FALSE(info_->feature_flags().angle_translated_shader_source);
115   EXPECT_FALSE(info_->feature_flags().angle_pack_reverse_row_order);
116   EXPECT_FALSE(info_->feature_flags().arb_texture_rectangle);
117   EXPECT_FALSE(info_->feature_flags().angle_instanced_arrays);
118   EXPECT_FALSE(info_->feature_flags().occlusion_query_boolean);
119   EXPECT_FALSE(info_->feature_flags(
120       ).use_arb_occlusion_query2_for_occlusion_query_boolean);
121   EXPECT_FALSE(info_->feature_flags(
122       ).use_arb_occlusion_query_for_occlusion_query_boolean);
123   EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
124   EXPECT_FALSE(info_->feature_flags().map_buffer_range);
125   EXPECT_FALSE(info_->feature_flags().use_async_readpixels);
126   EXPECT_FALSE(info_->feature_flags().ext_discard_framebuffer);
127   EXPECT_FALSE(info_->feature_flags().angle_depth_texture);
128   EXPECT_FALSE(info_->feature_flags().is_angle);
129
130 #define GPU_OP(type, name) EXPECT_FALSE(info_->workarounds().name);
131   GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
132 #undef GPU_OP
133   EXPECT_EQ(0, info_->workarounds().max_texture_size);
134   EXPECT_EQ(0, info_->workarounds().max_cube_map_texture_size);
135
136   // Test good types.
137   {
138     static const GLenum kAlphaTypes[] = {
139         GL_UNSIGNED_BYTE,
140     };
141     static const GLenum kRGBTypes[] = {
142         GL_UNSIGNED_BYTE,
143         GL_UNSIGNED_SHORT_5_6_5,
144     };
145     static const GLenum kRGBATypes[] = {
146         GL_UNSIGNED_BYTE,
147         GL_UNSIGNED_SHORT_4_4_4_4,
148         GL_UNSIGNED_SHORT_5_5_5_1,
149     };
150     static const GLenum kLuminanceTypes[] = {
151         GL_UNSIGNED_BYTE,
152     };
153     static const GLenum kLuminanceAlphaTypes[] = {
154         GL_UNSIGNED_BYTE,
155     };
156     static const FormatInfo kFormatTypes[] = {
157       { GL_ALPHA, kAlphaTypes, arraysize(kAlphaTypes), },
158       { GL_RGB, kRGBTypes, arraysize(kRGBTypes), },
159       { GL_RGBA, kRGBATypes, arraysize(kRGBATypes), },
160       { GL_LUMINANCE, kLuminanceTypes, arraysize(kLuminanceTypes), },
161       { GL_LUMINANCE_ALPHA, kLuminanceAlphaTypes,
162         arraysize(kLuminanceAlphaTypes), } ,
163     };
164     for (size_t ii = 0; ii < arraysize(kFormatTypes); ++ii) {
165       const FormatInfo& info = kFormatTypes[ii];
166       const ValueValidator<GLenum>& validator =
167           info_->GetTextureFormatValidator(info.format);
168       for (size_t jj = 0; jj < info.count; ++jj) {
169         EXPECT_TRUE(validator.IsValid(info.types[jj]));
170       }
171     }
172   }
173
174   // Test some bad types
175   {
176     static const GLenum kAlphaTypes[] = {
177         GL_UNSIGNED_SHORT_5_5_5_1,
178         GL_FLOAT,
179     };
180     static const GLenum kRGBTypes[] = {
181         GL_UNSIGNED_SHORT_4_4_4_4,
182         GL_FLOAT,
183     };
184     static const GLenum kRGBATypes[] = {
185         GL_UNSIGNED_SHORT_5_6_5,
186         GL_FLOAT,
187     };
188     static const GLenum kLuminanceTypes[] = {
189         GL_UNSIGNED_SHORT_4_4_4_4,
190         GL_FLOAT,
191     };
192     static const GLenum kLuminanceAlphaTypes[] = {
193         GL_UNSIGNED_SHORT_5_5_5_1,
194         GL_FLOAT,
195     };
196     static const GLenum kBGRATypes[] = {
197         GL_UNSIGNED_BYTE,
198         GL_UNSIGNED_SHORT_5_6_5,
199         GL_FLOAT,
200     };
201     static const GLenum kDepthTypes[] = {
202         GL_UNSIGNED_BYTE,
203         GL_UNSIGNED_SHORT,
204         GL_UNSIGNED_INT,
205         GL_FLOAT,
206     };
207     static const FormatInfo kFormatTypes[] = {
208       { GL_ALPHA, kAlphaTypes, arraysize(kAlphaTypes), },
209       { GL_RGB, kRGBTypes, arraysize(kRGBTypes), },
210       { GL_RGBA, kRGBATypes, arraysize(kRGBATypes), },
211       { GL_LUMINANCE, kLuminanceTypes, arraysize(kLuminanceTypes), },
212       { GL_LUMINANCE_ALPHA, kLuminanceAlphaTypes,
213         arraysize(kLuminanceAlphaTypes), } ,
214       { GL_BGRA_EXT, kBGRATypes, arraysize(kBGRATypes), },
215       { GL_DEPTH_COMPONENT, kDepthTypes, arraysize(kDepthTypes), },
216     };
217     for (size_t ii = 0; ii < arraysize(kFormatTypes); ++ii) {
218       const FormatInfo& info = kFormatTypes[ii];
219       const ValueValidator<GLenum>& validator =
220           info_->GetTextureFormatValidator(info.format);
221       for (size_t jj = 0; jj < info.count; ++jj) {
222         EXPECT_FALSE(validator.IsValid(info.types[jj]));
223       }
224     }
225   }
226 }
227
228 TEST_F(FeatureInfoTest, InitializeNoExtensions) {
229   SetupInitExpectations("");
230   // Check default extensions are there
231   EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_resource_safe"));
232   EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_strict_attribs"));
233   EXPECT_THAT(info_->extensions(),
234               HasSubstr("GL_ANGLE_translated_shader_source"));
235
236   // Check a couple of random extensions that should not be there.
237   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_npot")));
238   EXPECT_THAT(info_->extensions(),
239               Not(HasSubstr("GL_EXT_texture_compression_dxt1")));
240   EXPECT_THAT(info_->extensions(),
241               Not(HasSubstr("GL_CHROMIUM_texture_compression_dxt3")));
242   EXPECT_THAT(info_->extensions(),
243               Not(HasSubstr("GL_CHROMIUM_texture_compression_dxt5")));
244   EXPECT_THAT(info_->extensions(),
245               Not(HasSubstr("GL_ANGLE_texture_usage")));
246   EXPECT_THAT(info_->extensions(),
247               Not(HasSubstr("GL_EXT_texture_storage")));
248   EXPECT_THAT(info_->extensions(),
249               Not(HasSubstr("GL_OES_compressed_ETC1_RGB8_texture")));
250   EXPECT_THAT(info_->extensions(),
251               Not(HasSubstr("GL_AMD_compressed_ATC_texture")));
252   EXPECT_THAT(info_->extensions(),
253               Not(HasSubstr("GL_IMG_texture_compression_pvrtc")));
254   EXPECT_FALSE(info_->feature_flags().npot_ok);
255   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
256       GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
257   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
258       GL_COMPRESSED_RGBA_S3TC_DXT1_EXT));
259   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
260       GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
261   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
262       GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
263   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
264       GL_ETC1_RGB8_OES));
265   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
266       GL_ATC_RGB_AMD));
267   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
268       GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
269   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
270       GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
271   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
272       GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
273   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
274       GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
275   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
276       GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
277   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
278       GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
279   EXPECT_FALSE(info_->validators()->read_pixel_format.IsValid(
280       GL_BGRA_EXT));
281   EXPECT_FALSE(info_->validators()->texture_parameter.IsValid(
282       GL_TEXTURE_MAX_ANISOTROPY_EXT));
283   EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
284       GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
285   EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
286       GL_READ_FRAMEBUFFER_EXT));
287   EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
288       GL_DRAW_FRAMEBUFFER_EXT));
289   EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
290       GL_READ_FRAMEBUFFER_BINDING_EXT));
291   EXPECT_FALSE(info_->validators()->render_buffer_parameter.IsValid(
292       GL_MAX_SAMPLES_EXT));
293   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
294       GL_DEPTH_COMPONENT));
295   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
296   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
297   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
298   EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
299       GL_DEPTH24_STENCIL8));
300   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
301       GL_DEPTH_STENCIL));
302   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
303       GL_RGBA32F));
304   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
305       GL_RGB32F));
306   EXPECT_FALSE(info_->validators()->texture_format.IsValid(
307       GL_DEPTH_STENCIL));
308   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(
309       GL_UNSIGNED_INT_24_8));
310   EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
311       GL_DEPTH_COMPONENT24));
312   EXPECT_FALSE(info_->validators()->texture_parameter.IsValid(
313       GL_TEXTURE_USAGE_ANGLE));
314   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
315       GL_DEPTH_COMPONENT16));
316   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
317       GL_DEPTH_COMPONENT32_OES));
318   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
319       GL_DEPTH24_STENCIL8_OES));
320   EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MIN_EXT));
321   EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MAX_EXT));
322   EXPECT_FALSE(info_->feature_flags().chromium_sync_query);
323 }
324
325 TEST_F(FeatureInfoTest, InitializeWithANGLE) {
326   SetupInitExpectationsWithGLVersion("", kGLRendererStringANGLE, "");
327   EXPECT_TRUE(info_->feature_flags().is_angle);
328 }
329
330 TEST_F(FeatureInfoTest, InitializeNPOTExtensionGLES) {
331   SetupInitExpectations("GL_OES_texture_npot");
332   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_npot"));
333   EXPECT_TRUE(info_->feature_flags().npot_ok);
334 }
335
336 TEST_F(FeatureInfoTest, InitializeNPOTExtensionGL) {
337   SetupInitExpectations("GL_ARB_texture_non_power_of_two");
338   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_npot"));
339   EXPECT_TRUE(info_->feature_flags().npot_ok);
340 }
341
342 TEST_F(FeatureInfoTest, InitializeDXTExtensionGLES2) {
343   SetupInitExpectations("GL_EXT_texture_compression_dxt1");
344   EXPECT_THAT(info_->extensions(),
345               HasSubstr("GL_EXT_texture_compression_dxt1"));
346   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
347       GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
348   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
349       GL_COMPRESSED_RGBA_S3TC_DXT1_EXT));
350   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
351       GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
352   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
353       GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
354 }
355
356 TEST_F(FeatureInfoTest, InitializeDXTExtensionGL) {
357   SetupInitExpectations("GL_EXT_texture_compression_s3tc");
358   EXPECT_THAT(info_->extensions(),
359               HasSubstr("GL_EXT_texture_compression_dxt1"));
360   EXPECT_THAT(info_->extensions(),
361               HasSubstr("GL_CHROMIUM_texture_compression_dxt3"));
362   EXPECT_THAT(info_->extensions(),
363               HasSubstr("GL_CHROMIUM_texture_compression_dxt5"));
364   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
365       GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
366   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
367       GL_COMPRESSED_RGBA_S3TC_DXT1_EXT));
368   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
369       GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
370   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
371       GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
372 }
373
374 TEST_F(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GLES2) {
375   SetupInitExpectations("GL_EXT_texture_format_BGRA8888");
376   EXPECT_THAT(info_->extensions(),
377               HasSubstr("GL_EXT_texture_format_BGRA8888"));
378   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
379       GL_BGRA_EXT));
380   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
381       GL_BGRA_EXT));
382   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_BGRA_EXT).IsValid(
383       GL_UNSIGNED_BYTE));
384   EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
385       GL_BGRA8_EXT));
386 }
387
388 TEST_F(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GL) {
389   SetupInitExpectations("GL_EXT_bgra");
390   EXPECT_THAT(info_->extensions(),
391               HasSubstr("GL_EXT_texture_format_BGRA8888"));
392   EXPECT_THAT(info_->extensions(),
393               HasSubstr("GL_EXT_read_format_bgra"));
394   EXPECT_THAT(info_->extensions(),
395               HasSubstr("GL_CHROMIUM_renderbuffer_format_BGRA8888"));
396   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
397       GL_BGRA_EXT));
398   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
399       GL_BGRA_EXT));
400   EXPECT_TRUE(info_->validators()->read_pixel_format.IsValid(
401       GL_BGRA_EXT));
402   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_BGRA_EXT).IsValid(
403       GL_UNSIGNED_BYTE));
404   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
405       GL_BGRA8_EXT));
406 }
407
408 TEST_F(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888Apple) {
409   SetupInitExpectations("GL_APPLE_texture_format_BGRA8888");
410   EXPECT_THAT(info_->extensions(),
411               HasSubstr("GL_EXT_texture_format_BGRA8888"));
412   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
413       GL_BGRA_EXT));
414   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
415       GL_BGRA_EXT));
416   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_BGRA_EXT).IsValid(
417       GL_UNSIGNED_BYTE));
418   EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
419       GL_BGRA8_EXT));
420 }
421
422 TEST_F(FeatureInfoTest, InitializeEXT_read_format_bgra) {
423   SetupInitExpectations("GL_EXT_read_format_bgra");
424   EXPECT_THAT(info_->extensions(),
425               HasSubstr("GL_EXT_read_format_bgra"));
426   EXPECT_FALSE(info_->validators()->texture_format.IsValid(
427       GL_BGRA_EXT));
428   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
429       GL_BGRA_EXT));
430   EXPECT_TRUE(info_->validators()->read_pixel_format.IsValid(
431       GL_BGRA_EXT));
432   EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
433       GL_BGRA8_EXT));
434 }
435
436 TEST_F(FeatureInfoTest, InitializeEXT_texture_storage) {
437   SetupInitExpectations("GL_EXT_texture_storage");
438   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
439   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
440   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
441       GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
442   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
443       GL_BGRA8_EXT));
444   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
445       GL_RGBA32F_EXT));
446   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
447       GL_RGB32F_EXT));
448   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
449       GL_ALPHA32F_EXT));
450   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
451       GL_LUMINANCE32F_EXT));
452   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
453       GL_LUMINANCE_ALPHA32F_EXT));
454   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
455       GL_RGBA16F_EXT));
456   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
457       GL_RGB16F_EXT));
458   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
459       GL_ALPHA16F_EXT));
460   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
461       GL_LUMINANCE16F_EXT));
462   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
463       GL_LUMINANCE_ALPHA16F_EXT));
464 }
465
466 TEST_F(FeatureInfoTest, InitializeARB_texture_storage) {
467   SetupInitExpectations("GL_ARB_texture_storage");
468   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
469   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
470   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
471       GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
472 }
473
474 TEST_F(FeatureInfoTest, InitializeEXT_texture_storage_BGRA) {
475   SetupInitExpectations("GL_EXT_texture_storage GL_EXT_bgra");
476   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
477   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
478   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
479       GL_BGRA8_EXT));
480   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
481 }
482
483 TEST_F(FeatureInfoTest, InitializeARB_texture_storage_BGRA) {
484   SetupInitExpectations("GL_ARB_texture_storage GL_EXT_bgra");
485   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
486   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
487   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
488       GL_BGRA8_EXT));
489   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
490 }
491
492 TEST_F(FeatureInfoTest, InitializeEXT_texture_storage_BGRA8888) {
493   SetupInitExpectations(
494       "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888");
495   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
496   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
497   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
498   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
499       GL_BGRA8_EXT));
500   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
501 }
502
503 TEST_F(FeatureInfoTest, InitializeEXT_texture_storage_float) {
504   SetupInitExpectations("GL_EXT_texture_storage GL_OES_texture_float");
505   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
506   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
507   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
508       GL_RGBA32F_EXT));
509   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
510       GL_RGB32F_EXT));
511   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
512       GL_ALPHA32F_EXT));
513   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
514       GL_LUMINANCE32F_EXT));
515   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
516       GL_LUMINANCE_ALPHA32F_EXT));
517 }
518
519 TEST_F(FeatureInfoTest, InitializeEXT_texture_storage_half_float) {
520   SetupInitExpectations("GL_EXT_texture_storage GL_OES_texture_half_float");
521   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
522   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
523   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
524       GL_RGBA16F_EXT));
525   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
526       GL_RGB16F_EXT));
527   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
528       GL_ALPHA16F_EXT));
529   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
530       GL_LUMINANCE16F_EXT));
531   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
532       GL_LUMINANCE_ALPHA16F_EXT));
533 }
534
535 // Check how to handle ES, texture_storage and BGRA combination; 8 tests.
536
537 // 1- ES2 + GL_EXT_texture_storage -> GL_EXT_texture_storage (and no
538 // GL_EXT_texture_format_BGRA8888 - we don't claim to handle GL_BGRA8 in
539 // glTexStorage2DEXT)
540 TEST_F(FeatureInfoTest, InitializeGLES2_texture_storage) {
541   SetupInitExpectationsWithGLVersion(
542       "GL_EXT_texture_storage", "", "OpenGL ES 2.0");
543   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
544   EXPECT_THAT(info_->extensions(),
545               Not(HasSubstr("GL_EXT_texture_format_BGRA8888")));
546 }
547
548 // 2- ES2 + GL_EXT_texture_storage + (GL_EXT_texture_format_BGRA8888 or
549 // GL_APPLE_texture_format_bgra8888)
550 TEST_F(FeatureInfoTest, InitializeGLES2_texture_storage_BGRA) {
551   SetupInitExpectationsWithGLVersion(
552       "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888",
553       "",
554       "OpenGL ES 2.0");
555   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
556   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
557 }
558
559 // 3- ES2 + GL_EXT_texture_format_BGRA8888 or GL_APPLE_texture_format_bgra8888
560 TEST_F(FeatureInfoTest, InitializeGLES2_texture_format_BGRA) {
561   SetupInitExpectationsWithGLVersion(
562       "GL_EXT_texture_format_BGRA8888", "", "OpenGL ES 2.0");
563   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_EXT_texture_storage")));
564   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
565 }
566
567 // 4- ES2 (neither GL_EXT_texture_storage nor GL_EXT_texture_format_BGRA8888) ->
568 // nothing
569 TEST_F(FeatureInfoTest, InitializeGLES2_neither_texture_storage_nor_BGRA) {
570   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
571   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_EXT_texture_storage")));
572   EXPECT_THAT(info_->extensions(),
573               Not(HasSubstr("GL_EXT_texture_format_BGRA8888")));
574 }
575
576 // 5- ES3 + GL_EXT_texture_format_BGRA8888 -> GL_EXT_texture_format_BGRA8888
577 // (we can't expose GL_EXT_texture_storage because we fail the GL_BGRA8
578 // requirement)
579 TEST_F(FeatureInfoTest, InitializeGLES3_texture_storage_EXT_BGRA) {
580   SetupInitExpectationsWithGLVersion(
581       "GL_EXT_texture_format_BGRA8888", "", "OpenGL ES 3.0");
582   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_EXT_texture_storage")));
583   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
584 }
585
586 // 6- ES3 + GL_APPLE_texture_format_bgra8888 -> GL_EXT_texture_storage +
587 // GL_EXT_texture_format_BGRA8888 (driver promises to handle GL_BGRA8 by
588 // exposing GL_APPLE_texture_format_bgra8888)
589 TEST_F(FeatureInfoTest, InitializeGLES3_texture_storage_APPLE_BGRA) {
590   SetupInitExpectationsWithGLVersion(
591       "GL_APPLE_texture_format_BGRA8888", "", "OpenGL ES 3.0");
592   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
593   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
594 }
595
596 // 7- ES3 + GL_EXT_texture_storage + GL_EXT_texture_format_BGRA8888 ->
597 // GL_EXT_texture_storage + GL_EXT_texture_format_BGRA8888  (driver promises to
598 // handle GL_BGRA8 by exposing GL_EXT_texture_storage)
599 TEST_F(FeatureInfoTest, InitializeGLES3_EXT_texture_storage_EXT_BGRA) {
600   SetupInitExpectationsWithGLVersion(
601       "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888",
602       "",
603       "OpenGL ES 3.0");
604   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
605   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
606 }
607
608 // 8- ES3 + none of the above -> GL_EXT_texture_storage (and no
609 // GL_EXT_texture_format_BGRA8888 - we don't claim to handle GL_BGRA8)
610 TEST_F(FeatureInfoTest, InitializeGLES3_texture_storage) {
611   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
612   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
613   EXPECT_THAT(info_->extensions(),
614               Not(HasSubstr("GL_EXT_texture_format_BGRA8888")));
615 }
616
617 TEST_F(FeatureInfoTest, InitializeARB_texture_float) {
618   SetupInitExpectations("GL_ARB_texture_float");
619   EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgba);
620   EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgb);
621   std::string extensions = info_->extensions() + " ";
622   EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgb "));
623   EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgba"));
624   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
625       GL_RGBA32F));
626   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
627       GL_RGB32F));
628 }
629
630 TEST_F(FeatureInfoTest, InitializeOES_texture_floatGLES2) {
631   SetupInitExpectations("GL_OES_texture_float");
632   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
633   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
634   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
635   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_half_float")));
636   EXPECT_THAT(info_->extensions(),
637               Not(HasSubstr("GL_OES_texture_float_linear")));
638   EXPECT_THAT(info_->extensions(),
639               Not(HasSubstr("GL_OES_texture_half_float_linear")));
640   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
641   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
642   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
643       GL_FLOAT));
644   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
645       GL_FLOAT));
646   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
647       GL_FLOAT));
648   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
649       GL_FLOAT));
650   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
651       GL_FLOAT));
652   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
653       GL_HALF_FLOAT_OES));
654   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
655       GL_HALF_FLOAT_OES));
656   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
657       GL_HALF_FLOAT_OES));
658   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
659       GL_HALF_FLOAT_OES));
660   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
661       GL_HALF_FLOAT_OES));
662 }
663
664 TEST_F(FeatureInfoTest, InitializeOES_texture_float_linearGLES2) {
665   SetupInitExpectations("GL_OES_texture_float GL_OES_texture_float_linear");
666   EXPECT_TRUE(info_->feature_flags().enable_texture_float_linear);
667   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
668   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
669   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_half_float")));
670   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float_linear"));
671   EXPECT_THAT(info_->extensions(),
672               Not(HasSubstr("GL_OES_texture_half_float_linear")));
673   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
674   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
675   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
676       GL_FLOAT));
677   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
678       GL_FLOAT));
679   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
680       GL_FLOAT));
681   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
682       GL_FLOAT));
683   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
684       GL_FLOAT));
685   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
686       GL_HALF_FLOAT_OES));
687   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
688       GL_HALF_FLOAT_OES));
689   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
690       GL_HALF_FLOAT_OES));
691   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
692       GL_HALF_FLOAT_OES));
693   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
694       GL_HALF_FLOAT_OES));
695 }
696
697 TEST_F(FeatureInfoTest, InitializeOES_texture_half_floatGLES2) {
698   SetupInitExpectations("GL_OES_texture_half_float");
699   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
700   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
701   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_float")));
702   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
703   EXPECT_THAT(info_->extensions(),
704               Not(HasSubstr("GL_OES_texture_float_linear")));
705   EXPECT_THAT(info_->extensions(),
706               Not(HasSubstr("GL_OES_texture_half_float_linear")));
707   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
708   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
709   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
710       GL_FLOAT));
711   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
712       GL_FLOAT));
713   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
714       GL_FLOAT));
715   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
716       GL_FLOAT));
717   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
718       GL_FLOAT));
719   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
720       GL_HALF_FLOAT_OES));
721   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
722       GL_HALF_FLOAT_OES));
723   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
724       GL_HALF_FLOAT_OES));
725   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
726       GL_HALF_FLOAT_OES));
727   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
728       GL_HALF_FLOAT_OES));
729 }
730
731 TEST_F(FeatureInfoTest, InitializeOES_texture_half_float_linearGLES2) {
732   SetupInitExpectations(
733       "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
734   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
735   EXPECT_TRUE(info_->feature_flags().enable_texture_half_float_linear);
736   EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_float")));
737   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
738   EXPECT_THAT(info_->extensions(),
739               Not(HasSubstr("GL_OES_texture_float_linear")));
740   EXPECT_THAT(info_->extensions(),
741               HasSubstr("GL_OES_texture_half_float_linear"));
742   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
743   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
744   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
745       GL_FLOAT));
746   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
747       GL_FLOAT));
748   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
749       GL_FLOAT));
750   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
751       GL_FLOAT));
752   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
753       GL_FLOAT));
754   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
755       GL_HALF_FLOAT_OES));
756   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
757       GL_HALF_FLOAT_OES));
758   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
759       GL_HALF_FLOAT_OES));
760   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
761       GL_HALF_FLOAT_OES));
762   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
763       GL_HALF_FLOAT_OES));
764 }
765
766 TEST_F(FeatureInfoTest, InitializeEXT_framebuffer_multisample) {
767   SetupInitExpectations("GL_EXT_framebuffer_multisample");
768   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
769   EXPECT_THAT(info_->extensions(),
770               HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
771   EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
772       GL_READ_FRAMEBUFFER_EXT));
773   EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
774       GL_DRAW_FRAMEBUFFER_EXT));
775   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
776       GL_READ_FRAMEBUFFER_BINDING_EXT));
777   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
778       GL_MAX_SAMPLES_EXT));
779   EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
780       GL_RENDERBUFFER_SAMPLES_EXT));
781 }
782
783 TEST_F(FeatureInfoTest, InitializeANGLE_framebuffer_multisample) {
784   SetupInitExpectationsWithGLVersion(
785       "GL_ANGLE_framebuffer_multisample", kGLRendererStringANGLE, "");
786   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
787   EXPECT_THAT(info_->extensions(),
788               HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
789   EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
790       GL_READ_FRAMEBUFFER_EXT));
791   EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
792       GL_DRAW_FRAMEBUFFER_EXT));
793   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
794       GL_READ_FRAMEBUFFER_BINDING_EXT));
795   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
796       GL_MAX_SAMPLES_EXT));
797   EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
798       GL_RENDERBUFFER_SAMPLES_EXT));
799 }
800
801 // We don't allow ANGLE_framebuffer_multisample on non-ANGLE implementations,
802 // because we wouldn't be choosing the right driver entry point and because the
803 // extension was falsely advertised on some Android devices (crbug.com/165736).
804 TEST_F(FeatureInfoTest, InitializeANGLE_framebuffer_multisampleWithoutANGLE) {
805   SetupInitExpectations("GL_ANGLE_framebuffer_multisample");
806   EXPECT_FALSE(info_->feature_flags().chromium_framebuffer_multisample);
807   EXPECT_THAT(info_->extensions(),
808               Not(HasSubstr("GL_CHROMIUM_framebuffer_multisample")));
809   EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
810       GL_READ_FRAMEBUFFER_EXT));
811   EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
812       GL_DRAW_FRAMEBUFFER_EXT));
813   EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
814       GL_READ_FRAMEBUFFER_BINDING_EXT));
815   EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
816       GL_MAX_SAMPLES_EXT));
817   EXPECT_FALSE(info_->validators()->render_buffer_parameter.IsValid(
818       GL_RENDERBUFFER_SAMPLES_EXT));
819 }
820
821 TEST_F(FeatureInfoTest, InitializeEXT_multisampled_render_to_texture) {
822   SetupInitExpectations("GL_EXT_multisampled_render_to_texture");
823   EXPECT_TRUE(info_->feature_flags(
824       ).multisampled_render_to_texture);
825   EXPECT_FALSE(info_->feature_flags(
826       ).use_img_for_multisampled_render_to_texture);
827   EXPECT_THAT(info_->extensions(),
828               HasSubstr("GL_EXT_multisampled_render_to_texture"));
829   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
830       GL_MAX_SAMPLES_EXT));
831   EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
832       GL_RENDERBUFFER_SAMPLES_EXT));
833   EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
834       GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT));
835 }
836
837 TEST_F(FeatureInfoTest, InitializeIMG_multisampled_render_to_texture) {
838   SetupInitExpectations("GL_IMG_multisampled_render_to_texture");
839   EXPECT_TRUE(info_->feature_flags(
840       ).multisampled_render_to_texture);
841   EXPECT_TRUE(info_->feature_flags(
842       ).use_img_for_multisampled_render_to_texture);
843   EXPECT_THAT(info_->extensions(),
844               HasSubstr("GL_EXT_multisampled_render_to_texture"));
845   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
846       GL_MAX_SAMPLES_EXT));
847   EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
848       GL_RENDERBUFFER_SAMPLES_EXT));
849   EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
850       GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT));
851 }
852
853 TEST_F(FeatureInfoTest, InitializeEXT_texture_filter_anisotropic) {
854   SetupInitExpectations("GL_EXT_texture_filter_anisotropic");
855   EXPECT_THAT(info_->extensions(),
856               HasSubstr("GL_EXT_texture_filter_anisotropic"));
857   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
858       GL_TEXTURE_MAX_ANISOTROPY_EXT));
859   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
860       GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
861 }
862
863 TEST_F(FeatureInfoTest, InitializeEXT_ARB_depth_texture) {
864   SetupInitExpectations("GL_ARB_depth_texture");
865   EXPECT_THAT(info_->extensions(),
866               HasSubstr("GL_GOOGLE_depth_texture"));
867   EXPECT_THAT(info_->extensions(),
868               HasSubstr("GL_CHROMIUM_depth_texture"));
869   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
870       GL_DEPTH_COMPONENT));
871   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
872   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
873   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
874   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
875   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
876       GL_UNSIGNED_SHORT));
877   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
878       GL_UNSIGNED_INT));
879   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
880       GL_UNSIGNED_INT_24_8));
881 }
882
883 TEST_F(FeatureInfoTest, InitializeOES_ARB_depth_texture) {
884   SetupInitExpectations("GL_OES_depth_texture");
885   EXPECT_THAT(info_->extensions(),
886               HasSubstr("GL_GOOGLE_depth_texture"));
887   EXPECT_THAT(info_->extensions(),
888               HasSubstr("GL_CHROMIUM_depth_texture"));
889   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
890       GL_DEPTH_COMPONENT));
891   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
892   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
893   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
894   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
895   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
896       GL_UNSIGNED_SHORT));
897   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
898       GL_UNSIGNED_INT));
899   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
900       GL_UNSIGNED_INT_24_8));
901 }
902
903 TEST_F(FeatureInfoTest, InitializeANGLE_depth_texture) {
904   SetupInitExpectations("GL_ANGLE_depth_texture");
905   EXPECT_THAT(info_->extensions(),
906               HasSubstr("GL_GOOGLE_depth_texture"));
907   EXPECT_THAT(info_->extensions(),
908               HasSubstr("GL_CHROMIUM_depth_texture"));
909   EXPECT_THAT(info_->extensions(),
910               Not(HasSubstr("GL_ANGLE_depth_texture")));
911   EXPECT_TRUE(info_->feature_flags().angle_depth_texture);
912   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
913       GL_DEPTH_COMPONENT));
914   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
915   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
916   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
917   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
918   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
919       GL_DEPTH_COMPONENT16));
920   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
921       GL_DEPTH_COMPONENT32_OES));
922   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
923       GL_DEPTH24_STENCIL8_OES));
924   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
925       GL_UNSIGNED_SHORT));
926   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
927       GL_UNSIGNED_INT));
928   EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
929       GL_UNSIGNED_INT_24_8));
930 }
931
932 TEST_F(FeatureInfoTest, InitializeEXT_packed_depth_stencil) {
933   SetupInitExpectations("GL_EXT_packed_depth_stencil");
934   EXPECT_THAT(info_->extensions(),
935               HasSubstr("GL_OES_packed_depth_stencil"));
936   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
937       GL_DEPTH24_STENCIL8));
938   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
939       GL_DEPTH_COMPONENT));
940   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
941   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
942   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
943 }
944
945 TEST_F(FeatureInfoTest, InitializeOES_packed_depth_stencil) {
946   SetupInitExpectations("GL_OES_packed_depth_stencil");
947   EXPECT_THAT(info_->extensions(),
948               HasSubstr("GL_OES_packed_depth_stencil"));
949   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
950       GL_DEPTH24_STENCIL8));
951   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
952       GL_DEPTH_COMPONENT));
953   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
954   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
955   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
956 }
957
958 TEST_F(FeatureInfoTest,
959        InitializeOES_packed_depth_stencil_and_GL_ARB_depth_texture) {
960   SetupInitExpectations("GL_OES_packed_depth_stencil GL_ARB_depth_texture");
961   EXPECT_THAT(info_->extensions(),
962               HasSubstr("GL_OES_packed_depth_stencil"));
963   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
964       GL_DEPTH24_STENCIL8));
965   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
966       GL_DEPTH_STENCIL));
967   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
968       GL_DEPTH_STENCIL));
969   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(
970       GL_UNSIGNED_INT_24_8));
971   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
972       GL_UNSIGNED_SHORT));
973   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
974       GL_UNSIGNED_INT));
975   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
976       GL_UNSIGNED_INT_24_8));
977 }
978
979 TEST_F(FeatureInfoTest, InitializeOES_depth24) {
980   SetupInitExpectations("GL_OES_depth24");
981   EXPECT_TRUE(info_->feature_flags().oes_depth24);
982   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_depth24"));
983   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
984       GL_DEPTH_COMPONENT24));
985 }
986
987 TEST_F(FeatureInfoTest, InitializeOES_standard_derivatives) {
988   SetupInitExpectations("GL_OES_standard_derivatives");
989   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_standard_derivatives"));
990   EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
991   EXPECT_TRUE(info_->validators()->hint_target.IsValid(
992       GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
993   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
994       GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
995 }
996
997 TEST_F(FeatureInfoTest, InitializeOES_rgb8_rgba8) {
998   SetupInitExpectations("GL_OES_rgb8_rgba8");
999   EXPECT_THAT(info_->extensions(),
1000               HasSubstr("GL_OES_rgb8_rgba8"));
1001   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
1002       GL_RGB8_OES));
1003   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
1004       GL_RGBA8_OES));
1005 }
1006
1007 TEST_F(FeatureInfoTest, InitializeOES_EGL_image_external) {
1008   SetupInitExpectations("GL_OES_EGL_image_external");
1009   EXPECT_THAT(info_->extensions(),
1010               HasSubstr("GL_OES_EGL_image_external"));
1011   EXPECT_TRUE(info_->feature_flags().oes_egl_image_external);
1012   EXPECT_TRUE(info_->validators()->texture_bind_target.IsValid(
1013       GL_TEXTURE_EXTERNAL_OES));
1014   EXPECT_TRUE(info_->validators()->get_tex_param_target.IsValid(
1015       GL_TEXTURE_EXTERNAL_OES));
1016   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
1017       GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES));
1018   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
1019       GL_TEXTURE_BINDING_EXTERNAL_OES));
1020 }
1021
1022 TEST_F(FeatureInfoTest, InitializeOES_compressed_ETC1_RGB8_texture) {
1023   SetupInitExpectations("GL_OES_compressed_ETC1_RGB8_texture");
1024   EXPECT_THAT(info_->extensions(),
1025               HasSubstr("GL_OES_compressed_ETC1_RGB8_texture"));
1026   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1027       GL_ETC1_RGB8_OES));
1028   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
1029       GL_ETC1_RGB8_OES));
1030 }
1031
1032 TEST_F(FeatureInfoTest, InitializeAMD_compressed_ATC_texture) {
1033   SetupInitExpectations("GL_AMD_compressed_ATC_texture");
1034   EXPECT_THAT(info_->extensions(),
1035               HasSubstr("GL_AMD_compressed_ATC_texture"));
1036   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1037       GL_ATC_RGB_AMD));
1038   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1039       GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
1040   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1041       GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
1042 }
1043
1044 TEST_F(FeatureInfoTest, InitializeIMG_texture_compression_pvrtc) {
1045   SetupInitExpectations("GL_IMG_texture_compression_pvrtc");
1046   EXPECT_THAT(info_->extensions(),
1047               HasSubstr("GL_IMG_texture_compression_pvrtc"));
1048   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1049       GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
1050   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1051       GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
1052   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1053       GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
1054   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
1055       GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
1056 }
1057
1058 TEST_F(FeatureInfoTest, InitializeEXT_occlusion_query_boolean) {
1059   SetupInitExpectations("GL_EXT_occlusion_query_boolean");
1060   EXPECT_THAT(info_->extensions(),
1061               HasSubstr("GL_EXT_occlusion_query_boolean"));
1062   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
1063   EXPECT_FALSE(info_->feature_flags(
1064       ).use_arb_occlusion_query2_for_occlusion_query_boolean);
1065   EXPECT_FALSE(info_->feature_flags(
1066       ).use_arb_occlusion_query_for_occlusion_query_boolean);
1067 }
1068
1069 TEST_F(FeatureInfoTest, InitializeARB_occlusion_query) {
1070   SetupInitExpectations("GL_ARB_occlusion_query");
1071   EXPECT_THAT(info_->extensions(),
1072               HasSubstr("GL_EXT_occlusion_query_boolean"));
1073   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
1074   EXPECT_FALSE(info_->feature_flags(
1075       ).use_arb_occlusion_query2_for_occlusion_query_boolean);
1076   EXPECT_TRUE(info_->feature_flags(
1077       ).use_arb_occlusion_query_for_occlusion_query_boolean);
1078 }
1079
1080 TEST_F(FeatureInfoTest, InitializeARB_occlusion_query2) {
1081   SetupInitExpectations("GL_ARB_occlusion_query2 GL_ARB_occlusion_query2");
1082   EXPECT_THAT(info_->extensions(),
1083               HasSubstr("GL_EXT_occlusion_query_boolean"));
1084   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
1085   EXPECT_TRUE(info_->feature_flags(
1086       ).use_arb_occlusion_query2_for_occlusion_query_boolean);
1087   EXPECT_FALSE(info_->feature_flags(
1088       ).use_arb_occlusion_query_for_occlusion_query_boolean);
1089 }
1090
1091 TEST_F(FeatureInfoTest, InitializeOES_vertex_array_object) {
1092   SetupInitExpectations("GL_OES_vertex_array_object");
1093   EXPECT_THAT(info_->extensions(),
1094       HasSubstr("GL_OES_vertex_array_object"));
1095   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
1096 }
1097
1098 TEST_F(FeatureInfoTest, InitializeARB_vertex_array_object) {
1099   SetupInitExpectations("GL_ARB_vertex_array_object");
1100   EXPECT_THAT(info_->extensions(),
1101       HasSubstr("GL_OES_vertex_array_object"));
1102   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
1103 }
1104
1105 TEST_F(FeatureInfoTest, InitializeAPPLE_vertex_array_object) {
1106   SetupInitExpectations("GL_APPLE_vertex_array_object");
1107   EXPECT_THAT(info_->extensions(),
1108       HasSubstr("GL_OES_vertex_array_object"));
1109   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
1110 }
1111
1112 TEST_F(FeatureInfoTest, InitializeNo_vertex_array_object) {
1113   SetupInitExpectations("");
1114   // Even if the native extensions are not available the implementation
1115   // may still emulate the GL_OES_vertex_array_object functionality. In this
1116   // scenario native_vertex_array_object must be false.
1117   EXPECT_THAT(info_->extensions(),
1118               HasSubstr("GL_OES_vertex_array_object"));
1119   EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
1120 }
1121
1122 TEST_F(FeatureInfoTest, InitializeOES_element_index_uint) {
1123   SetupInitExpectations("GL_OES_element_index_uint");
1124   EXPECT_THAT(info_->extensions(),
1125               HasSubstr("GL_OES_element_index_uint"));
1126   EXPECT_TRUE(info_->validators()->index_type.IsValid(GL_UNSIGNED_INT));
1127 }
1128
1129 TEST_F(FeatureInfoTest, InitializeVAOsWithClientSideArrays) {
1130   CommandLine command_line(0, NULL);
1131   command_line.AppendSwitchASCII(
1132       switches::kGpuDriverBugWorkarounds,
1133       base::IntToString(gpu::USE_CLIENT_SIDE_ARRAYS_FOR_STREAM_BUFFERS));
1134   SetupInitExpectationsWithCommandLine("GL_OES_vertex_array_object",
1135                                        command_line);
1136   EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
1137   EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
1138 }
1139
1140 TEST_F(FeatureInfoTest, InitializeEXT_blend_minmax) {
1141   SetupInitExpectations("GL_EXT_blend_minmax");
1142   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_blend_minmax"));
1143   EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MIN_EXT));
1144   EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MAX_EXT));
1145 }
1146
1147 TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) {
1148   SetupInitExpectations("GL_EXT_frag_depth");
1149   EXPECT_TRUE(info_->feature_flags().ext_frag_depth);
1150   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth"));
1151 }
1152
1153 TEST_F(FeatureInfoTest, InitializeEXT_shader_texture_lod) {
1154   SetupInitExpectations("GL_EXT_shader_texture_lod");
1155   EXPECT_TRUE(info_->feature_flags().ext_shader_texture_lod);
1156   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_shader_texture_lod"));
1157 }
1158
1159 TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
1160   SetupInitExpectations("GL_EXT_discard_framebuffer");
1161   EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
1162   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
1163 }
1164
1165 TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) {
1166   SetupInitExpectationsWithGLVersion(
1167       "GL_ARB_sampler_objects", "", "OpenGL 3.0");
1168   EXPECT_TRUE(info_->feature_flags().enable_samplers);
1169 }
1170
1171 TEST_F(FeatureInfoTest, InitializeWithES3) {
1172   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
1173   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
1174   EXPECT_TRUE(info_->feature_flags().use_core_framebuffer_multisample);
1175   EXPECT_THAT(info_->extensions(),
1176               HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
1177   EXPECT_TRUE(info_->feature_flags().use_async_readpixels);
1178   EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
1179   EXPECT_TRUE(info_->feature_flags().oes_depth24);
1180   EXPECT_THAT(info_->extensions(), HasSubstr("GL_GOOGLE_depth_texture"));
1181   EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_depth_texture"));
1182   EXPECT_TRUE(
1183       info_->validators()->texture_internal_format.IsValid(GL_DEPTH_COMPONENT));
1184   EXPECT_TRUE(
1185       info_->validators()->texture_internal_format.IsValid(GL_DEPTH_STENCIL));
1186   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
1187   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
1188   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
1189   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
1190   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT_24_8));
1191   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT)
1192                   .IsValid(GL_UNSIGNED_SHORT));
1193   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT)
1194                   .IsValid(GL_UNSIGNED_INT));
1195   EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL)
1196                   .IsValid(GL_UNSIGNED_INT_24_8));
1197   EXPECT_TRUE(info_->feature_flags().packed_depth24_stencil8);
1198   EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_depth24"));
1199   EXPECT_TRUE(
1200       info_->validators()->render_buffer_format.IsValid(GL_DEPTH_COMPONENT24));
1201   EXPECT_TRUE(
1202       info_->validators()->render_buffer_format.IsValid(GL_DEPTH24_STENCIL8));
1203   EXPECT_TRUE(
1204       info_->validators()->texture_internal_format.IsValid(GL_DEPTH_STENCIL));
1205   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
1206   EXPECT_TRUE(info_->feature_flags().npot_ok);
1207   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
1208   EXPECT_TRUE(info_->feature_flags().enable_samplers);
1209   EXPECT_TRUE(info_->feature_flags().map_buffer_range);
1210   EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
1211   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
1212   EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1213   EXPECT_TRUE(gfx::GLFence::IsSupported());
1214 }
1215
1216 TEST_F(FeatureInfoTest, InitializeWithoutSamplers) {
1217   SetupInitExpectationsWithGLVersion("", "", "OpenGL GL 3.0");
1218   EXPECT_FALSE(info_->feature_flags().enable_samplers);
1219 }
1220
1221 TEST_F(FeatureInfoTest, ParseDriverBugWorkaroundsSingle) {
1222   CommandLine command_line(0, NULL);
1223   command_line.AppendSwitchASCII(
1224       switches::kGpuDriverBugWorkarounds,
1225       base::IntToString(gpu::EXIT_ON_CONTEXT_LOST));
1226   // Workarounds should get parsed without the need for a context.
1227   SetupWithCommandLine(command_line);
1228   EXPECT_TRUE(info_->workarounds().exit_on_context_lost);
1229 }
1230
1231 TEST_F(FeatureInfoTest, ParseDriverBugWorkaroundsMultiple) {
1232   CommandLine command_line(0, NULL);
1233   command_line.AppendSwitchASCII(
1234       switches::kGpuDriverBugWorkarounds,
1235       base::IntToString(gpu::EXIT_ON_CONTEXT_LOST) + "," +
1236       base::IntToString(gpu::MAX_CUBE_MAP_TEXTURE_SIZE_LIMIT_1024) + "," +
1237       base::IntToString(gpu::MAX_TEXTURE_SIZE_LIMIT_4096));
1238   // Workarounds should get parsed without the need for a context.
1239   SetupWithCommandLine(command_line);
1240   EXPECT_TRUE(info_->workarounds().exit_on_context_lost);
1241   EXPECT_EQ(1024, info_->workarounds().max_cube_map_texture_size);
1242   EXPECT_EQ(4096, info_->workarounds().max_texture_size);
1243 }
1244
1245 TEST_F(FeatureInfoTest, InitializeWithARBSync) {
1246   SetupInitExpectations("GL_ARB_sync");
1247   EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1248   EXPECT_TRUE(gfx::GLFence::IsSupported());
1249 }
1250
1251 TEST_F(FeatureInfoTest, InitializeWithNVFence) {
1252   SetupInitExpectations("GL_NV_fence");
1253   EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1254   EXPECT_TRUE(gfx::GLFence::IsSupported());
1255 }
1256
1257 TEST_F(FeatureInfoTest, ARBSyncDisabled) {
1258   CommandLine command_line(0, NULL);
1259   command_line.AppendSwitchASCII(
1260       switches::kGpuDriverBugWorkarounds,
1261       base::IntToString(gpu::DISABLE_ARB_SYNC));
1262   SetupInitExpectationsWithCommandLine("GL_ARB_sync", command_line);
1263   EXPECT_FALSE(info_->feature_flags().chromium_sync_query);
1264   EXPECT_FALSE(gfx::GLFence::IsSupported());
1265 }
1266
1267 TEST_F(FeatureInfoTest, InitializeCHROMIUM_path_rendering) {
1268   SetupInitExpectationsWithGLVersion(
1269       "GL_NV_path_rendering GL_EXT_direct_state_access", "", "4.3");
1270   EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
1271   EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_path_rendering"));
1272 }
1273
1274 TEST_F(FeatureInfoTest, InitializeCHROMIUM_path_rendering2) {
1275   SetupInitExpectationsWithGLVersion(
1276       "GL_NV_path_rendering", "", "OpenGL ES 3.1");
1277   EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
1278   EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_path_rendering"));
1279 }
1280
1281 TEST_F(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering) {
1282   SetupInitExpectationsWithGLVersion("", "", "4.3");
1283   EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
1284   EXPECT_THAT(info_->extensions(),
1285               Not(HasSubstr("GL_CHROMIUM_path_rendering")));
1286 }
1287
1288 TEST_F(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering2) {
1289   SetupInitExpectationsWithGLVersion("GL_NV_path_rendering", "", "4.3");
1290   EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
1291   EXPECT_THAT(info_->extensions(),
1292               Not(HasSubstr("GL_CHROMIUM_path_rendering")));
1293 }
1294
1295 }  // namespace gles2
1296 }  // namespace gpu