2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS ReactX
4 * FILE: dll/directx/d3d9/d3d9_helpers.c
5 * PURPOSE: d3d9.dll helper functions
6 * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se>
10 #include "d3d9_helpers.h"
15 #define MEM_ALIGNMENT 0x20
17 static LPCSTR D3D9_DebugRegPath
= "Software\\Microsoft\\Direct3D";
19 BOOL
ReadRegistryValue(IN DWORD ValueType
, IN LPCSTR ValueName
, OUT LPBYTE DataBuffer
, IN OUT LPDWORD DataBufferSize
)
25 if (ERROR_SUCCESS
!= RegOpenKeyExA(HKEY_LOCAL_MACHINE
, D3D9_DebugRegPath
, 0, KEY_QUERY_VALUE
, &hKey
))
28 Ret
= RegQueryValueExA(hKey
, ValueName
, 0, &Type
, DataBuffer
, DataBufferSize
);
32 if (ERROR_SUCCESS
!= Ret
)
35 if (Type
!= ValueType
)
41 HRESULT
AlignedAlloc(IN OUT LPVOID
*ppObject
, IN SIZE_T dwSize
)
44 ULONG AlignedMask
= MEM_ALIGNMENT
- 1;
46 ULONG_PTR
*AlignedOffsetPtr
;
49 return DDERR_INVALIDPARAMS
;
57 dwSize
+= MEM_ALIGNMENT
;
59 AlignedPtr
= (CHAR
*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, dwSize
);
62 return DDERR_OUTOFMEMORY
;
64 AddressOffset
= MEM_ALIGNMENT
- ((ULONG
)AlignedPtr
& AlignedMask
);
66 AlignedPtr
+= AddressOffset
;
68 AlignedOffsetPtr
= (ULONG_PTR
*)(AlignedPtr
- sizeof(ULONG
));
69 *AlignedOffsetPtr
= AddressOffset
;
71 *ppObject
= (ULONG_PTR
*)AlignedPtr
;
76 VOID
AlignedFree(IN OUT LPVOID pObject
)
78 CHAR
*NonAlignedPtr
= pObject
;
79 ULONG_PTR
*AlignedPtr
= pObject
;
84 NonAlignedPtr
-= *(AlignedPtr
- 1);
86 HeapFree(GetProcessHeap(), 0, NonAlignedPtr
);