=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Add parent for rasterizer state objects.

Alexandre Julliard julliard at winehq.org
Thu Apr 27 15:49:10 CDT 2017


Module: wine
Branch: master
Commit: 8afc0e631c4eb7029d55e99a4e0f42aeb4130f6f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8afc0e631c4eb7029d55e99a4e0f42aeb4130f6f

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Thu Apr 27 12:02:44 2017 +0200

wined3d: Add parent for rasterizer state objects.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3d11/state.c             |  4 ++--
 dlls/wined3d/state.c           | 15 ++++++++++++++-
 dlls/wined3d/wined3d.spec      |  3 ++-
 dlls/wined3d/wined3d_private.h |  3 +++
 include/wine/wined3d.h         |  4 +++-
 5 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/dlls/d3d11/state.c b/dlls/d3d11/state.c
index b85bd67..fa2e668 100644
--- a/dlls/d3d11/state.c
+++ b/dlls/d3d11/state.c
@@ -861,8 +861,8 @@ HRESULT d3d_rasterizer_state_init(struct d3d_rasterizer_state *state, struct d3d
     state->desc = *desc;
 
     wined3d_desc.front_ccw = desc->FrontCounterClockwise;
-    if (FAILED(hr = wined3d_rasterizer_state_create(device->wined3d_device,
-            &wined3d_desc, &state->wined3d_state)))
+    if (FAILED(hr = wined3d_rasterizer_state_create(device->wined3d_device, &wined3d_desc,
+            state, &d3d_null_wined3d_parent_ops, &state->wined3d_state)))
     {
         WARN("Failed to create wined3d rasterizer state, hr %#x.\n", hr);
         wined3d_private_store_cleanup(&state->private_store);
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 12ef3bb..b36c0fd 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -60,13 +60,24 @@ ULONG CDECL wined3d_rasterizer_state_decref(struct wined3d_rasterizer_state *sta
     TRACE("%p decreasing refcount to %u.\n", state, refcount);
 
     if (!refcount)
+    {
+        state->parent_ops->wined3d_object_destroyed(state->parent);
         wined3d_cs_destroy_object(device->cs, wined3d_rasterizer_state_destroy_object, state);
+    }
 
     return refcount;
 }
 
+void * CDECL wined3d_rasterizer_state_get_parent(const struct wined3d_rasterizer_state *state)
+{
+    TRACE("rasterizer_state %p.\n", state);
+
+    return state->parent;
+}
+
 HRESULT CDECL wined3d_rasterizer_state_create(struct wined3d_device *device,
-        const struct wined3d_rasterizer_state_desc *desc, struct wined3d_rasterizer_state **state)
+        const struct wined3d_rasterizer_state_desc *desc, void *parent,
+        const struct wined3d_parent_ops *parent_ops, struct wined3d_rasterizer_state **state)
 {
     struct wined3d_rasterizer_state *object;
 
@@ -77,6 +88,8 @@ HRESULT CDECL wined3d_rasterizer_state_create(struct wined3d_device *device,
 
     object->refcount = 1;
     object->desc = *desc;
+    object->parent = parent;
+    object->parent_ops = parent_ops;
     object->device = device;
 
     TRACE("Created rasterizer state %p.\n", object);
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 0f27de3..e1fc2ac 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -201,8 +201,9 @@
 @ cdecl wined3d_query_incref(ptr)
 @ cdecl wined3d_query_issue(ptr long)
 
-@ cdecl wined3d_rasterizer_state_create(ptr ptr ptr)
+@ cdecl wined3d_rasterizer_state_create(ptr ptr ptr ptr ptr)
 @ cdecl wined3d_rasterizer_state_decref(ptr)
+@ cdecl wined3d_rasterizer_state_get_parent(ptr)
 @ cdecl wined3d_rasterizer_state_incref(ptr)
 
 @ cdecl wined3d_resource_get_desc(ptr ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 751f092..628ef9a 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2572,6 +2572,9 @@ struct wined3d_rasterizer_state
     LONG refcount;
     struct wined3d_rasterizer_state_desc desc;
 
+    void *parent;
+    const struct wined3d_parent_ops *parent_ops;
+
     struct wined3d_device *device;
 };
 
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 2d69e98..c8b790e 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2502,8 +2502,10 @@ static inline HRESULT wined3d_private_store_set_private_data(struct wined3d_priv
 }
 
 HRESULT __cdecl wined3d_rasterizer_state_create(struct wined3d_device *device,
-        const struct wined3d_rasterizer_state_desc *desc, struct wined3d_rasterizer_state **state);
+        const struct wined3d_rasterizer_state_desc *desc, void *parent,
+        const struct wined3d_parent_ops *parent_ops, struct wined3d_rasterizer_state **state);
 ULONG __cdecl wined3d_rasterizer_state_decref(struct wined3d_rasterizer_state *state);
+void * __cdecl wined3d_rasterizer_state_get_parent(const struct wined3d_rasterizer_state *state);
 ULONG __cdecl wined3d_rasterizer_state_incref(struct wined3d_rasterizer_state *state);
 
 void __cdecl wined3d_resource_get_desc(const struct wined3d_resource *resource,




More information about the wine-cvs mailing list