/* ** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY ** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT ** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX ** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE ** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com). ** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER ** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A ** FULL TEXT OF THE NON-WARRANTY PROVISIONS. ** ** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO ** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN ** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013, ** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR ** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF ** THE UNITED STATES. ** ** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED ** ** $Revision: 1.1.1.1.2.1 $ ** $Date: 2000/08/30 08:47:03 $ */ #ifndef __H3DEFS_H__ #define __H3DEFS_H__ #if defined(H4) #define MAX_NUM_TMUS 2 #else #define MAX_NUM_TMUS 1 #endif // SST commands #define SST_NOPCMD 1 #define SST_TRIANGLECMD 2 #define SST_FASTFILLCMD 3 #define SST_SWAPBUFCMD 4 #define SST_SBEGINTRICMD 5 #define SST_SDRAWTRICMD 6 #define SST_USERINTRCMD 7 // this crazy macro fixes the binary point within a floating point // number so that it has 'fracbits' to the right of the binary point // it also adds a '1' bit to the MSB so that slightly negative numbers // end up looking like twos complement numbers (they carry out from the '1') #define FLOAT_FIX(f,fracbits) ((f)+(float)(3L<<(22-(fracbits)))) #define SST_FLOAT(f,scale,shift) (unsigned long)((f)*((scale)*(float)(1L<= 0; -1 if < 0) #if defined(__LP64__) #define ISIGN(x) ((x) >= 0 ? 1 : -1) #define FSIGN(f) ((f) >= 0.0 ? 1 : -1) #else #define ISIGN(x) (((x) | 0x40000000L) >> 30) #define FSIGN(f) ISIGN(*(long *)&f) #endif #define BIT(n) (1UL<<(n)) #define SST_MASK(n) (0xFFFFFFFFL >> (32-(n))) #define SST_MASK64(n) FX_MASK64(n) //----------------- SST binary point locations --------------- #define SST_LOD_SIZE 6 #define SST_LOD_FRACBITS 2 #define SST_XY_SIZE 16 #define SST_XY_INTBITS 12 #define SST_XY_FRACBITS 4 #define SST_RGBA_SIZE 24 #define SST_RGBA_INTBITS 8 #define SST_RGBA_FRACBITS 12 #define SST_Z_SIZE 32 #define SST_Z_INTBITS 16 #define SST_Z_FRACBITS 12 // NOTE: below are ONLY for the fixed point registers #define SST_ST_SIZE 32 #define SST_ST_INTBITS 14 #define SST_ST_FRACBITS 18 #define SST_W_SIZE 32 #define SST_W_INTBITS 2 #define SST_W_FRACBITS 30 //----------------- SST status bits --------------------------- #define SST_FIFOLEVEL 0x3F #define SST_PCIFIFO_FREE 0x1F #define SST_PCIFIFO_BUSY BIT(5) #define SST_VRETRACE BIT(6) #define SST_FBI_BUSY BIT(7) #define SST_TMU_BUSY BIT(8) #define SST_TREX_BUSY SST_TMU_BUSY #define SST_BUSY BIT(9) #define SST_GUI_BUSY BIT(10) #define SST_CMD0_BUSY BIT(11) #define SST_CMD1_BUSY BIT(12) #define SST_SWAPBUFPENDING_SHIFT 28 #define SST_SWAPBUFPENDING (0x7L<= SST_IO_OFFSET && (a) < SST_CMDAGP_OFFSET ) #define SST_IS_CMDAGP_ADDR(a) ( (a) >= SST_CMDAGP_OFFSET && (a) < SST_2D_OFFSET ) #define SST_IS_2D_ADDR(a) ( (a) >= SST_2D_OFFSET && (a) < SST_3D_OFFSET ) #define SST_IS_3D_ADDR(a) ( (a) >= SST_3D_OFFSET && (a) < SST_3D_ALT_OFFSET ) #define SST_IS_3D_ALT_ADDR(a) ( (a) >= SST_3D_ALT_OFFSET && (a) < SST_TEX_OFFSET ) #ifdef H4 #define SST_IS_TEX_ADDR(a) ( (a) >= SST_TEX0_OFFSET && (a) < SST_RESERVED_OFFSET ) #define SST_IS_TEX0_ADDR(a) ( (a) >= SST_TEX0_OFFSET && (a) < SST_TEX1_OFFSET ) #define SST_IS_TEX1_ADDR(a) ( (a) >= SST_TEX1_OFFSET && (a) < SST_RESERVED_OFFSET ) #else #define SST_IS_TEX_ADDR(a) ( (a) >= SST_TEX_OFFSET && (a) < SST_RESERVED_OFFSET ) #endif #define SST_IS_RESERVED_ADDR(a) ( (a) >= SST_RESERVED_OFFSET && (a) < SST_YUV_OFFSET ) #define SST_IS_YUV_ADDR(a) ( (a) >= SST_YUV_OFFSET && (a) < SST_LFB_OFFSET ) #define SST_IS_LFB_ADDR(a) ( (a) >= SST_LFB_OFFSET && (a) < SST_RAW_LFB_OFFSET ) #define SST_IS_RAW_LFB_ADDR(a) ( (a) >= SST_RAW_LFB_OFFSET && (a) < SST_MAX_LEGAL_OFFSET ) #define SST_IS_REGISTER_ADDR(a) ( (a) >= SST_IO_OFFSET && (a) < SST_TEX_OFFSET ) #define SST_BASE_ADDRESS(sst) ((AnyPtr)(sst)-SST_3D_OFFSET) #define SST_IO_ADDRESS(sst) (SST_IO_OFFSET+SST_BASE_ADDRESS(sst)) #define SST_CMDAGP_ADDRESS(sst) (SST_CMDAGP_OFFSET+SST_BASE_ADDRESS(sst)) #define SST_GUI_ADDRESS(sst) (SST_2D_OFFSET+SST_BASE_ADDRESS(sst)) #ifdef H4 #define SST_TEX_ADDRESS(sst) (SST_TEX0_OFFSET+SST_BASE_ADDRESS(sst)) #define SST_TEX0_ADDRESS(sst) (SST_TEX0_OFFSET+SST_BASE_ADDRESS(sst)) #define SST_TEX1_ADDRESS(sst) (SST_TEX1_OFFSET+SST_BASE_ADDRESS(sst)) #else #define SST_TEX_ADDRESS(sst) (SST_TEX_OFFSET+SST_BASE_ADDRESS(sst)) #endif #define SST_LFB_ADDRESS(sst) (SST_LFB_OFFSET+SST_BASE_ADDRESS(sst)) #define SST_YUV_ADDRESS(sst) (SST_YUV_OFFSET+SST_BASE_ADDRESS(sst)) #define SST_PORT_ADDRESS(sst) (SST_FAKE_PORT_MAKE(SST_FAKE_ADDRESS_GET_BOARD(sst))) #define SST_IS_MOVECMD(iaddr) (iaddr >= (SST_CMDAGP_OFFSET + AGPREQSIZE) && iaddr <= (SST_CMDAGP_OFFSET + MOVECMD)) // SET macros for FBI #define SET_FBI(d,s) SET (*(&(d)+0x100),s) #define SET_FBIF(d,s) SETF(*(&(d)+0x100),s) // SET macros for TMU0 #define SET_0(d,s) SET (*(&(d)+0x200),s) #define SET_0F(d,s) SETF(*(&(d)+0x200),s) // SET macros for FBI+TMU0 #define SET_FBI_0(d,s) SET (*(&(d)+0x300),s) #define SET_FBI_0F(d,s) SETF(*(&(d)+0x300),s) // SET macros for TMU1 #define SET_1(d,s) SET (*(&(d)+0x400),s) #define SET_1F(d,s) SETF(*(&(d)+0x400),s) // SET macros for FBI+TMU1 #define SET_FBI_1(d,s) SET (*(&(d)+0x500),s) #define SET_FBI_1F(d,s) SETF(*(&(d)+0x500),s) #endif /* !__H3DEFS_H__ */