diff options
author | dsinclair@chromium.org <dsinclair@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-14 08:15:05 +0000 |
---|---|---|
committer | dsinclair@chromium.org <dsinclair@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-14 08:15:05 +0000 |
commit | 7832f3f59bdd11027bdf284ebd2d1ecd526c6a0f (patch) | |
tree | 3884f96e921394cf2655ddce2f01f85f63d11db1 /gpu | |
parent | cd9e9e1d936cf3ee8e3d0859dd71334b2416e09a (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info.cc | 16 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info.h | 1 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info_unittest.cc | 34 | ||||
-rw-r--r-- | gpu/command_buffer/service/test_helper.cc | 8 | ||||
-rw-r--r-- | gpu/command_buffer/service/test_helper.h | 3 |
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( |