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