Revert "Query attachment render targets from Impl class."
D3D9 bug is causing failures in the WebGL depth texture test.
BUG=angleproject:963
This reverts commit 804e8436f91733e1d0f769ec10082e4741f2e549.
Change-Id: I660f05033360e97258794138cb50b604f5ac16b6
Reviewed-on: https://chromium-review.googlesource.com/269005
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
index 6e7b0ece..a1e0391 100644
--- a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
+++ b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
@@ -226,7 +226,7 @@
}
RenderTargetD3D *attachmentRenderTarget = NULL;
- gl::Error error = readAttachment->getRenderTarget(&attachmentRenderTarget);
+ gl::Error error = GetAttachmentRenderTarget(readAttachment, &attachmentRenderTarget);
if (error.isError())
{
return GL_NONE;
@@ -248,7 +248,7 @@
}
RenderTargetD3D *attachmentRenderTarget = NULL;
- gl::Error error = readAttachment->getRenderTarget(&attachmentRenderTarget);
+ gl::Error error = GetAttachmentRenderTarget(readAttachment, &attachmentRenderTarget);
if (error.isError())
{
return GL_NONE;
@@ -376,6 +376,48 @@
return mColorAttachmentsForRender;
}
+gl::Error GetAttachmentRenderTarget(const gl::FramebufferAttachment *attachment, RenderTargetD3D **outRT)
+{
+ if (attachment->type() == GL_TEXTURE)
+ {
+ gl::Texture *texture = attachment->getTexture();
+ ASSERT(texture);
+ TextureD3D *textureD3D = GetImplAs<TextureD3D>(texture);
+ const gl::ImageIndex &index = attachment->getTextureImageIndex();
+ return textureD3D->getRenderTarget(index, outRT);
+ }
+ else if (attachment->type() == GL_RENDERBUFFER)
+ {
+ gl::Renderbuffer *renderbuffer = attachment->getRenderbuffer();
+ ASSERT(renderbuffer);
+ RenderbufferD3D *renderbufferD3D = GetImplAs<RenderbufferD3D>(renderbuffer);
+ *outRT = renderbufferD3D->getRenderTarget();
+ return gl::Error(GL_NO_ERROR);
+ }
+ else if (attachment->type() == GL_FRAMEBUFFER_DEFAULT)
+ {
+ const egl::Surface *surface = attachment->getSurface();
+ ASSERT(surface);
+ const SurfaceD3D *surfaceD3D = GetImplAs<SurfaceD3D>(surface);
+ ASSERT(surfaceD3D);
+
+ if (attachment->getBinding() == GL_BACK)
+ {
+ *outRT = surfaceD3D->getSwapChain()->getColorRenderTarget();
+ }
+ else
+ {
+ *outRT = surfaceD3D->getSwapChain()->getDepthStencilRenderTarget();
+ }
+ return gl::Error(GL_NO_ERROR);
+ }
+ else
+ {
+ UNREACHABLE();
+ return gl::Error(GL_INVALID_OPERATION);
+ }
+}
+
// Note: RenderTarget serials should ideally be in the RenderTargets themselves.
unsigned int GetAttachmentSerial(const gl::FramebufferAttachment *attachment)
{