Home | History | Annotate | Download | only in service
      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
   1297