aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.h
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.h')
-rw-r--r--nx-X11/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.h1007
1 files changed, 0 insertions, 1007 deletions
diff --git a/nx-X11/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.h b/nx-X11/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.h
deleted file mode 100644
index b8349fec7..000000000
--- a/nx-X11/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.h
+++ /dev/null
@@ -1,1007 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*-
- *
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- *
- * 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 (including the next
- * paragraph) 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
- * VA LINUX SYSTEMS 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.
- */
-/* $XFree86: xc/lib/GL/mesa/src/drv/tdfx/tdfx_context.h,v 1.5 2002/02/24 21:51:10 dawes Exp $ */
-
-/*
- * New fixes:
- * Daniel Borca <dborca@users.sourceforge.net>, 19 Jul 2004
- *
- * Original rewrite:
- * Gareth Hughes <gareth@valinux.com>, 29 Sep - 1 Oct 2000
- *
- * Authors:
- * Gareth Hughes <gareth@valinux.com>
- *
- */
-
-#ifndef __TDFX_CONTEXT_H__
-#define __TDFX_CONTEXT_H__
-
-#include <sys/time.h>
-#include "dri_util.h"
-#ifdef XFree86Server
-#include "GL/xf86glx.h"
-#else
-#include "glheader.h"
-#endif
-#if defined(__linux__)
-#include <signal.h>
-#endif
-
-#include "drm.h"
-#include "drm_sarea.h"
-#include "tdfx_glide.h"
-#include "xmlconfig.h"
-
-#include "clip.h"
-#include "context.h"
-#include "macros.h"
-#include "matrix.h"
-#include "imports.h"
-#include "mtypes.h"
-
-#include "tdfx_screen.h"
-
-
-
-
-#define TDFX_TMU0 GR_TMU0
-#define TDFX_TMU1 GR_TMU1
-#define TDFX_TMU_SPLIT 98
-#define TDFX_TMU_BOTH 99
-#define TDFX_TMU_NONE 100
-
-
-
-/* Flags for fxMesa->new_state
- */
-#define TDFX_NEW_COLOR 0x0001
-#define TDFX_NEW_ALPHA 0x0002
-#define TDFX_NEW_DEPTH 0x0004
-#define TDFX_NEW_FOG 0x0008
-#define TDFX_NEW_STENCIL 0x0010
-#define TDFX_NEW_CLIP 0x0020
-#define TDFX_NEW_VIEWPORT 0x0040
-#define TDFX_NEW_CULL 0x0080
-#define TDFX_NEW_GLIDE 0x0100
-#define TDFX_NEW_TEXTURE 0x0200
-#define TDFX_NEW_CONTEXT 0x0400
-#define TDFX_NEW_LINE 0x0800
-#define TDFX_NEW_RENDER 0x1000
-#define TDFX_NEW_STIPPLE 0x2000
-#define TDFX_NEW_TEXTURE_BIND 0x4000 /* experimental */
-
-
-/* Flags for fxMesa->dirty
- */
-#define TDFX_UPLOAD_COLOR_COMBINE 0x00000001
-#define TDFX_UPLOAD_ALPHA_COMBINE 0x00000002
-#define TDFX_UPLOAD_RENDER_BUFFER 0x00000004
-#define TDFX_UPLOAD_ALPHA_TEST 0x00000008
-#define TDFX_UPLOAD_ALPHA_REF 0x00000010
-#define TDFX_UPLOAD_BLEND_FUNC 0x00000020
-#define TDFX_UPLOAD_DEPTH_MODE 0x00000040
-#define TDFX_UPLOAD_DEPTH_BIAS 0x00000080
-#define TDFX_UPLOAD_DEPTH_FUNC 0x00000100
-#define TDFX_UPLOAD_DEPTH_MASK 0x00000200
-#define TDFX_UPLOAD_FOG_MODE 0x00000400
-#define TDFX_UPLOAD_FOG_COLOR 0x00000800
-#define TDFX_UPLOAD_FOG_TABLE 0x00001000
-#define TDFX_UPLOAD_CONSTANT_COLOR 0x00002000
-
-#define TDFX_UPLOAD_CLIP 0x00002000
-#define TDFX_UPLOAD_CULL 0x00004000
-#define TDFX_UPLOAD_VERTEX_LAYOUT 0x00008000
-#define TDFX_UPLOAD_COLOR_MASK 0x00010000
-#define TDFX_UPLOAD_DITHER 0x00040000
-#define TDFX_UPLOAD_STENCIL 0x00080000
-
-#define TDFX_UPLOAD_TEXTURE_SOURCE 0x00100000
-#define TDFX_UPLOAD_TEXTURE_PARAMS 0x00200000
-#define TDFX_UPLOAD_TEXTURE_PALETTE 0x00400000
-#define TDFX_UPLOAD_TEXTURE_ENV 0x00800000
-#define TDFX_UPLOAD_TEXTURE_IMAGES 0x01000000
-
-#define TDFX_UPLOAD_LINE 0x02000000
-
-#define TDFX_UPLOAD_STIPPLE 0x04000000
-
-/* Flags for software fallback cases */
-/* See correponding strings in tdfx_tris.c */
-#define TDFX_FALLBACK_TEXTURE_MAP 0x0001
-#define TDFX_FALLBACK_DRAW_BUFFER 0x0002
-#define TDFX_FALLBACK_SPECULAR 0x0004
-#define TDFX_FALLBACK_STENCIL 0x0008
-#define TDFX_FALLBACK_RENDER_MODE 0x0010
-#define TDFX_FALLBACK_LOGICOP 0x0020
-#define TDFX_FALLBACK_TEXTURE_ENV 0x0040
-#define TDFX_FALLBACK_TEXTURE_BORDER 0x0080
-#define TDFX_FALLBACK_COLORMASK 0x0100
-#define TDFX_FALLBACK_BLEND 0x0200
-#define TDFX_FALLBACK_LINE_STIPPLE 0x0400
-#define TDFX_FALLBACK_DISABLE 0x0800
-
-/* Different Glide vertex layouts
- */
-#define TDFX_LAYOUT_TINY 0
-#define TDFX_LAYOUT_NOTEX 1
-#define TDFX_LAYOUT_SINGLE 2
-#define TDFX_LAYOUT_MULTI 3
-#define TDFX_LAYOUT_PROJ1 4
-#define TDFX_LAYOUT_PROJ2 5
-#define TDFX_NUM_LAYOUTS 6
-
-#define TDFX_XY_OFFSET 0
-#define TDFX_Z_OFFSET 8
-#define TDFX_Q_OFFSET 12
-#define TDFX_ARGB_OFFSET 16
-#define TDFX_FOG_OFFSET 20
-#define TDFX_ST0_OFFSET 24
-#define TDFX_ST1_OFFSET 32
-#define TDFX_Q0_OFFSET 40
-#define TDFX_Q1_OFFSET 44
-
-
-/* Flags for buffer clears
- */
-#define TDFX_FRONT 0x1
-#define TDFX_BACK 0x2
-#define TDFX_DEPTH 0x4
-#define TDFX_STENCIL 0x8
-
-/*
- * Subpixel offsets to adjust Mesa's (true) window coordinates to
- * Glide coordinates. We need these to ensure precise rasterization.
- * Otherwise, we'll fail a bunch of conformance tests.
- */
-#define TRI_X_OFFSET ( 0.0F)
-#define TRI_Y_OFFSET ( 0.0F)
-#define LINE_X_OFFSET ( 0.0F)
-#define LINE_Y_OFFSET ( 0.125F)
-#define PNT_X_OFFSET ( 0.375F)
-#define PNT_Y_OFFSET ( 0.375F)
-
-
-#define TDFX_DEPTH_BIAS_SCALE 128
-
-/* Including xf86PciInfo.h causes a bunch of errors
- */
-#ifndef PCI_CHIP_BANSHEE
-#define PCI_CHIP_BANSHEE 0x0003
-#define PCI_CHIP_VOODOO3 0x0005
-#define PCI_CHIP_VOODOO4 0x0009
-#define PCI_CHIP_VOODOO5 0x0009
-#endif
-
-#define TDFX_IS_BANSHEE( fxMesa ) \
- ( fxMesa->fxScreen->deviceID == PCI_CHIP_BANSHEE )
-#define TDFX_IS_VOODOO3( fxMesa ) \
- ( fxMesa->fxScreen->deviceID == PCI_CHIP_VOODOO3 )
-#define TDFX_IS_VOODOO4( fxMesa ) \
- ( fxMesa->fxScreen->deviceID == PCI_CHIP_VOODOO4 )
-#define TDFX_IS_VOODOO5( fxMesa ) \
- ( fxMesa->fxScreen->deviceID == PCI_CHIP_VOODOO5 )
-#define TDFX_IS_NAPALM( fxMesa ) \
- ( (fxMesa->fxScreen->deviceID == PCI_CHIP_VOODOO4) || \
- (fxMesa->fxScreen->deviceID == PCI_CHIP_VOODOO5) )
-
-
-#define PACK_BGRA32(R, G, B, A) \
- ( (((GLuint) (R)) << 16) | \
- (((GLuint) (G)) << 8) | \
- (((GLuint) (B)) ) | \
- (((GLuint) (A)) << 24) )
-
-#define PACK_RGBA32(R, G, B, A) \
- ( (((GLuint) (R)) ) | \
- (((GLuint) (G)) << 8) | \
- (((GLuint) (B)) << 16) | \
- (((GLuint) (A)) << 24) )
-
-/*
- * The first two macros are to pack 8 bit color
- * channel values into a 565 format.
- */
-#define PACK_RGB16(R, G, B) \
- ((((GLuint) (R) & 0xF8) << 8) | \
- (((GLuint) (G) & 0xFC) << 3) | \
- (((GLuint) (B) & 0xFF) >> 3))
-#define PACK_BGR16(R, G, B) \
- ((((GLuint) (B) & 0xF8) << 8) | \
- (((GLuint) (G) & 0xFC) << 3) | \
- (((GLuint) (R) & 0xFF) >> 3))
-/*
- * The second two macros pack 8 bit color channel values
- * into 1555 values.
- */
-#define PACK_RGBA16(R, G, B, A) \
- (((((GLuint) (A) & 0xFF) > 0) << 15)| \
- (((GLuint) (R) & 0xF8) << 7) | \
- (((GLuint) (G) & 0xF8) << 2) | \
- (((GLuint) (B) & 0xF8) >> 3))
-#define PACK_BGRA16(R, G, B, A) \
- (((((GLuint) (A) & 0xFF) > 0) << 15)| \
- (((GLuint) (B) & 0xF8) << 7) | \
- (((GLuint) (G) & 0xF8) << 2) | \
- (((GLuint) (R) & 0xF8) >> 3))
-
-/* Used in calls to grColorMaskv()...
- */
-extern const GLboolean false4[4];
-extern const GLboolean true4[4];
-
-
-typedef struct tdfx_context tdfxContextRec;
-typedef struct tdfx_context *tdfxContextPtr;
-
-
-typedef struct {
- volatile int fifoPtr;
- volatile int fifoRead;
- volatile int fifoOwner;
- volatile int ctxOwner;
- volatile int texOwner;
-}
-TDFXSAREAPriv;
-
-
-typedef struct {
- GLuint swapBuffer;
- GLuint reqTexUpload;
- GLuint texUpload;
- GLuint memTexUpload;
- GLuint texSwaps;
-} tdfxStats;
-
-
-
-/*
- * Memory range from startAddr to endAddr-1
- */
-typedef struct mem_range {
- struct mem_range *next;
- FxU32 startAddr, endAddr;
-}
-tdfxMemRange;
-
-
-typedef struct {
- GLsizei width, height; /* image size */
- GLint wScale, hScale; /* scale factors */
- GrTextureFormat_t glideFormat; /* Glide image format */
-}
-tdfxMipMapLevel;
-
-
-#define TDFX_NUM_TMU 2
-
-
-typedef struct tdfxTexInfo_t
-{
- GLboolean isInTM;
- GLboolean reloadImages; /* if true, resend images to Glide */
- GLuint lastTimeUsed;
- FxU32 whichTMU;
-
- GrTexInfo info;
- GrAspectRatio_t aspectRatio;
- tdfxMemRange *tm[TDFX_NUM_TMU];
-
- GLint minLevel, maxLevel;
- GrTextureFilterMode_t minFilt;
- GrTextureFilterMode_t magFilt;
- GrTextureClampMode_t sClamp;
- GrTextureClampMode_t tClamp;
- FxBool LODblend;
- GrMipMapMode_t mmMode;
-
- GLfloat sScale, tScale; /* texcoord scale factor */
-
- GrTexTable_t paltype;
- GuTexPalette palette;
-
- GLboolean padded;
-}
-tdfxTexInfo;
-
-
-#define TDFX_TEXTURE_DATA(mesaObj) ((tdfxTexInfo *)((mesaObj)->DriverData))
-
-#define TDFX_TEXIMAGE_DATA(mesaImg) ((tdfxMipMapLevel *)((mesaImg)->DriverData))
-
-
-
-/*
- * This is state which may be shared by several tdfx contexts.
- * It hangs off of Mesa's gl_shared_state object (ctx->Shared->DriverData).
- */
-struct tdfxSharedState {
- GLboolean umaTexMemory;
- GLuint totalTexMem[TDFX_NUM_TMU]; /* constant */
- GLuint freeTexMem[TDFX_NUM_TMU]; /* changes as we go */
- tdfxMemRange *tmPool;
- tdfxMemRange *tmFree[TDFX_NUM_TMU];
-};
-
-
-
-/* ================================================================
- * The vertex structures.
- */
-/* The size of this union is not of relevence:
- */
-typedef struct tdfx_vertex_t {
- GLfloat x, y, z; /* Coordinates in screen space */
- GLfloat rhw; /* Reciprocal homogeneous w */
- GLubyte color[4]; /* Diffuse color */
- GLfloat fog;
- GLfloat tu0, tv0; /* Texture 0 coordinates */
- GLfloat tu1, tv1; /* Texture 1 coordinates */
- GLfloat tq0, tq1; /* Texture 0/1 q coords */
- unsigned char pspec[4]; /* B, G, R, A [0..255] */
- float psize; /* point size */
- long pad[16 - 14]; /* ensure 64b structure */
-} tdfxVertex, *tdfxVertexPtr;
-
-
-/* ================================================================
- *
- * We want to keep a mirror of the Glide function call parameters so we
- * can avoid updating our state too often.
- *
- * Each of these broad groups will typically have a new state flag
- * associated with it, and will be updated together. The individual
- * Glide function calls each have a dirty flag and will only be called
- * when absolutely necessary.
- */
-
-/* for grTexSource() */
-struct tdfx_texsource {
- FxU32 StartAddress;
- FxU32 EvenOdd;
- GrTexInfo *Info;
-};
-
-/* Texture object params */
-struct tdfx_texparams {
- GrTextureClampMode_t sClamp;
- GrTextureClampMode_t tClamp;
- GrTextureFilterMode_t minFilt;
- GrTextureFilterMode_t magFilt;
- GrMipMapMode_t mmMode;
- FxBool LODblend;
- GLfloat LodBias;
-};
-
-/* for grTexDownloadTable() texture palettes */
-struct tdfx_texpalette {
- GrTexTable_t Type;
- void *Data;
-};
-
-/* 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;
-};
-
-/* Used to track changes between Glide's state and Mesa's */
-struct tdfx_texstate {
- GLuint Enabled[2]; /* values ala ctx->Texture.Unit[i]._ReallyEnabled */
- GLenum EnvMode[TDFX_NUM_TMU]; /* index is Glide index, not OpenGL */
- GLenum TexFormat[TDFX_NUM_TMU]; /* index is Glide index, not OpenGL */
-};
-
-struct tdfx_color {
- GrColor_t ClearColor; /* Buffer clear color value */
- GrAlpha_t ClearAlpha; /* Buffer clear alpha value */
- FxBool ColorMask[4]; /* Per-channel write enable flags */
-
- GrColor_t MonoColor; /* Constant color value */
-
- /* Alpha testing */
- GrCmpFnc_t AlphaFunc; /* Alpha test function */
- GrAlpha_t AlphaRef; /* Alpha ref value in range [0,255] */
-
- /* Blending */
- GrAlphaBlendFnc_t BlendSrcRGB; /* Blend source RGB factor */
- GrAlphaBlendFnc_t BlendDstRGB; /* Blend destination RGB factor */
- GrAlphaBlendOp_t BlendEqRGB; /* Blend source RGB op */
- GrAlphaBlendFnc_t BlendSrcA; /* Blend source alpha factor */
- GrAlphaBlendFnc_t BlendDstA; /* Blend destination alpha factor */
- GrAlphaBlendOp_t BlendEqA; /* Blend source alpha op */
-
- GrDitherMode_t Dither; /* Dither enable */
-};
-
-struct tdfx_depth {
- GrDepthBufferMode_t Mode; /* Fixed-point Z or floating-point W */
- FxI32 Bias; /* Polygon offset factor */
- GrCmpFnc_t Func; /* Depth test function */
- FxU32 Clear; /* Buffer clear value */
- FxBool Mask; /* Write enable flag */
-};
-
-struct tdfx_stipple {
- GrStippleMode_t Mode; /* Stipple enable/disable */
- FxU32 Pattern; /* 8x4 Stipple Pattern */
-};
-
-struct tdfx_fog {
- GrFogMode_t Mode; /* Glide fog mode */
- GrColor_t Color; /* Fog color value */
- GLenum TableMode; /* GL fog mode currently in table */
- GrFog_t *Table; /* Fog value table */
- FxFloat Density; /* Density >= 0 */
- FxFloat Near; /* Start distance in eye coords */
- FxFloat Far; /* End distance in eye coords */
-};
-
-struct tdfx_stencil {
- GrCmpFnc_t Function; /* Stencil function */
- GrStencil_t RefValue; /* Stencil reference value */
- GrStencil_t ValueMask; /* Value mask */
- GrStencil_t WriteMask; /* Write mask */
- GrStencil_t FailFunc; /* Stencil fail function */
- GrStencil_t ZFailFunc; /* Stencil pass, depth fail function */
- GrStencil_t ZPassFunc; /* Stencil pass, depth pass function */
- GrStencil_t Clear; /* Buffer clear value */
-};
-
-struct tdfx_scissor {
- FxU32 minX, minY; /* Lower left corner */
- FxU32 maxX, maxY; /* Upper right corner */
-};
-
-struct tdfx_viewport {
- GrCoordinateSpaceMode_t Mode; /* Coordinate space */
- FxI32 X, Y; /* Position */
- FxI32 Width, Height; /* Size */
- FxFloat Near, Far; /* Depth buffer range */
-};
-
-struct tdfx_glide {
- void *State; /* Mirror of internal Glide state */
- GrContext_t Context; /* Glide context identifier */
- FxI32 Board; /* Current graphics subsystem */
- GrColorFormat_t ColorFormat; /* Framebuffer format */
- GrOriginLocation_t Origin; /* Location of screen space origin */
-
- FxBool Initialized; /* Glide initialization done? */
-
- FxI32 SwapInterval; /* SwapBuffers interval */
- FxI32 MaxPendingSwaps; /* Maximum outstanding SwapBuffers */
- FxI32 TextureAlign;
-
- /* Extensions */
- FxBool HaveCombineExt; /* COMBINE */
- FxBool HaveCommandTransportExt; /* COMMAND_TRANSPORT */
- FxBool HaveFogCoordExt; /* FOGCOORD */
- FxBool HavePixelExt; /* PIXEXT */
- FxBool HaveTextureBufferExt; /* TEXTUREBUFFER */
- FxBool HaveTexFmtExt; /* TEXFMT */
- FxBool HaveTexUMAExt; /* TEXUMA */
- FxBool HaveMirrorExt; /* MIRROR */
- FxBool HaveTexus2; /* Texus 2 - FXT1 */
-
- /* Glide library function pointers */
- void (*grDrawPoint)( const void *pt );
- void (*grDrawLine)( const void *v1, const void *v2 );
- void (*grDrawTriangle)( const void *a, const void *b, const void *c );
- void (*grVertexLayout)(FxU32 param, FxI32 offset, FxU32 mode);
- void (*grDrawVertexArray)(FxU32 mode, FxU32 Count, void *pointers);
- void (*grDrawVertexArrayContiguous)(FxU32 mode, FxU32 Count,
- void *pointers, FxU32 stride);
- void (*grBufferClear)( GrColor_t color, GrAlpha_t alpha, FxU32 depth );
- void (*grBufferSwap)( FxU32 swap_interval );
- void (*grRenderBuffer)( GrBuffer_t buffer );
- void (*grErrorSetCallback)( GrErrorCallbackFnc_t fnc );
- void (*grFinish)(void);
- void (*grFlush)(void);
- GrContext_t (*grSstWinOpen)(FxU32 hWnd,
- GrScreenResolution_t screen_resolution,
- GrScreenRefresh_t refresh_rate,
- GrColorFormat_t color_format,
- GrOriginLocation_t origin_location,
- int nColBuffers,
- int nAuxBuffers);
- void (*grSstWinClose)( GrContext_t context );
-/* Not used */
-#if 0
- void (*grSetNumPendingBuffers)(FxI32 NumPendingBuffers);
-#endif
- void (*grSelectContext)( GrContext_t context );
- void (*grSstOrigin)(GrOriginLocation_t origin);
- void (*grSstSelect)( int which_sst );
- void (*grAlphaBlendFunction)(GrAlphaBlendFnc_t rgb_sf,
- GrAlphaBlendFnc_t rgb_df,
- GrAlphaBlendFnc_t alpha_sf,
- GrAlphaBlendFnc_t alpha_df);
- void (*grAlphaCombine)(GrCombineFunction_t function,
- GrCombineFactor_t factor,
- GrCombineLocal_t local, GrCombineOther_t other,
- FxBool invert);
- void (*grAlphaControlsITRGBLighting)( FxBool enable );
- void (*grAlphaTestFunction)( GrCmpFnc_t function );
- void (*grAlphaTestReferenceValue)( GrAlpha_t value );
- void (*grChromakeyMode)( GrChromakeyMode_t mode );
- void (*grChromakeyValue)( GrColor_t value );
- void (*grClipWindow)( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy );
- void (*grColorCombine)( GrCombineFunction_t function,
- GrCombineFactor_t factor,
- GrCombineLocal_t local,
- GrCombineOther_t other,
- FxBool invert );
- void (*grColorMask)( FxBool rgb, FxBool a );
- void (*grCullMode)( GrCullMode_t mode );
- void (*grConstantColorValue)( GrColor_t value );
- void (*grDepthBiasLevel)( FxI32 level );
- void (*grDepthBufferFunction)( GrCmpFnc_t function );
- void (*grDepthBufferMode)( GrDepthBufferMode_t mode );
- void (*grDepthMask)( FxBool mask );
- void (*grDisableAllEffects)( void );
- void (*grDitherMode)( GrDitherMode_t mode );
- void (*grFogColorValue)( GrColor_t fogcolor );
- void (*grFogMode)( GrFogMode_t mode );
- void (*grFogTable)( const GrFog_t ft[] );
- void (*grLoadGammaTable)( FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
- void (*grSplash)(float x, float y, float width, float height, FxU32 frame);
- FxU32 (*grGet)( FxU32 pname, FxU32 plength, FxI32 *params );
- const char * (*grGetString)( FxU32 pname );
- FxI32 (*grQueryResolutions)( const GrResolution *resTemplate,
- GrResolution *output );
- FxBool (*grReset)( FxU32 what );
- GrProc (*grGetProcAddress)( char *procName );
- void (*grEnable)( GrEnableMode_t mode );
- void (*grDisable)( GrEnableMode_t mode );
- void (*grCoordinateSpace)( GrCoordinateSpaceMode_t mode );
- void (*grDepthRange)( FxFloat n, FxFloat f );
- void (*grStippleMode)( GrStippleMode_t mode );
- void (*grStipplePattern)( GrStipplePattern_t mode );
- void (*grViewport)( FxI32 x, FxI32 y, FxI32 width, FxI32 height );
- FxU32 (*grTexCalcMemRequired)(GrLOD_t lodmin, GrLOD_t lodmax,
- GrAspectRatio_t aspect, GrTextureFormat_t fmt);
- FxU32 (*grTexTextureMemRequired)( FxU32 evenOdd, GrTexInfo *info );
- FxU32 (*grTexMinAddress)( GrChipID_t tmu );
- FxU32 (*grTexMaxAddress)( GrChipID_t tmu );
- void (*grTexNCCTable)( GrNCCTable_t table );
- void (*grTexSource)( GrChipID_t tmu, FxU32 startAddress,
- FxU32 evenOdd, GrTexInfo *info );
- void (*grTexClampMode)( GrChipID_t tmu,
- GrTextureClampMode_t s_clampmode,
- GrTextureClampMode_t t_clampmode );
- void (*grTexCombine)( GrChipID_t tmu,
- GrCombineFunction_t rgb_function,
- GrCombineFactor_t rgb_factor,
- GrCombineFunction_t alpha_function,
- GrCombineFactor_t alpha_factor,
- FxBool rgb_invert,
- FxBool alpha_invert);
- void (*grTexDetailControl)( GrChipID_t tmu, int lod_bias,
- FxU8 detail_scale, float detail_max );
- void (*grTexFilterMode)( GrChipID_t tmu,
- GrTextureFilterMode_t minfilter_mode,
- GrTextureFilterMode_t magfilter_mode );
- void (*grTexLodBiasValue)(GrChipID_t tmu, float bias );
- void (*grTexDownloadMipMap)( GrChipID_t tmu, FxU32 startAddress,
- FxU32 evenOdd, GrTexInfo *info );
- void (*grTexDownloadMipMapLevel)( GrChipID_t tmu,
- FxU32 startAddress,
- GrLOD_t thisLod,
- GrLOD_t largeLod,
- GrAspectRatio_t aspectRatio,
- GrTextureFormat_t format,
- FxU32 evenOdd,
- void *data );
- FxBool (*grTexDownloadMipMapLevelPartial)( GrChipID_t tmu,
- FxU32 startAddress,
- GrLOD_t thisLod,
- GrLOD_t largeLod,
- GrAspectRatio_t aspectRatio,
- GrTextureFormat_t format,
- FxU32 evenOdd,
- void *data,
- int start,
- int end );
- void (*grTexDownloadTable)( GrTexTable_t type, void *data );
- void (*grTexDownloadTablePartial)( GrTexTable_t type,
- void *data, int start, int end );
- void (*grTexMipMapMode)( GrChipID_t tmu, GrMipMapMode_t mode,
- FxBool lodBlend );
- void (*grTexMultibase)( GrChipID_t tmu, FxBool enable );
- void (*grTexMultibaseAddress)( GrChipID_t tmu,
- GrTexBaseRange_t range,
- FxU32 startAddress,
- FxU32 evenOdd,
- GrTexInfo *info );
- FxBool (*grLfbLock)( GrLock_t type, GrBuffer_t buffer,
- GrLfbWriteMode_t writeMode,
- GrOriginLocation_t origin, FxBool pixelPipeline,
- GrLfbInfo_t *info );
- FxBool (*grLfbUnlock)( GrLock_t type, GrBuffer_t buffer );
- void (*grLfbConstantAlpha)( GrAlpha_t alpha );
- void (*grLfbConstantDepth)( FxU32 depth );
- void (*grLfbWriteColorSwizzle)(FxBool swizzleBytes, FxBool swapWords);
- void (*grLfbWriteColorFormat)(GrColorFormat_t colorFormat);
- FxBool (*grLfbWriteRegion)( GrBuffer_t dst_buffer,
- FxU32 dst_x, FxU32 dst_y,
- GrLfbSrcFmt_t src_format,
- FxU32 src_width, FxU32 src_height,
- FxBool pixelPipeline,
- FxI32 src_stride, void *src_data );
- FxBool (*grLfbReadRegion)( GrBuffer_t src_buffer,
- FxU32 src_x, FxU32 src_y,
- FxU32 src_width, FxU32 src_height,
- FxU32 dst_stride, void *dst_data );
- void (*grGlideInit)( void );
- void (*grGlideShutdown)( void );
- void (*grGlideGetState)( void *state );
- void (*grGlideSetState)( const void *state );
- void (*grGlideGetVertexLayout)( void *layout );
- void (*grGlideSetVertexLayout)( const void *layout );
- /* Glide utility functions */
- void (*guFogGenerateExp)( GrFog_t *fogtable, float density );
- void (*guFogGenerateExp2)( GrFog_t *fogtable, float density );
- void (*guFogGenerateLinear)(GrFog_t *fogtable, float nearZ, float farZ );
- /* DRI functions */
- void (*grDRIOpen)( char *pFB, char *pRegs, int deviceID,
- int width, int height,
- int mem, int cpp, int stride,
- int fifoOffset, int fifoSize,
- int fbOffset, int backOffset, int depthOffset,
- int textureOffset, int textureSize,
- volatile int *fifoPtr, volatile int *fifoRead );
- void (*grDRIPosition)( int x, int y, int w, int h,
- int numClip, drm_clip_rect_t *pClip );
- void (*grDRILostContext)( void );
- void (*grDRIImportFifo)( int fifoPtr, int fifoRead );
- void (*grDRIInvalidateAll)( void );
- void (*grDRIResetSAREA)( void );
- void (*grDRIBufferSwap)( FxU32 swapInterval );
- /* Glide extensions */
- /* PIXEXT extension */
- void (*grStencilFunc)( GrCmpFnc_t func, GrStencil_t ref, GrStencil_t mask );
- void (*grStencilMask)( GrStencil_t mask );
- void (*grStencilOp)( GrStencilOp_t fail, GrStencilOp_t zfail,
- GrStencilOp_t zpass );
- void (*grBufferClearExt)( GrColor_t color, GrAlpha_t alpha,
- FxU32 depth, GrStencil_t stencil );
- void (*grColorMaskExt)( FxBool r, FxBool g, FxBool b, FxBool a );
- /* COMBINE extension */
- void (*grColorCombineExt)( GrCCUColor_t a, GrCombineMode_t a_mode,
- GrCCUColor_t b, GrCombineMode_t b_mode,
- GrCCUColor_t c, FxBool c_invert,
- GrCCUColor_t d, FxBool d_invert,
- FxU32 shift, FxBool invert );
- void (*grTexColorCombineExt)( FxU32 tmu,
- GrTCCUColor_t a, GrCombineMode_t a_mode,
- GrTCCUColor_t b, GrCombineMode_t b_mode,
- GrTCCUColor_t c, FxBool c_invert,
- GrTCCUColor_t d, FxBool d_invert,
- FxU32 shift, FxBool invert );
- void (*grAlphaCombineExt)( GrACUColor_t a, GrCombineMode_t a_mode,
- GrACUColor_t b, GrCombineMode_t b_mode,
- GrACUColor_t c, FxBool c_invert,
- GrACUColor_t d, FxBool d_invert,
- FxU32 shift, FxBool invert );
- void (*grTexAlphaCombineExt)( FxU32 tmu,
- GrTACUColor_t a, GrCombineMode_t a_mode,
- GrTACUColor_t b, GrCombineMode_t b_mode,
- GrTACUColor_t c, FxBool c_invert,
- GrTACUColor_t d, FxBool d_invert,
- FxU32 shift, FxBool invert );
- void (*grAlphaBlendFunctionExt)( GrAlphaBlendFnc_t rgb_sf,
- GrAlphaBlendFnc_t rgb_df,
- GrAlphaBlendOp_t rgb_op,
- GrAlphaBlendFnc_t alpha_sf,
- GrAlphaBlendFnc_t alpha_df,
- GrAlphaBlendOp_t alpha_op );
- void (*grConstantColorValueExt)( FxU32 tmu, GrColor_t value );
- /* Texus 2 */
- void (*txImgQuantize)( void *xxx_unknown_arguments );
- void (*txImgDequantizeFXT1)( void *txMip, void *pxMip );
- void (*txErrorSetCallback)( void *fnc );
-};
-
-typedef void (*tdfx_tri_func)( tdfxContextPtr, tdfxVertex *, tdfxVertex *,
- tdfxVertex * );
-typedef void (*tdfx_line_func)( tdfxContextPtr, tdfxVertex *, tdfxVertex * );
-typedef void (*tdfx_point_func)( tdfxContextPtr, tdfxVertex * );
-
-struct tdfx_context {
- /* Set once and never changed:
- */
- GLcontext *glCtx; /* The core Mesa context */
-
- GLuint new_gl_state;
- GLuint new_state;
- GLuint dirty;
-
- /* Mirror of hardware state, Glide parameters
- */
- GLuint tmu_source[TDFX_NUM_TMU];
- struct tdfx_texsource TexSource[TDFX_NUM_TMU];
- struct tdfx_texparams TexParams[TDFX_NUM_TMU];
- struct tdfx_texpalette TexPalette;
-
- /* Voodoo3 texture/color combine state */
- struct tdfx_combine ColorCombine;
- struct tdfx_combine AlphaCombine;
- struct tdfx_texcombine TexCombine[TDFX_NUM_TMU];
-
- /* Voodoo5 texture/color combine state */
- struct tdfx_combine_color_ext ColorCombineExt;
- struct tdfx_combine_alpha_ext AlphaCombineExt;
- struct tdfx_texcombine_ext TexCombineExt[TDFX_NUM_TMU];
-
- /* Tracks tex state difference between Glide and Mesa */
- struct tdfx_texstate TexState;
-
- GrBuffer_t DrawBuffer; /* Current draw buffer */
- GrBuffer_t ReadBuffer; /* Current read buffer */
-
- struct tdfx_color Color;
- struct tdfx_depth Depth;
- struct tdfx_fog Fog;
- struct tdfx_stencil Stencil;
- struct tdfx_scissor Scissor;
- struct tdfx_viewport Viewport;
- struct tdfx_stipple Stipple;
-
- GrCullMode_t CullMode;
-
- struct tdfx_glide Glide;
-
- /* Fallback rasterization functions
- */
- tdfx_point_func draw_point;
- tdfx_line_func draw_line;
- tdfx_tri_func draw_triangle;
-
-
- /* Variable-size Glide vertex formats
- */
- GLuint vertexFormat; /* the current format */
- void *layout[TDFX_NUM_LAYOUTS];
- tdfxVertex *verts;
-
- GLfloat hw_viewport[16];
-
- GLuint SetupIndex;
- GLuint SetupNewInputs;
- GLuint RenderIndex;
- GLuint Fallback;
- GLenum render_primitive; /* what GL thinks */
- GLenum raster_primitive; /* what the hardware thinks */
-
- GLfloat sScale0, tScale0;
- GLfloat sScale1, tScale1;
-
- GLuint texBindNumber;
- GLint tmuSrc;
-
- int screen_width;
- int screen_height;
-
- GLboolean haveTwoTMUs; /* True if we have 2 tmu's */
- GLboolean haveHwAlpha;
- GLboolean haveHwStencil;
- GLboolean haveHwStipple;
-
- GLint maxPendingSwapBuffers;
-
- char rendererString[100];
-
- /* stuff added for DRI */
- __DRIscreenPrivate *driScreen;
- __DRIcontextPrivate *driContext;
- __DRIdrawablePrivate *driDrawable;
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- int driFd;
- tdfxScreenPrivate *fxScreen;
- TDFXSAREAPriv *sarea;
-
-
- /*
- * Changes during execution:
- */
- int width, height; /* size of window */
- int x_offset; /* distance from window left to screen left */
- int y_offset; /* distance from window top to screen top */
- int y_delta; /* distance from window bottom to screen bottom */
-
- int numClipRects;
- drm_clip_rect_t *pClipRects;
- GLboolean scissoredClipRects; /* if true, pClipRects is private storage */
-
- GuTexPalette glbPalette; /* global texture palette */
-
- tdfxStats stats;
-
- /* Configuration cache
- */
- driOptionCache optionCache;
-};
-
-#define TDFX_CONTEXT(ctx) ((tdfxContextPtr)((ctx)->DriverCtx))
-
-
-extern GLboolean
-tdfxCreateContext( const __GLcontextModes *mesaVis,
- __DRIcontextPrivate *driContextPriv,
- void *sharedContextPrivate );
-
-extern void
-tdfxDestroyContext( __DRIcontextPrivate *driContextPriv );
-
-extern GLboolean
-tdfxUnbindContext( __DRIcontextPrivate *driContextPriv );
-
-extern GLboolean
-tdfxMakeCurrent( __DRIcontextPrivate *driContextPriv,
- __DRIdrawablePrivate *driDrawPriv,
- __DRIdrawablePrivate *driReadPriv );
-
-extern GLboolean
-tdfxInitGlide( tdfxContextPtr tmesa );
-
-extern void
-FX_grColorMaskv(GLcontext *ctx, const GLboolean rgba[4]);
-
-extern void
-FX_grColorMaskv_NoLock(GLcontext *ctx, const GLboolean rgba[4]);
-
-
-/* Color packing utilities
- */
-#define TDFXPACKCOLOR332( r, g, b ) \
- (((b) & 0xe0) | (((g) & 0xe0) >> 3) | (((r) & 0xc0) >> 6))
-
-#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 TDFXPACKCOLOR888( r, g, b ) \
- (((b) << 16) | ((g) << 8) | (r))
-
-#define TDFXPACKCOLOR8888( r, g, b, a ) \
- (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-
-#define TDFXPACKCOLOR4444( r, g, b, a ) \
- ((((a) & 0xf0) << 8) | (((b) & 0xf0) << 4) | ((g) & 0xf0) | ((r) >> 4))
-
-static __inline__ GrColor_t tdfxPackColor( GLuint cpp,
- GLubyte r, GLubyte g,
- GLubyte b, GLubyte a )
-{
- switch ( cpp ) {
- case 2:
- return TDFXPACKCOLOR565( r, g, b );
- case 4:
- return TDFXPACKCOLOR8888( r, g, b, a );
- default:
- return 0;
- }
-}
-
-#define DO_DEBUG 1
-#if DO_DEBUG
-extern int TDFX_DEBUG;
-#else
-#define TDFX_DEBUG 0
-#endif
-
-#define DEBUG_ALWAYS_SYNC 0x01
-#define DEBUG_VERBOSE_API 0x02
-#define DEBUG_VERBOSE_DRI 0x04
-#define DEBUG_VERBOSE_FALL 0x08
-
-/* conf */
-#define FX_COMPRESS_S3TC_AS_FXT1_HACK 1
-#define FX_TC_NAPALM 0
-
-#endif /* __TDFX_CONTEXT_H__ */