Index: gpu/command_buffer/service/framebuffer_manager.h |
diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h |
index 2337843f68ef929b447efbf1cb4c81f7a4658d44..b632db348dcc5e902d1750a2ad096401331776e1 100644 |
--- a/gpu/command_buffer/service/framebuffer_manager.h |
+++ b/gpu/command_buffer/service/framebuffer_manager.h |
@@ -16,6 +16,7 @@ |
#include "base/memory/ref_counted.h" |
#include "gpu/command_buffer/service/context_group.h" |
#include "gpu/command_buffer/service/gl_utils.h" |
+#include "gpu/command_buffer/service/shader_manager.h" |
#include "gpu/gpu_export.h" |
namespace gpu { |
@@ -180,9 +181,8 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> { |
// Return true if the DrawBuffers() is actually called. |
bool PrepareDrawBuffersForClear() const; |
- // Restore draw buffers states that have been changed in |
- // PrepareDrawBuffersForClear(). |
- void RestoreDrawBuffersAfterClear() const; |
+ // Restore draw buffers states that have been changed. |
+ void RestoreDrawBuffers() const; |
// Return true if any draw buffers has an alpha channel. |
bool HasAlphaMRT() const; |
@@ -199,6 +199,11 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> { |
return read_buffer_; |
} |
+ const std::vector<ShaderVariableBaseType>& GetColorAttachmentBaseTypes( |
+ ) const { |
+ return color_attachment_base_types_; |
+ } |
+ |
private: |
friend class FramebufferManager; |
friend class base::RefCounted<Framebuffer>; |
@@ -213,6 +218,7 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> { |
bool cleared); |
void MarkAsComplete(unsigned state_id) { |
+ UpdateColorAttachmentBaseTypes(); |
framebuffer_complete_state_count_id_ = state_id; |
} |
@@ -220,6 +226,13 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> { |
return framebuffer_complete_state_count_id_; |
} |
+ // Cache color attachments' base types (FLOAT, INT, UINT) for optimization |
+ // purpose. If an attachment point has no image, it's set as UNDEFINED_TYPE. |
+ // This call is only valid on a complete fbo. |
+ void UpdateColorAttachmentBaseTypes(); |
+ |
+ void ResetColorAttachmentBaseTypes(); |
+ |
// The managers that owns this. |
FramebufferManager* manager_; |
@@ -240,6 +253,8 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> { |
std::unique_ptr<GLenum[]> draw_buffers_; |
+ std::vector<ShaderVariableBaseType> color_attachment_base_types_; |
+ |
GLenum read_buffer_; |
DISALLOW_COPY_AND_ASSIGN(Framebuffer); |