Rename Framebuffer::completeness to checkStatus and add an Impl method.

BUG=angle:841

Change-Id: I04b4ffd086424569a15aa21447dd552e0a898928
Reviewed-on: https://chromium-review.googlesource.com/232394
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
index 78bb54d..0b83683 100644
--- a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
+++ b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
@@ -65,9 +65,12 @@
 
 
 FramebufferD3D::FramebufferD3D(RendererD3D *renderer)
-    : mRenderer(renderer)
+    : mRenderer(renderer),
+      mColorBuffers(renderer->getRendererCaps().maxColorAttachments)
 {
     ASSERT(mRenderer != nullptr);
+
+    std::fill(mColorBuffers.begin(), mColorBuffers.end(), nullptr);
 }
 
 FramebufferD3D::~FramebufferD3D()
@@ -76,6 +79,8 @@
 
 void FramebufferD3D::setColorAttachment(size_t index, const gl::FramebufferAttachment *attachment)
 {
+    ASSERT(index < mColorBuffers.size());
+    mColorBuffers[index] = attachment;
 }
 
 void FramebufferD3D::setDepthttachment(const gl::FramebufferAttachment *attachment)
@@ -110,6 +115,30 @@
     return gl::Error(GL_NO_ERROR);
 }
 
+GLenum FramebufferD3D::checkStatus() const
+{
+    // D3D11 does not allow for overlapping RenderTargetViews, so ensure uniqueness
+    for (size_t colorAttachment = 0; colorAttachment < mColorBuffers.size(); colorAttachment++)
+    {
+        const gl::FramebufferAttachment *attachment = mColorBuffers[colorAttachment];
+        if (attachment != nullptr)
+        {
+            for (size_t prevColorAttachment = 0; prevColorAttachment < colorAttachment; prevColorAttachment++)
+            {
+                const gl::FramebufferAttachment *prevAttachment = mColorBuffers[prevColorAttachment];
+                if (prevAttachment != nullptr &&
+                    (attachment->id() == prevAttachment->id() &&
+                     attachment->type() == prevAttachment->type()))
+                {
+                    return GL_FRAMEBUFFER_UNSUPPORTED;
+                }
+            }
+        }
+    }
+
+    return GL_FRAMEBUFFER_COMPLETE;
+}
+
 gl::Error GetAttachmentRenderTarget(const gl::FramebufferAttachment *attachment, RenderTarget **outRT)
 {
     if (attachment->type() == GL_TEXTURE)