Chromium Code Reviews| Index: gpu/command_buffer/service/framebuffer_manager.cc |
| diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc |
| index 0fd59c5fd6ba1dfb618709f97b1a8269481fd6d2..b3320a6139eba6770f80d6abac0d937d142081d9 100644 |
| --- a/gpu/command_buffer/service/framebuffer_manager.cc |
| +++ b/gpu/command_buffer/service/framebuffer_manager.cc |
| @@ -526,8 +526,8 @@ bool Framebuffer::ValidateAndAdjustDrawBuffers( |
| return false; |
| if (mask != adjusted_draw_buffer_bound_mask_) { |
| - // This won't be reached in every draw/clear call - only when framebuffer |
| - // or program has changed. |
| + // This won't be reached in every draw call - only when framebuffer or |
| + // program has changed. |
| for (uint32_t ii = 0; ii < manager_->max_draw_buffers_; ++ii) { |
| adjusted_draw_buffers_[ii] = draw_buffers_[ii]; |
| uint32_t shift_bits = ii * 2; |
| @@ -542,6 +542,24 @@ bool Framebuffer::ValidateAndAdjustDrawBuffers( |
| return true; |
| } |
| +void Framebuffer::AdjustDrawBuffers() { |
| + if (draw_buffer_bound_mask_ == adjusted_draw_buffer_bound_mask_) { |
| + return; |
| + } |
| + // This won't be reached in every clear call - only when framebuffer has |
| + // changed. |
| + for (uint32_t ii = 0; ii < manager_->max_draw_buffers_; ++ii) { |
| + adjusted_draw_buffers_[ii] = draw_buffers_[ii]; |
| + uint32_t shift_bits = ii * 2; |
| + uint32_t buffer_mask = 0x3 << shift_bits; |
| + if ((buffer_mask & draw_buffer_bound_mask_) == 0u) { |
| + adjusted_draw_buffers_[ii] = GL_NONE; |
| + } |
| + } |
|
Ken Russell (switch to Gerrit)
2017/01/06 22:43:07
Per offline discussion: this is the same block of
Zhenyao Mo
2017/01/07 00:22:24
Done.
|
| + adjusted_draw_buffer_bound_mask_ = draw_buffer_bound_mask_; |
| + glDrawBuffersARB(manager_->max_draw_buffers_, adjusted_draw_buffers_.get()); |
| +} |
| + |
| bool Framebuffer::ContainsActiveIntegerAttachments() const { |
| // 0x55555555 broadcasts SHADER_VARIABLE_FLOAT to all slots. |
| uint32_t mask = 0x55555555u * SHADER_VARIABLE_FLOAT; |