/* Copyright 2001 TransGaming Technologies Inc. */

#ifndef DDRAW_D3DDEVICE_HAL_H_INCLUDED
#define DDRAW_D3DDEVICE_HAL_H_INCLUDED

#define HAL_D3D_PRIV(surf) ((HAL_Direct3DDeviceImpl*)((surf)->private))

#define HAL_D3D_PRIV_VAR(name,surf) \
	HAL_Direct3DDeviceImpl* name = HAL_D3D_PRIV(surf)

struct HAL_Direct3DDeviceImpl_Part
{
};

typedef struct
{
    struct HAL_Direct3DDeviceImpl_Part hal;
} HAL_Direct3DDeviceImpl;

HRESULT
HAL_Direct3DDevice_Construct(IDirect3DDeviceImpl* This,
			     IDirectDrawImpl* pDD,
			     IDirectDrawSurfaceImpl* pDDS);

HRESULT
HAL_Direct3DDevice_Create(IDirectDrawImpl *pDD,
			  IDirectDrawSurfaceImpl *pDDS,
			  LPDIRECT3DDEVICE7 *ppd3dd);

void HAL_Direct3DDevice_final_release(IDirect3DDeviceImpl* This);

HRESULT HAL_Direct3DDevice_late_allocate_surface(IDirect3DDeviceImpl* This,
						 IDirectDrawSurfaceImpl* pDDS);

HRESULT HAL_Direct3DDevice_set_render_target(IDirect3DDeviceImpl *This,
					     IDirectDrawSurfaceImpl *pDDS,
					     IDirectDrawSurfaceImpl *pDDSZ,
					     DWORD dwFlags);
HRESULT HAL_Direct3DDevice_begin_scene(IDirect3DDeviceImpl *This);
HRESULT HAL_Direct3DDevice_end_scene(IDirect3DDeviceImpl *This);

#endif
