static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetResource(ID3D10RenderTargetView *iface, ID3D10Resource **resource) { struct d3d10_rendertarget_view *This = (struct d3d10_rendertarget_view *)iface; IWineD3DResource *wined3d_resource; IUnknown *parent; HRESULT hr; TRACE("iface %p, resource %p\n", iface, resource); hr = IWineD3DRendertargetView_GetResource(This->wined3d_view, &wined3d_resource); if (FAILED(hr)) { ERR("Failed to get wined3d resource, hr %#x\n", hr); *resource = NULL; return; } parent = IWineD3DResource_GetParent(wined3d_resource); hr = IUnknown_QueryInterface(parent, &IID_ID3D10Resource, (void **)&resource); IWineD3DResource_Release(wined3d_resource); if (FAILED(hr)) { ERR("Resource parent isn't a d3d10 resource, hr %#x\n", hr); *resource = NULL; return; } }
static ULONG WINAPI IDirect3DResource9Impl_Release(LPDIRECT3DRESOURCE9 iface) { IDirect3DResource9Impl *This = (IDirect3DResource9Impl *)iface; ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) : ReleaseRef to %d\n", This, ref); if (ref == 0) { IWineD3DResource_Release(This->wineD3DResource); HeapFree(GetProcessHeap(), 0, This); } return ref; }