get fog working with _TexEnvProgram
authorKeith Whitwell <keith@tungstengraphics.com>
Tue, 10 May 2005 11:38:56 +0000 (11:38 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Tue, 10 May 2005 11:38:56 +0000 (11:38 +0000)
src/mesa/drivers/dri/i915/i915_fragprog.c
src/mesa/drivers/dri/i915/i915_state.c
src/mesa/drivers/dri/i915/i915_vtbl.c

index 43f03cc..150d9bd 100644 (file)
@@ -981,15 +981,27 @@ void i915ValidateFragmentProgram( i915ContextPtr i915 )
       EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA, S4_VFMT_COLOR, 4 );
    }
    
-   if (inputsRead & FRAG_BIT_COL1) {
-      intel->specoffset = offset / 4;
-      EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, S4_VFMT_SPEC_FOG, 3 );
-      EMIT_PAD( 1 );
+   if ((inputsRead & (FRAG_BIT_COL1|FRAG_BIT_FOGC)) || 
+       i915->vertex_fog != I915_FOG_NONE) {
+
+      if (inputsRead & FRAG_BIT_COL1) {
+        intel->specoffset = offset / 4;
+        EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, S4_VFMT_SPEC_FOG, 3 );
+      }
+      else
+        EMIT_PAD(3);
+
+      if ((inputsRead & FRAG_BIT_FOGC) || i915->vertex_fog != I915_FOG_NONE) 
+        EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, S4_VFMT_SPEC_FOG, 1 );
+      else
+        EMIT_PAD( 1 );
    }
 
-   if (inputsRead & FRAG_BIT_FOGC) {
+#if 0
+   if ((inputsRead & FRAG_BIT_FOGC) || i915->vertex_fog != I915_FOG_NONE) {
       EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1F, S4_VFMT_FOG_PARAM, 4 );
    }
+#endif
 
    for (i = 0; i < p->ctx->Const.MaxTextureCoordUnits; i++) {
       if (inputsRead & FRAG_BIT_TEX(i)) {
index 00b8a12..adb17b2 100644 (file)
@@ -533,7 +533,7 @@ void i915_update_fog( GLcontext *ctx )
       
       mode = ctx->FragmentProgram._Current->FogOption;
       enabled = (mode != GL_NONE);
-      try_pixel_fog = 1;
+      try_pixel_fog = 0;
    }
    else {
       enabled = ctx->Fog.Enabled;
index dc3342d..7952866 100644 (file)
@@ -107,6 +107,7 @@ static GLboolean i915_check_vertex_size( intelContextPtr intel,
    if (lis4 & S4_VFMT_COLOR) sz++;
    if (lis4 & S4_VFMT_DEPTH_OFFSET) sz++;
    if (lis4 & S4_VFMT_POINT_WIDTH) sz++;
+   if (lis4 & S4_VFMT_FOG_PARAM) sz++;
        
    for (i = 0 ; i < 8 ; i++) { 
       switch (lis2 & S2_TEXCOORD_FMT0_MASK) {