vbo: pass the stream from DrawTransformFeedbackStream to drivers
[mesa.git] / src / mesa / tnl / t_rasterpos.c
index 3ee5c454793f0bfeacb6f8989db5392755108a7a..4bd9ac8539e520b487aeaeed38188a5001adf8aa 100644 (file)
  */
 
 
+#include "c99_math.h"
 #include "main/glheader.h"
-#include "main/colormac.h"
 #include "main/feedback.h"
 #include "main/light.h"
 #include "main/macros.h"
-#include "main/simple_list.h"
+#include "util/simple_list.h"
 #include "main/mtypes.h"
+#include "main/viewport.h"
 
 #include "math/m_matrix.h"
 #include "tnl/tnl.h"
@@ -147,7 +148,7 @@ shade_rastpos(struct gl_context *ctx,
         SUB_3V(VP, light->_Position, vertex);
          /* d = length(VP) */
         d = (GLfloat) LEN_3FV( VP );
-        if (d > 1.0e-6) {
+        if (d > 1.0e-6F) {
             /* normalize VP */
            GLfloat invd = 1.0F / d;
            SELF_SCALE_SCALAR_3V(VP, invd);
@@ -171,7 +172,7 @@ shade_rastpos(struct gl_context *ctx,
         }
       }
 
-      if (attenuation < 1e-3)
+      if (attenuation < 1e-3F)
         continue;
 
       n_dot_VP = DOT3( normal, VP );
@@ -218,7 +219,7 @@ shade_rastpos(struct gl_context *ctx,
            shine = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_SHININESS][0];
            spec_coef = powf(n_dot_h, shine);
 
-           if (spec_coef > 1.0e-10) {
+           if (spec_coef > 1.0e-10F) {
                if (ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) {
                   ACC_SCALE_SCALAR_3V( specularContrib, spec_coef,
                                        light->_MatSpecular[0]);
@@ -271,7 +272,7 @@ compute_texgen(struct gl_context *ctx, const GLfloat vObj[4], const GLfloat vEye
    rz = u[2] - normal[2] * two_nu;
    m = rx * rx + ry * ry + (rz + 1.0F) * (rz + 1.0F);
    if (m > 0.0F)
-      mInv = 0.5F * INV_SQRTF(m);
+      mInv = 0.5F * (1.0f / sqrtf(m));
    else
       mInv = 0.0F;
 
@@ -377,6 +378,7 @@ _tnl_RasterPos(struct gl_context *ctx, const GLfloat vObj[4])
       GLfloat eye[4], clip[4], ndc[3], d;
       GLfloat *norm, eyenorm[3];
       GLfloat *objnorm = ctx->Current.Attrib[VERT_ATTRIB_NORMAL];
+      float scale[3], translate[3];
 
       /* apply modelview matrix:  eye = MV * obj */
       TRANSFORM_POINT( eye, ctx->ModelviewMatrixStack.Top->m, vObj );
@@ -409,19 +411,16 @@ _tnl_RasterPos(struct gl_context *ctx, const GLfloat vObj[4])
       ndc[1] = clip[1] * d;
       ndc[2] = clip[2] * d;
       /* wincoord = viewport_mapping(ndc) */
-      ctx->Current.RasterPos[0] = (ndc[0] * ctx->Viewport._WindowMap.m[MAT_SX]
-                                   + ctx->Viewport._WindowMap.m[MAT_TX]);
-      ctx->Current.RasterPos[1] = (ndc[1] * ctx->Viewport._WindowMap.m[MAT_SY]
-                                   + ctx->Viewport._WindowMap.m[MAT_TY]);
-      ctx->Current.RasterPos[2] = (ndc[2] * ctx->Viewport._WindowMap.m[MAT_SZ]
-                                   + ctx->Viewport._WindowMap.m[MAT_TZ])
-                                  / ctx->DrawBuffer->_DepthMaxF;
+      _mesa_get_viewport_xform(ctx, 0, scale, translate);
+      ctx->Current.RasterPos[0] = ndc[0] * scale[0] + translate[0];
+      ctx->Current.RasterPos[1] = ndc[1] * scale[1] + translate[1];
+      ctx->Current.RasterPos[2] = ndc[2] * scale[2] + translate[2];
       ctx->Current.RasterPos[3] = clip[3];
 
       if (ctx->Transform.DepthClamp) {
         ctx->Current.RasterPos[3] = CLAMP(ctx->Current.RasterPos[3],
-                                          ctx->Viewport.Near,
-                                          ctx->Viewport.Far);
+                                          ctx->ViewportArray[0].Near,
+                                          ctx->ViewportArray[0].Far);
       }
 
       /* compute raster distance */