From 23bb9ae68fede371729a6f80beef0c9a5d5e97fc Mon Sep 17 00:00:00 2001 From: Gregor Brunmar Date: Sun, 5 Oct 2008 07:33:05 +0000 Subject: [PATCH] D3D9: * Implemented DdGetAvailDriverMemory callback svn path=/trunk/; revision=36651 --- reactos/dll/directx/d3d9/d3d9.rbuild | 1 + reactos/dll/directx/d3d9/d3d9_callbacks.c | 51 +++++++++++++++++++++++ reactos/dll/directx/d3d9/d3d9_callbacks.h | 33 +++++++++++++++ reactos/dll/directx/d3d9/d3d9_caps.c | 2 + reactos/dll/directx/d3d9/d3d9_private.h | 17 +------- 5 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 reactos/dll/directx/d3d9/d3d9_callbacks.c create mode 100644 reactos/dll/directx/d3d9/d3d9_callbacks.h diff --git a/reactos/dll/directx/d3d9/d3d9.rbuild b/reactos/dll/directx/d3d9/d3d9.rbuild index 340085f2101..61369d65d50 100644 --- a/reactos/dll/directx/d3d9/d3d9.rbuild +++ b/reactos/dll/directx/d3d9/d3d9.rbuild @@ -14,6 +14,7 @@ d3d9.c d3d9_baseobject.c + d3d9_callbacks.c d3d9_caps.c d3d9_create.c d3d9_cursor.c diff --git a/reactos/dll/directx/d3d9/d3d9_callbacks.c b/reactos/dll/directx/d3d9/d3d9_callbacks.c new file mode 100644 index 00000000000..7069ea28762 --- /dev/null +++ b/reactos/dll/directx/d3d9/d3d9_callbacks.c @@ -0,0 +1,51 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS ReactX + * FILE: dll/directx/d3d9/d3d9_callbacks.c + * PURPOSE: Direct3D9's callback functions + * PROGRAMERS: Gregor Gullwi + */ +#include "d3d9_common.h" +#include "d3d9_callbacks.h" +#define STDCALL __stdcall +#include +#include +#include "d3d9_private.h" +#include "ddrawi.h" + +DWORD WINAPI D3d9GetAvailDriverMemory(LPD3D9_GETAVAILDRIVERMEMORYDATA pData) +{ + DWORD Ret = FALSE; + DDHAL_GETAVAILDRIVERMEMORYDATA Data; + ZeroMemory(&Data, sizeof(Data)); + + if (D3D9_GETAVAILDRIVERMEMORY_TYPE_ALL == pData->dwMemoryType) + { + Data.DDSCaps.dwCaps = DDSCAPS_VIDEOMEMORY; + } + else if (D3D9_GETAVAILDRIVERMEMORY_TYPE_LOCAL == pData->dwMemoryType) + { + Data.DDSCaps.dwCaps = DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM; + } + else if (D3D9_GETAVAILDRIVERMEMORY_TYPE_NONLOCAL == pData->dwMemoryType) + { + Data.DDSCaps.dwCaps = DDSCAPS_VIDEOMEMORY | DDSCAPS_NONLOCALVIDMEM; + } + + if (Data.DDSCaps.dwCaps != 0) + { + if (0 == pData->dwTextureType) + Data.DDSCaps.dwCaps |= DDSCAPS_TEXTURE; + + if (pData->dwTextureType & D3D9_TEXTURETYPE_HALSURFACE) + Data.DDSCaps.dwCaps |= DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE; + + if (pData->dwTextureType & D3D9_TEXTURETYPE_BACKBUFFER) + Data.DDSCaps.dwCaps |= DDSCAPS_ZBUFFER; + + Ret = OsThunkDdGetAvailDriverMemory(pData->pUnknown6BC->hDirectDrawLocal, (DD_GETAVAILDRIVERMEMORYDATA*)&Data); + pData->dwFree = Data.dwFree; + } + + return Ret; +} diff --git a/reactos/dll/directx/d3d9/d3d9_callbacks.h b/reactos/dll/directx/d3d9/d3d9_callbacks.h new file mode 100644 index 00000000000..8090f9aaeee --- /dev/null +++ b/reactos/dll/directx/d3d9/d3d9_callbacks.h @@ -0,0 +1,33 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS ReactX + * FILE: dll/directx/d3d9/d3d9_callbacks.h + * PURPOSE: Direct3D9's callback structs and constants + * PROGRAMERS: Gregor Gullwi + */ +#ifndef _D3D9_CALLBACKS_H_ +#define _D3D9_CALLBACKS_H_ + +typedef enum _D3D9_GETAVAILDRIVERMEMORY_TYPE +{ + D3D9_GETAVAILDRIVERMEMORY_TYPE_ALL = 0, + D3D9_GETAVAILDRIVERMEMORY_TYPE_LOCAL = 4, + D3D9_GETAVAILDRIVERMEMORY_TYPE_NONLOCAL = 5, +} D3D9_GETAVAILDRIVERMEMORY_TYPE; + +#define D3D9_TEXTURETYPE_HALSURFACE 1 +#define D3D9_TEXTURETYPE_BACKBUFFER 2 + +typedef struct _D3D9_GETAVAILDRIVERMEMORYDATA +{ +/* 0x0000 */ struct _D3D9_Unknown6BC* pUnknown6BC; +/* 0x0004 */ D3D9_GETAVAILDRIVERMEMORY_TYPE dwMemoryType; +/* 0x0008 */ DWORD dwTextureType; +/* 0x000c */ DWORD dwFree; +} D3D9_GETAVAILDRIVERMEMORYDATA, FAR* LPD3D9_GETAVAILDRIVERMEMORYDATA; + +typedef DWORD (WINAPI FAR* LPD3D9_GETAVAILDRIVERMEMORY)(LPD3D9_GETAVAILDRIVERMEMORYDATA); + +DWORD WINAPI D3d9GetAvailDriverMemory(LPD3D9_GETAVAILDRIVERMEMORYDATA pData); + +#endif // _D3D9_CALLBACKS_H_ diff --git a/reactos/dll/directx/d3d9/d3d9_caps.c b/reactos/dll/directx/d3d9/d3d9_caps.c index 65e81a2e478..2e175ba761e 100644 --- a/reactos/dll/directx/d3d9/d3d9_caps.c +++ b/reactos/dll/directx/d3d9/d3d9_caps.c @@ -11,6 +11,7 @@ #include "d3d9_helpers.h" #include "d3d9_caps.h" #include "adapter.h" +#include "d3d9_callbacks.h" static INT g_NumDevices = 0; @@ -833,6 +834,7 @@ BOOL GetD3D9DriverInfo( D3D9_Unknown6BC* pUnknown6BC, } /* TODO: Set all internal function pointers to create surface, etc. */ + pD3D9Callbacks->DdGetAvailDriverMemory = &D3d9GetAvailDriverMemory; /* Set device rect */ { diff --git a/reactos/dll/directx/d3d9/d3d9_private.h b/reactos/dll/directx/d3d9/d3d9_private.h index cba2c867d70..1b11bf58d9a 100644 --- a/reactos/dll/directx/d3d9/d3d9_private.h +++ b/reactos/dll/directx/d3d9/d3d9_private.h @@ -10,28 +10,13 @@ #include "d3d9_common.h" #include +#include "d3d9_callbacks.h" #define D3D9_INT_MAX_NUM_ADAPTERS 12 #define D3D9_INT_D3DCAPS8_VALID 1 #define D3D9_INT_D3DCAPS9_VALID 2 -typedef enum _D3D9_GETAVAILDRIVERMEMORY_TYPE -{ - D3D9_GETAVAILDRIVERMEMORY_TYPE_ALL = 0, - D3D9_GETAVAILDRIVERMEMORY_TYPE_LOCAL = 4, - D3D9_GETAVAILDRIVERMEMORY_TYPE_NONLOCAL = 5, -} D3D9_GETAVAILDRIVERMEMORY_TYPE; - -typedef struct _D3D9_GETAVAILDRIVERMEMORYDATA -{ -/* 0x0000 */ struct _D3D9_Unknown6BC* pUnknown6BC; -/* 0x0004 */ D3D9_GETAVAILDRIVERMEMORY_TYPE dwMemoryType; -/* 0x0008 */ DWORD dwTextureType; -/* 0x000c */ DWORD dwFree; -} D3D9_GETAVAILDRIVERMEMORYDATA, FAR* LPD3D9_GETAVAILDRIVERMEMORYDATA; -typedef BOOL (WINAPI FAR* LPD3D9_GETAVAILDRIVERMEMORY)(LPD3D9_GETAVAILDRIVERMEMORYDATA); - typedef struct _D3D9_Unknown6BC { /* 0x0000 */ HANDLE hDirectDrawLocal;