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:
Marek Olšák
2012-01-24 22:23:01 +01:00
parent 1d01429c6a
commit 171be75522
6 changed files with 41 additions and 22 deletions

View File

@@ -94,6 +94,9 @@ The integer capabilities:
the vertex colors are never clamped. This is the default for DX10 hardware. 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 If both clamped and unclamped CAPs are supported, the clamping can be
controlled through pipe_rasterizer_state. 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: .. _pipe_capf:

View File

@@ -105,6 +105,9 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_VERTEX_COLOR_CLAMPED: case PIPE_CAP_VERTEX_COLOR_CLAMPED:
return 1; return 1;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
return 120;
/* r300 cannot do swizzling of compressed textures. Supported otherwise. */ /* r300 cannot do swizzling of compressed textures. Supported otherwise. */
case PIPE_CAP_TEXTURE_SWIZZLE: case PIPE_CAP_TEXTURE_SWIZZLE:
return util_format_s3tc_enabled ? r300screen->caps.dxtc_swizzle : 1; return util_format_s3tc_enabled ? r300screen->caps.dxtc_swizzle : 1;

View File

@@ -367,6 +367,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
return 1; return 1;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
return debug_get_bool_option("R600_GLSL130", FALSE) ? 130 : 120;
/* Supported except the original R600. */ /* Supported except the original R600. */
case PIPE_CAP_INDEP_BLEND_ENABLE: case PIPE_CAP_INDEP_BLEND_ENABLE:
case PIPE_CAP_INDEP_BLEND_FUNC: case PIPE_CAP_INDEP_BLEND_FUNC:

View File

@@ -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_UNCLAMPED: /* draw module */
case PIPE_CAP_VERTEX_COLOR_CLAMPED: /* draw module */ case PIPE_CAP_VERTEX_COLOR_CLAMPED: /* draw module */
return 1; return 1;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
return 130;
default: default:
return 0; return 0;
} }

View File

@@ -487,7 +487,8 @@ enum pipe_cap {
PIPE_CAP_TGSI_CAN_COMPACT_VARYINGS = 58, /* temporary */ PIPE_CAP_TGSI_CAN_COMPACT_VARYINGS = 58, /* temporary */
PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS = 59, /* temporary */ PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS = 59, /* temporary */
PIPE_CAP_VERTEX_COLOR_UNCLAMPED = 60, PIPE_CAP_VERTEX_COLOR_UNCLAMPED = 60,
PIPE_CAP_VERTEX_COLOR_CLAMPED = 61 PIPE_CAP_VERTEX_COLOR_CLAMPED = 61,
PIPE_CAP_GLSL_FEATURE_LEVEL = 62,
}; };
/** /**

View File

@@ -258,10 +258,7 @@ void st_init_extensions(struct st_context *st)
{ {
struct pipe_screen *screen = st->pipe->screen; struct pipe_screen *screen = st->pipe->screen;
struct gl_context *ctx = st->ctx; struct gl_context *ctx = st->ctx;
int i; int i, glsl_feature_level;
ctx->Const.GLSLVersion = 120;
_mesa_override_glsl_version(st->ctx);
/* /*
* Extensions that are supported by all Gallium drivers: * 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; ctx->Extensions.OES_draw_texture = GL_TRUE;
#endif #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: * Extensions that depend on the driver/hardware:
*/ */
@@ -578,23 +602,6 @@ void st_init_extensions(struct st_context *st)
#endif #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; ctx->Extensions.NV_primitive_restart = GL_TRUE;
if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) { if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) {
st->sw_primitive_restart = GL_TRUE; st->sw_primitive_restart = GL_TRUE;