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)