summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/framebuffer_manager.h
diff options
context:
space:
mode:
authorreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-22 10:32:54 +0000
committerreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-22 10:32:54 +0000
commit91c94eb3888f6cbfb61f72b5755ca535b1e89263 (patch)
tree865cbf359f3df594b20b7f9ecd9f5fc6c5cfe816 /gpu/command_buffer/service/framebuffer_manager.h
parentce2753f418b559ab13409a3402e109b606e7ff2c (diff)
downloadchromium_src-91c94eb3888f6cbfb61f72b5755ca535b1e89263.zip
chromium_src-91c94eb3888f6cbfb61f72b5755ca535b1e89263.tar.gz
chromium_src-91c94eb3888f6cbfb61f72b5755ca535b1e89263.tar.bz2
Re-land: gpu: Add Will/DidUseTexImage to GLImage API.
WillUseTexImage/DidUseTexImage is called before/after the image is used for sampling. The result is that the client only has to call bind/releaseTexImage2D when contents have changed, which allows for more efficient GLImage implementations as work required before use can be separated from work required when contents have changed. BUG=261649 TEST=gpu_unittests --gtest_filter=SharedTextureTest.Images && gpu_unittests --gtest_filter=GLES2DecoderWithShaderTest.UseTexImage && cc_unittests --gtest_filter=ResourceProviderTests/ResourceProviderTest.Image_GLTexture* && gl_tests --gtest_filter=MockGpuMemoryBufferTest.Lifecycle Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=229532 Review URL: https://codereview.chromium.org/23129010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@230093 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/framebuffer_manager.h')
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.h28
1 files changed, 27 insertions, 1 deletions
diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h
index 7955ac1..06a75b4 100644
--- a/gpu/command_buffer/service/framebuffer_manager.h
+++ b/gpu/command_buffer/service/framebuffer_manager.h
@@ -9,6 +9,7 @@
#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"
@@ -41,7 +42,7 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
virtual bool IsRenderbuffer(
Renderbuffer* renderbuffer) const = 0;
virtual bool CanRenderTo() const = 0;
- virtual void DetachFromFramebuffer() const = 0;
+ virtual void DetachFromFramebuffer(Framebuffer* framebuffer) const = 0;
virtual bool ValidForAttachmentType(
GLenum attachment_type, uint32 max_color_attachments) = 0;
virtual void AddToSignature(
@@ -130,6 +131,8 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
return allow_framebuffer_combo_complete_map_;
}
+ void OnTextureRefDetached(TextureRef* texture);
+
private:
friend class FramebufferManager;
friend class base::RefCounted<Framebuffer>;
@@ -197,6 +200,17 @@ struct DecoderFramebufferState {
// so we can correctly clear them.
class GPU_EXPORT FramebufferManager {
public:
+ class GPU_EXPORT TextureDetachObserver {
+ public:
+ TextureDetachObserver();
+ virtual ~TextureDetachObserver();
+
+ virtual void OnTextureRefDetachedFromFramebuffer(TextureRef* texture) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TextureDetachObserver);
+ };
+
FramebufferManager(uint32 max_draw_buffers, uint32 max_color_attachments);
~FramebufferManager();
@@ -230,12 +244,22 @@ class GPU_EXPORT FramebufferManager {
(framebuffer_state_change_count_ + 1) | 0x80000000U;
}
+ void AddObserver(TextureDetachObserver* observer) {
+ texture_detach_observers_.AddObserver(observer);
+ }
+
+ void RemoveObserver(TextureDetachObserver* observer) {
+ texture_detach_observers_.RemoveObserver(observer);
+ }
+
private:
friend class Framebuffer;
void StartTracking(Framebuffer* framebuffer);
void StopTracking(Framebuffer* framebuffer);
+ void OnTextureRefDetached(TextureRef* texture);
+
// Info for each framebuffer in the system.
typedef base::hash_map<GLuint, scoped_refptr<Framebuffer> >
FramebufferMap;
@@ -254,6 +278,8 @@ class GPU_EXPORT FramebufferManager {
uint32 max_draw_buffers_;
uint32 max_color_attachments_;
+ ObserverList<TextureDetachObserver> texture_detach_observers_;
+
DISALLOW_COPY_AND_ASSIGN(FramebufferManager);
};