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).
This commit is contained in:
@@ -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)
|
||||
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";
|
||||
goto error;
|
||||
#endif
|
||||
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) {
|
||||
|
Reference in New Issue
Block a user