Scissor test state is set as part of the Renderer::setScissor method.

TRAC #22206

Moved scissorTest out of RasterizerState.
Fixes buffer-offscreen-test and buffer-preserve-test CTS regressions.

Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1549 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index f4b9d4c..d2eac1c 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -644,8 +644,6 @@
             mDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
         }
 
-        mDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, rasterState.scissorTest ? TRUE : FALSE);
-
         if (rasterState.polygonOffsetFill)
         {
             if (mCurDepthSize > 0)
@@ -860,19 +858,27 @@
     mForceSetDepthStencilState = false;
 }
 
-void Renderer9::setScissorRectangle(const gl::Rectangle &scissor)
+void Renderer9::setScissorRectangle(const gl::Rectangle &scissor, bool enabled)
 {
-    bool scissorChanged = mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0;
+    bool scissorChanged = mForceSetScissor ||
+                          memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0 ||
+                          enabled != mScissorEnabled;
 
     if (scissorChanged)
     {
-        RECT rect;
-        rect.left = gl::clamp(scissor.x, 0, static_cast<int>(mRenderTargetDesc.width));
-        rect.top = gl::clamp(scissor.y, 0, static_cast<int>(mRenderTargetDesc.height));
-        rect.right = gl::clamp(scissor.x + scissor.width, 0, static_cast<int>(mRenderTargetDesc.width));
-        rect.bottom = gl::clamp(scissor.y + scissor.height, 0, static_cast<int>(mRenderTargetDesc.height));
-        mDevice->SetScissorRect(&rect);
+        if (enabled)
+        {
+            RECT rect;
+            rect.left = gl::clamp(scissor.x, 0, static_cast<int>(mRenderTargetDesc.width));
+            rect.top = gl::clamp(scissor.y, 0, static_cast<int>(mRenderTargetDesc.height));
+            rect.right = gl::clamp(scissor.x + scissor.width, 0, static_cast<int>(mRenderTargetDesc.width));
+            rect.bottom = gl::clamp(scissor.y + scissor.height, 0, static_cast<int>(mRenderTargetDesc.height));
+            mDevice->SetScissorRect(&rect);
+        }
 
+        mDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, enabled ? TRUE : FALSE);
+
+        mScissorEnabled = enabled;
         mCurScissor = scissor;
     }