[PATCH 1/5] wined3d: Synchronise WINED3D_CS_OP_PRESENT resource access.

Henri Verbeet hverbeet at codeweavers.com
Sun Jul 10 08:09:16 CDT 2016


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/cs.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 46f623a..21f783a 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -264,17 +264,25 @@ static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data)
 {
     const struct wined3d_cs_present *op = data;
     struct wined3d_swapchain *swapchain;
+    unsigned int i;
 
     swapchain = op->swapchain;
     wined3d_swapchain_set_window(swapchain, op->dst_window_override);
 
     swapchain->swapchain_ops->swapchain_present(swapchain, &op->src_rect, &op->dst_rect, op->flags);
+
+    wined3d_resource_release(&swapchain->front_buffer->resource);
+    for (i = 0; i < swapchain->desc.backbuffer_count; ++i)
+    {
+        wined3d_resource_release(&swapchain->back_buffers[i]->resource);
+    }
 }
 
 void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *swapchain,
         const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, DWORD flags)
 {
     struct wined3d_cs_present *op;
+    unsigned int i;
 
     op = cs->ops->require_space(cs, sizeof(*op));
     op->opcode = WINED3D_CS_OP_PRESENT;
@@ -284,6 +292,12 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw
     op->dst_rect = *dst_rect;
     op->flags = flags;
 
+    wined3d_resource_acquire(&swapchain->front_buffer->resource);
+    for (i = 0; i < swapchain->desc.backbuffer_count; ++i)
+    {
+        wined3d_resource_acquire(&swapchain->back_buffers[i]->resource);
+    }
+
     cs->ops->submit(cs);
 }
 
-- 
2.1.4




More information about the wine-patches mailing list