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"
16d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com#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) {
50d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com    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) {
58d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com    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) {
64d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com    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() {
72d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com    GpuServiceTest::SetUp();
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    info_ = new FeatureInfo();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
77d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  virtual void SetUp() OVERRIDE {
78d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com    // Do nothing here, since we are using the explicit Setup*() functions.
79d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  }
80d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com
81d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  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));
322d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  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)
4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_texture_float) {
4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetupInitExpectations("GL_ARB_texture_float");
4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgba);
4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgb);
4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string extensions = info_->extensions() + " ";
4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgb "));
4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgba"));
4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GL_RGBA32F));
4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GL_RGB32F));
4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_floatGLES2) {
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_float");
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_half_float")));
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_float_linear")));
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_half_float_linear")));
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_float_linearGLES2) {
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_float GL_OES_texture_float_linear");
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_texture_float_linear);
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float"));
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_half_float")));
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_float_linear"));
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_half_float_linear")));
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_half_floatGLES2) {
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_texture_half_float");
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_float")));
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_float_linear")));
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_half_float_linear")));
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_texture_half_float_linearGLES2) {
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations(
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_texture_half_float_linear);
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), Not(HasSubstr("GL_OES_texture_float")));
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_texture_half_float"));
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_OES_texture_float_linear")));
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_texture_half_float_linear"));
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FLOAT));
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_ALPHA).IsValid(
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGB).IsValid(
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_RGBA).IsValid(
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE).IsValid(
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_LUMINANCE_ALPHA).IsValid(
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_HALF_FLOAT_OES));
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_framebuffer_multisample) {
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_framebuffer_multisample");
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_MAX_SAMPLES_EXT));
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RENDERBUFFER_SAMPLES_EXT));
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeANGLE_framebuffer_multisample) {
603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion(
604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "GL_ANGLE_framebuffer_multisample", kGLRendererStringANGLE, "");
605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->frame_buffer_target.IsValid(
611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_MAX_SAMPLES_EXT));
616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_RENDERBUFFER_SAMPLES_EXT));
618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// We don't allow ANGLE_framebuffer_multisample on non-ANGLE implementations,
621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// because we wouldn't be choosing the right driver entry point and because the
622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// extension was falsely advertised on some Android devices (crbug.com/165736).
623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeANGLE_framebuffer_multisampleWithoutANGLE) {
624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectations("GL_ANGLE_framebuffer_multisample");
625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().chromium_framebuffer_multisample);
626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              Not(HasSubstr("GL_CHROMIUM_framebuffer_multisample")));
628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_EXT));
630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->frame_buffer_target.IsValid(
631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_DRAW_FRAMEBUFFER_EXT));
632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_READ_FRAMEBUFFER_BINDING_EXT));
634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->g_l_state.IsValid(
635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_MAX_SAMPLES_EXT));
636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(info_->validators()->render_buffer_parameter.IsValid(
637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GL_RENDERBUFFER_SAMPLES_EXT));
638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
6407dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(FeatureInfoTest, InitializeEXT_multisampled_render_to_texture) {
6417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SetupInitExpectations("GL_EXT_multisampled_render_to_texture");
6427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->feature_flags(
6437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).multisampled_render_to_texture);
6447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(info_->feature_flags(
6457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).use_img_for_multisampled_render_to_texture);
6467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_THAT(info_->extensions(),
6477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch              HasSubstr("GL_EXT_multisampled_render_to_texture"));
6487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
6497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_MAX_SAMPLES_EXT));
6507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
6517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_RENDERBUFFER_SAMPLES_EXT));
6527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
6537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT));
6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
6557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6567dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(FeatureInfoTest, InitializeIMG_multisampled_render_to_texture) {
6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SetupInitExpectations("GL_IMG_multisampled_render_to_texture");
6587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->feature_flags(
6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ).multisampled_render_to_texture);
6607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->feature_flags(
6617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ).use_img_for_multisampled_render_to_texture);
6627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_THAT(info_->extensions(),
6637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch              HasSubstr("GL_EXT_multisampled_render_to_texture"));
6647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
6657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_MAX_SAMPLES_EXT));
6667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
6677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_RENDERBUFFER_SAMPLES_EXT));
6687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(info_->validators()->frame_buffer_parameter.IsValid(
6697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT));
6707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
6717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_texture_filter_anisotropic) {
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_texture_filter_anisotropic");
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_texture_filter_anisotropic"));
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_MAX_ANISOTROPY_EXT));
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_ARB_depth_texture) {
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_depth_texture");
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_GOOGLE_depth_texture"));
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_depth_texture"));
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_ARB_depth_texture) {
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_depth_texture");
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_GOOGLE_depth_texture"));
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_depth_texture"));
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeANGLE_depth_texture) {
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ANGLE_depth_texture");
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_GOOGLE_depth_texture"));
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_CHROMIUM_depth_texture"));
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Not(HasSubstr("GL_ANGLE_depth_texture")));
730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().angle_depth_texture);
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT16));
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT32_OES));
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8_OES));
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_packed_depth_stencil) {
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_packed_depth_stencil");
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_packed_depth_stencil"));
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_packed_depth_stencil) {
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_packed_depth_stencil");
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_packed_depth_stencil"));
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT));
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_SHORT));
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest,
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       InitializeOES_packed_depth_stencil_and_GL_ARB_depth_texture) {
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_packed_depth_stencil GL_ARB_depth_texture");
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_packed_depth_stencil"));
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH24_STENCIL8));
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_STENCIL));
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_STENCIL));
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_SHORT));
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT).IsValid(
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT));
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL).IsValid(
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_UNSIGNED_INT_24_8));
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_depth24) {
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_depth24");
800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_depth24);
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_depth24"));
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_DEPTH_COMPONENT24));
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_standard_derivatives) {
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_standard_derivatives");
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_standard_derivatives"));
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->hint_target.IsValid(
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_rgb8_rgba8) {
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_rgb8_rgba8");
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_rgb8_rgba8"));
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RGB8_OES));
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RGBA8_OES));
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_EGL_image_external) {
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_EGL_image_external");
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_EGL_image_external"));
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_egl_image_external);
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_bind_target.IsValid(
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_EXTERNAL_OES));
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->get_tex_param_target.IsValid(
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_EXTERNAL_OES));
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES));
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_TEXTURE_BINDING_EXTERNAL_OES));
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_compressed_ETC1_RGB8_texture) {
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_compressed_ETC1_RGB8_texture");
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_compressed_ETC1_RGB8_texture"));
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_ETC1_RGB8_OES));
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_ETC1_RGB8_OES));
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(FeatureInfoTest, InitializeAMD_compressed_ATC_texture) {
8525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SetupInitExpectations("GL_AMD_compressed_ATC_texture");
8535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_THAT(info_->extensions(),
8545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              HasSubstr("GL_AMD_compressed_ATC_texture"));
8555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGB_AMD));
8575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
8595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
8615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
8625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
8635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(FeatureInfoTest, InitializeIMG_texture_compression_pvrtc) {
8645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SetupInitExpectations("GL_IMG_texture_compression_pvrtc");
8655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_THAT(info_->extensions(),
8665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              HasSubstr("GL_IMG_texture_compression_pvrtc"));
8675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
8695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
8715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
8735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
8745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
8755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
8765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_occlusion_query_boolean) {
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_EXT_occlusion_query_boolean");
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_occlusion_query_boolean"));
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_occlusion_query) {
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_occlusion_query");
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_occlusion_query_boolean"));
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags(
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_occlusion_query2) {
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_occlusion_query2 GL_ARB_occlusion_query2");
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_EXT_occlusion_query_boolean"));
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags(
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query2_for_occlusion_query_boolean);
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags(
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ).use_arb_occlusion_query_for_occlusion_query_boolean);
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_vertex_array_object) {
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_vertex_array_object");
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HasSubstr("GL_OES_vertex_array_object"));
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeARB_vertex_array_object) {
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_ARB_vertex_array_object");
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HasSubstr("GL_OES_vertex_array_object"));
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeAPPLE_vertex_array_object) {
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_APPLE_vertex_array_object");
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HasSubstr("GL_OES_vertex_array_object"));
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeNo_vertex_array_object) {
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("");
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Even if the native extensions are not available the implementation
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // may still emulate the GL_OES_vertex_array_object functionality. In this
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // scenario native_vertex_array_object must be false.
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_vertex_array_object"));
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeOES_element_index_uint) {
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupInitExpectations("GL_OES_element_index_uint");
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_THAT(info_->extensions(),
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              HasSubstr("GL_OES_element_index_uint"));
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->index_type.IsValid(GL_UNSIGNED_INT));
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeVAOsWithClientSideArrays) {
949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine command_line(0, NULL);
950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  command_line.AppendSwitchASCII(
951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      switches::kGpuDriverBugWorkarounds,
952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::USE_CLIENT_SIDE_ARRAYS_FOR_STREAM_BUFFERS));
95358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupInitExpectationsWithCommandLine("GL_OES_vertex_array_object",
95458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                       command_line);
9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
959cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_blend_minmax) {
960cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SetupInitExpectations("GL_EXT_blend_minmax");
961cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_blend_minmax"));
962cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MIN_EXT));
963cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MAX_EXT));
964cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
965cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
966868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) {
967868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetupInitExpectations("GL_EXT_frag_depth");
968868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().ext_frag_depth);
969868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth"));
970868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
971868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
9720529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(FeatureInfoTest, InitializeEXT_shader_texture_lod) {
9730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SetupInitExpectations("GL_EXT_shader_texture_lod");
9740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(info_->feature_flags().ext_shader_texture_lod);
9750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_shader_texture_lod"));
9760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
9770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
9780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
9790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SetupInitExpectations("GL_EXT_discard_framebuffer");
9800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
9810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
9820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
9830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) {
985f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion(
986f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "GL_ARB_sampler_objects", "", "OpenGL 3.0");
9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_samplers);
9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
990424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(FeatureInfoTest, InitializeWithES3) {
991f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().enable_samplers);
993424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().map_buffer_range);
9940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
9950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer"));
996f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
997f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().use_core_framebuffer_multisample);
998f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(),
999f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
10000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(info_->feature_flags().use_async_readpixels);
1001f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().oes_depth24);
1002f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_GOOGLE_depth_texture"));
1003f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_depth_texture"));
1004f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT_24_8));
1005f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT)
1006f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  .IsValid(GL_UNSIGNED_SHORT));
1007f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_COMPONENT)
1008f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  .IsValid(GL_UNSIGNED_INT));
1009f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->GetTextureFormatValidator(GL_DEPTH_STENCIL)
1010f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  .IsValid(GL_UNSIGNED_INT_24_8));
1011f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->feature_flags().packed_depth24_stencil8);
1012f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_THAT(info_->extensions(), HasSubstr("GL_OES_depth24"));
1013f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(
1014f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      info_->validators()->render_buffer_format.IsValid(GL_DEPTH_COMPONENT24));
1015f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(
1016f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      info_->validators()->render_buffer_format.IsValid(GL_DEPTH24_STENCIL8));
1017f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(
1018f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      info_->validators()->texture_internal_format.IsValid(GL_DEPTH_STENCIL));
1019f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_STENCIL));
1020d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1021d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_TRUE(gfx::GLFence::IsSupported());
10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FeatureInfoTest, InitializeWithoutSamplers) {
1025f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupInitExpectationsWithGLVersion("", "", "OpenGL GL 3.0");
10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(info_->feature_flags().enable_samplers);
10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FeatureInfoTest, ParseDriverBugWorkaroundsSingle) {
1030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine command_line(0, NULL);
1031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  command_line.AppendSwitchASCII(
1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      switches::kGpuDriverBugWorkarounds,
1033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::EXIT_ON_CONTEXT_LOST));
103458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Workarounds should get parsed without the need for a context.
103558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupWithCommandLine(command_line);
1036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(info_->workarounds().exit_on_context_lost);
1037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FeatureInfoTest, ParseDriverBugWorkaroundsMultiple) {
1040c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CommandLine command_line(0, NULL);
1041c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  command_line.AppendSwitchASCII(
1042c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      switches::kGpuDriverBugWorkarounds,
1043c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::EXIT_ON_CONTEXT_LOST) + "," +
1044c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::MAX_CUBE_MAP_TEXTURE_SIZE_LIMIT_1024) + "," +
1045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::IntToString(gpu::MAX_TEXTURE_SIZE_LIMIT_4096));
104658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Workarounds should get parsed without the need for a context.
104758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SetupWithCommandLine(command_line);
1048c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(info_->workarounds().exit_on_context_lost);
1049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1024, info_->workarounds().max_cube_map_texture_size);
1050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(4096, info_->workarounds().max_texture_size);
1051c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1052c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1053d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.comTEST_F(FeatureInfoTest, InitializeWithARBSync) {
1054d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  SetupInitExpectations("GL_ARB_sync");
1055d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1056d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_TRUE(gfx::GLFence::IsSupported());
1057d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com}
1058d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com
1059d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.comTEST_F(FeatureInfoTest, InitializeWithNVFence) {
1060d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  SetupInitExpectations("GL_NV_fence");
1061d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
1062d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_TRUE(gfx::GLFence::IsSupported());
1063d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com}
1064d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com
1065d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.comTEST_F(FeatureInfoTest, ARBSyncDisabled) {
1066d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  CommandLine command_line(0, NULL);
1067d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  command_line.AppendSwitchASCII(
1068d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com      switches::kGpuDriverBugWorkarounds,
1069d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com      base::IntToString(gpu::DISABLE_ARB_SYNC));
1070d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  SetupInitExpectationsWithCommandLine("GL_ARB_sync", command_line);
1071d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_FALSE(info_->feature_flags().chromium_sync_query);
1072d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com  EXPECT_FALSE(gfx::GLFence::IsSupported());
1073d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com}
1074d404477a2eb85023af5a83ac78c448b1c4f97e17sievers@google.com
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
1077