summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authordsinclair@chromium.org <dsinclair@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 08:15:05 +0000
committerdsinclair@chromium.org <dsinclair@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 08:15:05 +0000
commit7832f3f59bdd11027bdf284ebd2d1ecd526c6a0f (patch)
tree3884f96e921394cf2655ddce2f01f85f63d11db1 /gpu
parentcd9e9e1d936cf3ee8e3d0859dd71334b2416e09a (diff)
downloadchromium_src-7832f3f59bdd11027bdf284ebd2d1ecd526c6a0f.zip
chromium_src-7832f3f59bdd11027bdf284ebd2d1ecd526c6a0f.tar.gz
chromium_src-7832f3f59bdd11027bdf284ebd2d1ecd526c6a0f.tar.bz2
Add detection to FeatureInfo to see if samplers are available.
Not all platforms have Samplers available. We detect if we're running as OpenGL ES 3.x or if we have GL_ARB_sampler_objects available. If so we set enable_samplers in the feature info object. This will be extended in a future CL to advertise CHROMIUM_sampler_objects as an extension, and used to determine if the implementations should fail with INVALID_OPERATION. BUG=179849 R=gman@chromium.org Review URL: https://chromiumcodereview.appspot.com/12841003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188023 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/buffer_manager_unittest.cc2
-rw-r--r--gpu/command_buffer/service/feature_info.cc16
-rw-r--r--gpu/command_buffer/service/feature_info.h1
-rw-r--r--gpu/command_buffer/service/feature_info_unittest.cc34
-rw-r--r--gpu/command_buffer/service/test_helper.cc8
-rw-r--r--gpu/command_buffer/service/test_helper.h3
6 files changed, 52 insertions, 12 deletions
diff --git a/gpu/command_buffer/service/buffer_manager_unittest.cc b/gpu/command_buffer/service/buffer_manager_unittest.cc
index cfd3b80..9ae9cd8 100644
--- a/gpu/command_buffer/service/buffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/buffer_manager_unittest.cc
@@ -29,7 +29,7 @@ class BufferManagerTestBase : public testing::Test {
::gfx::GLInterface::SetGLInterface(gl_.get());
if (feature_info) {
TestHelper::SetupFeatureInfoInitExpectationsWithVendor(
- gl_.get(), extensions, vendor, renderer);
+ gl_.get(), extensions, vendor, renderer, "");
feature_info->Initialize(NULL);
}
decoder_.reset(new MockGLES2Decoder());
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 3a60942..9a17a57 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -81,7 +81,8 @@ FeatureInfo::FeatureFlags::FeatureFlags()
use_arb_occlusion_query_for_occlusion_query_boolean(false),
native_vertex_array_object(false),
disable_workarounds(false),
- enable_shader_name_hashing(false) {
+ enable_shader_name_hashing(false),
+ enable_samplers(false) {
}
FeatureInfo::Workarounds::Workarounds()
@@ -663,6 +664,19 @@ void FeatureInfo::AddFeatures() {
}
#endif
}
+
+ bool is_es3 = false;
+ const char* str = reinterpret_cast<const char*>(glGetString(GL_VERSION));
+ if (str) {
+ std::string lstr(StringToLowerASCII(std::string(str)));
+ is_es3 = (lstr.substr(0, 12) == "opengl es 3.");
+ }
+
+ if (is_es3 || extensions.Contains("GL_ARB_sampler_objects")) {
+ feature_flags_.enable_samplers = true;
+ // TODO(dsinclair): Add AddExtensionString("GL_CHROMIUM_sampler_objects")
+ // when available.
+ }
}
void FeatureInfo::AddExtensionString(const std::string& str) {
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index 88f0671..9188d98 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -39,6 +39,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool native_vertex_array_object;
bool disable_workarounds;
bool enable_shader_name_hashing;
+ bool enable_samplers;
};
struct Workarounds {
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index bf716ff..8511fd6 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -34,13 +34,14 @@ class FeatureInfoTest : public testing::Test {
}
void SetupInitExpectations(const char* extensions) {
- SetupInitExpectationsWithVendor(extensions, "", "");
+ SetupInitExpectationsWithVendor(extensions, "", "", "");
}
void SetupInitExpectationsWithVendor(
- const char* extensions, const char* vendor, const char* renderer) {
+ const char* extensions, const char* vendor, const char* renderer,
+ const char* version) {
TestHelper::SetupFeatureInfoInitExpectationsWithVendor(
- gl_.get(), extensions, vendor, renderer);
+ gl_.get(), extensions, vendor, renderer, version);
}
protected:
@@ -801,14 +802,14 @@ TEST_F(FeatureInfoTest, InitializeOES_element_index_uint) {
}
TEST_F(FeatureInfoTest, InitializeARM) {
- SetupInitExpectationsWithVendor("", "ARM", "MAli-T604");
+ SetupInitExpectationsWithVendor("", "ARM", "MAli-T604", "");
info_->Initialize(NULL);
EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
}
TEST_F(FeatureInfoTest, InitializeImagination) {
SetupInitExpectationsWithVendor(
- "", "Imagination Techologies", "PowerVR SGX 540");
+ "", "Imagination Techologies", "PowerVR SGX 540", "");
info_->Initialize(NULL);
EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
@@ -816,7 +817,7 @@ TEST_F(FeatureInfoTest, InitializeImagination) {
TEST_F(FeatureInfoTest, InitializeARMVAOs) {
SetupInitExpectationsWithVendor(
- "GL_OES_vertex_array_object", "ARM", "MAli-T604");
+ "GL_OES_vertex_array_object", "ARM", "MAli-T604", "");
info_->Initialize(NULL);
EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
@@ -825,10 +826,29 @@ TEST_F(FeatureInfoTest, InitializeARMVAOs) {
TEST_F(FeatureInfoTest, InitializeImaginationVAOs) {
SetupInitExpectationsWithVendor(
"GL_OES_vertex_array_object",
- "Imagination Techologies", "PowerVR SGX 540");
+ "Imagination Techologies", "PowerVR SGX 540", "");
info_->Initialize(NULL);
EXPECT_TRUE(info_->workarounds().use_client_side_arrays_for_stream_buffers);
}
+TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) {
+ SetupInitExpectationsWithVendor("GL_ARB_sampler_objects", "", "",
+ "OpenGL 3.0");
+ info_->Initialize(NULL);
+ EXPECT_TRUE(info_->feature_flags().enable_samplers);
+}
+
+TEST_F(FeatureInfoTest, InitializeSamplersWithES3) {
+ SetupInitExpectationsWithVendor("", "", "", "OpenGL ES 3.0");
+ info_->Initialize(NULL);
+ EXPECT_TRUE(info_->feature_flags().enable_samplers);
+}
+
+TEST_F(FeatureInfoTest, InitializeWithoutSamplers) {
+ SetupInitExpectationsWithVendor("", "", "", "OpenGL GL 3.0");
+ info_->Initialize(NULL);
+ EXPECT_FALSE(info_->feature_flags().enable_samplers);
+}
+
} // namespace gles2
} // namespace gpu
diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc
index 7bdab92..10f2e33 100644
--- a/gpu/command_buffer/service/test_helper.cc
+++ b/gpu/command_buffer/service/test_helper.cc
@@ -272,14 +272,15 @@ 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,
- const char* renderer) {
+ const char* renderer,
+ const char* version) {
InSequence sequence;
EXPECT_CALL(*gl, GetString(GL_EXTENSIONS))
@@ -291,6 +292,9 @@ void TestHelper::SetupFeatureInfoInitExpectationsWithVendor(
EXPECT_CALL(*gl, GetString(GL_RENDERER))
.WillOnce(Return(reinterpret_cast<const uint8*>(renderer)))
.RetiresOnSaturation();
+ EXPECT_CALL(*gl, GetString(GL_VERSION))
+ .WillOnce(Return(reinterpret_cast<const uint8*>(version)))
+ .RetiresOnSaturation();
}
void TestHelper::SetupExpectationsForClearingUniforms(
diff --git a/gpu/command_buffer/service/test_helper.h b/gpu/command_buffer/service/test_helper.h
index dbe050e..a7a088d 100644
--- a/gpu/command_buffer/service/test_helper.h
+++ b/gpu/command_buffer/service/test_helper.h
@@ -71,7 +71,8 @@ class TestHelper {
::gfx::MockGLInterface* gl,
const char* extensions,
const char* vendor,
- const char* renderer);
+ const char* renderer,
+ const char* version);
static void SetupTextureManagerInitExpectations(
::gfx::MockGLInterface* gl, const char* extensions);
static void SetupTextureManagerDestructionExpectations(