blob: ea473a7f914570dad88f6075cd5ae3643057fa5e [file] [log] [blame]
/**
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER within this package.
*/
#ifndef __DMEMMGR_INCLUDED__
#define __DMEMMGR_INCLUDED__
#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
#define VMEMHEAP_LINEAR __MSABI_LONG(0x1)
#define VMEMHEAP_RECTANGULAR __MSABI_LONG(0x2)
#define VMEMHEAP_ALIGNMENT __MSABI_LONG(0x4)
#define SURFACEALIGN_DISCARDABLE __MSABI_LONG(0x1)
#ifdef __cplusplus
extern "C" {
#endif
typedef ULONG_PTR FLATPTR;
typedef struct _SURFACEALIGNMENT {
__C89_NAMELESS union {
struct {
DWORD dwStartAlignment;
DWORD dwPitchAlignment;
DWORD dwFlags;
DWORD dwReserved2;
} Linear;
struct {
DWORD dwXAlignment;
DWORD dwYAlignment;
DWORD dwFlags;
DWORD dwReserved2;
} Rectangular;
};
} SURFACEALIGNMENT;
typedef struct _HEAPALIGNMENT {
DWORD dwSize;
DDSCAPS ddsCaps;
DWORD dwReserved;
SURFACEALIGNMENT ExecuteBuffer;
SURFACEALIGNMENT Overlay;
SURFACEALIGNMENT Texture;
SURFACEALIGNMENT ZBuffer;
SURFACEALIGNMENT AlphaBuffer;
SURFACEALIGNMENT Offscreen;
SURFACEALIGNMENT FlipTarget;
} HEAPALIGNMENT;
typedef struct _DD_GETHEAPALIGNMENTDATA {
ULONG_PTR dwInstance;
DWORD dwHeap;
HRESULT ddRVal;
VOID *GetHeapAlignment;
HEAPALIGNMENT Alignment;
} DD_GETHEAPALIGNMENTDATA;
typedef struct _VMEML {
struct _VMEML *next;
FLATPTR ptr;
DWORD size;
WINBOOL bDiscardable;
} VMEML,*LPVMEML,**LPLPVMEML;
typedef struct _VMEMR {
struct _VMEMR *next;
struct _VMEMR *prev;
struct _VMEMR *pUp;
struct _VMEMR *pDown;
struct _VMEMR *pLeft;
struct _VMEMR *pRight;
FLATPTR ptr;
DWORD size;
DWORD x;
DWORD y;
DWORD cx;
DWORD cy;
DWORD flags;
FLATPTR pBits;
WINBOOL bDiscardable;
} VMEMR,*LPVMEMR,**LPLPVMEMR;
typedef struct _VMEMHEAP {
DWORD dwFlags;
DWORD stride;
LPVOID freeList;
LPVOID allocList;
DWORD dwTotalSize;
FLATPTR fpGARTLin;
FLATPTR fpGARTDev;
DWORD dwCommitedSize;
DWORD dwCoalesceCount;
HEAPALIGNMENT Alignment;
DDSCAPSEX ddsCapsEx;
DDSCAPSEX ddsCapsExAlt;
#ifndef IS_16
LARGE_INTEGER liPhysAGPBase;
#endif
HANDLE hdevAGP;
LPVOID pvPhysRsrv;
#if NTDDI_VERSION >= 0x05010000
BYTE *pAgpCommitMask;
DWORD dwAgpCommitMaskSize;
#endif
} VMEMHEAP;
#ifndef __NTDDKCOMP__
typedef struct _VIDMEM *LPVIDMEM;
#else
typedef struct _VIDEOMEMORY *LPVIDMEM;
#endif
typedef struct _SURFACEALIGNMENT *LPSURFACEALIGNMENT;
typedef struct _HEAPALIGNMENT *LPHEAPALIGNMENT;
typedef struct _DD_GETHEAPALIGNMENTDATA *PDD_GETHEAPALIGNMENTDATA;
typedef VMEMHEAP *LPVMEMHEAP;
#ifndef __NTDDKCOMP__
extern FLATPTR WINAPI VidMemAlloc (LPVMEMHEAP pvmh, DWORD width, DWORD height);
#endif
extern FLATPTR WINAPI HeapVidMemAllocAligned (LPVIDMEM lpVidMem, DWORD dwWidth, DWORD dwHeight, LPSURFACEALIGNMENT lpAlignment, LPLONG lpNewPitch);
extern void WINAPI VidMemFree (LPVMEMHEAP pvmh, FLATPTR ptr);
#ifdef __cplusplus
};
#endif
#endif
#endif