#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 SETUP_SNAP 0x8
#define SETUP_XYZW 0x10
#define SETUP_PTEX 0x20
-#define MAX_SETUP 0x40
+#define SETUP_PSIZ 0x40
+#define SETUP_SPEC 0x80
+#define SETUP_FOGC 0x100
+#define MAX_SETUP 0x200
#define FX_NUM_TMU 2
GLfloat sScale, tScale;
+ GrTexTable_t paltype;
GuTexPalette palette;
GLboolean fixedPalette;
GLboolean validated;
+
+ GLboolean padded;
}
tfxTexInfo;
GrAlphaBlendFnc_t blendDstFuncRGB;
GrAlphaBlendFnc_t blendSrcFuncAlpha;
GrAlphaBlendFnc_t blendDstFuncAlpha;
- GrAlphaBlendOp_t blendEq;
+ GrAlphaBlendOp_t blendEqRGB;
+ GrAlphaBlendOp_t blendEqAlpha;
/* Depth test */
_NEW_COLOR) \
-/* These lookup table are used to extract RGB values in [0,255] from
- * 16-bit pixel values.
- */
-extern GLubyte FX_PixelToR[0x10000];
-extern GLubyte FX_PixelToG[0x10000];
-extern GLubyte FX_PixelToB[0x10000];
-
/* lookup table for scaling y bit colors up to 8 bits */
extern GLuint FX_rgb_scale_4[16];
extern GLuint FX_rgb_scale_5[32];
struct tfxMesaContext
{
+ GrTexTable_t glbPalType;
GuTexPalette glbPalette;
GLcontext *glCtx; /* the core Mesa context */
tfxUnitsState unitsState;
tfxUnitsState restoreUnitsState; /* saved during multipass */
-
+ GLboolean multipass; /* true when drawing intermediate pass */
GLuint new_state;
GLuint new_gl_state;
- /* Texture Memory Manager Data
+ /* Texture Memory Manager Data
*/
GLuint texBindNumber;
GLint tmuSrc;
GLfloat fogStart, fogEnd;
GrFog_t *fogTable;
GLint textureAlign;
+ GLint textureMaxLod;
/* Vertex building and storage:
*/
GLuint stw_hint_state; /* for grHints */
GrVertex *verts;
GLboolean snapVertices; /* needed for older Voodoo hardware */
- struct gl_client_array UbyteColor;
/* Rasterization:
*/
GLenum render_primitive;
GLenum raster_primitive;
- /* Current rasterization functions
+ /* Current rasterization functions
*/
fx_point_func draw_point;
fx_line_func draw_line;
* from `glbHWConfig' when creating a new context...
*/
GrSstType type;
+ FxBool HavePalExt; /* PALETTE6666 */
FxBool HavePixExt; /* PIXEXT */
FxBool HaveTexFmt; /* TEXFMT */
FxBool HaveCmbExt; /* COMBINE */
FxBool HaveTexUma; /* TEXUMA */
FxBool HaveTexus2; /* Texus 2 - FXT1 */
struct tdfx_glide Glide;
- char rendererString[100];
+ char rendererString[64];
};
extern void fxFreeVB(GLcontext * ctx);
extern void fxPrintSetupFlags(char *msg, GLuint flags );
extern void fxCheckTexSizes( GLcontext *ctx );
-extern void fxBuildVertices( GLcontext *ctx, GLuint start, GLuint count,
+extern void fxBuildVertices( GLcontext *ctx, GLuint start, GLuint end,
GLuint newinputs );
extern void fxChooseVertexState( GLcontext *ctx );
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
-
extern void fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
+extern void fxDDCompressedTexImage2D(GLcontext *ctx, GLenum target,
+ GLint level, GLint internalFormat,
+ GLsizei width, GLsizei height, GLint border,
+ GLsizei imageSize, const GLvoid *data,
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage);
+extern void fxDDCompressedTexSubImage2D(GLcontext *ctx, GLenum target,
+ GLint level, GLint xoffset,
+ GLint yoffset, GLsizei width,
+ GLint height, GLenum format,
+ GLsizei imageSize, const GLvoid *data,
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage);
+extern void fxDDTexImage1D(GLcontext * ctx, GLenum target, GLint level,
+ GLint internalFormat, GLint width,
+ GLint border, GLenum format, GLenum type,
+ const GLvoid * pixels,
+ const struct gl_pixelstore_attrib *packing,
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage);
+extern void fxDDTexSubImage1D(GLcontext * ctx, GLenum target, GLint level,
+ GLint xoffset, GLint width,
+ GLenum format, GLenum type,
+ const GLvoid * pixels,
+ const struct gl_pixelstore_attrib *packing,
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage);
+extern GLboolean fxDDTestProxyTexImage (GLcontext *ctx, GLenum target,
+ GLint level, GLint internalFormat,
+ GLenum format, GLenum type,
+ GLint width, GLint height,
+ GLint depth, GLint border);
extern void fxDDTexEnv(GLcontext *, GLenum, GLenum, const GLfloat *);
extern void fxDDTexParam(GLcontext *, GLenum, struct gl_texture_object *,
GLenum, const GLfloat *);
extern void fxDDTexBind(GLcontext *, GLenum, struct gl_texture_object *);
+extern struct gl_texture_object *fxDDNewTextureObject( GLcontext *ctx, GLuint name, GLenum target );
extern void fxDDTexDel(GLcontext *, struct gl_texture_object *);
extern GLboolean fxDDIsTextureResident(GLcontext *, struct gl_texture_object *);
extern void fxDDTexPalette(GLcontext *, struct gl_texture_object *);
extern void fxDDEnable(GLcontext *, GLenum, GLboolean);
extern void fxDDAlphaFunc(GLcontext *, GLenum, GLfloat);
-extern void fxDDBlendFunc(GLcontext *, GLenum, GLenum);
extern void fxDDBlendFuncSeparate(GLcontext *, GLenum, GLenum, GLenum, GLenum);
-extern void fxDDBlendEquation(GLcontext *, GLenum);
+extern void fxDDBlendEquationSeparate(GLcontext *, GLenum, GLenum);
extern void fxDDDepthMask(GLcontext *, GLboolean);
extern void fxDDDepthFunc(GLcontext *, GLenum);
-extern void fxDDStencilFunc (GLcontext *ctx, GLenum func, GLint ref, GLuint mask);
-extern void fxDDStencilMask (GLcontext *ctx, GLuint mask);
-extern void fxDDStencilOp (GLcontext *ctx, GLenum sfail, GLenum zfail, GLenum zpass);
+extern void fxDDStencilFuncSeparate (GLcontext *ctx, GLenum face, GLenum func, GLint ref, GLuint mask);
+extern void fxDDStencilMaskSeparate (GLcontext *ctx, GLenum face, GLuint mask);
+extern void fxDDStencilOpSeparate (GLcontext *ctx, GLenum face, GLenum sfail, GLenum zfail, GLenum zpass);
extern void fxDDInitExtensions(GLcontext * ctx);
GLboolean r, GLboolean g, GLboolean b, GLboolean a);
extern void fxDDWriteDepthSpan(GLcontext * ctx, GLuint n, GLint x, GLint y,
- const GLdepth depth[], const GLubyte mask[]);
+ const GLuint depth[], const GLubyte mask[]);
extern void fxDDReadDepthSpan(GLcontext * ctx, GLuint n, GLint x, GLint y,
- GLdepth depth[]);
+ GLuint depth[]);
extern void fxDDWriteDepthPixels(GLcontext * ctx, GLuint n,
const GLint x[], const GLint y[],
- const GLdepth depth[], const GLubyte mask[]);
+ const GLuint depth[], const GLubyte mask[]);
extern void fxDDReadDepthPixels(GLcontext * ctx, GLuint n,
const GLint x[], const GLint y[],
- GLdepth depth[]);
+ GLuint depth[]);
extern void fxDDShadeModel(GLcontext * ctx, GLenum mode);
extern void fxSetScissorValues(GLcontext * ctx);
extern void fxTMMoveInTM_NoLock(fxMesaContext fxMesa,
struct gl_texture_object *tObj, GLint where);
-extern void fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder);
extern void fxCheckIsInHardware(GLcontext *ctx);
void fxSetupCull (GLcontext * ctx);
void fxSetupScissor (GLcontext * ctx);
void fxSetupColorMask (GLcontext * ctx);
+void fxSetupBlend (GLcontext *ctx);
+void fxSetupDepthTest (GLcontext *ctx);
+void fxSetupTexture (GLcontext *ctx);
+void fxSetupStencil (GLcontext *ctx);
+void fxSetupStencilFace (GLcontext *ctx, GLint face);
/* Flags for software fallback cases */
-#define FX_FALLBACK_TEXTURE_1D_3D 0x0001
+#define FX_FALLBACK_TEXTURE_MAP 0x0001
#define FX_FALLBACK_DRAW_BUFFER 0x0002
#define FX_FALLBACK_SPECULAR 0x0004
#define FX_FALLBACK_STENCIL 0x0008
extern GLuint fx_check_IsInHardware(GLcontext *ctx);
+/***
+ *** CNORM: clamp float to [0,1] and map to float in [0,255]
+ ***/
+#if defined(USE_IEEE) && !defined(DEBUG)
+#define IEEE_0996 0x3f7f0000 /* 0.996 or so */
+#define CNORM(N, F) \
+ do { \
+ fi_type __tmp; \
+ __tmp.f = (F); \
+ if (__tmp.i < 0) \
+ N = 0; \
+ else if (__tmp.i >= IEEE_0996) \
+ N = 255.0f; \
+ else { \
+ N = (F) * 255.0f; \
+ } \
+ } while (0)
+#else
+#define CNORM(n, f) \
+ n = (CLAMP((f), 0.0F, 1.0F) * 255.0F)
+#endif
+
/* run-time debugging */
+#ifndef FX_DEBUG
+#define FX_DEBUG 0
+#endif
#if FX_DEBUG
extern int TDFX_DEBUG;
#else
#define TDFX_DEBUG 0
#endif
+/* dirty hacks */
+#define FX_RESCALE_BIG_TEXURES_HACK 1
+#define FX_COMPRESS_S3TC_AS_FXT1_HACK 1
+
#endif