[PATCH 3/4] wined3d: Move the scissor rect to wined3d_state.

Henri Verbeet hverbeet at codeweavers.com
Wed Sep 15 05:00:05 CDT 2010


---
 dlls/wined3d/device.c          |   19 ++++++++++---------
 dlls/wined3d/state.c           |    2 +-
 dlls/wined3d/stateblock.c      |    8 ++++----
 dlls/wined3d/wined3d_private.h |    5 ++---
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index fb9bcdb..3bf1eac 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -567,7 +567,7 @@ void device_get_draw_rect(IWineD3DDeviceImpl *device, RECT *rect)
 
     if (stateblock->state.render_states[WINED3DRS_SCISSORTESTENABLE])
     {
-        IntersectRect(rect, rect, &stateblock->scissorRect);
+        IntersectRect(rect, rect, &stateblock->state.scissor_rect);
     }
 }
 
@@ -3138,11 +3138,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetScissorRect(IWineD3DDevice *iface, C
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
 
     This->updateStateBlock->changed.scissorRect = TRUE;
-    if(EqualRect(&This->updateStateBlock->scissorRect, pRect)) {
-        TRACE("App is setting the old scissor rectangle over, nothing to do\n");
+    if (EqualRect(&This->updateStateBlock->state.scissor_rect, pRect))
+    {
+        TRACE("App is setting the old scissor rectangle over, nothing to do.\n");
         return WINED3D_OK;
     }
-    CopyRect(&This->updateStateBlock->scissorRect, pRect);
+    CopyRect(&This->updateStateBlock->state.scissor_rect, pRect);
 
     if(This->isRecordingState) {
         TRACE("Recording... not performing anything\n");
@@ -3157,7 +3158,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetScissorRect(IWineD3DDevice *iface, C
 static HRESULT WINAPI IWineD3DDeviceImpl_GetScissorRect(IWineD3DDevice *iface, RECT* pRect) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
 
-    *pRect = This->updateStateBlock->scissorRect;
+    *pRect = This->updateStateBlock->state.scissor_rect;
     TRACE("(%p)Returning a Scissor Rect of %d:%d-%d:%d\n", This, pRect->left, pRect->top, pRect->right, pRect->bottom);
     return WINED3D_OK;
 }
@@ -5759,10 +5760,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderTarget(IWineD3DDevice *iface,
         device->stateBlock->viewport.MinZ   = 0.0f;
         IWineD3DDeviceImpl_MarkStateDirty(device, STATE_VIEWPORT);
 
-        device->stateBlock->scissorRect.top = 0;
-        device->stateBlock->scissorRect.left = 0;
-        device->stateBlock->scissorRect.right = device->stateBlock->viewport.Width;
-        device->stateBlock->scissorRect.bottom = device->stateBlock->viewport.Height;
+        device->stateBlock->state.scissor_rect.top = 0;
+        device->stateBlock->state.scissor_rect.left = 0;
+        device->stateBlock->state.scissor_rect.right = device->stateBlock->viewport.Width;
+        device->stateBlock->state.scissor_rect.bottom = device->stateBlock->viewport.Height;
         IWineD3DDeviceImpl_MarkStateDirty(device, STATE_SCISSORRECT);
     }
 
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 4d17cf3..ebd89b3 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -4880,7 +4880,7 @@ static void light(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3
 static void scissorrect(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3d_context *context)
 {
     IWineD3DSurfaceImpl *target = stateblock->device->render_targets[0];
-    RECT *pRect = &stateblock->scissorRect;
+    RECT *pRect = &stateblock->state.scissor_rect;
     UINT height;
     UINT width;
 
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index 6eb4713..3f20ae5 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -755,12 +755,12 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
         This->viewport = targetStateBlock->viewport;
     }
 
-    if(This->changed.scissorRect
-            && memcmp(&targetStateBlock->scissorRect, &This->scissorRect, sizeof(This->scissorRect)))
+    if (This->changed.scissorRect && memcmp(&targetStateBlock->state.scissor_rect,
+            &This->state.scissor_rect, sizeof(This->state.scissor_rect)))
     {
         TRACE("Updating scissor rect.\n");
 
-        This->scissorRect = targetStateBlock->scissorRect;
+        This->state.scissor_rect = targetStateBlock->state.scissor_rect;
     }
 
     map = This->changed.streamSource;
@@ -1000,7 +1000,7 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Apply(IWineD3DStateBlock *iface)
 
     if (This->changed.scissorRect)
     {
-        IWineD3DDevice_SetScissorRect(device, &This->scissorRect);
+        IWineD3DDevice_SetScissorRect(device, &This->state.scissor_rect);
     }
 
     map = This->changed.streamSource;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index dd357c2..ed8ea55 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2349,6 +2349,8 @@ struct wined3d_stream_state
 
 struct wined3d_state
 {
+    RECT scissor_rect;
+
     DWORD render_states[WINEHIGHEST_RENDER_STATE + 1];
 };
 
@@ -2425,9 +2427,6 @@ struct IWineD3DStateBlockImpl
     /* Sampler States */
     DWORD                     samplerState[MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
 
-    /* Scissor test rectangle */
-    RECT                      scissorRect;
-
     /* Contained state management */
     DWORD                     contained_render_states[WINEHIGHEST_RENDER_STATE + 1];
     unsigned int              num_contained_render_states;
-- 
1.7.1




More information about the wine-patches mailing list