[ros-diffs] [gbrunmar] 33299: Implemented IDirect3DDevice9::GetAvailableTextureMem()

gbrunmar at svn.reactos.org gbrunmar at svn.reactos.org
Mon May 5 18:49:13 CEST 2008


Author: gbrunmar
Date: Mon May  5 11:49:13 2008
New Revision: 33299

URL: http://svn.reactos.org/svn/reactos?rev=33299&view=rev
Log:
Implemented IDirect3DDevice9::GetAvailableTextureMem()

Modified:
    trunk/reactos/dll/directx/d3d9/d3d9_device.c
    trunk/reactos/dll/directx/d3d9/d3d9_private.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=33299&r1=33298&r2=33299&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] Mon May  5 11:49:13 2008
@@ -70,11 +70,43 @@
     return D3D_OK;
 }
 
+/*++
+* @name IDirect3DDevice9::GetAvailableTextureMem
+* @implemented
+*
+* The function IDirect3DDevice9Impl_GetAvailableTextureMem returns a pointer to the IDirect3D9 object
+* that created this device.
+*
+* @param LPDIRECT3D iface
+* Pointer to the IDirect3DDevice9 object returned from IDirect3D9::CreateDevice()
+*
+* @return UINT
+* The method returns an estimated the currently available texture memory in bytes rounded
+* to the nearest MB. Applications should NOT use this as an exact number.
+*
+*/
 static UINT WINAPI IDirect3DDevice9Impl_GetAvailableTextureMem(LPDIRECT3DDEVICE9 iface)
 {
-    UNIMPLEMENTED
-
-    return D3D_OK;
+    UINT AvailableTextureMemory = 0;
+    DD_GETAVAILDRIVERMEMORYDATA ddGetAvailDriverMemoryData;
+
+    LPDIRECT3DDEVICE9_INT This = impl_from_IDirect3DDevice9(iface);
+    LOCK_D3DDEVICE9();
+
+    memset(&ddGetAvailDriverMemoryData, 0, sizeof(ddGetAvailDriverMemoryData));
+    ddGetAvailDriverMemoryData.lpDD = (PDD_DIRECTDRAW_GLOBAL)&This->DeviceData[0].pUnknown6BC->hDD;
+
+    if (DDHAL_DRIVER_HANDLED == (*This->DeviceData[0].D3D9Callbacks.DdGetAvailDriverMemory)(&ddGetAvailDriverMemoryData))
+    {
+        if (DD_OK == ddGetAvailDriverMemoryData.ddRVal)
+        {
+            /* Round it up to the nearest MB */
+            AvailableTextureMemory = (ddGetAvailDriverMemoryData.dwFree + 0x80000) & 0xFFF00000;
+        }
+    }
+
+    UNLOCK_D3DDEVICE9();
+    return AvailableTextureMemory;
 }
 
 static HRESULT WINAPI IDirect3DDevice9Impl_EvictManagedResources(LPDIRECT3DDEVICE9 iface)

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=33299&r1=33298&r2=33299&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] Mon May  5 11:49:13 2008
@@ -10,6 +10,7 @@
 
 #include <windows.h>
 #include <ddraw.h>
+#include <ddrawint.h>
 
 #define D3D9_INT_MAX_NUM_ADAPTERS   12
 
@@ -107,7 +108,7 @@
 /* 0x0044 */    DWORD DdFlip;
 /* 0x0048 */    DWORD DdGetBltStatus;
 /* 0x004c */    DWORD DdGetFlipStatus;
-/* 0x0050 */    DWORD DdGetAvailDriverMemory;
+/* 0x0050 */    PDD_GETAVAILDRIVERMEMORY DdGetAvailDriverMemory;
 /* 0x0054 */    DWORD unknown0115;
 /* 0x0058 */    DWORD DdSetMode;
 /* 0x005c */    DWORD DdSetExclusiveMode;



More information about the Ros-diffs mailing list