st/mesa: add PIPE_CAP_GLSL_FEATURE_LEVEL, cleanup st_extensions.c
v2: handle the cap in r300 and r600 as well Additional info for r600g: The env var R600_GLSL130=1 enables GLSL 1.3. Along with R600_STREAMOUT=1, it enables full GL 3.
This commit is contained in:
@@ -94,6 +94,9 @@ The integer capabilities:
|
||||
the vertex colors are never clamped. This is the default for DX10 hardware.
|
||||
If both clamped and unclamped CAPs are supported, the clamping can be
|
||||
controlled through pipe_rasterizer_state.
|
||||
* ``PIPE_CAP_GLSL_FEATURE_LEVEL``: Whether the driver supports features
|
||||
equivalent to a specific GLSL version. E.g. for GLSL 1.3, report 130.
|
||||
|
||||
|
||||
|
||||
.. _pipe_capf:
|
||||
|
@@ -105,6 +105,9 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||
return 120;
|
||||
|
||||
/* r300 cannot do swizzling of compressed textures. Supported otherwise. */
|
||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||
return util_format_s3tc_enabled ? r300screen->caps.dxtc_swizzle : 1;
|
||||
|
@@ -367,6 +367,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||
return debug_get_bool_option("R600_GLSL130", FALSE) ? 130 : 120;
|
||||
|
||||
/* Supported except the original R600. */
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
|
@@ -132,6 +132,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: /* draw module */
|
||||
case PIPE_CAP_VERTEX_COLOR_CLAMPED: /* draw module */
|
||||
return 1;
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||
return 130;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@@ -487,7 +487,8 @@ enum pipe_cap {
|
||||
PIPE_CAP_TGSI_CAN_COMPACT_VARYINGS = 58, /* temporary */
|
||||
PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS = 59, /* temporary */
|
||||
PIPE_CAP_VERTEX_COLOR_UNCLAMPED = 60,
|
||||
PIPE_CAP_VERTEX_COLOR_CLAMPED = 61
|
||||
PIPE_CAP_VERTEX_COLOR_CLAMPED = 61,
|
||||
PIPE_CAP_GLSL_FEATURE_LEVEL = 62,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -258,10 +258,7 @@ void st_init_extensions(struct st_context *st)
|
||||
{
|
||||
struct pipe_screen *screen = st->pipe->screen;
|
||||
struct gl_context *ctx = st->ctx;
|
||||
int i;
|
||||
|
||||
ctx->Const.GLSLVersion = 120;
|
||||
_mesa_override_glsl_version(st->ctx);
|
||||
int i, glsl_feature_level;
|
||||
|
||||
/*
|
||||
* Extensions that are supported by all Gallium drivers:
|
||||
@@ -330,6 +327,33 @@ void st_init_extensions(struct st_context *st)
|
||||
ctx->Extensions.OES_draw_texture = GL_TRUE;
|
||||
#endif
|
||||
|
||||
/* Figure out GLSL support. */
|
||||
glsl_feature_level = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL);
|
||||
|
||||
if (glsl_feature_level >= 130) {
|
||||
ctx->Const.GLSLVersion = 130;
|
||||
} else {
|
||||
ctx->Const.GLSLVersion = 120;
|
||||
}
|
||||
|
||||
_mesa_override_glsl_version(st->ctx);
|
||||
|
||||
if (ctx->Const.GLSLVersion >= 130) {
|
||||
ctx->Const.NativeIntegers = GL_TRUE;
|
||||
ctx->Const.MaxClipPlanes = 8;
|
||||
|
||||
/* Extensions that only depend on GLSL 1.3. */
|
||||
ctx->Extensions.ARB_conservative_depth = GL_TRUE;
|
||||
} else {
|
||||
/* Optional integer support for GLSL 1.2. */
|
||||
if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
|
||||
PIPE_SHADER_CAP_INTEGERS) &&
|
||||
screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
|
||||
PIPE_SHADER_CAP_INTEGERS)) {
|
||||
ctx->Const.NativeIntegers = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Extensions that depend on the driver/hardware:
|
||||
*/
|
||||
@@ -578,23 +602,6 @@ void st_init_extensions(struct st_context *st)
|
||||
#endif
|
||||
}
|
||||
|
||||
if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
|
||||
PIPE_SHADER_CAP_INTEGERS) &&
|
||||
screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
|
||||
PIPE_SHADER_CAP_INTEGERS)) {
|
||||
ctx->Const.NativeIntegers = GL_TRUE;
|
||||
}
|
||||
|
||||
if (ctx->Const.NativeIntegers)
|
||||
ctx->Const.GLSLVersion = 130;
|
||||
|
||||
/* Extensions that only depend on the GLSL version:
|
||||
*/
|
||||
if (ctx->Const.GLSLVersion >= 130) {
|
||||
ctx->Extensions.ARB_conservative_depth = GL_TRUE;
|
||||
ctx->Const.MaxClipPlanes = 8;
|
||||
}
|
||||
|
||||
ctx->Extensions.NV_primitive_restart = GL_TRUE;
|
||||
if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) {
|
||||
st->sw_primitive_restart = GL_TRUE;
|
||||
|
Reference in New Issue
Block a user