📄 fxdrv.h
字号:
/* * Mesa 3-D graphics library * Version: 4.0 * * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *//* Authors: * David Bucciarelli * Brian Paul * Daryll Strauss * Keith Whitwell * Daniel Borca * Hiroshi Morii *//* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */#ifndef FXDRV_H#define FXDRV_H/* If you comment out this define, a variable takes its place, letting * you turn debugging on/off from the debugger. */#include "glheader.h"#if defined(__linux__)#include <signal.h>#endif#include "context.h"#include "imports.h"#include "macros.h"#include "matrix.h"#include "mtypes.h"#include "GL/fxmesa.h"#include "fxglidew.h"#include "math/m_vector.h"#define COPY_FLOAT(dst, src) (dst) = (src)/* Define some shorter names for these things. */#define XCOORD GR_VERTEX_X_OFFSET#define YCOORD GR_VERTEX_Y_OFFSET#define ZCOORD GR_VERTEX_OOZ_OFFSET#define OOWCOORD GR_VERTEX_OOW_OFFSET#define S0COORD GR_VERTEX_SOW_TMU0_OFFSET#define T0COORD GR_VERTEX_TOW_TMU0_OFFSET#define S1COORD GR_VERTEX_SOW_TMU1_OFFSET#define T1COORD GR_VERTEX_TOW_TMU1_OFFSET#ifdef __i386__#define FXCOLOR4( c ) (* (int *)c)#else#define FXCOLOR4( c ) ( \ ( ((unsigned int)(c[3]))<<24 ) | \ ( ((unsigned int)(c[2]))<<16 ) | \ ( ((unsigned int)(c[1]))<<8 ) | \ ( (unsigned int)(c[0])) )#endif#define TDFXPACKCOLOR1555( r, g, b, a ) \ ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \ ((a) ? 0x8000 : 0))#define TDFXPACKCOLOR565( r, g, b ) \ ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))#define TDFXPACKCOLOR8888( r, g, b, a ) \ (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))/* fastpath flags first */#define SETUP_TMU0 0x1#define SETUP_TMU1 0x2#define SETUP_RGBA 0x4#define SETUP_SNAP 0x8#define SETUP_XYZW 0x10#define SETUP_PTEX 0x20#define SETUP_PSIZ 0x40#define SETUP_SPEC 0x80#define SETUP_FOGC 0x100#define MAX_SETUP 0x200#define FX_NUM_TMU 2#define FX_TMU0 GR_TMU0#define FX_TMU1 GR_TMU1#define FX_TMU_SPLIT 98#define FX_TMU_BOTH 99#define FX_TMU_NONE 100/* Used for fxMesa->lastUnitsMode */#define FX_UM_NONE 0x00000000#define FX_UM_E0_REPLACE 0x00000001#define FX_UM_E0_MODULATE 0x00000002#define FX_UM_E0_DECAL 0x00000004#define FX_UM_E0_BLEND 0x00000008#define FX_UM_E0_ADD 0x00000010#define FX_UM_E1_REPLACE 0x00000020#define FX_UM_E1_MODULATE 0x00000040#define FX_UM_E1_DECAL 0x00000080#define FX_UM_E1_BLEND 0x00000100#define FX_UM_E1_ADD 0x00000200#define FX_UM_E_ENVMODE 0x000003ff#define FX_UM_E0_ALPHA 0x00001000#define FX_UM_E0_LUMINANCE 0x00002000#define FX_UM_E0_LUMINANCE_ALPHA 0x00004000#define FX_UM_E0_INTENSITY 0x00008000#define FX_UM_E0_RGB 0x00010000#define FX_UM_E0_RGBA 0x00020000#define FX_UM_E1_ALPHA 0x00040000#define FX_UM_E1_LUMINANCE 0x00080000#define FX_UM_E1_LUMINANCE_ALPHA 0x00100000#define FX_UM_E1_INTENSITY 0x00200000#define FX_UM_E1_RGB 0x00400000#define FX_UM_E1_RGBA 0x00800000#define FX_UM_E_IFMT 0x00fff000#define FX_UM_COLOR_ITERATED 0x01000000#define FX_UM_COLOR_CONSTANT 0x02000000#define FX_UM_ALPHA_ITERATED 0x04000000#define FX_UM_ALPHA_CONSTANT 0x08000000/* for Voodoo3/Banshee's grColorCombine() and grAlphaCombine() */struct tdfx_combine { GrCombineFunction_t Function; /* Combine function */ GrCombineFactor_t Factor; /* Combine scale factor */ GrCombineLocal_t Local; /* Local combine source */ GrCombineOther_t Other; /* Other combine source */ FxBool Invert; /* Combine result inversion flag */};/* for Voodoo3's grTexCombine() */struct tdfx_texcombine { GrCombineFunction_t FunctionRGB; GrCombineFactor_t FactorRGB; GrCombineFunction_t FunctionAlpha; GrCombineFactor_t FactorAlpha; FxBool InvertRGB; FxBool InvertAlpha;};/* for Voodoo5's grColorCombineExt() */struct tdfx_combine_color_ext { GrCCUColor_t SourceA; GrCombineMode_t ModeA; GrCCUColor_t SourceB; GrCombineMode_t ModeB; GrCCUColor_t SourceC; FxBool InvertC; GrCCUColor_t SourceD; FxBool InvertD; FxU32 Shift; FxBool Invert;};/* for Voodoo5's grAlphaCombineExt() */struct tdfx_combine_alpha_ext { GrACUColor_t SourceA; GrCombineMode_t ModeA; GrACUColor_t SourceB; GrCombineMode_t ModeB; GrACUColor_t SourceC; FxBool InvertC; GrACUColor_t SourceD; FxBool InvertD; FxU32 Shift; FxBool Invert;};/* for Voodoo5's grTexColorCombineExt() */struct tdfx_color_texenv { GrTCCUColor_t SourceA; GrCombineMode_t ModeA; GrTCCUColor_t SourceB; GrCombineMode_t ModeB; GrTCCUColor_t SourceC; FxBool InvertC; GrTCCUColor_t SourceD; FxBool InvertD; FxU32 Shift; FxBool Invert;};/* for Voodoo5's grTexAlphaCombineExt() */struct tdfx_alpha_texenv { GrTACUColor_t SourceA; GrCombineMode_t ModeA; GrTACUColor_t SourceB; GrCombineMode_t ModeB; GrTACUColor_t SourceC; FxBool InvertC; GrTCCUColor_t SourceD; FxBool InvertD; FxU32 Shift; FxBool Invert;};/* Voodoo5's texture combine environment */struct tdfx_texcombine_ext { struct tdfx_alpha_texenv Alpha; struct tdfx_color_texenv Color; GrColor_t EnvColor;};/* Memory range from startAddr to endAddr-1*/typedef struct MemRange_t{ struct MemRange_t *next; FxU32 startAddr, endAddr;}MemRange;typedef struct{ GLsizei width, height; /* image size */ GLint wScale, hScale; /* image scale factor */ GrTextureFormat_t glideFormat; /* Glide image format */}tfxMipMapLevel;/* * TDFX-specific texture object data. This hangs off of the * struct gl_texture_object DriverData pointer. */typedef struct tfxTexInfo_t{ struct tfxTexInfo_t *next; struct gl_texture_object *tObj; GLuint lastTimeUsed; FxU32 whichTMU; GLboolean isInTM; MemRange *tm[FX_NUM_TMU]; GLint minLevel, maxLevel; GLint baseLevelInternalFormat; GrTexInfo info; GrTextureFilterMode_t minFilt; GrTextureFilterMode_t maxFilt; FxBool LODblend; GrTextureClampMode_t sClamp; GrTextureClampMode_t tClamp; GrMipMapMode_t mmMode; GLfloat sScale, tScale; GrTexTable_t paltype; GuTexPalette palette; GLboolean fixedPalette; GLboolean validated; GLboolean padded;}tfxTexInfo;typedef struct{ GLuint swapBuffer; GLuint reqTexUpload; GLuint texUpload; GLuint memTexUpload;}tfxStats;typedef struct{ /* Alpha test */ GLboolean alphaTestEnabled; GrCmpFnc_t alphaTestFunc; GLfloat alphaTestRefValue; /* Blend function */ GLboolean blendEnabled; GrAlphaBlendFnc_t blendSrcFuncRGB; GrAlphaBlendFnc_t blendDstFuncRGB; GrAlphaBlendFnc_t blendSrcFuncAlpha; GrAlphaBlendFnc_t blendDstFuncAlpha; GrAlphaBlendOp_t blendEqRGB; GrAlphaBlendOp_t blendEqAlpha; /* Depth test */ GLboolean depthTestEnabled; GLboolean depthMask; GrCmpFnc_t depthTestFunc; FxI32 depthBias; /* Stencil */ GLboolean stencilEnabled; GrCmpFnc_t stencilFunction; /* Stencil function */ GrStencil_t stencilRefValue; /* Stencil reference value */ GrStencil_t stencilValueMask; /* Value mask */ GrStencil_t stencilWriteMask; /* Write mask */ GrCmpFnc_t stencilFailFunc; /* Stencil fail function */ GrCmpFnc_t stencilZFailFunc; /* Stencil pass, depth fail function */ GrCmpFnc_t stencilZPassFunc; /* Stencil pass, depth pass function */ GrStencil_t stencilClear; /* Buffer clear value */}tfxUnitsState;/* Flags for fxMesa->new_state */#define FX_NEW_TEXTURING 0x1#define FX_NEW_BLEND 0x2#define FX_NEW_ALPHA 0x4#define FX_NEW_DEPTH 0x8#define FX_NEW_FOG 0x10#define FX_NEW_SCISSOR 0x20#define FX_NEW_COLOR_MASK 0x40#define FX_NEW_CULL 0x80#define FX_NEW_STENCIL 0x100#define FX_CONTEXT(ctx) ((fxMesaContext)((ctx)->DriverCtx))#define FX_TEXTURE_DATA(texUnit) fxTMGetTexInfo((texUnit)->_Current)#define fxTMGetTexInfo(o) ((tfxTexInfo*)((o)->DriverData))#define FX_MIPMAP_DATA(img) ((tfxMipMapLevel *) (img)->DriverData)#define BEGIN_BOARD_LOCK()#define END_BOARD_LOCK()#define BEGIN_CLIP_LOOP()#define END_CLIP_LOOP()/* Covers the state referenced by IsInHardware: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -