[ros-diffs] [gbrunmar] 35568: * Refactored GetDirect3D9AdapterInfo() to make life a little easier in InitD3D9BaseDevice(). * Filled IDirect3DDevice9::DeviceData[] with correct info

gbrunmar at svn.reactos.org gbrunmar at svn.reactos.org
Sat Aug 23 19:24:27 CEST 2008


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_create.c?rev=35568&r1=35567&r2=35568&view=diff
==============================================================================
--- 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_create.h?rev=35568&r1=35567&r2=35568&view=diff
==============================================================================
--- 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_device.c?rev=35568&r1=35567&r2=35568&view=diff
==============================================================================
--- 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_private.h?rev=35568&r1=35567&r2=35568&view=diff
==============================================================================
--- 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_swapchain.c?rev=35568&r1=35567&r2=35568&view=diff
==============================================================================
--- 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?rev=35568&r1=35567&r2=35568&view=diff
==============================================================================
--- 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)))
         {



More information about the Ros-diffs mailing list