diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 21:50:02 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 21:50:02 +0000 |
commit | a9e23873d3d87898ed7237b46da1eabe720fcdc8 (patch) | |
tree | 4bb9e25a9e35cf2013036364f31ea35c764eee56 /gpu/command_buffer | |
parent | 62215411aa596e71fd4ef9a5d837a003e0ef778e (diff) | |
download | chromium_src-a9e23873d3d87898ed7237b46da1eabe720fcdc8.zip chromium_src-a9e23873d3d87898ed7237b46da1eabe720fcdc8.tar.gz chromium_src-a9e23873d3d87898ed7237b46da1eabe720fcdc8.tar.bz2 |
Correctly identify INTEL on Linux
TEST=ran it on bots, unit tests now pass
BUG=128083
Review URL: https://chromiumcodereview.appspot.com/10409008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137743 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer')
-rw-r--r-- | gpu/command_buffer/service/feature_info.cc | 31 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info_unittest.cc | 42 | ||||
-rw-r--r-- | gpu/command_buffer/service/test_helper.cc | 10 | ||||
-rw-r--r-- | gpu/command_buffer/service/test_helper.h | 5 |
4 files changed, 69 insertions, 19 deletions
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 899c381..8738cac 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -109,15 +109,28 @@ void FeatureInfo::AddFeatures(const char* desired_features) { gfx::GLContext::GetCurrent()->GetExtensions().c_str() : reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)), desired_features); - const char* vendor_str = reinterpret_cast<const char*>( - glGetString(GL_VENDOR)); - if (vendor_str) { - std::string str(StringToLowerASCII(std::string(vendor_str))); - feature_flags_.is_intel = str.find("intel") != std::string::npos; - feature_flags_.is_nvidia = str.find("nvidia") != std::string::npos; - feature_flags_.is_amd = - str.find("amd") != std::string::npos || - str.find("ati") != std::string::npos; + + // NOTE: We need to check both GL_VENDOR and GL_RENDERER because for example + // Sandy Bridge on Linux reports: + // GL_VENDOR: Tungsten Graphics, Inc + // GL_RENDERER: + // Mesa DRI Intel(R) Sandybridge Desktop GEM 20100330 DEVELOPMENT + + static GLenum string_ids[] = { + GL_VENDOR, + GL_RENDERER, + }; + for (size_t ii = 0; ii < arraysize(string_ids); ++ii) { + const char* str = reinterpret_cast<const char*>( + glGetString(string_ids[ii])); + if (str) { + std::string lstr(StringToLowerASCII(std::string(str))); + feature_flags_.is_intel |= lstr.find("intel") != std::string::npos; + feature_flags_.is_nvidia |= lstr.find("nvidia") != std::string::npos; + feature_flags_.is_amd |= + lstr.find("amd") != std::string::npos || + lstr.find("ati") != std::string::npos; + } } bool npot_ok = false; diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc index 283f6d4..14ed0fe 100644 --- a/gpu/command_buffer/service/feature_info_unittest.cc +++ b/gpu/command_buffer/service/feature_info_unittest.cc @@ -33,13 +33,13 @@ class FeatureInfoTest : public testing::Test { } void SetupInitExpectations(const char* extensions) { - SetupInitExpectationsWithVendor(extensions, ""); + SetupInitExpectationsWithVendor(extensions, "", ""); } void SetupInitExpectationsWithVendor( - const char* extensions, const char* vendor) { + const char* extensions, const char* vendor, const char* renderer) { TestHelper::SetupFeatureInfoInitExpectationsWithVendor( - gl_.get(), extensions, vendor); + gl_.get(), extensions, vendor, renderer); } protected: @@ -501,35 +501,63 @@ TEST_F(FeatureInfoTest, InitializeARB_occlusion_query2) { } TEST_F(FeatureInfoTest, IsIntel) { - SetupInitExpectationsWithVendor("", "iNTel"); + SetupInitExpectationsWithVendor("", "iNTel", ""); info_->Initialize(NULL); EXPECT_TRUE(info_->feature_flags().is_intel); EXPECT_FALSE(info_->feature_flags().is_nvidia); EXPECT_FALSE(info_->feature_flags().is_amd); + + SetupInitExpectationsWithVendor("", "", "IntEl"); + FeatureInfo::Ref feature_info(new FeatureInfo()); + feature_info->Initialize(NULL); + EXPECT_TRUE(feature_info->feature_flags().is_intel); + EXPECT_FALSE(feature_info->feature_flags().is_nvidia); + EXPECT_FALSE(feature_info->feature_flags().is_amd); } TEST_F(FeatureInfoTest, IsNvidia) { - SetupInitExpectationsWithVendor("", "nvIdIa"); + SetupInitExpectationsWithVendor("", "nvIdIa", ""); info_->Initialize(NULL); EXPECT_FALSE(info_->feature_flags().is_intel); EXPECT_TRUE(info_->feature_flags().is_nvidia); EXPECT_FALSE(info_->feature_flags().is_amd); + + SetupInitExpectationsWithVendor("", "", "NViDiA"); + FeatureInfo::Ref feature_info(new FeatureInfo()); + feature_info->Initialize(NULL); + EXPECT_FALSE(feature_info->feature_flags().is_intel); + EXPECT_TRUE(feature_info->feature_flags().is_nvidia); + EXPECT_FALSE(feature_info->feature_flags().is_amd); } TEST_F(FeatureInfoTest, IsAMD) { - SetupInitExpectationsWithVendor("", "aMd"); + SetupInitExpectationsWithVendor("", "aMd", ""); info_->Initialize(NULL); EXPECT_FALSE(info_->feature_flags().is_intel); EXPECT_FALSE(info_->feature_flags().is_nvidia); EXPECT_TRUE(info_->feature_flags().is_amd); + + SetupInitExpectationsWithVendor("", "", "AmD"); + FeatureInfo::Ref feature_info(new FeatureInfo()); + feature_info->Initialize(NULL); + EXPECT_FALSE(feature_info->feature_flags().is_intel); + EXPECT_FALSE(feature_info->feature_flags().is_nvidia); + EXPECT_TRUE(feature_info->feature_flags().is_amd); } TEST_F(FeatureInfoTest, IsAMDATI) { - SetupInitExpectationsWithVendor("", "aTI"); + SetupInitExpectationsWithVendor("", "aTI", ""); info_->Initialize(NULL); EXPECT_FALSE(info_->feature_flags().is_intel); EXPECT_FALSE(info_->feature_flags().is_nvidia); EXPECT_TRUE(info_->feature_flags().is_amd); + + SetupInitExpectationsWithVendor("", "", "AtI"); + FeatureInfo::Ref feature_info(new FeatureInfo()); + feature_info->Initialize(NULL); + EXPECT_FALSE(feature_info->feature_flags().is_intel); + EXPECT_FALSE(feature_info->feature_flags().is_nvidia); + EXPECT_TRUE(feature_info->feature_flags().is_amd); } } // namespace gles2 diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc index 151c034..2a16ced 100644 --- a/gpu/command_buffer/service/test_helper.cc +++ b/gpu/command_buffer/service/test_helper.cc @@ -211,11 +211,14 @@ void TestHelper::SetupContextGroupInitExpectations( void TestHelper::SetupFeatureInfoInitExpectations( ::gfx::MockGLInterface* gl, const char* extensions) { - SetupFeatureInfoInitExpectationsWithVendor(gl, extensions, ""); + SetupFeatureInfoInitExpectationsWithVendor(gl, extensions, "", ""); } void TestHelper::SetupFeatureInfoInitExpectationsWithVendor( - ::gfx::MockGLInterface* gl, const char* extensions, const char* vendor) { + ::gfx::MockGLInterface* gl, + const char* extensions, + const char* vendor, + const char* renderer) { InSequence sequence; EXPECT_CALL(*gl, GetString(GL_EXTENSIONS)) @@ -224,6 +227,9 @@ void TestHelper::SetupFeatureInfoInitExpectationsWithVendor( EXPECT_CALL(*gl, GetString(GL_VENDOR)) .WillOnce(Return(reinterpret_cast<const uint8*>(vendor))) .RetiresOnSaturation(); + EXPECT_CALL(*gl, GetString(GL_RENDERER)) + .WillOnce(Return(reinterpret_cast<const uint8*>(renderer))) + .RetiresOnSaturation(); } void TestHelper::SetupExpectationsForClearingUniforms( diff --git a/gpu/command_buffer/service/test_helper.h b/gpu/command_buffer/service/test_helper.h index 1fb0edf..d083e42 100644 --- a/gpu/command_buffer/service/test_helper.h +++ b/gpu/command_buffer/service/test_helper.h @@ -62,7 +62,10 @@ class TestHelper { static void SetupFeatureInfoInitExpectations( ::gfx::MockGLInterface* gl, const char* extensions); static void SetupFeatureInfoInitExpectationsWithVendor( - ::gfx::MockGLInterface* gl, const char* extensions, const char* vendor); + ::gfx::MockGLInterface* gl, + const char* extensions, + const char* vendor, + const char* renderer); static void SetupTextureManagerInitExpectations(::gfx::MockGLInterface* gl, const char* extensions); |