Commit e7087175 authored by Brian Paul's avatar Brian Paul

mesa: don't advertise bogus GL_ARB_shading_language_120 extension

Instead of using the invalid GL_ARB_shading_language_120 extension to
determine the GLSL version, use a new ctx->Const.GLSLVersion field.
Updated the intel and r600 drivers, but untested.

See fd.o bug 29910

NOTE: This is a candidate for the 7.9 branch (but let's wait and see if
there's any regressions).
parent 3642ca2f
......@@ -42,6 +42,12 @@
#include "tnl/t_pipeline.h"
static const struct dri_extension gl_21_extension[] = {
{"GL_VERSION_2_1", GL_VERSION_2_1_functions },
};
/***************************************
* Mesa's Driver Functions
***************************************/
......@@ -88,6 +94,8 @@ GLboolean brwCreateContext( int api,
TNL_CONTEXT(ctx)->Driver.RunPipeline = _tnl_run_pipeline;
ctx->Const.GLSLVersion = 120;
ctx->Const.MaxDrawBuffers = BRW_MAX_DRAW_BUFFERS;
ctx->Const.MaxTextureImageUnits = BRW_MAX_TEX_UNIT;
ctx->Const.MaxTextureCoordUnits = 8; /* Mesa limit */
......@@ -152,6 +160,8 @@ GLboolean brwCreateContext( int api,
MIN2(ctx->Const.FragmentProgram.MaxNativeParameters,
ctx->Const.FragmentProgram.MaxEnvParams);
driInitExtensions(ctx, gl_21_extension, GL_TRUE);
if (intel->is_g4x || intel->gen >= 5) {
brw->CMD_VF_STATISTICS = CMD_VF_STATISTICS_GM45;
brw->CMD_PIPELINE_SELECT = CMD_PIPELINE_SELECT_GM45;
......
......@@ -89,7 +89,6 @@ static const struct dri_extension card_extensions[] = {
{ "GL_ARB_point_sprite", NULL },
{ "GL_ARB_shader_objects", GL_ARB_shader_objects_functions },
{ "GL_ARB_shading_language_100", GL_VERSION_2_0_functions },
{ "GL_ARB_shading_language_120", GL_VERSION_2_1_functions },
{ "GL_ARB_sync", GL_ARB_sync_functions },
{ "GL_ARB_texture_border_clamp", NULL },
{ "GL_ARB_texture_cube_map", NULL },
......
......@@ -166,7 +166,6 @@ static const struct dri_extension mm_extensions[] = {
static const struct dri_extension gl_20_extension[] = {
#ifdef R600_ENABLE_GLSL_TEST
{"GL_ARB_shading_language_100", GL_VERSION_2_0_functions },
{"GL_ARB_shading_language_120", GL_VERSION_2_1_functions },
#else
{"GL_VERSION_2_0", GL_VERSION_2_0_functions },
#endif /* R600_ENABLE_GLSL_TEST */
......@@ -266,6 +265,8 @@ static void r600InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
r700->bShaderUseMemConstant = GL_FALSE;
}
ctx->Const.GLSLVersion = 120;
ctx->Const.MaxTextureImageUnits = 16;
/* 8 per clause on r6xx, 16 on r7xx
* but I think mesa only supports 8 at the moment
......
......@@ -597,6 +597,21 @@ _mesa_init_constants(GLcontext *ctx)
ctx->Const.MaxVarying = MAX_VARYING;
#endif
/* Shading language version */
if (ctx->API == API_OPENGL) {
#if FEATURE_ARB_shading_language_120
ctx->Const.GLSLVersion = 120;
#else
ctx->Const.GLSLVersion = 110;
#endif
}
else if (ctx->API == API_OPENGLES2) {
ctx->Const.GLSLVersion = 100;
}
else if (ctx->API == API_OPENGLES) {
ctx->Const.GLSLVersion = 0; /* GLSL not supported */
}
/* GL_ARB_framebuffer_object */
ctx->Const.MaxSamples = 0;
......
......@@ -77,7 +77,6 @@ static const struct {
{ OFF, "GL_ARB_seamless_cube_map", F(ARB_seamless_cube_map) },
{ OFF, "GL_ARB_shader_objects", F(ARB_shader_objects) },
{ OFF, "GL_ARB_shading_language_100", F(ARB_shading_language_100) },
{ OFF, "GL_ARB_shading_language_120", F(ARB_shading_language_120) },
{ OFF, "GL_ARB_shadow", F(ARB_shadow) },
{ OFF, "GL_ARB_shadow_ambient", F(ARB_shadow_ambient) },
{ OFF, "GL_ARB_sync", F(ARB_sync) },
......@@ -268,9 +267,6 @@ _mesa_enable_sw_extensions(GLcontext *ctx)
#endif
#if FEATURE_ARB_shading_language_100
ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
#endif
#if FEATURE_ARB_shading_language_120
ctx->Extensions.ARB_shading_language_120 = GL_TRUE;
#endif
ctx->Extensions.ARB_shadow = GL_TRUE;
ctx->Extensions.ARB_shadow_ambient = GL_TRUE;
......@@ -513,9 +509,6 @@ _mesa_enable_2_1_extensions(GLcontext *ctx)
#if FEATURE_EXT_texture_sRGB
ctx->Extensions.EXT_texture_sRGB = GL_TRUE;
#endif
#if FEATURE_ARB_shading_language_120
ctx->Extensions.ARB_shading_language_120 = GL_TRUE;
#endif
}
......
......@@ -30,26 +30,42 @@
#include "enums.h"
#include "extensions.h"
/**
* Return the string for a glGetString(GL_SHADING_LANGUAGE_VERSION) query.
*/
static const GLubyte *
shading_language_version(GLcontext *ctx)
{
switch (ctx->API) {
#if FEATURE_ARB_shading_language_100
case API_OPENGL:
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 (!ctx->Extensions.ARB_shader_objects) {
_mesa_error(ctx, GL_INVALID_ENUM, "glGetString");
return (const GLubyte *) 0;
}
switch (ctx->Const.GLSLVersion) {
case 110:
return (const GLubyte *) "1.10";
case 120:
return (const GLubyte *) "1.20";
case 130:
return (const GLubyte *) "1.30";
default:
_mesa_problem(ctx,
"Invalid GLSL version in shading_language_version()");
return (const GLubyte *) 0;
}
break;
case API_OPENGLES2:
return (const GLubyte *) "OpenGL ES GLSL ES 1.0.16";
case API_OPENGLES:
/* fall-through */
default:
error:
_mesa_error( ctx, GL_INVALID_ENUM, "glGetString" );
_mesa_problem(ctx, "Unexpected API value in shading_language_version()");
return (const GLubyte *) 0;
}
}
......
......@@ -2608,6 +2608,8 @@ struct gl_constants
GLuint MaxVarying; /**< Number of float[4] varying parameters */
GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */
/** Which texture units support GL_ATI_envmap_bumpmap as targets */
GLbitfield SupportedBumpUnits;
......@@ -2668,7 +2670,6 @@ struct gl_extensions
GLboolean ARB_seamless_cube_map;
GLboolean ARB_shader_objects;
GLboolean ARB_shading_language_100;
GLboolean ARB_shading_language_120;
GLboolean ARB_shadow;
GLboolean ARB_shadow_ambient;
GLboolean ARB_sync;
......
......@@ -84,7 +84,7 @@ compute_version(GLcontext *ctx)
(ctx->Extensions.EXT_stencil_two_side
|| ctx->Extensions.ATI_separate_stencil));
const GLboolean ver_2_1 = (ver_2_0 &&
ctx->Extensions.ARB_shading_language_120 &&
ctx->Const.GLSLVersion >= 120 &&
ctx->Extensions.EXT_pixel_buffer_object &&
ctx->Extensions.EXT_texture_sRGB);
const GLboolean ver_3_0 = (ver_2_1 &&
......
......@@ -186,6 +186,11 @@ void st_init_limits(struct st_context *st)
* attributes) supported by a driver. */
c->MaxVarying = screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_INPUTS) - 2;
c->MaxVarying = MIN2(c->MaxVarying, MAX_VARYING);
/* XXX we'll need a better query here someday */
if (screen->get_param(screen, PIPE_CAP_GLSL)) {
c->GLSLVersion = 120;
}
}
......@@ -285,7 +290,6 @@ void st_init_extensions(struct st_context *st)
ctx->Extensions.ARB_vertex_shader = GL_TRUE;
ctx->Extensions.ARB_shader_objects = GL_TRUE;
ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
ctx->Extensions.ARB_shading_language_120 = GL_TRUE;
}
if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_REPEAT) > 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment