Merge commit 'origin/gallium-0.1' into gallium-0.2
[mesa.git] / src / mesa / main / getstring.c
index c15f6a39bcb15fe2a87ea7bfcae4fff689459b3d..94bf5de1e8bf12b1423fd73db4942a69752d225f 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5.2
+ * Version:  7.1
  *
- * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -25,7 +25,6 @@
 
 
 #include "glheader.h"
-#include "colormac.h"
 #include "context.h"
 #include "get.h"
 #include "version.h"
 #include "extensions.h"
 
 
+/**
+ * Examine enabled GL extensions to determine GL version.
+ * \return version string
+ */
+static const char *
+compute_version(const GLcontext *ctx)
+{
+   static const char *version_1_2 = "1.2 Mesa " MESA_VERSION_STRING;
+   static const char *version_1_3 = "1.3 Mesa " MESA_VERSION_STRING;
+   static const char *version_1_4 = "1.4 Mesa " MESA_VERSION_STRING;
+   static const char *version_1_5 = "1.5 Mesa " MESA_VERSION_STRING;
+   static const char *version_2_0 = "2.0 Mesa " MESA_VERSION_STRING;
+   static const char *version_2_1 = "2.1 Mesa " MESA_VERSION_STRING;
+
+   const GLboolean ver_1_3 = (ctx->Extensions.ARB_multisample &&
+                              ctx->Extensions.ARB_multitexture &&
+                              ctx->Extensions.ARB_texture_border_clamp &&
+                              ctx->Extensions.ARB_texture_compression &&
+                              ctx->Extensions.ARB_texture_cube_map &&
+                              ctx->Extensions.EXT_texture_env_add &&
+                              ctx->Extensions.ARB_texture_env_combine &&
+                              ctx->Extensions.ARB_texture_env_dot3);
+   const GLboolean ver_1_4 = (ver_1_3 &&
+                              ctx->Extensions.ARB_depth_texture &&
+                              ctx->Extensions.ARB_shadow &&
+                              ctx->Extensions.ARB_texture_env_crossbar &&
+                              ctx->Extensions.ARB_texture_mirrored_repeat &&
+                              ctx->Extensions.ARB_window_pos &&
+                              ctx->Extensions.EXT_blend_color &&
+                              ctx->Extensions.EXT_blend_func_separate &&
+                              ctx->Extensions.EXT_blend_minmax &&
+                              ctx->Extensions.EXT_blend_subtract &&
+                              ctx->Extensions.EXT_fog_coord &&
+                              ctx->Extensions.EXT_multi_draw_arrays &&
+                              ctx->Extensions.EXT_point_parameters &&
+                              ctx->Extensions.EXT_secondary_color &&
+                              ctx->Extensions.EXT_stencil_wrap &&
+                              ctx->Extensions.EXT_texture_lod_bias &&
+                              ctx->Extensions.SGIS_generate_mipmap);
+   const GLboolean ver_1_5 = (ver_1_4 &&
+                              ctx->Extensions.ARB_occlusion_query &&
+                              ctx->Extensions.ARB_vertex_buffer_object &&
+                              ctx->Extensions.EXT_shadow_funcs);
+   const GLboolean ver_2_0 = (ver_1_5 &&
+                              ctx->Extensions.ARB_draw_buffers &&
+                              ctx->Extensions.ARB_point_sprite &&
+                              ctx->Extensions.ARB_shader_objects &&
+                              ctx->Extensions.ARB_vertex_shader &&
+                              ctx->Extensions.ARB_fragment_shader &&
+                              ctx->Extensions.ARB_texture_non_power_of_two &&
+                              ctx->Extensions.EXT_blend_equation_separate);
+   const GLboolean ver_2_1 = (ver_2_0 &&
+                              /*ctx->Extensions.ARB_shading_language_120 &&*/
+                              ctx->Extensions.EXT_pixel_buffer_object &&
+                              ctx->Extensions.EXT_texture_sRGB);
+   if (ver_2_1)
+      return version_2_1;
+   if (ver_2_0)
+      return version_2_0;
+   if (ver_1_5)
+      return version_1_5;
+   if (ver_1_4)
+      return version_1_4;
+   if (ver_1_3)
+      return version_1_3;
+   return version_1_2;
+}
+
+
+
 /**
  * Query string-valued state.  The return value should _not_ be freed by
  * the caller.
@@ -50,16 +119,6 @@ _mesa_GetString( GLenum name )
    GET_CURRENT_CONTEXT(ctx);
    static const char *vendor = "Brian Paul";
    static const char *renderer = "Mesa";
-   static const char *version_1_2 = "1.2 Mesa " MESA_VERSION_STRING;
-   static const char *version_1_3 = "1.3 Mesa " MESA_VERSION_STRING;
-   static const char *version_1_4 = "1.4 Mesa " MESA_VERSION_STRING;
-   static const char *version_1_5 = "1.5 Mesa " MESA_VERSION_STRING;
-   static const char *version_2_0 = "2.0 Mesa " MESA_VERSION_STRING;
-   static const char *version_2_1 = "2.1 Mesa " MESA_VERSION_STRING;
-
-#if FEATURE_ARB_shading_language_100
-   static const char *sl_version_110 = "1.10 Mesa " MESA_VERSION_STRING;
-#endif
 
    if (!ctx)
       return NULL;
@@ -79,74 +138,19 @@ _mesa_GetString( GLenum name )
       case GL_VENDOR:
          return (const GLubyte *) vendor;
       case GL_RENDERER:
-          return (const GLubyte *) renderer;
+         return (const GLubyte *) renderer;
       case GL_VERSION:
-         if (ctx->Extensions.ARB_multisample &&
-             ctx->Extensions.ARB_multitexture &&
-             ctx->Extensions.ARB_texture_border_clamp &&
-             ctx->Extensions.ARB_texture_compression &&
-             ctx->Extensions.ARB_texture_cube_map &&
-             ctx->Extensions.EXT_texture_env_add &&
-             ctx->Extensions.ARB_texture_env_combine &&
-             ctx->Extensions.ARB_texture_env_dot3) {
-            if (ctx->Extensions.ARB_depth_texture &&
-                ctx->Extensions.ARB_shadow &&
-                ctx->Extensions.ARB_texture_env_crossbar &&
-                ctx->Extensions.ARB_texture_mirrored_repeat &&
-                ctx->Extensions.ARB_window_pos &&
-                ctx->Extensions.EXT_blend_color &&
-                ctx->Extensions.EXT_blend_func_separate &&
-                ctx->Extensions.EXT_blend_minmax &&
-                ctx->Extensions.EXT_blend_subtract &&
-                ctx->Extensions.EXT_fog_coord &&
-                ctx->Extensions.EXT_multi_draw_arrays &&
-                ctx->Extensions.EXT_point_parameters && /*aka ARB*/
-                ctx->Extensions.EXT_secondary_color &&
-                ctx->Extensions.EXT_stencil_wrap &&
-                ctx->Extensions.EXT_texture_lod_bias &&
-                ctx->Extensions.SGIS_generate_mipmap) {
-               if (ctx->Extensions.ARB_occlusion_query &&
-                   ctx->Extensions.ARB_vertex_buffer_object &&
-                   ctx->Extensions.EXT_shadow_funcs) {
-                  if (ctx->Extensions.ARB_draw_buffers &&
-                      ctx->Extensions.ARB_point_sprite &&
-                      ctx->Extensions.ARB_shader_objects &&
-                      ctx->Extensions.ARB_vertex_shader &&
-                      ctx->Extensions.ARB_fragment_shader &&
-                      ctx->Extensions.ARB_texture_non_power_of_two &&
-                      ctx->Extensions.EXT_blend_equation_separate) {
-                     if (ctx->Extensions.ARB_shading_language_120 &&
-                         ctx->Extensions.EXT_pixel_buffer_object &&
-                         ctx->Extensions.EXT_texture_sRGB) {
-                        return (const GLubyte *) version_2_1;
-                     }
-                     else {
-                        return (const GLubyte *) version_2_0;
-                     }
-                  }
-                  else {
-                     return (const GLubyte *) version_1_5;
-                  }
-               }
-               else {
-                  return (const GLubyte *) version_1_4;
-               }
-            }
-            else {
-               return (const GLubyte *) version_1_3;
-            }
-         }
-         else {
-            return (const GLubyte *) version_1_2;
-         }
+         return (const GLubyte *) compute_version(ctx);
       case GL_EXTENSIONS:
          if (!ctx->Extensions.String)
             ctx->Extensions.String = _mesa_make_extension_string(ctx);
          return (const GLubyte *) ctx->Extensions.String;
 #if FEATURE_ARB_shading_language_100
       case GL_SHADING_LANGUAGE_VERSION_ARB:
-         if (ctx->Extensions.ARB_shading_language_100)
-            return (const GLubyte *) sl_version_110;
+         if (ctx->Extensions.ARB_shading_language_120)
+            return (const GLubyte *) "1.20";
+         else if (ctx->Extensions.ARB_shading_language_100)
+            return (const GLubyte *) "1.10";
          goto error;
 #endif
 #if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program || \