Henri Verbeet : d3d10core: Store the resource in the d3d10core rendertarget view.

Alexandre Julliard julliard at winehq.org
Mon Sep 10 15:22:10 CDT 2012


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Sat Sep  8 11:26:23 2012 +0200

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 885a2ef..153c5cc 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 d038faa..a542e63 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;
 }
 




More information about the wine-cvs mailing list