1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 6 #ifndef __DMEMMGR_INCLUDED__ 7 #define __DMEMMGR_INCLUDED__ 8 9 #include <winapifamily.h> 10 11 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 12 13 #define VMEMHEAP_LINEAR __MSABI_LONG(0x1) 14 #define VMEMHEAP_RECTANGULAR __MSABI_LONG(0x2) 15 #define VMEMHEAP_ALIGNMENT __MSABI_LONG(0x4) 16 17 #define SURFACEALIGN_DISCARDABLE __MSABI_LONG(0x1) 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 typedef ULONG_PTR FLATPTR; 24 25 typedef struct _SURFACEALIGNMENT { 26 __C89_NAMELESS union { 27 struct { 28 DWORD dwStartAlignment; 29 DWORD dwPitchAlignment; 30 DWORD dwFlags; 31 DWORD dwReserved2; 32 } Linear; 33 struct { 34 DWORD dwXAlignment; 35 DWORD dwYAlignment; 36 DWORD dwFlags; 37 DWORD dwReserved2; 38 } Rectangular; 39 }; 40 } SURFACEALIGNMENT; 41 42 typedef struct _HEAPALIGNMENT { 43 DWORD dwSize; 44 DDSCAPS ddsCaps; 45 DWORD dwReserved; 46 SURFACEALIGNMENT ExecuteBuffer; 47 SURFACEALIGNMENT Overlay; 48 SURFACEALIGNMENT Texture; 49 SURFACEALIGNMENT ZBuffer; 50 SURFACEALIGNMENT AlphaBuffer; 51 SURFACEALIGNMENT Offscreen; 52 SURFACEALIGNMENT FlipTarget; 53 } HEAPALIGNMENT; 54 55 typedef struct _DD_GETHEAPALIGNMENTDATA { 56 ULONG_PTR dwInstance; 57 DWORD dwHeap; 58 HRESULT ddRVal; 59 VOID *GetHeapAlignment; 60 HEAPALIGNMENT Alignment; 61 } DD_GETHEAPALIGNMENTDATA; 62 63 typedef struct _VMEML { 64 struct _VMEML *next; 65 FLATPTR ptr; 66 DWORD size; 67 WINBOOL bDiscardable; 68 } VMEML,*LPVMEML,**LPLPVMEML; 69 70 typedef struct _VMEMR { 71 struct _VMEMR *next; 72 struct _VMEMR *prev; 73 struct _VMEMR *pUp; 74 struct _VMEMR *pDown; 75 struct _VMEMR *pLeft; 76 struct _VMEMR *pRight; 77 FLATPTR ptr; 78 DWORD size; 79 DWORD x; 80 DWORD y; 81 DWORD cx; 82 DWORD cy; 83 DWORD flags; 84 FLATPTR pBits; 85 WINBOOL bDiscardable; 86 } VMEMR,*LPVMEMR,**LPLPVMEMR; 87 88 typedef struct _VMEMHEAP { 89 DWORD dwFlags; 90 DWORD stride; 91 LPVOID freeList; 92 LPVOID allocList; 93 DWORD dwTotalSize; 94 FLATPTR fpGARTLin; 95 FLATPTR fpGARTDev; 96 DWORD dwCommitedSize; 97 DWORD dwCoalesceCount; 98 HEAPALIGNMENT Alignment; 99 DDSCAPSEX ddsCapsEx; 100 DDSCAPSEX ddsCapsExAlt; 101 #ifndef IS_16 102 LARGE_INTEGER liPhysAGPBase; 103 #endif 104 HANDLE hdevAGP; 105 LPVOID pvPhysRsrv; 106 #if NTDDI_VERSION >= 0x05010000 107 BYTE *pAgpCommitMask; 108 DWORD dwAgpCommitMaskSize; 109 #endif 110 } VMEMHEAP; 111 112 #ifndef __NTDDKCOMP__ 113 typedef struct _VIDMEM *LPVIDMEM; 114 #else 115 typedef struct _VIDEOMEMORY *LPVIDMEM; 116 #endif 117 118 typedef struct _SURFACEALIGNMENT *LPSURFACEALIGNMENT; 119 typedef struct _HEAPALIGNMENT *LPHEAPALIGNMENT; 120 typedef struct _DD_GETHEAPALIGNMENTDATA *PDD_GETHEAPALIGNMENTDATA; 121 typedef VMEMHEAP *LPVMEMHEAP; 122 123 #ifndef __NTDDKCOMP__ 124 extern FLATPTR WINAPI VidMemAlloc (LPVMEMHEAP pvmh, DWORD width, DWORD height); 125 #endif 126 extern FLATPTR WINAPI HeapVidMemAllocAligned (LPVIDMEM lpVidMem, DWORD dwWidth, DWORD dwHeight, LPSURFACEALIGNMENT lpAlignment, LPLONG lpNewPitch); 127 extern void WINAPI VidMemFree (LPVMEMHEAP pvmh, FLATPTR ptr); 128 129 #ifdef __cplusplus 130 }; 131 #endif 132 133 #endif 134 #endif 135