Author: gbrunmar
Date: Sat Aug 23 12:24:27 2008
New Revision: 35568
URL:
http://svn.reactos.org/svn/reactos?rev=35568&view=rev
Log:
* Refactored GetDirect3D9AdapterInfo() to make life a little easier in
InitD3D9BaseDevice().
* Filled IDirect3DDevice9::DeviceData[] with correct info
Modified:
trunk/reactos/dll/directx/d3d9/d3d9_create.c
trunk/reactos/dll/directx/d3d9/d3d9_create.h
trunk/reactos/dll/directx/d3d9/d3d9_device.c
trunk/reactos/dll/directx/d3d9/d3d9_private.h
trunk/reactos/dll/directx/d3d9/d3d9_swapchain.c
trunk/reactos/dll/directx/d3d9/device.c
Modified: trunk/reactos/dll/directx/d3d9/d3d9_create.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_crea…
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_create.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_create.c [iso-8859-1] Sat Aug 23 12:24:27 2008
@@ -112,21 +112,14 @@
}
}
-static BOOL GetDirect3D9AdapterInfo(IN OUT LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapters,
IN DWORD AdapterIndex)
+BOOL CreateD3D9DeviceData(IN LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapter, IN
LPD3D9_DEVICEDATA pDeviceData)
{
HDC hDC;
- LPD3D9_DEVICEDATA pDeviceData;
- LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapter = &pDisplayAdapters[AdapterIndex];
/* Test DC creation for the display device */
if (NULL == (hDC = CreateDCA(NULL, pDisplayAdapter->szDeviceName, NULL, NULL)))
- return FALSE;
-
- pDeviceData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(D3D9_DEVICEDATA));
- if (NULL == pDeviceData)
- {
- DPRINT1("Out of memory, could not initialize Direct3D adapter");
- DeleteDC(hDC);
+ {
+ DPRINT1("Could not create dc for display adapter: %s",
pDisplayAdapter->szDeviceName);
return FALSE;
}
@@ -147,17 +140,39 @@
if (FALSE == GetDeviceData(pDeviceData))
{
- DeleteDC(hDC);
- HeapFree(GetProcessHeap(), 0, pDeviceData->pUnknown6BC);
- HeapFree(GetProcessHeap(), 0, pDeviceData);
- return FALSE;
- }
-
- DeleteDC(hDC);
+ DPRINT1("Could not get device data for display adapter: %s",
pDisplayAdapter->szDeviceName);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+VOID DestroyD3D9DeviceData(IN LPD3D9_DEVICEDATA pDeviceData)
+{
+ DeleteDC(pDeviceData->hDC);
+ HeapFree(GetProcessHeap(), 0, pDeviceData->pUnknown6BC);
+}
+
+static BOOL GetDirect3D9AdapterInfo(IN OUT LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapters,
IN DWORD AdapterIndex)
+{
+ LPD3D9_DEVICEDATA pDeviceData;
+
+ pDeviceData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(D3D9_DEVICEDATA));
+ if (NULL == pDeviceData)
+ {
+ DPRINT1("Out of memory, could not initialize Direct3D adapter");
+ return FALSE;
+ }
+
+ if (FALSE == CreateD3D9DeviceData(&pDisplayAdapters[AdapterIndex], pDeviceData))
+ {
+ DPRINT1("Could not create device data for adapter: %d", AdapterIndex);
+ return FALSE;
+ }
GetDisplayAdapterFromDevice(pDisplayAdapters, AdapterIndex, pDeviceData);
- HeapFree(GetProcessHeap(), 0, pDeviceData->pUnknown6BC);
+ DestroyD3D9DeviceData(pDeviceData);
HeapFree(GetProcessHeap(), 0, pDeviceData);
return TRUE;
@@ -232,9 +247,6 @@
if (pDirect3D9 == 0)
return DDERR_OUTOFMEMORY;
- pDirect3D9->unknown000007 = 0;
- pDirect3D9->lpInt = 0;
-
pDirect3D9->lpVtbl = &Direct3D9_Vtbl;
pDirect3D9->dwProcessId = GetCurrentThreadId();
pDirect3D9->lRefCnt = 1;
@@ -246,10 +258,15 @@
InitializeCriticalSection(&pDirect3D9->d3d9_cs);
- GetDisplayDeviceInfo(pDirect3D9);
+ if (FALSE == GetDisplayDeviceInfo(pDirect3D9))
+ {
+ DPRINT1("Could not create Direct3D9 object");
+ AlignedFree(pDirect3D9);
+ return DDERR_GENERIC;
+ }
*ppDirect3D9 = (LPDIRECT3D9)&pDirect3D9->lpVtbl;
- return ERROR_SUCCESS;
-}
-
+ return D3D_OK;
+}
+
Modified: trunk/reactos/dll/directx/d3d9/d3d9_create.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_crea…
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_create.h [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_create.h [iso-8859-1] Sat Aug 23 12:24:27 2008
@@ -15,4 +15,7 @@
/* Creates a Direct3D9 object */
HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9, UINT SDKVersion);
+BOOL CreateD3D9DeviceData(IN LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapter, IN
LPD3D9_DEVICEDATA pDeviceData);
+VOID DestroyD3D9DeviceData(IN LPD3D9_DEVICEDATA pDeviceData);
+
#endif // _D3D9_CREATE_H_
Modified: trunk/reactos/dll/directx/d3d9/d3d9_device.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_devi…
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_device.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_device.c [iso-8859-1] Sat Aug 23 12:24:27 2008
@@ -8,7 +8,8 @@
#include "d3d9_device.h"
#include "d3d9_helpers.h"
#include "adapter.h"
-#include "debug.h"
+#include <debug.h>
+#include "d3d9_create.h"
#define LOCK_D3DDEVICE9() if (This->bLockDevice)
EnterCriticalSection(&This->CriticalSection);
#define UNLOCK_D3DDEVICE9() if (This->bLockDevice)
LeaveCriticalSection(&This->CriticalSection);
@@ -53,8 +54,16 @@
if (ref == 0)
{
+ DWORD iAdapter;
+
EnterCriticalSection(&This->CriticalSection);
+
/* TODO: Free resources here */
+ for (iAdapter = 0; iAdapter < This->NumAdaptersInDevice; iAdapter++)
+ {
+ DestroyD3D9DeviceData(&This->DeviceData[iAdapter]);
+ }
+
LeaveCriticalSection(&This->CriticalSection);
AlignedFree(This);
}
Modified: trunk/reactos/dll/directx/d3d9/d3d9_private.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_priv…
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_private.h [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_private.h [iso-8859-1] Sat Aug 23 12:24:27 2008
@@ -2667,6 +2667,6 @@
/* 0x47ac */ DWORD unknown004587;
/* 0x47b0 */ DWORD unknown004588;
/* 0x47b4 */ UINT SDKVersion;
-} DIRECT3D9_INT, *LPDIRECT3D9_INT;
+} DIRECT3D9_INT, FAR *LPDIRECT3D9_INT;
#endif // _D3D9_PRIVATE_H_
Modified: trunk/reactos/dll/directx/d3d9/d3d9_swapchain.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/d3d9_swap…
==============================================================================
--- trunk/reactos/dll/directx/d3d9/d3d9_swapchain.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/d3d9_swapchain.c [iso-8859-1] Sat Aug 23 12:24:27 2008
@@ -150,6 +150,8 @@
pThisSwapChain->GammaRamp.blue[i] = i;
}
+ pThisSwapChain->PresentParameters =
pPresentationParameters[pThisSwapChain->ChainIndex];
+
return Direct3DSwapChain9_Reset(pThisSwapChain, pPresentationParameters);
}
Modified: trunk/reactos/dll/directx/d3d9/device.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/d3d9/device.c?…
==============================================================================
--- trunk/reactos/dll/directx/d3d9/device.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/d3d9/device.c [iso-8859-1] Sat Aug 23 12:24:27 2008
@@ -9,6 +9,7 @@
#include "device.h"
#include <debug.h>
#include "d3d9_helpers.h"
+#include "d3d9_create.h"
static HRESULT InitD3D9ResourceManager(D3D9ResourceManager* pThisResourceManager,
LPDIRECT3DDEVICE9_INT pDirect3DDevice9)
{
@@ -36,7 +37,6 @@
{
D3D9ResourceManager* pResourceManager;
DWORD i;
- D3DDISPLAYMODE DisplayMode;
// Insert Reset/Ctor here
@@ -59,16 +59,25 @@
// TODO: Query driver for correct DX version
pThisBaseDevice->dwDXVersion = 9;
- DisplayMode = pThisBaseDevice->CurrentDisplayMode[0];
+ pThisBaseDevice->CurrentDisplayMode[0].Width =
pDirect3D9->DisplayAdapters[0].DriverCaps.dwDisplayWidth;
+ pThisBaseDevice->CurrentDisplayMode[0].Height =
pDirect3D9->DisplayAdapters[0].DriverCaps.dwDisplayHeight;
+ pThisBaseDevice->CurrentDisplayMode[0].RefreshRate =
pDirect3D9->DisplayAdapters[0].DriverCaps.dwRefreshRate;
+ pThisBaseDevice->CurrentDisplayMode[0].Format =
pDirect3D9->DisplayAdapters[0].DriverCaps.DisplayFormat;
+
for (i = 0; i < NumAdaptersToCreate; i++)
{
+ if (FALSE == CreateD3D9DeviceData(&pDirect3D9->DisplayAdapters[i],
&pThisBaseDevice->DeviceData[i]))
+ {
+ DPRINT1("Failed to get device data for adapter: %d", i);
+ return DDERR_GENERIC;
+ }
+
+ pThisBaseDevice->AdapterIndexInGroup[i] = i;
pThisBaseDevice->CurrentDisplayMode[i] =
pThisBaseDevice->CurrentDisplayMode[0];
- pThisBaseDevice->AdapterIndexInGroup[i] = i;
- // TODO: Fill pThisBaseDevice->DeviceData[i]
pThisBaseDevice->pSwapChains[i] = CreateDirect3DSwapChain9(RT_BUILTIN,
pThisBaseDevice, i);
pThisBaseDevice->pSwapChains2[i] = pThisBaseDevice->pSwapChains[i];
- Direct3DSwapChain9_SetDisplayMode(pThisBaseDevice->pSwapChains[i],
&DisplayMode);
+ Direct3DSwapChain9_SetDisplayMode(pThisBaseDevice->pSwapChains[i],
&pThisBaseDevice->CurrentDisplayMode[i]);
if (FAILED(Direct3DSwapChain9_Init(pThisBaseDevice->pSwapChains[i],
pPresentationParameters)))
{