/* Copyright 2001 TransGaming Technologies Inc. */

#ifndef DDRAW_DSURFACE_EXEBUFFER_H_INCLUDED
#define DDRAW_DSURFACE_EXEBUFFER_H_INCLUDED

#define EXEBUFFER_PRIV(surf) ((ExeBuffer_DirectDrawSurfaceImpl*)((surf)->private))

#define EXEBUFFER_PRIV_VAR(name, surf) \
	ExeBuffer_DirectDrawSurfaceImpl* name = EXEBUFFER_PRIV(surf)


struct ExeBuffer_DirectDrawSurfaceImpl_Part
{
    BOOL client_memory;
};

typedef struct
{
    struct ExeBuffer_DirectDrawSurfaceImpl_Part exebuffer;
} ExeBuffer_DirectDrawSurfaceImpl;

HRESULT
ExeBuffer_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
				      IDirectDrawImpl* pDD,
				      const DDSURFACEDESC2* pDDSD);

HRESULT ExeBuffer_DirectDrawSurface_Create(IDirectDrawImpl* pDD,
					   const DDSURFACEDESC2* pDDSD,
					   LPDIRECTDRAWSURFACE7* ppSurf,
					   IUnknown* pUnkOuter);

void
ExeBuffer_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);

HRESULT
ExeBuffer_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This,
					      LPDIRECTDRAWSURFACE7* ppDup);


#endif
