[PATCH 4/5] d3d9: Add a separate function for d3d9 initialization.
Henri Verbeet
hverbeet at codeweavers.com
Fri May 25 09:10:30 CDT 2012
---
dlls/d3d9/d3d9_main.c | 58 +++++++++++++++++++++++++++------------------
dlls/d3d9/d3d9_private.h | 14 +----------
dlls/d3d9/directx.c | 18 ++++++++++++-
3 files changed, 52 insertions(+), 38 deletions(-)
diff --git a/dlls/d3d9/d3d9_main.c b/dlls/d3d9/d3d9_main.c
index 6eed9b7..e3bb9f8 100644
--- a/dlls/d3d9/d3d9_main.c
+++ b/dlls/d3d9/d3d9_main.c
@@ -33,40 +33,52 @@ void WINAPI DebugSetMute(void) {
/* nothing to do */
}
-IDirect3D9* WINAPI DECLSPEC_HOTPATCH Direct3DCreate9(UINT SDKVersion) {
- IDirect3D9Impl* object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3D9Impl));
-
- object->IDirect3D9Ex_iface.lpVtbl = &Direct3D9_Vtbl;
- object->ref = 1;
+IDirect3D9 * WINAPI DECLSPEC_HOTPATCH Direct3DCreate9(UINT sdk_version)
+{
+ IDirect3D9Impl *object;
- wined3d_mutex_lock();
- object->WineD3D = wined3d_create(9, 0);
- wined3d_mutex_unlock();
+ TRACE("sdk_version %#x.\n", sdk_version);
- TRACE("SDKVersion = %x, Created Direct3D object @ %p, WineObj @ %p\n", SDKVersion, object, object->WineD3D);
+ if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+ {
+ ERR("Failed to allocate d3d9 object memory.\n");
+ return NULL;
+ }
- if (!object->WineD3D)
+ if (!d3d9_init(object, FALSE))
{
- HeapFree( GetProcessHeap(), 0, object );
- object = NULL;
+ WARN("Failed to initialize d3d9.\n");
+ HeapFree(GetProcessHeap(), 0, object);
+ return NULL;
}
- return (IDirect3D9*) object;
+
+ TRACE("Created d3d9 object %p.\n", object);
+
+ return (IDirect3D9 *)&object->IDirect3D9Ex_iface;
}
-HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex **direct3d9ex) {
- IDirect3D9 *ret;
- IDirect3D9Impl* object;
+HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT sdk_version, IDirect3D9Ex **d3d9ex)
+{
+ IDirect3D9Impl *object;
- TRACE("Calling Direct3DCreate9\n");
- ret = Direct3DCreate9(SDKVersion);
- if(!ret) {
- *direct3d9ex = NULL;
+ TRACE("sdk_version %#x, d3d9ex %p.\n", sdk_version, d3d9ex);
+
+ if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+ {
+ ERR("Failed to allocate d3d9 object memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ if (!d3d9_init(object, TRUE))
+ {
+ WARN("Failed to initialize d3d9.\n");
+ HeapFree(GetProcessHeap(), 0, object);
return D3DERR_NOTAVAILABLE;
}
- object = (IDirect3D9Impl *) ret;
- object->extended = TRUE; /* Enables QI for extended interfaces */
- *direct3d9ex = &object->IDirect3D9Ex_iface;
+ TRACE("Created d3d9 object %p.\n", object);
+ *d3d9ex = &object->IDirect3D9Ex_iface;
+
return D3D_OK;
}
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index d814dd0..793c948 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -127,19 +127,6 @@ enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format) DECLSPEC_H
_pD3D9Caps->MaxVertexShader30InstructionSlots = _pWineCaps->MaxVertexShader30InstructionSlots; \
_pD3D9Caps->MaxPixelShader30InstructionSlots = _pWineCaps->MaxPixelShader30InstructionSlots;
-/* ===========================================================================
- D3D9 interfaces
- =========================================================================== */
-
-/* ---------- */
-/* IDirect3D9 */
-/* ---------- */
-
-/*****************************************************************************
- * Predeclare the interface implementation structures
- */
-extern const IDirect3D9ExVtbl Direct3D9_Vtbl DECLSPEC_HIDDEN;
-
/*****************************************************************************
* IDirect3D implementation structure
*/
@@ -155,6 +142,7 @@ typedef struct IDirect3D9Impl
BOOL extended;
} IDirect3D9Impl;
+BOOL d3d9_init(IDirect3D9Impl *d3d9, BOOL extended) DECLSPEC_HIDDEN;
void filter_caps(D3DCAPS9* pCaps) DECLSPEC_HIDDEN;
struct fvf_declaration
diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c
index d8a5d78..80b862d 100644
--- a/dlls/d3d9/directx.c
+++ b/dlls/d3d9/directx.c
@@ -551,8 +551,7 @@ static HRESULT WINAPI IDirect3D9ExImpl_GetAdapterLUID(IDirect3D9Ex *iface, UINT
return hr;
}
-
-const IDirect3D9ExVtbl Direct3D9_Vtbl =
+static const struct IDirect3D9ExVtbl Direct3D9_Vtbl =
{
/* IUnknown */
IDirect3D9Impl_QueryInterface,
@@ -581,3 +580,18 @@ const IDirect3D9ExVtbl Direct3D9_Vtbl =
IDirect3D9ExImpl_GetAdapterLUID
};
+
+BOOL d3d9_init(IDirect3D9Impl *d3d9, BOOL extended)
+{
+ d3d9->IDirect3D9Ex_iface.lpVtbl = &Direct3D9_Vtbl;
+ d3d9->ref = 1;
+
+ wined3d_mutex_lock();
+ d3d9->WineD3D = wined3d_create(9, 0);
+ wined3d_mutex_unlock();
+ if (!d3d9->WineD3D)
+ return FALSE;
+ d3d9->extended = extended;
+
+ return TRUE;
+}
--
1.7.3.4
More information about the wine-patches
mailing list