nouveau: Convert to use GLbitfield64 directly.
[mesa.git] / src / mesa / drivers / dri / nouveau / nv20_state_tnl.c
index 28745849d43051f5a30ab50160cbe10abfb8acd1..638c5f0e37fa2c2b73d1094b2cf3dda5bd647a40 100644 (file)
@@ -127,13 +127,22 @@ get_fog_mode_unsigned(unsigned mode)
 }
 
 static unsigned
-get_fog_source(unsigned source)
+get_fog_source(unsigned source, unsigned distance_mode)
 {
        switch (source) {
        case GL_FOG_COORDINATE_EXT:
                return NV20_3D_FOG_COORD_FOG;
        case GL_FRAGMENT_DEPTH_EXT:
-               return NV20_3D_FOG_COORD_DIST_ORTHOGONAL_ABS;
+               switch (distance_mode) {
+               case GL_EYE_PLANE_ABSOLUTE_NV:
+                       return NV20_3D_FOG_COORD_DIST_ORTHOGONAL_ABS;
+               case GL_EYE_PLANE:
+                       return NV20_3D_FOG_COORD_DIST_ORTHOGONAL;
+               case GL_EYE_RADIAL_NV:
+                       return NV20_3D_FOG_COORD_DIST_RADIAL;
+               default:
+                       assert(0);
+               }
        default:
                assert(0);
        }
@@ -153,11 +162,12 @@ nv20_emit_fog(struct gl_context *ctx, int emit)
        nv10_get_fog_coeff(ctx, k);
 
        BEGIN_RING(chan, kelvin, NV20_3D_FOG_MODE, 4);
-       OUT_RING(chan, (source == GL_FOG_COORDINATE_EXT ?
-                       get_fog_mode_signed(f->Mode) :
-                       get_fog_mode_unsigned(f->Mode)));
-       OUT_RING(chan, get_fog_source(source));
-       OUT_RING(chan, f->Enabled ? 1 : 0);
+       OUT_RING(chan, ((source == GL_FRAGMENT_DEPTH_EXT &&
+                        f->FogDistanceMode == GL_EYE_PLANE_ABSOLUTE_NV) ?
+                       get_fog_mode_unsigned(f->Mode) :
+                       get_fog_mode_signed(f->Mode)));
+       OUT_RING(chan, get_fog_source(source, f->FogDistanceMode));
+       OUT_RINGb(chan, f->Enabled);
        OUT_RING(chan, pack_rgba_f(MESA_FORMAT_RGBA8888_REV, f->Color));
 
        BEGIN_RING(chan, kelvin, NV20_3D_FOG_COEFF(0), 3);
@@ -172,18 +182,18 @@ nv20_emit_light_model(struct gl_context *ctx, int emit)
        struct gl_lightmodel *m = &ctx->Light.Model;
 
        BEGIN_RING(chan, kelvin, NV20_3D_SEPARATE_SPECULAR_ENABLE, 1);
-       OUT_RING(chan, m->ColorControl == GL_SEPARATE_SPECULAR_COLOR ? 1 : 0);
+       OUT_RINGb(chan, m->ColorControl == GL_SEPARATE_SPECULAR_COLOR);
 
        BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_MODEL, 1);
        OUT_RING(chan, ((m->LocalViewer ?
                         NV20_3D_LIGHT_MODEL_VIEWER_LOCAL :
                         NV20_3D_LIGHT_MODEL_VIEWER_NONLOCAL) |
-                       (NEED_SECONDARY_COLOR(ctx) ?
+                       (_mesa_need_secondary_color(ctx) ?
                         NV20_3D_LIGHT_MODEL_SEPARATE_SPECULAR :
                         0)));
 
        BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_MODEL_TWO_SIDE_ENABLE, 1);
-       OUT_RING(chan, ctx->Light.Model.TwoSide ? 1 : 0);
+       OUT_RINGb(chan, ctx->Light.Model.TwoSide);
 }
 
 void