[Mesa-dev] [PATCH] mesa: add glsl version query (v4)

Brian Paul brianp at vmware.com
Tue Feb 13 16:19:19 UTC 2018


On 02/13/2018 05:07 AM, Vadym Shovkoplias wrote:
> Add support for GL_NUM_SHADING_LANGUAGE_VERSIONS
> and glGetStringi for GL_SHADING_LANGUAGE_VERSION
> 
> v2:
>    - Combine similar functionality into
>      _mesa_get_shading_language_version() function.
>    - Change GLSL version return mechanism.
> v3:
>    - Add return of empty string for GLSL ver 1.10.
>    - Move _mesa_get_shading_language_version() function
>      to src/mesa/main/version.c.
> v4:
>    - Add OpenGL version check.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104915
> Signed-off-by: Andriy Khulap <andriy.khulap at globallogic.com>
> Signed-off-by: Vadym Shovkoplias <vadym.shovkoplias at globallogic.com>
> ---
>   src/mapi/glapi/gen/GL4x.xml      |  1 +
>   src/mesa/main/get.c              | 14 +++++++++
>   src/mesa/main/get_hash_params.py |  3 ++
>   src/mesa/main/getstring.c        | 18 +++++++++++
>   src/mesa/main/version.c          | 64 ++++++++++++++++++++++++++++++++++++++++
>   src/mesa/main/version.h          |  5 ++++
>   6 files changed, 105 insertions(+)
> 
> diff --git a/src/mapi/glapi/gen/GL4x.xml b/src/mapi/glapi/gen/GL4x.xml
> index cd2e3b831e..2116286b35 100644
> --- a/src/mapi/glapi/gen/GL4x.xml
> +++ b/src/mapi/glapi/gen/GL4x.xml
> @@ -42,6 +42,7 @@
>   
>   <category name="4.3">
>     <enum name="SHADER_STORAGE_BARRIER_BIT"                value="0x2000" />
> +  <enum name="NUM_SHADING_LANGUAGE_VERSIONS"             value="0x82E9" />
>     <enum name="MAX_COMBINED_SHADER_OUTPUT_RESOURCES"      value="0x8F39" />
>     <enum name="SHADER_STORAGE_BUFFER"                     value="0x90D2"/>
>     <enum name="SHADER_STORAGE_BUFFER_BINDING"             value="0x90D3"/>
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 218801791e..9663387be7 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -165,6 +165,7 @@ enum value_extra {
>      EXTRA_EXT_FB_NO_ATTACH_GS,
>      EXTRA_EXT_ES_GS,
>      EXTRA_EXT_PROVOKING_VERTEX_32,
> +   EXTRA_EXT_GL43_NUM_SHADING_LANG_VERSIONS,

I think you should instead add a EXTRA_VERSION_43 enum  earlier in the 
list and simplify the version checking below.  I'm attaching a suggested 
patch.

-Brian

>   };
>   
>   #define NO_EXTRA NULL
> @@ -589,6 +590,10 @@ static const int extra_EXT_disjoint_timer_query[] = {
>      EXTRA_END
>   };
>   
> +static const int extra_EXT_gl43_num_shading_lang_versions[] = {
> +   EXTRA_EXT_GL43_NUM_SHADING_LANG_VERSIONS,
> +   EXTRA_END
> +};
>   
>   /* This is the big table describing all the enums we accept in
>    * glGet*v().  The table is partitioned into six parts: enums
> @@ -1084,6 +1089,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
>            v->value_int = 0;
>         }
>         break;
> +   /* GL 4.3 */
> +   case GL_NUM_SHADING_LANGUAGE_VERSIONS:
> +      v->value_int = _mesa_get_shading_language_version(ctx, -1, NULL);
> +      break;
>      /* GL_ARB_draw_indirect */
>      case GL_DRAW_INDIRECT_BUFFER_BINDING:
>         v->value_int = ctx->DrawIndirectBuffer->Name;
> @@ -1342,6 +1351,11 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d
>            if (ctx->API == API_OPENGL_COMPAT || version == 32)
>               api_found = ctx->Extensions.EXT_provoking_vertex;
>            break;
> +      case EXTRA_EXT_GL43_NUM_SHADING_LANG_VERSIONS:
> +         api_check = TRUE;
> +         if (_mesa_is_desktop_gl(ctx) && version >= 43)
> +            api_found = GL_TRUE;
> +         break;
>         case EXTRA_END:
>            break;
>         default: /* *e is a offset into the extension struct */
> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> index e127b6bdb2..e31496579e 100644
> --- a/src/mesa/main/get_hash_params.py
> +++ b/src/mesa/main/get_hash_params.py
> @@ -543,6 +543,9 @@ descriptor=[
>   
>     # GL_ARB_texture_cube_map_array
>     [ "TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_CUBE_ARRAY_INDEX, extra_ARB_texture_cube_map_array_OES_texture_cube_map_array" ],
> +
> +  # GL_NUM_SHADING_LANGUAGE_VERSIONS
> +  [ "NUM_SHADING_LANGUAGE_VERSIONS", "LOC_CUSTOM, TYPE_INT, 0, extra_EXT_gl43_num_shading_lang_versions" ],
>   ]},
>   
>   # Enums in OpenGL Core profile and ES 3.0
> diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c
> index 931f6a476c..5431b4e31e 100644
> --- a/src/mesa/main/getstring.c
> +++ b/src/mesa/main/getstring.c
> @@ -32,6 +32,7 @@
>   #include "extensions.h"
>   #include "mtypes.h"
>   #include "macros.h"
> +#include "version.h"
>   
>   /**
>    * Return the string for a glGetString(GL_SHADING_LANGUAGE_VERSION) query.
> @@ -186,6 +187,23 @@ _mesa_GetStringi(GLenum name, GLuint index)
>            return (const GLubyte *) 0;
>         }
>         return _mesa_get_enabled_extension(ctx, index);
> +   case GL_SHADING_LANGUAGE_VERSION:
> +      {
> +         char *version;
> +         int num;
> +         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 43) {
> +            _mesa_error(ctx, GL_INVALID_ENUM,
> +               "glGetStringi(GL_SHADING_LANGUAGE_VERSION): supported only in GL4.3 and later");
> +            return (const GLubyte *) 0;
> +         }
> +         num = _mesa_get_shading_language_version(ctx, index, &version);
> +         if (index >= num) {
> +            _mesa_error(ctx, GL_INVALID_VALUE,
> +               "glGetStringi(GL_SHADING_LANGUAGE_VERSION, index=%d)", index);
> +            return (const GLubyte *) 0;
> +         }
> +         return (const GLubyte *) version;
> +      }
>      default:
>         _mesa_error(ctx, GL_INVALID_ENUM, "glGetStringi");
>         return (const GLubyte *) 0;
> diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
> index 1fce8fe7ca..d26baab820 100644
> --- a/src/mesa/main/version.c
> +++ b/src/mesa/main/version.c
> @@ -665,3 +665,67 @@ _mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid)
>   {
>      ctx->Driver.GetDeviceUuid(ctx, (char*) uuid);
>   }
> +
> +/**
> + * Get the i-th GLSL version string.  If index=0, return the most recent
> + * supported version.
> + * \param ctx context to query
> + * \param index  which version string to return, or -1 if none
> + * \param versionOut returns the vesrion string
> + * \return total number of shading language versions.
> + */
> +int
> +_mesa_get_shading_language_version(const struct gl_context *ctx,
> +                                   int index,
> +                                   char **versionOut)
> +{
> +   int n = 0;
> +
> +#define GLSL_VERSION(S) \
> +   if (n++ == index) \
> +      *versionOut = S
> +
> +   /* GLSL core */
> +   if (ctx->Const.GLSLVersion >= 460)
> +      GLSL_VERSION("460");
> +   if (ctx->Const.GLSLVersion >= 450)
> +      GLSL_VERSION("450");
> +   if (ctx->Const.GLSLVersion >= 440)
> +      GLSL_VERSION("440");
> +   if (ctx->Const.GLSLVersion >= 430)
> +      GLSL_VERSION("430");
> +   if (ctx->Const.GLSLVersion >= 420)
> +      GLSL_VERSION("420");
> +   if (ctx->Const.GLSLVersion >= 410)
> +      GLSL_VERSION("410");
> +   if (ctx->Const.GLSLVersion >= 400)
> +      GLSL_VERSION("400");
> +   if (ctx->Const.GLSLVersion >= 330)
> +      GLSL_VERSION("330");
> +   if (ctx->Const.GLSLVersion >= 150)
> +      GLSL_VERSION("150");
> +   if (ctx->Const.GLSLVersion >= 140)
> +      GLSL_VERSION("140");
> +   if (ctx->Const.GLSLVersion >= 130)
> +      GLSL_VERSION("130");
> +   if (ctx->Const.GLSLVersion >= 120)
> +      GLSL_VERSION("120");
> +   /* The GL spec says to return the empty string for GLSL 1.10 */
> +   if (ctx->Const.GLSLVersion >= 110)
> +      GLSL_VERSION("");
> +
> +   /* GLSL es */
> +   if ((ctx->API == API_OPENGLES2 && ctx->Version >= 32) ||
> +        ctx->Extensions.ARB_ES3_2_compatibility)
> +      GLSL_VERSION("320 es");
> +   if (_mesa_is_gles31(ctx) || ctx->Extensions.ARB_ES3_1_compatibility)
> +      GLSL_VERSION("310 es");
> +   if (_mesa_is_gles3(ctx) || ctx->Extensions.ARB_ES3_compatibility)
> +      GLSL_VERSION("300 es");
> +   if (ctx->API == API_OPENGLES2 || ctx->Extensions.ARB_ES2_compatibility)
> +      GLSL_VERSION("100");
> +
> +#undef GLSL_VERSION
> +
> +   return n;
> +}
> diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
> index 4cb5e5f0fa..adfec6f828 100644
> --- a/src/mesa/main/version.h
> +++ b/src/mesa/main/version.h
> @@ -53,4 +53,9 @@ _mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid);
>   extern void
>   _mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid);
>   
> +extern int
> +_mesa_get_shading_language_version(const struct gl_context *ctx,
> +                                   int index,
> +                                   char **versionOut);
> +
>   #endif /* VERSION_H */
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: glsl-versions.patch
Type: text/x-patch
Size: 3039 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180213/24d47054/attachment-0001.bin>


More information about the mesa-dev mailing list