You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.0 KiB
146 lines
4.0 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// refif.hpp
|
|
//
|
|
// Refrast front-end/rasterizer interface header.
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef _REFIF_HPP_
|
|
#define _REFIF_HPP_
|
|
|
|
// Vertex data is aligned on 32-byte boundaries.
|
|
#define DP_VTX_ALIGN 32
|
|
|
|
|
|
// Lock surfaces before rendering
|
|
inline HRESULT LockSurface(LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl, LPVOID *ppData)
|
|
{
|
|
if (pDDSLcl)
|
|
{
|
|
if (!VIDEO_MEMORY(pDDSLcl))
|
|
{
|
|
if (SURFACE_LOCKED(pDDSLcl))
|
|
return DDERR_SURFACEBUSY;
|
|
*ppData = (LPVOID)SURFACE_MEMORY(pDDSLcl);
|
|
return DD_OK;
|
|
}
|
|
else
|
|
{
|
|
HRESULT ddrval;
|
|
do
|
|
{
|
|
ddrval = DDInternalLock(pDDSLcl, ppData);
|
|
} while (ddrval == DDERR_WASSTILLDRAWING);
|
|
return ddrval;
|
|
}
|
|
}
|
|
return DD_OK;
|
|
}
|
|
// Unlock surfaces after rendering
|
|
inline void UnlockSurface(LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl)
|
|
{
|
|
if (pDDSLcl && VIDEO_MEMORY(pDDSLcl))
|
|
{
|
|
DDInternalUnlock(pDDSLcl);
|
|
}
|
|
}
|
|
|
|
HRESULT FASTCALL
|
|
DoRendPoints(ReferenceRasterizer * pCtx,
|
|
LPD3DINSTRUCTION pIns,
|
|
LPD3DTLVERTEX pVtx,
|
|
LPD3DPOINT pPt);
|
|
HRESULT FASTCALL
|
|
DoRendLines(ReferenceRasterizer * pCtx,
|
|
LPD3DINSTRUCTION pIns,
|
|
LPD3DTLVERTEX pVtx,
|
|
LPD3DLINE pLine);
|
|
HRESULT FASTCALL
|
|
DoRendTriangles(ReferenceRasterizer *pCtx,
|
|
LPD3DINSTRUCTION pIns,
|
|
LPD3DTLVERTEX pVtx,
|
|
LPD3DTRIANGLE pTri);
|
|
HRESULT FASTCALL
|
|
DoDrawPrimitives2(ReferenceRasterizer *pCtx,
|
|
UINT16 dwStride,
|
|
DWORD dwFvf,
|
|
PUINT8 pVtx,
|
|
DWORD dwNumVertices,
|
|
LPD3DHAL_DP2COMMAND *ppCmd,
|
|
LPDWORD lpdwRStates,
|
|
BOOL bWireframe = FALSE
|
|
);
|
|
|
|
|
|
|
|
// Macros to check if a pointer is valid
|
|
#if DBG
|
|
// Validate context. pCtx should be declared before this macro
|
|
// Type can be D3DContext or RefRast
|
|
#define VALIDATE_CONTEXT(caller_name, data_ptr, pCtx, type) \
|
|
{ \
|
|
if ((data_ptr) == NULL) \
|
|
{ \
|
|
DPFM(0, DRV, ("in %s, data pointer = NULL", (caller_name))); \
|
|
return DDHAL_DRIVER_HANDLED; \
|
|
} \
|
|
pCtx = (type)((data_ptr)->dwhContext); \
|
|
if (!pCtx) \
|
|
{ \
|
|
DPFM(0, DRV, ("in %s, dwhContext = NULL", (caller_name))); \
|
|
(data_ptr)->ddrval = D3DHAL_CONTEXT_BAD; \
|
|
return DDHAL_DRIVER_HANDLED; \
|
|
} \
|
|
}
|
|
#else // !DBG
|
|
// Validate context. pCtx should be declared before this macro
|
|
// Type can be D3DContext or RefRast
|
|
#define VALIDATE_CONTEXT(caller_name, data_ptr, pCtx, type) \
|
|
{ \
|
|
pCtx = (type)((data_ptr)->dwhContext); \
|
|
}
|
|
#endif // !DBG
|
|
|
|
// Validate ReferenceRasterizer. pRefRast should be declared before this macro
|
|
#define VALIDATE_REFRAST_CONTEXT(caller_name, data_ptr) \
|
|
{ \
|
|
VALIDATE_CONTEXT(caller_name, data_ptr, pRefRast, ReferenceRasterizer*);\
|
|
}
|
|
|
|
#define CHECK_FVF(ret, pDCtx, dwFlags) \
|
|
{ \
|
|
if ((ret = pDCtx->CheckFVF(dwFlags)) != DD_OK) \
|
|
{ \
|
|
return DDHAL_DRIVER_HANDLED; \
|
|
} \
|
|
}
|
|
|
|
HRESULT FASTCALL
|
|
FindOutSurfFormat(LPDDPIXELFORMAT pDdPixFmt,
|
|
RRSurfaceType *pFmt);
|
|
|
|
BOOL FASTCALL
|
|
ValidTextureSize(INT16 iuSize, INT16 iuShift,
|
|
INT16 ivSize, INT16 ivShift);
|
|
BOOL FASTCALL
|
|
ValidMipmapSize(INT16 iPreSize, INT16 iSize);
|
|
|
|
DWORD __stdcall
|
|
RefRastDrawPrimitives2(LPD3DHAL_DRAWPRIMITIVES2DATA pDPrim2Data);
|
|
|
|
HRESULT
|
|
RefRastLockTarget(ReferenceRasterizer *pRefRast);
|
|
void
|
|
RefRastUnlockTarget(ReferenceRasterizer *pRefRast);
|
|
HRESULT
|
|
RefRastLockTexture(ReferenceRasterizer *pRefRast);
|
|
void
|
|
RefRastUnlockTexture(ReferenceRasterizer *pRefRast);
|
|
|
|
// DXT block size array
|
|
extern int g_DXTBlkSize[];
|
|
|
|
#endif // #ifndef _REFIF_HPP_
|