summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-17 21:50:02 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-17 21:50:02 +0000
commita9e23873d3d87898ed7237b46da1eabe720fcdc8 (patch)
tree4bb9e25a9e35cf2013036364f31ea35c764eee56 /gpu/command_buffer
parent62215411aa596e71fd4ef9a5d837a003e0ef778e (diff)
downloadchromium_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.cc31
-rw-r--r--gpu/command_buffer/service/feature_info_unittest.cc42
-rw-r--r--gpu/command_buffer/service/test_helper.cc10
-rw-r--r--gpu/command_buffer/service/test_helper.h5
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);