From 739e302e6f0934b77c40f1cf439806167178feb7 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Sat, 8 Sep 2012 11:26:23 +0200 Subject: [PATCH] d3d10core: Store the resource in the d3d10core rendertarget view. --- dlls/d3d10core/d3d10core_private.h | 1 + dlls/d3d10core/view.c | 27 +++++++-------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h index 885a2ef3232..153c5cc9034 100644 --- a/dlls/d3d10core/d3d10core_private.h +++ b/dlls/d3d10core/d3d10core_private.h @@ -140,6 +140,7 @@ struct d3d10_rendertarget_view struct wined3d_rendertarget_view *wined3d_view; D3D10_RENDER_TARGET_VIEW_DESC desc; + ID3D10Resource *resource; }; HRESULT d3d10_rendertarget_view_init(struct d3d10_rendertarget_view *view, diff --git a/dlls/d3d10core/view.c b/dlls/d3d10core/view.c index d038faa34c1..a542e63b3a6 100644 --- a/dlls/d3d10core/view.c +++ b/dlls/d3d10core/view.c @@ -339,6 +339,7 @@ static ULONG STDMETHODCALLTYPE d3d10_rendertarget_view_Release(ID3D10RenderTarge if (!refcount) { wined3d_rendertarget_view_decref(This->wined3d_view); + ID3D10Resource_Release(This->resource); HeapFree(GetProcessHeap(), 0, This); } @@ -383,29 +384,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_rendertarget_view_SetPrivateDataInterface static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetResource(ID3D10RenderTargetView *iface, ID3D10Resource **resource) { - struct d3d10_rendertarget_view *This = impl_from_ID3D10RenderTargetView(iface); - struct wined3d_resource *wined3d_resource; - IUnknown *parent; - HRESULT hr; + struct d3d10_rendertarget_view *view = impl_from_ID3D10RenderTargetView(iface); TRACE("iface %p, resource %p\n", iface, resource); - wined3d_resource = wined3d_rendertarget_view_get_resource(This->wined3d_view); - if (!wined3d_resource) - { - ERR("Failed to get wined3d resource.\n"); - *resource = NULL; - return; - } - - parent = wined3d_resource_get_parent(wined3d_resource); - hr = IUnknown_QueryInterface(parent, &IID_ID3D10Resource, (void **)&resource); - if (FAILED(hr)) - { - ERR("Resource parent isn't a d3d10 resource, hr %#x\n", hr); - *resource = NULL; - return; - } + *resource = view->resource; + ID3D10Resource_AddRef(*resource); } /* ID3D10RenderTargetView methods */ @@ -470,6 +454,9 @@ HRESULT d3d10_rendertarget_view_init(struct d3d10_rendertarget_view *view, return hr; } + view->resource = resource; + ID3D10Resource_AddRef(resource); + return S_OK; }