=?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