[PATCH 4/5] wined3d: Only invalidate state for the current context in swapchain_blit().

Henri Verbeet hverbeet at codeweavers.com
Tue Jul 26 12:52:45 CDT 2011


---
 dlls/wined3d/context.c         |    2 +-
 dlls/wined3d/swapchain.c       |   14 +++++++-------
 dlls/wined3d/wined3d_private.h |    1 +
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 9892791..b83dab5 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1032,7 +1032,7 @@ static void context_enter(struct wined3d_context *context)
     }
 }
 
-static void context_invalidate_state(struct wined3d_context *context, DWORD state)
+void context_invalidate_state(struct wined3d_context *context, DWORD state)
 {
     DWORD rep = context->state_table[state].representative;
     DWORD idx;
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 5b065be..a7e61fb 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -281,7 +281,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
         struct wined3d_context *context, const RECT *src_rect, const RECT *dst_rect)
 {
     struct wined3d_surface *backbuffer = swapchain->back_buffers[0];
-    struct wined3d_device *device = swapchain->device;
     UINT src_w = src_rect->right - src_rect->left;
     UINT src_h = src_rect->bottom - src_rect->top;
     GLenum gl_filter;
@@ -309,16 +308,16 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
 
         context_bind_fbo(context, GL_DRAW_FRAMEBUFFER, NULL);
         context_set_draw_buffer(context, GL_BACK);
-        device_invalidate_state(device, STATE_FRAMEBUFFER);
+        context_invalidate_state(context, STATE_FRAMEBUFFER);
 
         glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-        device_invalidate_state(device, STATE_RENDER(WINED3DRS_COLORWRITEENABLE));
-        device_invalidate_state(device, STATE_RENDER(WINED3DRS_COLORWRITEENABLE1));
-        device_invalidate_state(device, STATE_RENDER(WINED3DRS_COLORWRITEENABLE2));
-        device_invalidate_state(device, STATE_RENDER(WINED3DRS_COLORWRITEENABLE3));
+        context_invalidate_state(context, STATE_RENDER(WINED3DRS_COLORWRITEENABLE));
+        context_invalidate_state(context, STATE_RENDER(WINED3DRS_COLORWRITEENABLE1));
+        context_invalidate_state(context, STATE_RENDER(WINED3DRS_COLORWRITEENABLE2));
+        context_invalidate_state(context, STATE_RENDER(WINED3DRS_COLORWRITEENABLE3));
 
         glDisable(GL_SCISSOR_TEST);
-        device_invalidate_state(device, STATE_RENDER(WINED3DRS_SCISSORTESTENABLE));
+        context_invalidate_state(context, STATE_RENDER(WINED3DRS_SCISSORTESTENABLE));
 
         /* Note that the texture is upside down */
         gl_info->fbo_ops.glBlitFramebuffer(src_rect->left, src_rect->top, src_rect->right, src_rect->bottom,
@@ -329,6 +328,7 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
     }
     else
     {
+        struct wined3d_device *device = swapchain->device;
         struct wined3d_context *context2;
         float tex_left = src_rect->left;
         float tex_top = src_rect->top;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index a7699b5..0bbe9d1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1245,6 +1245,7 @@ void context_free_event_query(struct wined3d_event_query *query) DECLSPEC_HIDDEN
 void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
 struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN;
 DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
+void context_invalidate_state(struct wined3d_context *context, DWORD state_id) DECLSPEC_HIDDEN;
 void context_release(struct wined3d_context *context) DECLSPEC_HIDDEN;
 void context_resource_released(const struct wined3d_device *device,
         struct wined3d_resource *resource, WINED3DRESOURCETYPE type) DECLSPEC_HIDDEN;
-- 
1.7.3.4




More information about the wine-patches mailing list