15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/feature_info.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "gpu/command_buffer/service/gpu_service_test.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "gpu/command_buffer/service/gpu_switches.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/test_helper.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/texture_manager.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/gpu_driver_bug_workaround_type.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gl/gl_fence.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_mock.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::DoAll;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::HasSubstr;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::InSequence;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::MatcherCast;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Not;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Pointee;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArrayArgument;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgumentPointee;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrEq;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace {
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kGLRendererStringANGLE[] = "ANGLE (some renderer)";
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // anonymous namespace
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class FeatureInfoTest : public GpuServiceTest {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureInfoTest() {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetupInitExpectations(const char* extensions) {
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    SetupInitExpectationsWithGLVersion(extensions, "", "");
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetupInitExpectationsWithGLVersion(
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const char* extensions, const char* renderer, const char* version) {
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    GpuServiceTest::SetUpWithGLVersion(version, extensions);
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        gl_.get(), extensions, renderer, version);
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_ = new FeatureInfo();
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_->Initialize();
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetupWithCommandLine(const CommandLine& command_line) {
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    GpuServiceTest::SetUp();
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_ = new FeatureInfo(command_line);
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetupInitExpectationsWithCommandLine(
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const char* extensions, const CommandLine& command_line) {
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    GpuServiceTest::SetUpWithGLVersion("2.0", extensions);
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        gl_.get(), extensions, "", "");
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_ = new FeatureInfo(command_line);
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_->Initialize();
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetupWithoutInit() {
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    GpuServiceTest::SetUp();
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_ = new FeatureInfo();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetUp() OVERRIDE {
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Do nothing here, since we are using the explicit Setup*() functions.
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void TearDown() OVERRIDE {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    info_ = NULL;
83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    GpuServiceTest::TearDown();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<FeatureInfo> info_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FormatInfo {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   GLenum format;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   const GLenum* types;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   size_t count;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // anonymous namespace.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, Basic) {
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupWithoutInit();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test it starts off uninitialized.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().chromium_framebuffer_multisample);
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().use_core_framebuffer_multisample);
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(info_->feature_flags().multisampled_render_to_texture);
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(info_->feature_flags(
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).use_img_for_multisampled_render_to_texture);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().oes_standard_derivatives);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().npot_ok);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().oes_egl_image_external);
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().oes_depth24);
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().packed_depth24_stencil8);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().angle_translated_shader_source);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().angle_pack_reverse_row_order);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().arb_texture_rectangle);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().angle_instanced_arrays);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().occlusion_query_boolean);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().map_buffer_range);
125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().use_async_readpixels);
1260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().ext_discard_framebuffer);
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().angle_depth_texture);
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().is_angle);
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define GPU_OP(type, name) EXPECT_FALSE(info_->workarounds().name);
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#undef GPU_OP
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, info_->workarounds().max_texture_size);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, info_->workarounds().max_cube_map_texture_size);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test good types.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kAlphaTypes[] = {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kRGBTypes[] = {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_5_6_5,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kRGBATypes[] = {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_4_4_4_4,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_5_5_5_1,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kLuminanceTypes[] = {
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kLuminanceAlphaTypes[] = {
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const FormatInfo kFormatTypes[] = {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_ALPHA, kAlphaTypes, arraysize(kAlphaTypes), },
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_RGB, kRGBTypes, arraysize(kRGBTypes), },
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_RGBA, kRGBATypes, arraysize(kRGBATypes), },
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_LUMINANCE, kLuminanceTypes, arraysize(kLuminanceTypes), },
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_LUMINANCE_ALPHA, kLuminanceAlphaTypes,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        arraysize(kLuminanceAlphaTypes), } ,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t ii = 0; ii < arraysize(kFormatTypes); ++ii) {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const FormatInfo& info = kFormatTypes[ii];
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ValueValidator<GLenum>& validator =
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          info_->GetTextureFormatValidator(info.format);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (size_t jj = 0; jj < info.count; ++jj) {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_TRUE(validator.IsValid(info.types[jj]));
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test some bad types
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kAlphaTypes[] = {
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_5_5_5_1,
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kRGBTypes[] = {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_4_4_4_4,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kRGBATypes[] = {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_5_6_5,
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kLuminanceTypes[] = {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_4_4_4_4,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kLuminanceAlphaTypes[] = {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_5_5_5_1,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kBGRATypes[] = {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT_5_6_5,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const GLenum kDepthTypes[] = {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_BYTE,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_SHORT,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_UNSIGNED_INT,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_FLOAT,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const FormatInfo kFormatTypes[] = {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_ALPHA, kAlphaTypes, arraysize(kAlphaTypes), },
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_RGB, kRGBTypes, arraysize(kRGBTypes), },
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_RGBA, kRGBATypes, arraysize(kRGBATypes), },
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_LUMINANCE, kLuminanceTypes, arraysize(kLuminanceTypes), },
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_LUMINANCE_ALPHA, kLuminanceAlphaTypes,
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        arraysize(kLuminanceAlphaTypes), } ,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_BGRA_EXT, kBGRATypes, arraysize(kBGRATypes), },
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { GL_DEPTH_COMPONENT, kDepthTypes, arraysize(kDepthTypes), },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t ii = 0; ii < arraysize(kFormatTypes); ++ii) {
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const FormatInfo& info = kFormatTypes[ii];
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ValueValidator<GLenum>& validator =
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          info_->GetTextureFormatValidator(info.format);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (size_t jj = 0; jj < info.count; ++jj) {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_FALSE(validator.IsValid(info.types[jj]));
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeNoExtensions) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("");
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check default extensions are there
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_resource_safe"));
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_strict_attribs"));
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_ANGLE_translated_shader_source"));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check a couple of random extensions that should not be there.
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_npot")));
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_EXT_texture_compression_dxt1")));
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_CHROMIUM_texture_compression_dxt3")));
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_CHROMIUM_texture_compression_dxt5")));
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_ANGLE_texture_usage")));
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_EXT_texture_storage")));
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_compressed_ETC1_RGB8_texture")));
2505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_THAT(info_->extensions(),
2515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              Not(HasSubstr("GL_AMD_compressed_ATC_texture")));
2525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_THAT(info_->extensions(),
2535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              Not(HasSubstr("GL_IMG_texture_compression_pvrtc")));
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().npot_ok);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT1_EXT));
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_ETC1_RGB8_OES));
2655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGB_AMD));
2675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
2695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
2715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
2735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
2755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
2775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
2785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->read_pixel_format.IsValid(
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_parameter.IsValid(
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_MAX_ANISOTROPY_EXT));
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_parameter.IsValid(
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_MAX_SAMPLES_EXT));
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_STENCIL));
3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GL_RGBA32F));
3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GL_RGB32F));
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_STENCIL));
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT24));
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_parameter.IsValid(
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_USAGE_ANGLE));
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT16));
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT32_OES));
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8_OES));
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MIN_EXT));
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MAX_EXT));
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(info_->feature_flags().chromium_sync_query);
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeWithANGLE) {
326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion("", kGLRendererStringANGLE, "");
327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().is_angle);
328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeNPOTExtensionGLES) {
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_npot");
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_npot"));
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().npot_ok);
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeNPOTExtensionGL) {
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_texture_non_power_of_two");
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_npot"));
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().npot_ok);
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeDXTExtensionGLES2) {
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_texture_compression_dxt1");
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_compression_dxt1"));
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT1_EXT));
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeDXTExtensionGL) {
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_texture_compression_s3tc");
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_compression_dxt1"));
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_texture_compression_dxt3"));
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_texture_compression_dxt5"));
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT1_EXT));
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GLES2) {
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_texture_format_BGRA8888");
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_format_BGRA8888"));
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_BGRA_EXT).IsValid(
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_BYTE));
3848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
3858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      GL_BGRA8_EXT));
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GL) {
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_bgra");
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_format_BGRA8888"));
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_read_format_bgra"));
3948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
3958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)              HasSubstr("GL_CHROMIUM_renderbuffer_format_BGRA8888"));
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->read_pixel_format.IsValid(
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_BGRA_EXT).IsValid(
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_BYTE));
4048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
4058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      GL_BGRA8_EXT));
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888Apple) {
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_APPLE_texture_format_BGRA8888");
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_format_BGRA8888"));
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_BGRA_EXT).IsValid(
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_BYTE));
4188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
4198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      GL_BGRA8_EXT));
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_read_format_bgra) {
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_read_format_bgra");
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_read_format_bgra"));
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->read_pixel_format.IsValid(
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_BGRA_EXT));
4328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
4338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      GL_BGRA8_EXT));
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeEXT_texture_storage) {
4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations("GL_EXT_texture_storage");
4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_BGRA8_EXT));
4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGBA32F_EXT));
4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGB32F_EXT));
4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_ALPHA32F_EXT));
4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE32F_EXT));
4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE_ALPHA32F_EXT));
4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGBA16F_EXT));
4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGB16F_EXT));
4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_ALPHA16F_EXT));
4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE16F_EXT));
4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE_ALPHA16F_EXT));
4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeARB_texture_storage) {
4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations("GL_ARB_texture_storage");
4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeEXT_texture_storage_BGRA) {
4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations("GL_EXT_texture_storage GL_EXT_bgra");
4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_BGRA8_EXT));
4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeARB_texture_storage_BGRA) {
4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations("GL_ARB_texture_storage GL_EXT_bgra");
4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_BGRA8_EXT));
4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeEXT_texture_storage_BGRA8888) {
4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations(
4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888");
4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_BGRA8_EXT));
5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeEXT_texture_storage_float) {
5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations("GL_EXT_texture_storage GL_OES_texture_float");
5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGBA32F_EXT));
5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGB32F_EXT));
5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_ALPHA32F_EXT));
5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE32F_EXT));
5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE_ALPHA32F_EXT));
5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeEXT_texture_storage_half_float) {
5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectations("GL_EXT_texture_storage GL_OES_texture_half_float");
5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGBA16F_EXT));
5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_RGB16F_EXT));
5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_ALPHA16F_EXT));
5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE16F_EXT));
5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GL_LUMINANCE_ALPHA16F_EXT));
5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Check how to handle ES, texture_storage and BGRA combination; 8 tests.
5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 1- ES2 + GL_EXT_texture_storage -> GL_EXT_texture_storage (and no
5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// GL_EXT_texture_format_BGRA8888 - we don't claim to handle GL_BGRA8 in
5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// glTexStorage2DEXT)
5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES2_texture_storage) {
5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_EXT_texture_storage", "", "OpenGL ES 2.0");
5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(),
5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              Not(HasSubstr("GL_EXT_texture_format_BGRA8888")));
5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 2- ES2 + GL_EXT_texture_storage + (GL_EXT_texture_format_BGRA8888 or
5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// GL_APPLE_texture_format_bgra8888)
5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES2_texture_storage_BGRA) {
5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
5521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888",
5531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "",
5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "OpenGL ES 2.0");
5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
5571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 3- ES2 + GL_EXT_texture_format_BGRA8888 or GL_APPLE_texture_format_bgra8888
5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES2_texture_format_BGRA) {
5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_EXT_texture_format_BGRA8888", "", "OpenGL ES 2.0");
5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_EXT_texture_storage")));
5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 4- ES2 (neither GL_EXT_texture_storage nor GL_EXT_texture_format_BGRA8888) ->
5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// nothing
5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES2_neither_texture_storage_nor_BGRA) {
5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_EXT_texture_storage")));
5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(),
5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              Not(HasSubstr("GL_EXT_texture_format_BGRA8888")));
5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 5- ES3 + GL_EXT_texture_format_BGRA8888 -> GL_EXT_texture_format_BGRA8888
5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// (we can't expose GL_EXT_texture_storage because we fail the GL_BGRA8
5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// requirement)
5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES3_texture_storage_EXT_BGRA) {
5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_EXT_texture_format_BGRA8888", "", "OpenGL ES 3.0");
5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_EXT_texture_storage")));
5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 6- ES3 + GL_APPLE_texture_format_bgra8888 -> GL_EXT_texture_storage +
5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// GL_EXT_texture_format_BGRA8888 (driver promises to handle GL_BGRA8 by
5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// exposing GL_APPLE_texture_format_bgra8888)
5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES3_texture_storage_APPLE_BGRA) {
5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_APPLE_texture_format_BGRA8888", "", "OpenGL ES 3.0");
5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 7- ES3 + GL_EXT_texture_storage + GL_EXT_texture_format_BGRA8888 ->
5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// GL_EXT_texture_storage + GL_EXT_texture_format_BGRA8888  (driver promises to
5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// handle GL_BGRA8 by exposing GL_EXT_texture_storage)
5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES3_EXT_texture_storage_EXT_BGRA) {
6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888",
6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "",
6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "OpenGL ES 3.0");
6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_format_BGRA8888"));
6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 8- ES3 + none of the above -> GL_EXT_texture_storage (and no
6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// GL_EXT_texture_format_BGRA8888 - we don't claim to handle GL_BGRA8)
6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeGLES3_texture_storage) {
6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_texture_storage"));
6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(),
6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              Not(HasSubstr("GL_EXT_texture_format_BGRA8888")));
6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_texture_float) {
6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetupInitExpectations("GL_ARB_texture_float");
6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgba);
6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgb);
6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string extensions = info_->extensions() + " ";
6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgb "));
6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgba"));
6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GL_RGBA32F));
6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GL_RGB32F));
6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
6295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_floatGLES2) {
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_float");
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_half_float")));
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_float_linear")));
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_half_float_linear")));
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_float_linearGLES2) {
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_float GL_OES_texture_float_linear");
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_texture_float_linear);
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_half_float")));
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float_linear"));
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_half_float_linear")));
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_half_floatGLES2) {
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_half_float");
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_float")));
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_float_linear")));
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_half_float_linear")));
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_half_float_linearGLES2) {
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations(
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_texture_half_float_linear);
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_float")));
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_float_linear")));
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_texture_half_float_linear"));
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_framebuffer_multisample) {
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_framebuffer_multisample");
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_MAX_SAMPLES_EXT));
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RENDERBUFFER_SAMPLES_EXT));
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeANGLE_framebuffer_multisample) {
784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion(
785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "GL_ANGLE_framebuffer_multisample", kGLRendererStringANGLE, "");
786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_MAX_SAMPLES_EXT));
797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_RENDERBUFFER_SAMPLES_EXT));
799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// We don't allow ANGLE_framebuffer_multisample on non-ANGLE implementations,
802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// because we wouldn't be choosing the right driver entry point and because the
803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// extension was falsely advertised on some Android devices (crbug.com/165736).
804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeANGLE_framebuffer_multisampleWithoutANGLE) {
805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectations("GL_ANGLE_framebuffer_multisample");
806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().chromium_framebuffer_multisample);
807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              Not(HasSubstr("GL_CHROMIUM_framebuffer_multisample")));
809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
812f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
816f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_MAX_SAMPLES_EXT));
817f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_parameter.IsValid(
818f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_RENDERBUFFER_SAMPLES_EXT));
819f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
820f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8217dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(FeatureInfoTest, InitializeEXT_multisampled_render_to_texture) {
8227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SetupInitExpectations("GL_EXT_multisampled_render_to_texture");
8237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->feature_flags(
8247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).multisampled_render_to_texture);
8257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(info_->feature_flags(
8267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).use_img_for_multisampled_render_to_texture);
8277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_THAT(info_->extensions(),
8287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch              HasSubstr("GL_EXT_multisampled_render_to_texture"));
8297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
8307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_MAX_SAMPLES_EXT));
8317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
8327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_RENDERBUFFER_SAMPLES_EXT));
8337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
8347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT));
8357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
8367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
8377dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(FeatureInfoTest, InitializeIMG_multisampled_render_to_texture) {
8387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SetupInitExpectations("GL_IMG_multisampled_render_to_texture");
8397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->feature_flags(
8405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ).multisampled_render_to_texture);
8417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->feature_flags(
8427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).use_img_for_multisampled_render_to_texture);
8437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_THAT(info_->extensions(),
8447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch              HasSubstr("GL_EXT_multisampled_render_to_texture"));
8457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
8467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_MAX_SAMPLES_EXT));
8477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
8487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_RENDERBUFFER_SAMPLES_EXT));
8497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
8507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT));
8517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
8527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_texture_filter_anisotropic) {
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_texture_filter_anisotropic");
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_filter_anisotropic"));
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_MAX_ANISOTROPY_EXT));
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_ARB_depth_texture) {
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_depth_texture");
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_GOOGLE_depth_texture"));
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_depth_texture"));
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_ARB_depth_texture) {
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_depth_texture");
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_GOOGLE_depth_texture"));
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_depth_texture"));
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeANGLE_depth_texture) {
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ANGLE_depth_texture");
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_GOOGLE_depth_texture"));
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_depth_texture"));
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_ANGLE_depth_texture")));
911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().angle_depth_texture);
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT16));
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT32_OES));
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8_OES));
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_packed_depth_stencil) {
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_packed_depth_stencil");
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_packed_depth_stencil"));
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_packed_depth_stencil) {
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_packed_depth_stencil");
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_packed_depth_stencil"));
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest,
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       InitializeOES_packed_depth_stencil_and_GL_ARB_depth_texture) {
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_packed_depth_stencil GL_ARB_depth_texture");
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_packed_depth_stencil"));
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_STENCIL));
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_STENCIL));
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_depth24) {
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_depth24");
981f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_depth24);
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_depth24"));
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT24));
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_standard_derivatives) {
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_standard_derivatives");
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_standard_derivatives"));
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->hint_target.IsValid(
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_rgb8_rgba8) {
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_rgb8_rgba8");
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_rgb8_rgba8"));
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RGB8_OES));
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RGBA8_OES));
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_EGL_image_external) {
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_EGL_image_external");
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_EGL_image_external"));
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_egl_image_external);
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_bind_target.IsValid(
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_EXTERNAL_OES));
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->get_tex_param_target.IsValid(
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_EXTERNAL_OES));
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES));
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_BINDING_EXTERNAL_OES));
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_compressed_ETC1_RGB8_texture) {
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_compressed_ETC1_RGB8_texture");
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_compressed_ETC1_RGB8_texture"));
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_ETC1_RGB8_OES));
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_ETC1_RGB8_OES));
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(FeatureInfoTest, InitializeAMD_compressed_ATC_texture) {
10335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SetupInitExpectations("GL_AMD_compressed_ATC_texture");
10345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_THAT(info_->extensions(),
10355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              HasSubstr("GL_AMD_compressed_ATC_texture"));
10365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGB_AMD));
10385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
10405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
10425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
10435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
10445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(FeatureInfoTest, InitializeIMG_texture_compression_pvrtc) {
10455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SetupInitExpectations("GL_IMG_texture_compression_pvrtc");
10465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_THAT(info_->extensions(),
10475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              HasSubstr("GL_IMG_texture_compression_pvrtc"));
10485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
10505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
10525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
10545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
10555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
10565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
10575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_occlusion_query_boolean) {
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_occlusion_query_boolean");
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_occlusion_query_boolean"));
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_occlusion_query) {
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_occlusion_query");
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_occlusion_query_boolean"));
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags(
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_occlusion_query2) {
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_occlusion_query2 GL_ARB_occlusion_query2");
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_occlusion_query_boolean"));
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags(
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_vertex_array_object) {
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_vertex_array_object");
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HasSubstr("GL_OES_vertex_array_object"));
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_vertex_array_object) {
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_vertex_array_object");
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HasSubstr("GL_OES_vertex_array_object"));
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeAPPLE_vertex_array_object) {
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_APPLE_vertex_array_object");
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HasSubstr("GL_OES_vertex_array_object"));
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeNo_vertex_array_object) {
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("");
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Even if the native extensions are not available the implementation
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // may still emulate the GL_OES_vertex_array_object functionality. In this
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // scenario native_vertex_array_object must be false.
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_vertex_array_object"));
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_element_index_uint) {
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_element_index_uint");
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_element_index_uint"));
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->index_type.IsValid(GL_UNSIGNED_INT));
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeVAOsWithClientSideArrays) {
1130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine command_line(0, NULL);
1131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  command_line.AppendSwitchASCII(
1132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      switches::kGpuDriverBugWorkarounds,
1133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::USE_CLIENT_SIDE_ARRAYS_FOR_STREAM_BUFFERS));
113458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupInitExpectationsWithCommandLine("GL_OES_vertex_array_object",
113558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                       command_line);
11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_blend_minmax) {
1141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SetupInitExpectations("GL_EXT_blend_minmax");
1142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_blend_minmax"));
1143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MIN_EXT));
1144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MAX_EXT));
1145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) {
1148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetupInitExpectations("GL_EXT_frag_depth");
1149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().ext_frag_depth);
1150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth"));
1151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
1152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
11530529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(FeatureInfoTest, InitializeEXT_shader_texture_lod) {
11540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SetupInitExpectations("GL_EXT_shader_texture_lod");
11550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(info_->feature_flags().ext_shader_texture_lod);
11560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_shader_texture_lod"));
11570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
11580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
11590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
11600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SetupInitExpectations("GL_EXT_discard_framebuffer");
11610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
11620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
11630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
11640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) {
1166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion(
1167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "GL_ARB_sampler_objects", "", "OpenGL 3.0");
11682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_samplers);
11692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeWithES3) {
1172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
1173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().use_core_framebuffer_multisample);
1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
11770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(info_->feature_flags().use_async_readpixels);
11781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
1179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_depth24);
1180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_GOOGLE_depth_texture"));
1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_depth_texture"));
11821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(
11831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      info_->validators()->texture_internal_format.IsValid(GL_DEPTH_COMPONENT));
11841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(
11851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      info_->validators()->texture_internal_format.IsValid(GL_DEPTH_STENCIL));
11861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
11871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
11881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
11891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
1190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT_24_8));
1191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT)
1192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  .IsValid(GL_UNSIGNED_SHORT));
1193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT)
1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  .IsValid(GL_UNSIGNED_INT));
1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL)
1196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  .IsValid(GL_UNSIGNED_INT_24_8));
1197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().packed_depth24_stencil8);
1198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_depth24"));
1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(
1200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      info_->validators()->render_buffer_format.IsValid(GL_DEPTH_COMPONENT24));
1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(
1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      info_->validators()->render_buffer_format.IsValid(GL_DEPTH24_STENCIL8));
1203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(
1204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      info_->validators()->texture_internal_format.IsValid(GL_DEPTH_STENCIL));
1205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
12061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().npot_ok);
12071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
12081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().enable_samplers);
12091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().map_buffer_range);
12101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
12111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(gfx::GLFence::IsSupported());
12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeWithoutSamplers) {
1217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion("", "", "OpenGL GL 3.0");
12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_samplers);
12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FeatureInfoTest, ParseDriverBugWorkaroundsSingle) {
1222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine command_line(0, NULL);
1223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  command_line.AppendSwitchASCII(
1224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      switches::kGpuDriverBugWorkarounds,
1225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::EXIT_ON_CONTEXT_LOST));
122658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Workarounds should get parsed without the need for a context.
122758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupWithCommandLine(command_line);
1228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(info_->workarounds().exit_on_context_lost);
1229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FeatureInfoTest, ParseDriverBugWorkaroundsMultiple) {
1232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine command_line(0, NULL);
1233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  command_line.AppendSwitchASCII(
1234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      switches::kGpuDriverBugWorkarounds,
1235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::EXIT_ON_CONTEXT_LOST) + "," +
1236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::MAX_CUBE_MAP_TEXTURE_SIZE_LIMIT_1024) + "," +
1237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::MAX_TEXTURE_SIZE_LIMIT_4096));
123858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Workarounds should get parsed without the need for a context.
123958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupWithCommandLine(command_line);
1240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(info_->workarounds().exit_on_context_lost);
1241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1024, info_->workarounds().max_cube_map_texture_size);
1242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(4096, info_->workarounds().max_texture_size);
1243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1245116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FeatureInfoTest, InitializeWithARBSync) {
1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SetupInitExpectations("GL_ARB_sync");
1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(gfx::GLFence::IsSupported());
1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1251116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FeatureInfoTest, InitializeWithNVFence) {
1252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SetupInitExpectations("GL_NV_fence");
1253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(gfx::GLFence::IsSupported());
1255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
1256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1257116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FeatureInfoTest, ARBSyncDisabled) {
1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  CommandLine command_line(0, NULL);
1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  command_line.AppendSwitchASCII(
1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      switches::kGpuDriverBugWorkarounds,
1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      base::IntToString(gpu::DISABLE_ARB_SYNC));
1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SetupInitExpectationsWithCommandLine("GL_ARB_sync", command_line);
1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(info_->feature_flags().chromium_sync_query);
1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(gfx::GLFence::IsSupported());
1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeCHROMIUM_path_rendering) {
12681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
12691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_NV_path_rendering GL_EXT_direct_state_access", "", "4.3");
12701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
12711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_path_rendering"));
12721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
12731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeCHROMIUM_path_rendering2) {
12751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion(
12761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "GL_NV_path_rendering", "", "OpenGL ES 3.1");
12771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
12781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_path_rendering"));
12791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
12801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering) {
12821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion("", "", "4.3");
12831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
12841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(),
12851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              Not(HasSubstr("GL_CHROMIUM_path_rendering")));
12861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
12871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering2) {
12891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupInitExpectationsWithGLVersion("GL_NV_path_rendering", "", "4.3");
12901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
12911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_THAT(info_->extensions(),
12921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              Not(HasSubstr("GL_CHROMIUM_path_rendering")));
12931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
12941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
1297