diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index d1845b2..aa373ca 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -269,10 +269,11 @@
 {
     if (mForceSetRasterState || memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0)
     {
-        ID3D11RasterizerState *dxRasterState = mStateCache.getRasterizerState(rasterState, mCurDepthSize);
+        ID3D11RasterizerState *dxRasterState = mStateCache.getRasterizerState(rasterState, mScissorEnabled,
+                                                                              mCurDepthSize);
         if (!dxRasterState)
         {
-            ERR("NULL blend state returned by RenderStateCache::getRasterizerState, setting the "
+            ERR("NULL blend state returned by RenderStateCache::getRasterizerState, setting the default"
                 "rasterizer state.");
         }
 
@@ -355,19 +356,29 @@
     mForceSetDepthStencilState = false;
 }
 
-void Renderer11::setScissorRectangle(const gl::Rectangle &scissor)
+void Renderer11::setScissorRectangle(const gl::Rectangle &scissor, bool enabled)
 {
-    if (mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0)
+    if (mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0 ||
+        enabled != mScissorEnabled)
     {
-        D3D11_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));
+        if (enabled)
+        {
+            D3D11_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));
 
-        mDeviceContext->RSSetScissorRects(1, &rect);
+            mDeviceContext->RSSetScissorRects(1, &rect);
+        }
+
+        if (enabled != mScissorEnabled)
+        {
+            mForceSetRasterState = true;
+        }
 
         mCurScissor = scissor;
+        mScissorEnabled = enabled;
     }
 
     mForceSetScissor = false;
@@ -720,9 +731,9 @@
                 return;
             }
 
-            if (mCurScissor.x > 0 || mCurScissor.y > 0 ||
-                mCurScissor.x + mCurScissor.width < renderTarget->getWidth() ||
-                mCurScissor.y + mCurScissor.height < renderTarget->getHeight())
+            if (mScissorEnabled && (mCurScissor.x > 0 || mCurScissor.y > 0 ||
+                                    mCurScissor.x + mCurScissor.width < renderTarget->getWidth() ||
+                                    mCurScissor.y + mCurScissor.height < renderTarget->getHeight()))
             {
                 // TODO: clearing of subregion of render target
                 UNIMPLEMENTED();
@@ -769,9 +780,9 @@
                 return;
             }
 
-            if (mCurScissor.x > 0 || mCurScissor.y > 0 ||
-                mCurScissor.x + mCurScissor.width < renderTarget->getWidth() ||
-                mCurScissor.y + mCurScissor.height < renderTarget->getHeight())
+            if (mScissorEnabled && (mCurScissor.x > 0 || mCurScissor.y > 0 ||
+                                    mCurScissor.x + mCurScissor.width < renderTarget->getWidth() ||
+                                    mCurScissor.y + mCurScissor.height < renderTarget->getHeight()))
             {
                 // TODO: clearing of subregion of depth stencil view
                 UNIMPLEMENTED();
