diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-11-06 12:27:47 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-11-06 12:27:47 +0000 |
commit | 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740 (patch) | |
tree | 08e3fb2fdca3674ceb4d6cf527cb65e755cd993e /gpu | |
parent | 0bdaf95291fc46702f274f40e8e5081e9ef23011 (diff) | |
download | chromium_org-0f1bc08d4cfcc34181b0b5cbf065c40f687bf740.tar.gz |
Merge from Chromium at DEPS revision 232870
This commit was generated by merge_to_master.py.
Change-Id: I9cd2139013538e8bcd17966e8ff30ca5651d1a3d
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/OWNERS | 1 | ||||
-rw-r--r-- | gpu/command_buffer/OWNERS | 3 | ||||
-rw-r--r-- | gpu/command_buffer/common/gpu_memory_allocation.h | 22 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info.cc | 4 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info.h | 1 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info_unittest.cc | 9 | ||||
-rw-r--r-- | gpu/command_buffer/service/framebuffer_manager.cc | 10 | ||||
-rw-r--r-- | gpu/command_buffer/service/framebuffer_manager.h | 14 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder.cc | 8 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc | 56 | ||||
-rw-r--r-- | gpu/config/OWNERS | 1 | ||||
-rw-r--r-- | gpu/config/gpu_driver_bug_list_json.cc | 8 |
12 files changed, 102 insertions, 35 deletions
diff --git a/gpu/OWNERS b/gpu/OWNERS index 1cf4e0238a..b32f729e05 100644 --- a/gpu/OWNERS +++ b/gpu/OWNERS @@ -1,3 +1,2 @@ piman@chromium.org -apatrick@chromium.org sievers@chromium.org diff --git a/gpu/command_buffer/OWNERS b/gpu/command_buffer/OWNERS index 7ef33ed2f5..bb8ea76f76 100644 --- a/gpu/command_buffer/OWNERS +++ b/gpu/command_buffer/OWNERS @@ -1,5 +1,4 @@ piman@chromium.org -apatrick@chromium.org jbauman@chromium.org bajones@chromium.org -zmo@chromium.org
\ No newline at end of file +zmo@chromium.org diff --git a/gpu/command_buffer/common/gpu_memory_allocation.h b/gpu/command_buffer/common/gpu_memory_allocation.h index 3057592f5f..57be4c5490 100644 --- a/gpu/command_buffer/common/gpu_memory_allocation.h +++ b/gpu/command_buffer/common/gpu_memory_allocation.h @@ -31,36 +31,20 @@ struct MemoryAllocation { uint64 bytes_limit_when_visible; PriorityCutoff priority_cutoff_when_visible; - // Limits when this renderer is not visible. - uint64 bytes_limit_when_not_visible; - PriorityCutoff priority_cutoff_when_not_visible; - bool have_backbuffer_when_not_visible; - MemoryAllocation() : bytes_limit_when_visible(0), - priority_cutoff_when_visible(CUTOFF_ALLOW_NOTHING), - bytes_limit_when_not_visible(0), - priority_cutoff_when_not_visible(CUTOFF_ALLOW_NOTHING), - have_backbuffer_when_not_visible(false) { + priority_cutoff_when_visible(CUTOFF_ALLOW_NOTHING) { } MemoryAllocation(uint64 bytes_limit_when_visible) : bytes_limit_when_visible(bytes_limit_when_visible), - priority_cutoff_when_visible(CUTOFF_ALLOW_EVERYTHING), - bytes_limit_when_not_visible(0), - priority_cutoff_when_not_visible(CUTOFF_ALLOW_NOTHING), - have_backbuffer_when_not_visible(false) { + priority_cutoff_when_visible(CUTOFF_ALLOW_EVERYTHING) { } bool Equals(const MemoryAllocation& other) const { return bytes_limit_when_visible == other.bytes_limit_when_visible && - priority_cutoff_when_visible == other.priority_cutoff_when_visible && - bytes_limit_when_not_visible == other.bytes_limit_when_not_visible && - priority_cutoff_when_not_visible == - other.priority_cutoff_when_not_visible && - have_backbuffer_when_not_visible == - other.have_backbuffer_when_not_visible; + priority_cutoff_when_visible == other.priority_cutoff_when_visible; } }; diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 6e6b363220..9329bc590f 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -122,7 +122,8 @@ FeatureInfo::FeatureFlags::FeatureFlags() ext_draw_buffers(false), ext_frag_depth(false), use_async_readpixels(false), - map_buffer_range(false) { + map_buffer_range(false), + ext_discard_framebuffer(false) { } FeatureInfo::Workarounds::Workarounds() : @@ -697,6 +698,7 @@ void FeatureInfo::InitializeFeatures() { !workarounds_.disable_ext_discard_framebuffer) { // DiscardFramebufferEXT is automatically bound to InvalidateFramebuffer. AddExtensionString("GL_EXT_discard_framebuffer"); + feature_flags_.ext_discard_framebuffer = true; } } diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index 7d5041f26b..1b0fc77a81 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h @@ -51,6 +51,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { bool ext_frag_depth; bool use_async_readpixels; bool map_buffer_range; + bool ext_discard_framebuffer; }; struct Workarounds { diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc index c5e8301e7c..5b071061dc 100644 --- a/gpu/command_buffer/service/feature_info_unittest.cc +++ b/gpu/command_buffer/service/feature_info_unittest.cc @@ -116,6 +116,7 @@ TEST_F(FeatureInfoTest, Basic) { EXPECT_FALSE(info_->feature_flags().native_vertex_array_object); EXPECT_FALSE(info_->feature_flags().map_buffer_range); EXPECT_FALSE(info_->feature_flags().use_async_readpixels); + EXPECT_FALSE(info_->feature_flags().ext_discard_framebuffer); #define GPU_OP(type, name) EXPECT_FALSE(info_->workarounds().name); GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP) @@ -850,6 +851,12 @@ TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) { EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth")); } +TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) { + SetupInitExpectations("GL_EXT_discard_framebuffer"); + EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer); + EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer")); +} + TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) { SetupInitExpectationsWithGLVersion("GL_ARB_sampler_objects", "OpenGL 3.0"); EXPECT_TRUE(info_->feature_flags().enable_samplers); @@ -859,6 +866,8 @@ TEST_F(FeatureInfoTest, InitializeWithES3) { SetupInitExpectationsWithGLVersion("", "OpenGL ES 3.0"); EXPECT_TRUE(info_->feature_flags().enable_samplers); EXPECT_TRUE(info_->feature_flags().map_buffer_range); + EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer); + EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_discard_framebuffer")); EXPECT_FALSE(info_->feature_flags().use_async_readpixels); } diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc index 194fe370a3..7dd1d820ec 100644 --- a/gpu/command_buffer/service/framebuffer_manager.cc +++ b/gpu/command_buffer/service/framebuffer_manager.cc @@ -632,9 +632,13 @@ bool FramebufferManager::IsComplete( } void FramebufferManager::OnTextureRefDetached(TextureRef* texture) { - FOR_EACH_OBSERVER(TextureDetachObserver, - texture_detach_observers_, - OnTextureRefDetachedFromFramebuffer(texture)); + for (TextureDetachObserverVector::iterator it = + texture_detach_observers_.begin(); + it != texture_detach_observers_.end(); + ++it) { + TextureDetachObserver* observer = *it; + observer->OnTextureRefDetachedFromFramebuffer(texture); + } } } // namespace gles2 diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h index 06a75b4824..23fd1baf6a 100644 --- a/gpu/command_buffer/service/framebuffer_manager.h +++ b/gpu/command_buffer/service/framebuffer_manager.h @@ -5,11 +5,12 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ #define GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ +#include <vector> + #include "base/basictypes.h" #include "base/containers/hash_tables.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" -#include "base/observer_list.h" #include "gpu/command_buffer/service/gl_utils.h" #include "gpu/gpu_export.h" @@ -245,11 +246,15 @@ class GPU_EXPORT FramebufferManager { } void AddObserver(TextureDetachObserver* observer) { - texture_detach_observers_.AddObserver(observer); + texture_detach_observers_.push_back(observer); } void RemoveObserver(TextureDetachObserver* observer) { - texture_detach_observers_.RemoveObserver(observer); + texture_detach_observers_.erase( + std::remove(texture_detach_observers_.begin(), + texture_detach_observers_.end(), + observer), + texture_detach_observers_.end()); } private: @@ -278,7 +283,8 @@ class GPU_EXPORT FramebufferManager { uint32 max_draw_buffers_; uint32 max_color_attachments_; - ObserverList<TextureDetachObserver> texture_detach_observers_; + typedef std::vector<TextureDetachObserver*> TextureDetachObserverVector; + TextureDetachObserverVector texture_detach_observers_; DISALLOW_COPY_AND_ASSIGN(FramebufferManager); }; diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 2e82d98982..be0ee10b50 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -3892,6 +3892,13 @@ void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) { void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments) { + if (!features().ext_discard_framebuffer) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, + "glDiscardFramebufferEXT", + "function not available"); + return; + } + Framebuffer* framebuffer = GetFramebufferInfoForTarget(GL_FRAMEBUFFER); @@ -4977,6 +4984,7 @@ void GLES2DecoderImpl::DoBlitFramebufferEXT( LOCAL_SET_GL_ERROR( GL_INVALID_OPERATION, "glBlitFramebufferEXT", "function not available"); + return; } if (!CheckBoundFramebuffersValid("glBlitFramebufferEXT")) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc index 573ba6e613..af127bfaca 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc @@ -8610,6 +8610,62 @@ TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) { EXPECT_EQ(GL_NO_ERROR, GetGLError()); } +TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) { + InitDecoder("GL_EXT_discard_framebuffer", // extensions + false, // has alpha + false, // has depth + false, // has stencil + false, // request alpha + false, // request depth + false, // request stencil + false); // bind generates resource + + const GLenum target = GL_FRAMEBUFFER; + const GLsizei count = 1; + const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 }; + + SetupTexture(); + DoBindFramebuffer( + GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); + DoFramebufferTexture2D(GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, + client_texture_id_, + kServiceTextureId, + 0, + GL_NO_ERROR); + FramebufferManager* framebuffer_manager = group().framebuffer_manager(); + Framebuffer* framebuffer = + framebuffer_manager->GetFramebuffer(client_framebuffer_id_); + EXPECT_TRUE(framebuffer->IsCleared()); + + EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _)) + .Times(1) + .RetiresOnSaturation(); + DiscardFramebufferEXTImmediate& cmd = + *GetImmediateAs<DiscardFramebufferEXTImmediate>(); + cmd.Init(target, count, attachments); + + EXPECT_EQ(error::kNoError, + ExecuteImmediateCmd(cmd, sizeof(attachments))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); + EXPECT_FALSE(framebuffer->IsCleared()); +} + +TEST_F(GLES2DecoderTest, DiscardFramebufferEXTUnsupported) { + const GLenum target = GL_FRAMEBUFFER; + const GLsizei count = 1; + const GLenum attachments[] = { GL_COLOR_EXT }; + DiscardFramebufferEXTImmediate& cmd = + *GetImmediateAs<DiscardFramebufferEXTImmediate>(); + cmd.Init(target, count, attachments); + + // Should not result into a call into GL. + EXPECT_EQ(error::kNoError, + ExecuteImmediateCmd(cmd, sizeof(attachments))); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); +} + // TODO(gman): Complete this test. // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { // } diff --git a/gpu/config/OWNERS b/gpu/config/OWNERS index 92ac85812f..b66635ae03 100644 --- a/gpu/config/OWNERS +++ b/gpu/config/OWNERS @@ -1,4 +1,3 @@ -apatrick@chromium.org kbr@chromium.org piman@chromium.org zmo@chromium.org diff --git a/gpu/config/gpu_driver_bug_list_json.cc b/gpu/config/gpu_driver_bug_list_json.cc index dd38d57ab6..49d34f1b56 100644 --- a/gpu/config/gpu_driver_bug_list_json.cc +++ b/gpu/config/gpu_driver_bug_list_json.cc @@ -396,8 +396,8 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST( }, { "id": 31, - "cr_bugs": [154715, 10068, 269829, 294779], - "description": "The Mali T-6xx driver does not guarantee flush ordering.", + "cr_bugs": [154715, 10068, 269829], + "description": "The Nexus 10 Mali driver does not guarantee flush ordering.", "os": { "type": "android" }, @@ -406,8 +406,8 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST( "value": "ARM" }, "gl_renderer": { - "op": "beginwith", - "value": "Mali-T6" + "op": "contains", + "value": "Mali-T604" }, "features": [ "use_virtualized_gl_contexts" |