mesa: Require that drivers supporting point sprites support point parameters
authorIan Romanick <ian.d.romanick@intel.com>
Sat, 28 Jul 2012 00:38:32 +0000 (17:38 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 29 Aug 2012 22:09:35 +0000 (15:09 -0700)
All drivers in Mesa do.  This allows a lot of extension checking code to be
gutted from the function.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/main/points.c

index 87bfae27eba9dd0d5c8d4b0fa6e5bae0a0b100bf..cb6ac3922e0a43e03a77d408e7b9f140610b8744 100644 (file)
@@ -104,81 +104,67 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params)
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   /* Drivers that support point sprites must also support point parameters.
+    * If point parameters aren't supported, then this function shouldn't even
+    * exist.
+    */
+   ASSERT(!(ctx->Extensions.ARB_point_sprite
+            || ctx->Extensions.NV_point_sprite)
+          || ctx->Extensions.EXT_point_parameters);
+
+   if (!ctx->Extensions.EXT_point_parameters) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "unsupported function called (unsupported extension)");
+      return;
+   }
+
    switch (pname) {
       case GL_DISTANCE_ATTENUATION_EXT:
-         if (ctx->Extensions.EXT_point_parameters) {
-            if (TEST_EQ_3V(ctx->Point.Params, params))
-              return;
-           FLUSH_VERTICES(ctx, _NEW_POINT);
-            COPY_3V(ctx->Point.Params, params);
-            ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 ||
-                                      ctx->Point.Params[1] != 0.0 ||
-                                      ctx->Point.Params[2] != 0.0);
-
-            if (ctx->Point._Attenuated)
-               ctx->_TriangleCaps |= DD_POINT_ATTEN;
-            else
-               ctx->_TriangleCaps &= ~DD_POINT_ATTEN;
-         }
-         else {
-            _mesa_error(ctx, GL_INVALID_ENUM,
-                        "glPointParameterf[v]{EXT,ARB}(pname)");
+         if (TEST_EQ_3V(ctx->Point.Params, params))
             return;
-         }
+         FLUSH_VERTICES(ctx, _NEW_POINT);
+         COPY_3V(ctx->Point.Params, params);
+         ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 ||
+                                   ctx->Point.Params[1] != 0.0 ||
+                                   ctx->Point.Params[2] != 0.0);
+
+         if (ctx->Point._Attenuated)
+            ctx->_TriangleCaps |= DD_POINT_ATTEN;
+         else
+            ctx->_TriangleCaps &= ~DD_POINT_ATTEN;
          break;
       case GL_POINT_SIZE_MIN_EXT:
-         if (ctx->Extensions.EXT_point_parameters) {
-            if (params[0] < 0.0F) {
-               _mesa_error( ctx, GL_INVALID_VALUE,
-                            "glPointParameterf[v]{EXT,ARB}(param)" );
-               return;
-            }
-            if (ctx->Point.MinSize == params[0])
-               return;
-            FLUSH_VERTICES(ctx, _NEW_POINT);
-            ctx->Point.MinSize = params[0];
-         }
-         else {
-            _mesa_error(ctx, GL_INVALID_ENUM,
-                        "glPointParameterf[v]{EXT,ARB}(pname)");
+         if (params[0] < 0.0F) {
+            _mesa_error( ctx, GL_INVALID_VALUE,
+                         "glPointParameterf[v]{EXT,ARB}(param)" );
             return;
          }
+         if (ctx->Point.MinSize == params[0])
+            return;
+         FLUSH_VERTICES(ctx, _NEW_POINT);
+         ctx->Point.MinSize = params[0];
          break;
       case GL_POINT_SIZE_MAX_EXT:
-         if (ctx->Extensions.EXT_point_parameters) {
-            if (params[0] < 0.0F) {
-               _mesa_error( ctx, GL_INVALID_VALUE,
-                            "glPointParameterf[v]{EXT,ARB}(param)" );
-               return;
-            }
-            if (ctx->Point.MaxSize == params[0])
-               return;
-            FLUSH_VERTICES(ctx, _NEW_POINT);
-            ctx->Point.MaxSize = params[0];
-         }
-         else {
-            _mesa_error(ctx, GL_INVALID_ENUM,
-                        "glPointParameterf[v]{EXT,ARB}(pname)");
+         if (params[0] < 0.0F) {
+            _mesa_error( ctx, GL_INVALID_VALUE,
+                         "glPointParameterf[v]{EXT,ARB}(param)" );
             return;
          }
+         if (ctx->Point.MaxSize == params[0])
+            return;
+         FLUSH_VERTICES(ctx, _NEW_POINT);
+         ctx->Point.MaxSize = params[0];
          break;
       case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
-         if (ctx->Extensions.EXT_point_parameters) {
-            if (params[0] < 0.0F) {
-               _mesa_error( ctx, GL_INVALID_VALUE,
-                            "glPointParameterf[v]{EXT,ARB}(param)" );
-               return;
-            }
-            if (ctx->Point.Threshold == params[0])
-               return;
-            FLUSH_VERTICES(ctx, _NEW_POINT);
-            ctx->Point.Threshold = params[0];
-         }
-         else {
-            _mesa_error(ctx, GL_INVALID_ENUM,
-                        "glPointParameterf[v]{EXT,ARB}(pname)");
+         if (params[0] < 0.0F) {
+            _mesa_error( ctx, GL_INVALID_VALUE,
+                         "glPointParameterf[v]{EXT,ARB}(param)" );
             return;
          }
+         if (ctx->Point.Threshold == params[0])
+            return;
+         FLUSH_VERTICES(ctx, _NEW_POINT);
+         ctx->Point.Threshold = params[0];
          break;
       case GL_POINT_SPRITE_R_MODE_NV:
          /* This is one area where ARB_point_sprite and NV_point_sprite