master
  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
 20extern "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