wined3d: Store the scissor rect in the stateblock.
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index dba9e8a..093c83d 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -78,6 +78,7 @@
     dest->vertexDecl = source->vertexDecl;
     dest->pixelShader = source->pixelShader;
     dest->vertexShader = source->vertexShader;
+    dest->scissorRect = dest->scissorRect;
 
     /* Fixed size arrays */
     memcpy(dest->streamSource, source->streamSource, bsize * MAX_STREAMS);
@@ -115,6 +116,7 @@
     states->vertexDecl = value;
     states->pixelShader = value;
     states->vertexShader = value;
+    states->scissorRect = value;
 
     /* Fixed size arrays */
     memset(states->streamSource, value, bsize * MAX_STREAMS);
@@ -168,6 +170,7 @@
     Dest->material = This->material;
     Dest->pixelShader = This->pixelShader;
     Dest->glsl_program = This->glsl_program;
+    memcpy(&Dest->scissorRect, &This->scissorRect, sizeof(Dest->scissorRect));
 
     /* Fixed size arrays */
     memcpy(Dest->vertexShaderConstantB, This->vertexShaderConstantB, sizeof(BOOL) * MAX_CONST_B);
@@ -484,6 +487,14 @@
             memcpy(&This->viewport, &targetStateBlock->viewport, sizeof(WINED3DVIEWPORT));
         }
 
+        if(This->set.scissorRect && memcmp(&targetStateBlock->scissorRect,
+                                           &This->scissorRect,
+                                           sizeof(targetStateBlock->scissorRect)))
+        {
+            TRACE("Updating scissor rect\n");
+            memcpy(&targetStateBlock->scissorRect, &This->scissorRect, sizeof(targetStateBlock->scissorRect));
+        }
+
         for (i = 0; i < MAX_STREAMS; i++) {
             if (This->set.streamSource[i] &&
                             ((This->streamStride[i] != targetStateBlock->streamStride[i]) ||
@@ -656,6 +667,9 @@
         if (This->set.viewport && This->changed.viewport)
             IWineD3DDevice_SetViewport(pDevice, &This->viewport);
 
+        if (This->set.scissorRect && This->changed.scissorRect)
+            IWineD3DDevice_SetScissorRect(pDevice, &This->scissorRect);
+
         /* TODO: Proper implementation using SetStreamSource offset (set to 0 for the moment)\n") */
         for (i=0; i<MAX_STREAMS; i++) {
             if (This->set.streamSource[i] && This->changed.streamSource[i])