📄 savage_3d_reg.h
字号:
/* This reg exists only on Savage3D. */typedef union{ struct { unsigned scissorXStart : 11; unsigned reserved1 : 5; unsigned scissorYStart : 11; unsigned reserved2 : 5; } ni; u_int32_t ui;} savageRegScissorsStart;/* This reg exists only on Savage3D. */typedef union{ struct { unsigned scissorXEnd : 11; unsigned reserved1 : 5; unsigned scissorYEnd : 11; unsigned reserved2 : 5; } ni; u_int32_t ui;} savageRegScissorsEnd;/******************************** Address Registers**********************************//* I havn't found a Savage3D equivalent of this reg in the Utah-driver. * But Tim Roberts claims that the Savage3D supports DMA vertex and * command buffers. */typedef union{ struct { unsigned isSys : 1; unsigned isAGP : 1; unsigned reserved : 1; unsigned addr : 29; /*quad word aligned*/ }ni; u_int32_t ui;} savageRegVertBufAddr;/* I havn't found a Savage3D equivalent of this reg in the Utah-driver. * But Tim Roberts claims that the Savage3D supports DMA vertex and * command buffers. */typedef union{ struct { unsigned isSys : 1; unsigned isAGP : 1; unsigned reserved : 1; unsigned addr : 29; /*4-quad word aligned*/ }ni; u_int32_t ui;} savageRegDMABufAddr;/******************************** H/W Debug Registers**********************************//* The layout of this reg is the same on Savage4 and Savage3D. */typedef union{ struct { unsigned y01 : 1; unsigned y12 : 1; unsigned y20 : 1; unsigned u01 : 1; unsigned u12 : 1; unsigned u20 : 1; unsigned v01 : 1; unsigned v12 : 1; unsigned v20 : 1; unsigned cullEn : 1; unsigned cullOrient : 1; unsigned loadNewTex : 1; unsigned loadNewPal : 1; unsigned doDSetup : 1; unsigned reserved : 17; unsigned kickOff : 1; }ni; u_int32_t ui;} savageRegFlag;/******************************** Z Buffer Registers -- Global**********************************//* The layout of this reg differs between Savage4 and Savage3D. */typedef union{ struct { unsigned zCmpFunc : 3; unsigned reserved1 : 2; unsigned zBufEn : 1; unsigned reserved2 : 1; unsigned zExpOffset : 8; unsigned reserved3 : 1; unsigned stencilRefVal : 8; unsigned autoZEnable : 1; unsigned frameID : 1; unsigned reserved4 : 4; unsigned floatZEn : 1; unsigned wToZEn : 1; }ni; u_int32_t ui;} savageRegZBufCtrl_s4;typedef union{ struct { unsigned zCmpFunc : 3; unsigned drawUpdateEn : 1; unsigned zUpdateEn : 1; unsigned zBufEn : 1; /** * We suspect that, in conjunction with * \c savageRegZBufOffset::zDepthSelect, these 2 bits are actually * \c stencilUpdateEn and \c stencilBufEn. If not, then some of * the bits in \c reserved2 may fulfill that purpose. */ unsigned reserved1 : 2; unsigned zExpOffset : 8; unsigned wrZafterAlphaTst : 1; unsigned reserved2 : 15; }ni; u_int32_t ui;} savageRegZBufCtrl_s3d;/* The layout of this reg on Savage4 and Savage3D is very similar. */typedef union{ struct { /* In the Utah-Driver the offset is defined as 13-bit, 2k-aligned. */ unsigned offset : 14; unsigned reserved : 11; /* 12-bits in Utah-driver */ unsigned zBufWidthInTiles : 6; /** * 0 selects 16-bit depth buffer. On Savage4 hardware, 1 selects * 24-bit depth buffer (with 8-bits for stencil). Though it has never * been tried, we suspect that on Savage3D hardware, 1 selects 15-bit * depth buffer (with 1-bit for stencil). */ unsigned zDepthSelect : 1; }ni; u_int32_t ui;} savageRegZBufOffset;/* The layout of this reg is the same on Savage4 and Savage3D. */typedef union{ struct { unsigned rLow : 6; unsigned reserved1 : 2; unsigned rHigh : 6; unsigned reserved2 : 2; unsigned wLow : 6; unsigned reserved3 : 2; unsigned wHigh : 6; unsigned reserved4 : 2; }ni; u_int32_t ui;} savageRegZWatermarks;/******************************** Fog Registers -- Global**********************************//* The layout of this reg is the same on Savage4 and Savage3D. */typedef union{ struct { unsigned fogClr : 24; unsigned expShift : 3; unsigned reserved : 1; unsigned fogEn : 1; unsigned fogMode : 1; unsigned fogEndShift : 2; }ni; u_int32_t ui;} savageRegFogCtrl;/*not in spec, but tempo for pp and driver*/typedef union{ struct { unsigned fogDensity : 16; unsigned fogStart : 16; }ni; u_int32_t ui;} savageRegFogParam;/************************************** Destination Buffer Registers -- Global***************************************//* The layout of this reg on Savage4 and Savage3D are very similar. */typedef union{ struct { unsigned dstWidthInTile : 7; unsigned reserved : 1; /* In the Utah-Driver the offset is defined as 13-bit, 2k-aligned. */ unsigned offset : 14; unsigned reserved1 : 7; /* antiAliasMode does not exist in the Utah-driver. But it includes the * high bit of this in the destPixFmt. However, only values 0 and 2 * are used as dstPixFmt, so antiAliasMode is effectively always 0 * in the Utah-driver. In other words, treat as reserved on Savage3D.*/ unsigned antiAliasMode : 2; unsigned dstPixFmt : 1; }ni; u_int32_t ui;} savageRegDestCtrl;/* The layout of this reg on Savage4 and Savage3D are very similar. */typedef union{ struct { unsigned destReadLow : 6; unsigned destReadHigh : 6; unsigned destWriteLow : 6; unsigned destWriteHigh : 6; unsigned texRead : 4; unsigned reserved4 : 2; /* The Utah-driver calls this pixel FIFO length: * 00 - 240, 01 - 180, 10 - 120, 11 - 60 * However, it is not used in either driver. */ unsigned destFlush : 2; }ni; u_int32_t ui;} savageRegDestTexWatermarks;/* Savage4/Twister/ProSavage register BCI addresses */#define SAVAGE_DRAWLOCALCTRL_S4 0x1e#define SAVAGE_TEXPALADDR_S4 0x1f#define SAVAGE_TEXCTRL0_S4 0x20#define SAVAGE_TEXCTRL1_S4 0x21#define SAVAGE_TEXADDR0_S4 0x22#define SAVAGE_TEXADDR1_S4 0x23#define SAVAGE_TEXBLEND0_S4 0x24#define SAVAGE_TEXBLEND1_S4 0x25#define SAVAGE_TEXXPRCLR_S4 0x26 /* never used */#define SAVAGE_TEXDESCR_S4 0x27#define SAVAGE_FOGTABLE_S4 0x28#define SAVAGE_FOGCTRL_S4 0x30#define SAVAGE_STENCILCTRL_S4 0x31#define SAVAGE_ZBUFCTRL_S4 0x32#define SAVAGE_ZBUFOFF_S4 0x33#define SAVAGE_DESTCTRL_S4 0x34#define SAVAGE_DRAWCTRLGLOBAL0_S4 0x35#define SAVAGE_DRAWCTRLGLOBAL1_S4 0x36#define SAVAGE_ZWATERMARK_S4 0x37#define SAVAGE_DESTTEXRWWATERMARK_S4 0x38#define SAVAGE_TEXBLENDCOLOR_S4 0x39/* Savage3D/MX/IC register BCI addresses */#define SAVAGE_TEXPALADDR_S3D 0x18#define SAVAGE_TEXXPRCLR_S3D 0x19 /* never used */#define SAVAGE_TEXADDR_S3D 0x1A#define SAVAGE_TEXDESCR_S3D 0x1B#define SAVAGE_TEXCTRL_S3D 0x1C#define SAVAGE_FOGTABLE_S3D 0x20#define SAVAGE_FOGCTRL_S3D 0x30#define SAVAGE_DRAWCTRL_S3D 0x31#define SAVAGE_ZBUFCTRL_S3D 0x32#define SAVAGE_ZBUFOFF_S3D 0x33#define SAVAGE_DESTCTRL_S3D 0x34#define SAVAGE_SCSTART_S3D 0x35#define SAVAGE_SCEND_S3D 0x36#define SAVAGE_ZWATERMARK_S3D 0x37 #define SAVAGE_DESTTEXRWWATERMARK_S3D 0x38#define SAVAGE_FIRST_REG 0x18#define SAVAGE_NR_REGS 34typedef struct savage_registers_s4_t { u_int32_t unused1[6]; /* 0x18-0x1d */ savageRegDrawLocalCtrl drawLocalCtrl; /* 0x1e */ savageRegTexPalAddr texPalAddr; /* 0x1f */ savageRegTexCtrl_s4 texCtrl[2]; /* 0x20, 0x21 */ savageRegTexAddr texAddr[2]; /* 0x22, 0x23 */ savageRegTexBlendCtrl texBlendCtrl[2]; /* 0x24, 0x25 */ savageRegTexXprClr texXprClr; /* 0x26 */ savageRegTexDescr_s4 texDescr; /* 0x27 */ u_int8_t fogTable[32]; /* 0x28-0x2f (8dwords) */ savageRegFogCtrl fogCtrl; /* 0x30 */ savageRegStencilCtrl stencilCtrl; /* 0x31 */ savageRegZBufCtrl_s4 zBufCtrl; /* 0x32 */ savageRegZBufOffset zBufOffset; /* 0x33 */ savageRegDestCtrl destCtrl; /* 0x34 */ savageRegDrawCtrl0 drawCtrl0; /* 0x35 */ savageRegDrawCtrl1 drawCtrl1; /* 0x36 */ savageRegZWatermarks zWatermarks; /* 0x37 */ savageRegDestTexWatermarks destTexWatermarks; /* 0x38 */ savageRegTexBlendColor texBlendColor; /* 0x39 */} savageRegistersS4;typedef struct savage_registers_s3d_t { savageRegTexPalAddr texPalAddr; /* 0x18 */ savageRegTexXprClr texXprClr; /* 0x19 */ savageRegTexAddr texAddr; /* 0x1a */ savageRegTexDescr_s3d texDescr; /* 0x1b */ savageRegTexCtrl_s3d texCtrl; /* 0x1c */ u_int32_t unused1[3]; /* 0x1d-0x1f */ u_int8_t fogTable[64]; /* 0x20-0x2f (16dwords) */ savageRegFogCtrl fogCtrl; /* 0x30 */ savageRegDrawCtrl drawCtrl; /* 0x31 */ savageRegZBufCtrl_s3d zBufCtrl; /* 0x32 */ savageRegZBufOffset zBufOffset; /* 0x33 */ savageRegDestCtrl destCtrl; /* 0x34 */ savageRegScissorsStart scissorsStart; /* 0x35 */ savageRegScissorsEnd scissorsEnd; /* 0x36 */ savageRegZWatermarks zWatermarks; /* 0x37 */ savageRegDestTexWatermarks destTexWatermarks; /* 0x38 */ u_int32_t unused2; /* 0x39 */} savageRegistersS3D;typedef union savage_registers_t { savageRegistersS4 s4; savageRegistersS3D s3d; u_int32_t ui[SAVAGE_NR_REGS];} savageRegisters;#define DV_PF_555 (0x1<<8)#define DV_PF_565 (0x2<<8)#define DV_PF_8888 (0x4<<8)#define SAVAGEPACKCOLORA4L4(l,a) \ ((l >> 4) | (a & 0xf0))#define SAVAGEPACKCOLOR4444(r,g,b,a) \ ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4))#define SAVAGEPACKCOLOR1555(r,g,b,a) \ ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \ ((a) ? 0x8000 : 0))#define SAVAGEPACKCOLOR8888(r,g,b,a) \ (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))#define SAVAGEPACKCOLOR565(r,g,b) \ ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -