| 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 cec5b104b7ab678b71a164d4da999293e99df8a8..84a77d46e74d5175c74c392eca676f0a5cab0ca0 100644
|
| --- a/gpu/command_buffer/service/framebuffer_manager.cc
|
| +++ b/gpu/command_buffer/service/framebuffer_manager.cc
|
| @@ -89,6 +89,15 @@ class RenderbufferAttachment
|
| return renderbuffer_.get() == renderbuffer;
|
| }
|
|
|
| + bool IsSameAttachment(const Attachment* attachment) const override {
|
| + if (attachment->IsRenderbufferAttachment()) {
|
| + const RenderbufferAttachment* other =
|
| + reinterpret_cast<const RenderbufferAttachment*>(attachment);
|
| + return IsRenderbuffer(other->renderbuffer());
|
| + }
|
| + return false;
|
| + }
|
| +
|
| bool Is3D() const override { return false; }
|
|
|
| bool CanRenderTo(const FeatureInfo*) const override { return true; }
|
| @@ -220,6 +229,18 @@ class TextureAttachment
|
| return texture == texture_ref_.get();
|
| }
|
|
|
| + bool IsSameAttachment(const Attachment* attachment) const override {
|
| + if (attachment->IsTextureAttachment()) {
|
| + const TextureAttachment* other =
|
| + reinterpret_cast<const TextureAttachment*>(attachment);
|
| + return IsTexture(other->texture()) &&
|
| + layer_ == other->layer() &&
|
| + target_ == other->target() &&
|
| + level_ == other->level();
|
| + }
|
| + return false;
|
| + }
|
| +
|
| bool IsRenderbuffer(Renderbuffer* /* renderbuffer */) const override {
|
| return false;
|
| }
|
| @@ -711,6 +732,19 @@ GLenum Framebuffer::IsPossiblyComplete(const FeatureInfo* feature_info) const {
|
| if (!attachment->CanRenderTo(feature_info)) {
|
| return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
|
| }
|
| +
|
| + // Attaching an image to more than one color attachment point should return
|
| + // FRAMEBUFFER_UNSUPPORTED.
|
| + if (it->first >= GL_COLOR_ATTACHMENT0 &&
|
| + it->first < GL_COLOR_ATTACHMENT0 + manager_->max_color_attachments_) {
|
| + for (GLenum i = it->first + 1;
|
| + i < GL_COLOR_ATTACHMENT0 + manager_->max_color_attachments_; i++) {
|
| + const Attachment* other = GetAttachment(i);
|
| + if (other && attachment->IsSameAttachment(other)) {
|
| + return GL_FRAMEBUFFER_UNSUPPORTED;
|
| + }
|
| + }
|
| + }
|
| }
|
|
|
| // This does not mean the framebuffer is actually complete. It just means our
|
|
|