Leaked source code of windows server 2003
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.
 
 
 
 
 
 

225 lines
11 KiB

/******************************Module*Header**********************************\
*
* *******************
* * D3D SAMPLE CODE *
* *******************
*
* Module Name: d3ddelta.h
*
* Content: 3DLabs Delta unit related defines. Used only by D3D.
*
* Copyright (c) 1994-1998 3Dlabs Inc. Ltd. All rights reserved.
* Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.
\*****************************************************************************/
#ifdef __D3DDELTA
#pragma message ("FILE : "__FILE__" : Multiple inclusion")
#endif
#define __D3DDELTA
//-----------------------------------------------------------------------------
// Conversion macros from ARGB values into Delta Gambit registers format
//-----------------------------------------------------------------------------
#define RGB_GET_GAMBIT_ALPHA(ci) (((ci) & 0xff000000) >> 2)
#define RGB_GET_GAMBIT_RED(ci) (((ci) & 0xff0000) << 6)
#define RGB_GET_GAMBIT_GREEN(ci) (((ci) & 0xff00) << 14)
#define RGB_GET_GAMBIT_BLUE(ci) (((ci) & 0xff) << 22)
#define RGB_GET_GAMBIT_FOG(ci) (((ci) & 0xff000000) >> 10)
#define AS_ULONG(val) *((volatile DWORD *) &(val))
//-----------------------------------------------------------------------------
// Macros defining the different Vertex types.tags for the Delta unit
//-----------------------------------------------------------------------------
#define VTX_FOG (0x1 << 25)
#define VTX_RGB (0x7 << 21)
#define VTX_R (0x1 << 21)
#define VTX_RGBA (0xF << 21)
#define VTX_COLOR (0x1 << 30)
#define VTX_STQ (0x7 << 16)
#define VTX_KSKD (0x3 << 19)
#define VTX_KS (0x1 << 19)
#define VTX_XYZ (0x7 << 26)
#define VTX_XY (0x3 << 26)
#define VTX_GRP (0x2 << 14)
#define GAMBIT_RGB_VTX (VTX_GRP | VTX_RGB | VTX_XYZ)
#define GAMBIT_RGB_F_VTX (VTX_GRP | VTX_RGB | VTX_XYZ | VTX_FOG)
#define GAMBIT_RGB_TEX_VTX (VTX_GRP | VTX_RGB | VTX_XYZ | VTX_STQ)
#define GAMBIT_RGB_F_TEX_VTX (VTX_GRP | VTX_RGB | VTX_XYZ | \
VTX_STQ | VTX_FOG)
#define GAMBIT_RGBA_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ)
#define GAMBIT_RGBA_F_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ | VTX_FOG)
#define GAMBIT_RGBA_TEX_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ | VTX_STQ)
#define GAMBIT_RGBA_F_TEX_VTX (VTX_GRP | VTX_RGBA | VTX_XYZ | \
VTX_STQ | VTX_FOG)
#define GAMBIT_FLAT_VTX (VTX_GRP | VTX_XYZ)
#define GAMBIT_XYZ_VTX (VTX_GRP | VTX_XYZ)
#define GAMBIT_XYZ_COLOR_VTX (VTX_GRP | VTX_XYZ | VTX_COLOR)
#define GAMBIT_XYZ_STQ_VTX (VTX_GRP | VTX_XYZ | VTX_STQ)
#define GAMBIT_XYZ_STQ_FOG_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_FOG)
#define GAMBIT_XYZ_STQ_KSKD_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_KSKD)
#define GAMBIT_XYZ_STQ_KS_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_KS)
#define GAMBIT_XYZ_STQ_KS_COL_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | \
VTX_KS | VTX_COLOR)
#define GAMBIT_XYZ_STQ_KS_COL_FOG_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | \
VTX_KS | VTX_COLOR | VTX_FOG)
#define GAMBIT_XY_VTX (VTX_GRP | VTX_XY)
#define GAMBIT_XY_STQ_VTX (VTX_GRP | VTX_XY | VTX_STQ)
#define GAMBIT_XY_STQ_FOG_VTX (VTX_GRP | VTX_XY | VTX_STQ | VTX_FOG)
#define GAMBIT_XY_STQ_KSKD_VTX (VTX_GRP | VTX_XY | VTX_STQ | VTX_KSKD)
#define GAMBIT_COLS_VTX (VTX_GRP | VTX_RGB)
#define GAMBIT_PACKED_COLS_VTX (VTX_GRP | VTX_COLOR)
#define GAMBIT_COLS_ALPHA_VTX (VTX_GRP | VTX_RGBA)
#define GAMBIT_COLS_KSKD_VTX (VTX_GRP | VTX_RGB | VTX_KSKD)
#define GAMBIT_FLAT_F_VTX (VTX_GRP | VTX_XYZ | VTX_FOG)
#define GAMBIT_FLAT_TEX_VTX (VTX_GRP | VTX_XYZ | VTX_STQ)
#define GAMBIT_FLAT_F_TEX_VTX (VTX_GRP | VTX_XYZ | VTX_STQ | VTX_FOG)
#define GAMBIT_CI_VTX (VTX_GRP | VTX_R | VTX_XYZ)
#define GAMBIT_CI_F_VTX (VTX_GRP | VTX_R | VTX_XYZ | VTX_FOG)
//-----------------------------------------------------------------------------
// Vertex Data downloading macros
//-----------------------------------------------------------------------------
// 4 Entries
#define SEND_VERTEX_XYZ(Num, x_value, y_value, z_value) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_XYZ_VTX | Num)); \
LD_INPUT_FIFO_DATA( AS_ULONG(x_value) ); \
LD_INPUT_FIFO_DATA( AS_ULONG(y_value) ); \
LD_INPUT_FIFO_DATA( AS_ULONG(z_value) ); \
}
// 7 Entries
#define SEND_VERTEX_STQ_XYZ(Num, s_value, t_value, q_value, \
x_value, y_value, z_value) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_XYZ_STQ_VTX | Num)); \
LD_INPUT_FIFO_DATA(AS_ULONG(s_value)); \
LD_INPUT_FIFO_DATA(AS_ULONG(t_value)); \
LD_INPUT_FIFO_DATA(AS_ULONG(q_value)); \
LD_INPUT_FIFO_DATA(AS_ULONG(x_value)); \
LD_INPUT_FIFO_DATA(AS_ULONG(y_value)); \
LD_INPUT_FIFO_DATA(AS_ULONG(z_value)); \
}
// 8 Entries
#define SEND_VERTEX_STQ_KS_XYZ(Num, s_value, t_value, q_value, \
Ks_value, x_value, y_value, z_value) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_XYZ_STQ_KS_VTX | Num)); \
LD_INPUT_FIFO_DATA( AS_ULONG(s_value)); \
LD_INPUT_FIFO_DATA( AS_ULONG(t_value)); \
LD_INPUT_FIFO_DATA( AS_ULONG(q_value)); \
LD_INPUT_FIFO_DATA( AS_ULONG(Ks_value)); \
LD_INPUT_FIFO_DATA( AS_ULONG(x_value)); \
LD_INPUT_FIFO_DATA( AS_ULONG(y_value)); \
LD_INPUT_FIFO_DATA( AS_ULONG(z_value)); \
}
// 2 Entries
#define SEND_VERTEX_FOG(vNo, fog_value) \
{ \
LD_INPUT_FIFO_DATA( vNo); \
LD_INPUT_FIFO_DATA(fog_value); \
}
// 4 Entries
#define SEND_VERTEX_RGB_MONO(vNo, Color) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_COLS_VTX | vNo)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
}
// 4 Entries
#define SEND_VERTEX_RGB(vNo, Color) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_COLS_VTX | vNo)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_RED(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_GREEN(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
}
// 2 Entries
#define SEND_VERTEX_RGBA_P2(vNo, Color) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_PACKED_COLS_VTX | vNo)); \
LD_INPUT_FIFO_DATA(Color); \
}
// 2 Entries
#define SEND_VERTEX_RGB_MONO_P2(vNo, Color) \
{ \
DWORD dwBlueVal = RGB_GET_GAMBIT_BLUE(Color); \
LD_INPUT_FIFO_DATA( (GAMBIT_PACKED_COLS_VTX | vNo)); \
LD_INPUT_FIFO_DATA( dwBlueVal | (dwBlueVal << 8) | (dwBlueVal << 16)); \
}
// 5 Entries
#define SEND_VERTEX_RGBA(vNo, Color) \
{ \
LD_INPUT_FIFO_DATA( (GAMBIT_COLS_ALPHA_VTX | vNo)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_RED(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_GREEN(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_BLUE(Color)); \
LD_INPUT_FIFO_DATA(RGB_GET_GAMBIT_ALPHA(Color)); \
}
//-----------------------------------------------------------------------------
// HW Alpha stippling macros
//-----------------------------------------------------------------------------
extern DWORD FlatStipplePatterns[128];
#define SET_STIPPLED_ALPHA(AlphaValue) \
{ \
DWORD* pStipple; \
DWORD NewAlpha = AlphaValue; \
if (NewAlpha != pContext->LastAlpha) \
{ \
pContext->LastAlpha = NewAlpha; \
pStipple = FlatStipplePatterns + (NewAlpha << 3); \
LD_INPUT_FIFO_DATA((0x00ff8000 | __Permedia2TagAreaStipplePattern0)); \
LD_INPUT_FIFO_DATA( pStipple[0]); \
LD_INPUT_FIFO_DATA( pStipple[1]); \
LD_INPUT_FIFO_DATA( pStipple[2]); \
LD_INPUT_FIFO_DATA( pStipple[3]); \
LD_INPUT_FIFO_DATA( pStipple[4]); \
LD_INPUT_FIFO_DATA( pStipple[5]); \
LD_INPUT_FIFO_DATA( pStipple[6]); \
LD_INPUT_FIFO_DATA( pStipple[7]); \
\
} \
RENDER_AREA_STIPPLE_ENABLE(ulRenderCmd); \
}
//-----------------------------------------------------------------------------
// Rendering command setup macros
//-----------------------------------------------------------------------------
#define RENDER_AREA_STIPPLE_ENABLE(a) a |= __RENDER_AREA_STIPPLE_ENABLE;
#define RENDER_AREA_STIPPLE_DISABLE(a) a &= ~__RENDER_AREA_STIPPLE_ENABLE;
#define RENDER_TEXTURE_ENABLE(a) a |= __RENDER_TEXTURE_ENABLE;
#define RENDER_TEXTURE_DISABLE(a) a &= ~__RENDER_TEXTURE_ENABLE;
#define RENDER_FOG_ENABLE(a) a |= (1 << 14);
#define RENDER_FOG_DISABLE(a) a &= ~(1 << 14);
#define RENDER_SUB_PIXEL_CORRECTION_ENABLE(a) a |= (1 << 16);
#define RENDER_SUB_PIXEL_CORRECTION_DISABLE(a) a &= ~(1 << 16);
#define RENDER_LINE(a) a &= ~(0xC0);
#define RENDER_TRAPEZOID(a) {a &= ~(0xC0); a |= (0x40);}
#define RENDER_POINT(a) {a &= ~(0xC0);a |= (0x80);}
#define RENDER_NEGATIVE_CULL(a) a |= (1 << 20);
#define RENDER_POSITIVE_CULL(a) a &= ~(1 << 20);