Refactor Renderer11::getRenderTargetResource to accept a gl::Renderbuffer instead of a gl::Framebuffer.

TRAC #22656

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@2016 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Image11.cpp b/src/libGLESv2/renderer/Image11.cpp
index 861eb20..8c78c7d 100644
--- a/src/libGLESv2/renderer/Image11.cpp
+++ b/src/libGLESv2/renderer/Image11.cpp
@@ -278,13 +278,15 @@
 
 void Image11::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source)
 {
-    if (source->getReadColorbuffer() && source->getReadColorbuffer()->getActualFormat() == (GLuint)mActualFormat)
+    gl::Renderbuffer *colorbuffer = source->getReadColorbuffer();
+
+    if (colorbuffer && colorbuffer->getActualFormat() == (GLuint)mActualFormat)
     {
         // No conversion needed-- use copyback fastpath
         ID3D11Texture2D *colorBufferTexture = NULL;
         unsigned int subresourceIndex = 0;
 
-        if (mRenderer->getRenderTargetResource(source, &subresourceIndex, &colorBufferTexture))
+        if (mRenderer->getRenderTargetResource(colorbuffer, &subresourceIndex, &colorBufferTexture))
         {
             D3D11_TEXTURE2D_DESC textureDesc;
             colorBufferTexture->GetDesc(&textureDesc);
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 9f94682..a478389 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -2845,38 +2845,35 @@
     return new Fence11(this);
 }
 
-bool Renderer11::getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
+bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
 {
-    // TODO: mrt supprt
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
-    if (colorbuffer)
+    ASSERT(colorbuffer != NULL);
+
+    RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
+    if (renderTarget)
     {
-        RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
-        if (renderTarget)
+        *subresourceIndex = renderTarget->getSubresourceIndex();
+
+        ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView();
+        if (colorBufferRTV)
         {
-            *subresourceIndex = renderTarget->getSubresourceIndex();
+            ID3D11Resource *textureResource = NULL;
+            colorBufferRTV->GetResource(&textureResource);
+            colorBufferRTV->Release();
 
-            ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView();
-            if (colorBufferRTV)
+            if (textureResource)
             {
-                ID3D11Resource *textureResource = NULL;
-                colorBufferRTV->GetResource(&textureResource);
-                colorBufferRTV->Release();
+                HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource);
+                textureResource->Release();
 
-                if (textureResource)
+                if (SUCCEEDED(result))
                 {
-                    HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource);
-                    textureResource->Release();
-
-                    if (SUCCEEDED(result))
-                    {
-                        return true;
-                    }
-                    else
-                    {
-                        ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
-                            "HRESULT: 0x%X.", result);
-                    }
+                    return true;
+                }
+                else
+                {
+                    ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
+                        "HRESULT: 0x%X.", result);
                 }
             }
         }
@@ -2907,7 +2904,9 @@
     ID3D11Texture2D *colorBufferTexture = NULL;
     unsigned int subresourceIndex = 0;
 
-    if (getRenderTargetResource(framebuffer, &subresourceIndex, &colorBufferTexture))
+    gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
+
+    if (colorbuffer && getRenderTargetResource(colorbuffer, &subresourceIndex, &colorBufferTexture))
     {
         gl::Rectangle area;
         area.x = x;
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index 311d590..4065dac 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -18,6 +18,11 @@
 #include "libGLESv2/renderer/InputLayoutCache.h"
 #include "libGLESv2/renderer/RenderTarget.h"
 
+namespace gl
+{
+class Renderbuffer;
+}
+
 namespace rx
 {
 
@@ -173,7 +178,7 @@
     ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
     IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
 
-    bool getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
+    bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
 
   private:
     DISALLOW_COPY_AND_ASSIGN(Renderer11);