Commit 7e7f7d25 by Geoff Lang Committed by Commit Bot

Implement robust resource init for D3D9.

BUG=angleproject:2107 Change-Id: I088956a1e13247c593cbb84677f346ef6f0fe983 Reviewed-on: https://chromium-review.googlesource.com/678483 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent a1506213
...@@ -3176,8 +3176,52 @@ gl::Error Renderer9::clearRenderTarget(RenderTargetD3D *renderTarget, ...@@ -3176,8 +3176,52 @@ gl::Error Renderer9::clearRenderTarget(RenderTargetD3D *renderTarget,
const float clearDepthValue, const float clearDepthValue,
const unsigned int clearStencilValue) const unsigned int clearStencilValue)
{ {
// TODO(jmadill): D3D9 implementation. D3DCOLOR color =
// UNIMPLEMENTED(); D3DCOLOR_ARGB(gl::unorm<8>(clearColorValue.alpha), gl::unorm<8>(clearColorValue.red),
gl::unorm<8>(clearColorValue.green), gl::unorm<8>(clearColorValue.blue));
float depth = clearDepthValue;
DWORD stencil = clearStencilValue & 0x000000FF;
unsigned int renderTargetSerial = renderTarget->getSerial();
RenderTarget9 *renderTarget9 = GetAs<RenderTarget9>(renderTarget);
IDirect3DSurface9 *renderTargetSurface = renderTarget9->getSurface();
ASSERT(renderTargetSurface);
DWORD dxClearFlags = 0;
const gl::InternalFormat &internalFormatInfo =
gl::GetSizedInternalFormatInfo(renderTarget->getInternalFormat());
if (internalFormatInfo.depthBits > 0 || internalFormatInfo.stencilBits > 0)
{
dxClearFlags = D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL;
if (mAppliedDepthStencilSerial != renderTargetSerial)
{
mDevice->SetDepthStencilSurface(renderTargetSurface);
}
}
else
{
dxClearFlags = D3DCLEAR_TARGET;
if (mAppliedRenderTargetSerial != renderTargetSerial)
{
mDevice->SetRenderTarget(0, renderTargetSurface);
}
}
SafeRelease(renderTargetSurface);
D3DVIEWPORT9 viewport;
viewport.X = 0;
viewport.Y = 0;
viewport.Width = renderTarget->getWidth();
viewport.Height = renderTarget->getHeight();
mDevice->SetViewport(&viewport);
mDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE);
mDevice->Clear(0, nullptr, dxClearFlags, color, depth, stencil);
markAllStateDirty();
return gl::NoError(); return gl::NoError();
} }
......
...@@ -208,7 +208,7 @@ class RobustResourceInitTest : public ANGLETest ...@@ -208,7 +208,7 @@ class RobustResourceInitTest : public ANGLETest
} }
// TODO(jmadill): Other back-end support. // TODO(jmadill): Other back-end support.
if (!IsD3D11()) if (!IsD3D11() && !IsD3D9())
{ {
return false; return false;
} }
......
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