Stores render target description without D3D9 reliance.

TRAC #22093

Signed-off-by: Geoff Lang
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1442 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 84d6bc7..c711404 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1832,14 +1832,10 @@
 
     if (!mRenderTargetDescInitialized || renderTargetChanged)
     {
-        IDirect3DSurface9 *renderTarget = renderbufferObject->getRenderTarget();
-        if (!renderTarget)
-        {
-            return false;   // Context must be lost
-        }
-        renderTarget->GetDesc(&mRenderTargetDesc);
+        mRenderTargetDesc.width = renderbufferObject->getWidth();
+        mRenderTargetDesc.height = renderbufferObject->getHeight();
+        mRenderTargetDesc.format = renderbufferObject->getActualFormat();
         mRenderTargetDescInitialized = true;
-        renderTarget->Release();
     }
 
     D3DVIEWPORT9 viewport;
@@ -1851,17 +1847,17 @@
     {
         viewport.X = 0;
         viewport.Y = 0;
-        viewport.Width = mRenderTargetDesc.Width;
-        viewport.Height = mRenderTargetDesc.Height;
+        viewport.Width = mRenderTargetDesc.width;
+        viewport.Height = mRenderTargetDesc.height;
         viewport.MinZ = 0.0f;
         viewport.MaxZ = 1.0f;
     }
     else
     {
-        viewport.X = clamp(mState.viewportX, 0L, static_cast<LONG>(mRenderTargetDesc.Width));
-        viewport.Y = clamp(mState.viewportY, 0L, static_cast<LONG>(mRenderTargetDesc.Height));
-        viewport.Width = clamp(mState.viewportWidth, 0L, static_cast<LONG>(mRenderTargetDesc.Width) - static_cast<LONG>(viewport.X));
-        viewport.Height = clamp(mState.viewportHeight, 0L, static_cast<LONG>(mRenderTargetDesc.Height) - static_cast<LONG>(viewport.Y));
+        viewport.X = clamp(mState.viewportX, 0L, static_cast<LONG>(mRenderTargetDesc.width));
+        viewport.Y = clamp(mState.viewportY, 0L, static_cast<LONG>(mRenderTargetDesc.height));
+        viewport.Width = clamp(mState.viewportWidth, 0L, static_cast<LONG>(mRenderTargetDesc.width) - static_cast<LONG>(viewport.X));
+        viewport.Height = clamp(mState.viewportHeight, 0L, static_cast<LONG>(mRenderTargetDesc.height) - static_cast<LONG>(viewport.Y));
         viewport.MinZ = zNear;
         viewport.MaxZ = zFar;
     }
@@ -1879,8 +1875,8 @@
         mDxUniformsDirty = true;
     }
 
-    mRenderer->setScissorRectangle(mState.scissor, static_cast<int>(mRenderTargetDesc.Width),
-                                    static_cast<int>(mRenderTargetDesc.Height));
+    mRenderer->setScissorRectangle(mState.scissor, static_cast<int>(mRenderTargetDesc.width),
+                                    static_cast<int>(mRenderTargetDesc.height));
 
     if (mState.currentProgram && mDxUniformsDirty)
     {
@@ -2512,7 +2508,7 @@
     int stencil = mState.stencilClearValue & 0x000000FF;
 
 
-    bool alphaUnmasked = (d3d9_gl::GetAlphaSize(mRenderTargetDesc.Format) == 0) || mState.blend.colorMaskAlpha;
+    bool alphaUnmasked = (gl::GetAlphaSize(mRenderTargetDesc.format) == 0) || mState.blend.colorMaskAlpha;
 
     const bool needMaskedStencilClear = (flags & D3DCLEAR_STENCIL) &&
                                         (mState.depthStencil.stencilWritemask & stencilUnmasked) != stencilUnmasked;
@@ -2626,12 +2622,12 @@
 
         float quad[4][4];   // A quadrilateral covering the target, aligned to match the edges
         quad[0][0] = -0.5f;
-        quad[0][1] = mRenderTargetDesc.Height - 0.5f;
+        quad[0][1] = mRenderTargetDesc.height - 0.5f;
         quad[0][2] = 0.0f;
         quad[0][3] = 1.0f;
 
-        quad[1][0] = mRenderTargetDesc.Width - 0.5f;
-        quad[1][1] = mRenderTargetDesc.Height - 0.5f;
+        quad[1][0] = mRenderTargetDesc.width - 0.5f;
+        quad[1][1] = mRenderTargetDesc.height - 0.5f;
         quad[1][2] = 0.0f;
         quad[1][3] = 1.0f;
 
@@ -2640,7 +2636,7 @@
         quad[2][2] = 0.0f;
         quad[2][3] = 1.0f;
 
-        quad[3][0] = mRenderTargetDesc.Width - 0.5f;
+        quad[3][0] = mRenderTargetDesc.width - 0.5f;
         quad[3][1] = -0.5f;
         quad[3][2] = 0.0f;
         quad[3][3] = 1.0f;
diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h
index d73730f..a5ede05 100644
--- a/src/libGLESv2/Context.h
+++ b/src/libGLESv2/Context.h
@@ -557,7 +557,7 @@
     bool mViewportInitialized;
     D3DVIEWPORT9 mSetViewport;
     bool mRenderTargetDescInitialized;
-    D3DSURFACE_DESC mRenderTargetDesc;
+    rx::RenderTarget::Desc mRenderTargetDesc;
     bool mDxUniformsDirty;
     BindingPointer<ProgramBinary> mCurrentProgramBinary;
     Framebuffer *mBoundDrawFramebuffer;
diff --git a/src/libGLESv2/renderer/RenderTarget.h b/src/libGLESv2/renderer/RenderTarget.h
index 0d5325d..62c684c 100644
--- a/src/libGLESv2/renderer/RenderTarget.h
+++ b/src/libGLESv2/renderer/RenderTarget.h
@@ -31,6 +31,12 @@
 
     virtual IDirect3DSurface9 *getSurface() = 0; // D3D9_REPLACE - temporary pass-through function
 
+    struct Desc {
+        GLsizei width;
+        GLsizei height;
+        GLenum  format;
+    };
+
   protected:
     GLsizei mWidth;
     GLsizei mHeight;