Merge commit 'origin/mesa_7_7_branch'
[mesa.git] / src / mesa / drivers / glide / fxdrv.h
index 27a721ae60feb9be81d3103fd1d203989cd63228..bee10de2f49088f35ac6af025cb9ce3e3e96fbfa 100644 (file)
 #include <signal.h>
 #endif
 
-#include "context.h"
-#include "imports.h"
-#include "macros.h"
-#include "matrix.h"
-#include "mtypes.h"
+#include "main/context.h"
+#include "main/imports.h"
+#include "main/macros.h"
+#include "main/matrix.h"
+#include "main/mtypes.h"
 
 #include "GL/fxmesa.h"
 #include "fxglidew.h"
@@ -60,6 +60,8 @@
 #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_PTEX 0x20
 #define SETUP_PSIZ 0x40
 #define SETUP_SPEC 0x80
-#define MAX_SETUP  0x100
+#define SETUP_FOGC 0x100
+#define MAX_SETUP  0x200
 
 
 #define FX_NUM_TMU 2
@@ -293,6 +296,8 @@ typedef struct tfxTexInfo_t
 
    GLboolean fixedPalette;
    GLboolean validated;
+
+   GLboolean padded;
 }
 tfxTexInfo;
 
@@ -322,7 +327,8 @@ typedef struct
    GrAlphaBlendFnc_t blendDstFuncRGB;
    GrAlphaBlendFnc_t blendSrcFuncAlpha;
    GrAlphaBlendFnc_t blendDstFuncAlpha;
-   GrAlphaBlendOp_t blendEq;
+   GrAlphaBlendOp_t blendEqRGB;
+   GrAlphaBlendOp_t blendEqAlpha;
 
    /* Depth test */
 
@@ -443,12 +449,12 @@ struct tfxMesaContext
 
    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;
@@ -462,6 +468,7 @@ struct tfxMesaContext
    GLfloat fogStart, fogEnd;
    GrFog_t *fogTable;
    GLint textureAlign;
+   GLint textureMaxLod;
 
    /* Vertex building and storage:
     */
@@ -478,7 +485,7 @@ struct tfxMesaContext
    GLenum render_primitive;
    GLenum raster_primitive;
 
-   /* Current rasterization functions 
+   /* Current rasterization functions
     */
    fx_point_func draw_point;
    fx_line_func draw_line;
@@ -538,7 +545,7 @@ struct tfxMesaContext
    FxBool HaveTexUma;  /* TEXUMA */
    FxBool HaveTexus2;  /* Texus 2 - FXT1 */
    struct tdfx_glide Glide;
-   char rendererString[100];
+   char rendererString[64];
 };
 
 
@@ -551,7 +558,7 @@ extern void fxAllocVB(GLcontext * ctx);
 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 );
 
@@ -574,10 +581,6 @@ extern void fxPrintTextureData(tfxTexInfo * ti);
 extern const struct gl_texture_format *
 fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
                          GLenum srcFormat, GLenum srcType );
-extern GLboolean fxDDIsCompressedFormat (GLcontext *ctx, GLenum internalFormat);
-extern GLuint fxDDCompressedTextureSize (GLcontext *ctx,
-                                         GLsizei width, GLsizei height, GLsizei depth,
-                                         GLenum format);
 extern void fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
                           GLint internalFormat, GLint width, GLint height,
                           GLint border, GLenum format, GLenum type,
@@ -606,10 +609,30 @@ extern void fxDDCompressedTexSubImage2D(GLcontext *ctx, GLenum target,
                                         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 *);
@@ -617,14 +640,13 @@ extern void fxDDTexUseGlbPalette(GLcontext *, GLboolean);
 
 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);
 
@@ -654,18 +676,18 @@ extern void fxDDColorMask(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);
 
@@ -694,9 +716,11 @@ 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
@@ -710,11 +734,40 @@ void fxSetupTexture (GLcontext *ctx);
 
 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