[PATCH 5/5] wined3d: Remove COM from the rendertarget view implementation.
Henri Verbeet
hverbeet at codeweavers.com
Tue Apr 5 12:01:32 CDT 2011
---
dlls/d3d10core/d3d10core_private.h | 2 +-
dlls/d3d10core/device.c | 3 +-
dlls/d3d10core/view.c | 8 +-
dlls/wined3d/device.c | 14 +--
dlls/wined3d/view.c | 182 +++++++++++++----------------------
dlls/wined3d/wined3d.spec | 5 +
dlls/wined3d/wined3d_private.h | 2 -
include/wine/wined3d.idl | 22 ++---
8 files changed, 92 insertions(+), 146 deletions(-)
rewrite dlls/wined3d/view.c (66%)
diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h
index 716c3f2..34d0b0f 100644
--- a/dlls/d3d10core/d3d10core_private.h
+++ b/dlls/d3d10core/d3d10core_private.h
@@ -134,7 +134,7 @@ struct d3d10_rendertarget_view
const struct ID3D10RenderTargetViewVtbl *vtbl;
LONG refcount;
- IWineD3DRendertargetView *wined3d_view;
+ struct wined3d_rendertarget_view *wined3d_view;
D3D10_RENDER_TARGET_VIEW_DESC desc;
};
diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c
index 8fbd8c6..849516b 100644
--- a/dlls/d3d10core/device.c
+++ b/dlls/d3d10core/device.c
@@ -372,12 +372,13 @@ static void STDMETHODCALLTYPE d3d10_device_ClearRenderTargetView(ID3D10Device *i
ID3D10RenderTargetView *render_target_view, const FLOAT color_rgba[4])
{
struct d3d10_device *This = (struct d3d10_device *)iface;
- IWineD3DRendertargetView *wined3d_view = ((struct d3d10_rendertarget_view *)render_target_view)->wined3d_view;
+ struct wined3d_rendertarget_view *wined3d_view;
const WINED3DCOLORVALUE color = {color_rgba[0], color_rgba[1], color_rgba[2], color_rgba[3]};
TRACE("iface %p, render_target_view %p, color_rgba [%f %f %f %f]\n",
iface, render_target_view, color_rgba[0], color_rgba[1], color_rgba[2], color_rgba[3]);
+ wined3d_view = ((struct d3d10_rendertarget_view *)render_target_view)->wined3d_view;
IWineD3DDevice_ClearRendertargetView(This->wined3d_device, wined3d_view, &color);
}
diff --git a/dlls/d3d10core/view.c b/dlls/d3d10core/view.c
index 1eb22ed..547da4e 100644
--- a/dlls/d3d10core/view.c
+++ b/dlls/d3d10core/view.c
@@ -328,7 +328,7 @@ static ULONG STDMETHODCALLTYPE d3d10_rendertarget_view_Release(ID3D10RenderTarge
if (!refcount)
{
- IWineD3DRendertargetView_Release(This->wined3d_view);
+ wined3d_rendertarget_view_decref(This->wined3d_view);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -380,10 +380,10 @@ static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetResource(ID3D10RenderTa
TRACE("iface %p, resource %p\n", iface, resource);
- hr = IWineD3DRendertargetView_GetResource(This->wined3d_view, &wined3d_resource);
- if (FAILED(hr))
+ wined3d_resource = wined3d_rendertarget_view_get_resource(This->wined3d_view);
+ if (!wined3d_resource)
{
- ERR("Failed to get wined3d resource, hr %#x\n", hr);
+ ERR("Failed to get wined3d resource.\n");
*resource = NULL;
return;
}
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 5e9f04e..e91a078 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1089,7 +1089,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateSurface(IWineD3DDevice *iface, UI
}
static HRESULT WINAPI IWineD3DDeviceImpl_CreateRendertargetView(IWineD3DDevice *iface,
- struct wined3d_resource *resource, void *parent, IWineD3DRendertargetView **rendertarget_view)
+ struct wined3d_resource *resource, void *parent, struct wined3d_rendertarget_view **rendertarget_view)
{
struct wined3d_rendertarget_view *object;
@@ -1106,7 +1106,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateRendertargetView(IWineD3DDevice *
wined3d_rendertarget_view_init(object, resource, parent);
TRACE("Created render target view %p.\n", object);
- *rendertarget_view = (IWineD3DRendertargetView *)object;
+ *rendertarget_view = object;
return WINED3D_OK;
}
@@ -5776,18 +5776,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ColorFill(IWineD3DDevice *iface,
/* Do not call while under the GL lock. */
static void WINAPI IWineD3DDeviceImpl_ClearRendertargetView(IWineD3DDevice *iface,
- IWineD3DRendertargetView *rendertarget_view, const WINED3DCOLORVALUE *color)
+ struct wined3d_rendertarget_view *rendertarget_view, const WINED3DCOLORVALUE *color)
{
struct wined3d_resource *resource;
HRESULT hr;
- hr = IWineD3DRendertargetView_GetResource(rendertarget_view, &resource);
- if (FAILED(hr))
- {
- ERR("Failed to get resource, hr %#x\n", hr);
- return;
- }
-
+ resource = rendertarget_view->resource;
if (resource->resourceType != WINED3DRTYPE_SURFACE)
{
FIXME("Only supported on surface resources\n");
diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
dissimilarity index 66%
index ab1c831..1ba9304 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -1,114 +1,68 @@
-/*
- * Copyright 2009 Henri Verbeet for CodeWeavers
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#include "config.h"
-#include "wine/port.h"
-
-#include "wined3d_private.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(d3d);
-
-/* IUnknown methods */
-
-static HRESULT STDMETHODCALLTYPE rendertarget_view_QueryInterface(IWineD3DRendertargetView *iface,
- REFIID riid, void **object)
-{
- TRACE("iface %p, riid %s, object %p\n", iface, debugstr_guid(riid), object);
-
- if (IsEqualGUID(riid, &IID_IWineD3DRendertargetView)
- || IsEqualGUID(riid, &IID_IWineD3DBase)
- || IsEqualGUID(riid, &IID_IUnknown))
- {
- IUnknown_AddRef(iface);
- *object = iface;
- return S_OK;
- }
-
- WARN("%s not implemented, returning E_NOINTERFACE\n", debugstr_guid(riid));
-
- *object = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE rendertarget_view_AddRef(IWineD3DRendertargetView *iface)
-{
- struct wined3d_rendertarget_view *This = (struct wined3d_rendertarget_view *)iface;
- ULONG refcount = InterlockedIncrement(&This->refcount);
-
- TRACE("%p increasing refcount to %u\n", This, refcount);
-
- return refcount;
-}
-
-static ULONG STDMETHODCALLTYPE rendertarget_view_Release(IWineD3DRendertargetView *iface)
-{
- struct wined3d_rendertarget_view *This = (struct wined3d_rendertarget_view *)iface;
- ULONG refcount = InterlockedDecrement(&This->refcount);
-
- TRACE("%p decreasing refcount to %u\n", This, refcount);
-
- if (!refcount)
- {
- HeapFree(GetProcessHeap(), 0, This);
- }
-
- return refcount;
-}
-
-/* IWineD3DBase methods */
-
-static void * STDMETHODCALLTYPE rendertarget_view_GetParent(IWineD3DRendertargetView *iface)
-{
- TRACE("iface %p.\n", iface);
-
- return ((struct wined3d_rendertarget_view *)iface)->parent;
-}
-
-/* IWineD3DRendertargetView methods */
-
-static HRESULT STDMETHODCALLTYPE rendertarget_view_GetResource(IWineD3DRendertargetView *iface,
- struct wined3d_resource **resource)
-{
- struct wined3d_rendertarget_view *This = (struct wined3d_rendertarget_view *)iface;
-
- *resource = This->resource;
-
- return WINED3D_OK;
-}
-
-static const struct IWineD3DRendertargetViewVtbl wined3d_rendertarget_view_vtbl =
-{
- /* IUnknown methods */
- rendertarget_view_QueryInterface,
- rendertarget_view_AddRef,
- rendertarget_view_Release,
- /* IWineD3DBase methods */
- rendertarget_view_GetParent,
- /* IWineD3DRendertargetView methods */
- rendertarget_view_GetResource,
-};
-
-void wined3d_rendertarget_view_init(struct wined3d_rendertarget_view *view,
- struct wined3d_resource *resource, void *parent)
-{
- view->vtbl = &wined3d_rendertarget_view_vtbl;
- view->refcount = 1;
- view->resource = resource;
- view->parent = parent;
-}
+/*
+ * Copyright 2009, 2011 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+
+ULONG CDECL wined3d_rendertarget_view_incref(struct wined3d_rendertarget_view *view)
+{
+ ULONG refcount = InterlockedIncrement(&view->refcount);
+
+ TRACE("%p increasing refcount to %u.\n", view, refcount);
+
+ return refcount;
+}
+
+ULONG CDECL wined3d_rendertarget_view_decref(struct wined3d_rendertarget_view *view)
+{
+ ULONG refcount = InterlockedDecrement(&view->refcount);
+
+ TRACE("%p decreasing refcount to %u.\n", view, refcount);
+
+ if (!refcount)
+ HeapFree(GetProcessHeap(), 0, view);
+
+ return refcount;
+}
+
+void * CDECL wined3d_rendertarget_view_get_parent(const struct wined3d_rendertarget_view *view)
+{
+ TRACE("view %p.\n", view);
+
+ return view->parent;
+}
+
+struct wined3d_resource * CDECL wined3d_rendertarget_view_get_resource(const struct wined3d_rendertarget_view *view)
+{
+ TRACE("view %p.\n", view);
+
+ return view->resource;
+}
+
+void wined3d_rendertarget_view_init(struct wined3d_rendertarget_view *view,
+ struct wined3d_resource *resource, void *parent)
+{
+ view->refcount = 1;
+ view->resource = resource;
+ view->parent = parent;
+}
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 28bdf4e..0a75eda 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -61,6 +61,11 @@
@ cdecl wined3d_resource_get_desc(ptr ptr)
@ cdecl wined3d_resource_get_parent(ptr)
+@ cdecl wined3d_rendertarget_view_decref(ptr)
+@ cdecl wined3d_rendertarget_view_get_parent(ptr)
+@ cdecl wined3d_rendertarget_view_get_resource(ptr)
+@ cdecl wined3d_rendertarget_view_incref(ptr)
+
@ cdecl wined3d_shader_decref(ptr)
@ cdecl wined3d_shader_get_byte_code(ptr ptr ptr)
@ cdecl wined3d_shader_get_parent(ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 190e877..f1ce5cf 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2507,10 +2507,8 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
UINT size, DWORD usage, enum wined3d_format_id format_id, WINED3DPOOL pool, GLenum bind_hint,
const char *data, void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
-/* IWineD3DRendertargetView */
struct wined3d_rendertarget_view
{
- const struct IWineD3DRendertargetViewVtbl *vtbl;
LONG refcount;
struct wined3d_resource *resource;
diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl
index ad32234..00e6d0e 100644
--- a/include/wine/wined3d.idl
+++ b/include/wine/wined3d.idl
@@ -2096,6 +2096,7 @@ struct wined3d_clipper;
struct wined3d_palette;
struct wined3d_query;
struct wined3d_resource;
+struct wined3d_rendertarget_view;
struct wined3d_shader;
struct wined3d_stateblock;
struct wined3d_texture;
@@ -2210,18 +2211,6 @@ interface IWineD3DResource : IWineD3DBase
[
object,
local,
- uuid(f7d8abf4-fb93-43e4-9c96-4618cf9b3cbc)
-]
-interface IWineD3DRendertargetView : IWineD3DBase
-{
- HRESULT GetResource(
- [out] struct wined3d_resource **resource
- );
-}
-
-[
- object,
- local,
uuid(37cd5526-6f30-11d9-c687-00046142c14f)
]
interface IWineD3DSurface : IWineD3DResource
@@ -2438,7 +2427,7 @@ interface IWineD3DDevice : IUnknown
HRESULT CreateRendertargetView(
[in] struct wined3d_resource *resource,
[in] void *parent,
- [out] IWineD3DRendertargetView **rendertarget_view
+ [out] struct wined3d_rendertarget_view **rendertarget_view
);
HRESULT CreateTexture(
[in] UINT width,
@@ -2893,7 +2882,7 @@ interface IWineD3DDevice : IUnknown
[in] DWORD stencil
);
void ClearRendertargetView(
- [in] IWineD3DRendertargetView *rendertarget_view,
+ [in] struct wined3d_rendertarget_view *rendertarget_view,
[in] const WINED3DCOLORVALUE *color
);
void SetPrimitiveType(
@@ -3075,6 +3064,11 @@ void __cdecl wined3d_resource_get_desc(const struct wined3d_resource *resource,
struct wined3d_resource_desc *desc);
void * __cdecl wined3d_resource_get_parent(const struct wined3d_resource *resource);
+ULONG __cdecl wined3d_rendertarget_view_decref(struct wined3d_rendertarget_view *view);
+void * __cdecl wined3d_rendertarget_view_get_parent(const struct wined3d_rendertarget_view *view);
+struct wined3d_resource * __cdecl wined3d_rendertarget_view_get_resource(const struct wined3d_rendertarget_view *view);
+ULONG __cdecl wined3d_rendertarget_view_incref(struct wined3d_rendertarget_view *view);
+
ULONG __cdecl wined3d_shader_decref(struct wined3d_shader *shader);
HRESULT __cdecl wined3d_shader_get_byte_code(const struct wined3d_shader *shader,
void *byte_code, UINT *byte_code_size);
--
1.7.3.4
More information about the wine-patches
mailing list