#ifndef __WINE_DDRAW_DGA_PRIVATE_H
#define __WINE_DDRAW_DGA_PRIVATE_H

#include "ddraw_private.h"
#include "x11_private.h"

#include "ts_xf86dga.h"

extern ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt;
extern ICOM_VTABLE(IDirectDraw)		dga_ddvt;
extern ICOM_VTABLE(IDirectDrawPalette)	dga_ddpalvt;

typedef struct dga_dd_private {
    DWORD	fb_height;		/* height of the viewport */
    DWORD	fb_width;		/* width of the viewport */
    caddr_t	fb_addr;		/* start address of the framebuffer */
    DWORD	fb_memsize;		/* total memory on the card */
    DWORD	vpmask;			/* viewports in use flag bitmap */
    void      (*InstallColormap)(Display *, int, Colormap) ;
} dga_dd_private;

typedef x11_dp_private dga_dp_private;	/* reuse X11 palette stuff */

typedef struct dga_ds_private {
    DWORD	fb_height;
    int		*oldDIBmap;
} dga_ds_private;

/* For usage in DGA2 */
extern ULONG WINAPI DGA_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) ;
extern HRESULT WINAPI DGA_IDirectDrawSurface4Impl_SetPalette(LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWPALETTE pal) ;
extern HRESULT WINAPI DGA_IDirectDrawSurface4Impl_Unlock(LPDIRECTDRAWSURFACE4 iface,LPVOID surface) ;
extern HRESULT WINAPI DGA_IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lphdc);

extern HRESULT WINAPI DGA_IDirectDraw2Impl_CreateSurface_with_VT(LPDIRECTDRAW2 iface,LPDDSURFACEDESC lpddsd,
								 LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk, void *vtable) ;

extern HRESULT WINAPI DGA_IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 iface,REFIID refiid,LPVOID *obj) ;
extern HRESULT WINAPI DGA_IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 iface,LPDDCAPS caps1,LPDDCAPS caps2) ;

extern HRESULT WINAPI DGA_IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 iface,LPDDSURFACEDESC lpddsfd) ;
extern HRESULT WINAPI DGA_IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 iface,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free) ;


#endif /* __WINE_DDRAW_DGA_PRIVATE_H */
