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
parent c497ebae
...@@ -1832,14 +1832,10 @@ bool Context::applyRenderTarget(bool ignoreViewport) ...@@ -1832,14 +1832,10 @@ bool Context::applyRenderTarget(bool ignoreViewport)
if (!mRenderTargetDescInitialized || renderTargetChanged) if (!mRenderTargetDescInitialized || renderTargetChanged)
{ {
IDirect3DSurface9 *renderTarget = renderbufferObject->getRenderTarget(); mRenderTargetDesc.width = renderbufferObject->getWidth();
if (!renderTarget) mRenderTargetDesc.height = renderbufferObject->getHeight();
{ mRenderTargetDesc.format = renderbufferObject->getActualFormat();
return false; // Context must be lost
}
renderTarget->GetDesc(&mRenderTargetDesc);
mRenderTargetDescInitialized = true; mRenderTargetDescInitialized = true;
renderTarget->Release();
} }
D3DVIEWPORT9 viewport; D3DVIEWPORT9 viewport;
...@@ -1851,17 +1847,17 @@ bool Context::applyRenderTarget(bool ignoreViewport) ...@@ -1851,17 +1847,17 @@ bool Context::applyRenderTarget(bool ignoreViewport)
{ {
viewport.X = 0; viewport.X = 0;
viewport.Y = 0; viewport.Y = 0;
viewport.Width = mRenderTargetDesc.Width; viewport.Width = mRenderTargetDesc.width;
viewport.Height = mRenderTargetDesc.Height; viewport.Height = mRenderTargetDesc.height;
viewport.MinZ = 0.0f; viewport.MinZ = 0.0f;
viewport.MaxZ = 1.0f; viewport.MaxZ = 1.0f;
} }
else else
{ {
viewport.X = clamp(mState.viewportX, 0L, static_cast<LONG>(mRenderTargetDesc.Width)); viewport.X = clamp(mState.viewportX, 0L, static_cast<LONG>(mRenderTargetDesc.width));
viewport.Y = clamp(mState.viewportY, 0L, static_cast<LONG>(mRenderTargetDesc.Height)); 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.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.Height = clamp(mState.viewportHeight, 0L, static_cast<LONG>(mRenderTargetDesc.height) - static_cast<LONG>(viewport.Y));
viewport.MinZ = zNear; viewport.MinZ = zNear;
viewport.MaxZ = zFar; viewport.MaxZ = zFar;
} }
...@@ -1879,8 +1875,8 @@ bool Context::applyRenderTarget(bool ignoreViewport) ...@@ -1879,8 +1875,8 @@ bool Context::applyRenderTarget(bool ignoreViewport)
mDxUniformsDirty = true; mDxUniformsDirty = true;
} }
mRenderer->setScissorRectangle(mState.scissor, static_cast<int>(mRenderTargetDesc.Width), mRenderer->setScissorRectangle(mState.scissor, static_cast<int>(mRenderTargetDesc.width),
static_cast<int>(mRenderTargetDesc.Height)); static_cast<int>(mRenderTargetDesc.height));
if (mState.currentProgram && mDxUniformsDirty) if (mState.currentProgram && mDxUniformsDirty)
{ {
...@@ -2512,7 +2508,7 @@ void Context::clear(GLbitfield mask) ...@@ -2512,7 +2508,7 @@ void Context::clear(GLbitfield mask)
int stencil = mState.stencilClearValue & 0x000000FF; 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) && const bool needMaskedStencilClear = (flags & D3DCLEAR_STENCIL) &&
(mState.depthStencil.stencilWritemask & stencilUnmasked) != stencilUnmasked; (mState.depthStencil.stencilWritemask & stencilUnmasked) != stencilUnmasked;
...@@ -2626,12 +2622,12 @@ void Context::clear(GLbitfield mask) ...@@ -2626,12 +2622,12 @@ void Context::clear(GLbitfield mask)
float quad[4][4]; // A quadrilateral covering the target, aligned to match the edges float quad[4][4]; // A quadrilateral covering the target, aligned to match the edges
quad[0][0] = -0.5f; 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][2] = 0.0f;
quad[0][3] = 1.0f; quad[0][3] = 1.0f;
quad[1][0] = mRenderTargetDesc.Width - 0.5f; quad[1][0] = mRenderTargetDesc.width - 0.5f;
quad[1][1] = mRenderTargetDesc.Height - 0.5f; quad[1][1] = mRenderTargetDesc.height - 0.5f;
quad[1][2] = 0.0f; quad[1][2] = 0.0f;
quad[1][3] = 1.0f; quad[1][3] = 1.0f;
...@@ -2640,7 +2636,7 @@ void Context::clear(GLbitfield mask) ...@@ -2640,7 +2636,7 @@ void Context::clear(GLbitfield mask)
quad[2][2] = 0.0f; quad[2][2] = 0.0f;
quad[2][3] = 1.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][1] = -0.5f;
quad[3][2] = 0.0f; quad[3][2] = 0.0f;
quad[3][3] = 1.0f; quad[3][3] = 1.0f;
......
...@@ -557,7 +557,7 @@ class Context ...@@ -557,7 +557,7 @@ class Context
bool mViewportInitialized; bool mViewportInitialized;
D3DVIEWPORT9 mSetViewport; D3DVIEWPORT9 mSetViewport;
bool mRenderTargetDescInitialized; bool mRenderTargetDescInitialized;
D3DSURFACE_DESC mRenderTargetDesc; rx::RenderTarget::Desc mRenderTargetDesc;
bool mDxUniformsDirty; bool mDxUniformsDirty;
BindingPointer<ProgramBinary> mCurrentProgramBinary; BindingPointer<ProgramBinary> mCurrentProgramBinary;
Framebuffer *mBoundDrawFramebuffer; Framebuffer *mBoundDrawFramebuffer;
......
...@@ -31,6 +31,12 @@ class RenderTarget ...@@ -31,6 +31,12 @@ class RenderTarget
virtual IDirect3DSurface9 *getSurface() = 0; // D3D9_REPLACE - temporary pass-through function virtual IDirect3DSurface9 *getSurface() = 0; // D3D9_REPLACE - temporary pass-through function
struct Desc {
GLsizei width;
GLsizei height;
GLenum format;
};
protected: protected:
GLsizei mWidth; GLsizei mWidth;
GLsizei mHeight; GLsizei mHeight;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment