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;