diff options
author | Marek Olšák <maraeo@gmail.com> | 2012-01-24 22:23:01 +0100 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2012-01-29 02:16:00 +0100 |
commit | 171be755223d99f8cc5cc1bdaf8bd7b4caa04b4f (patch) | |
tree | 4fa7b708b29027241eda8262dfa0c0e50fc8b2b4 | |
parent | 1d01429c6a1ae679d0cc0cb61db1948fca5ced4c (diff) |
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.
-rw-r--r-- | src/gallium/docs/source/screen.rst | 3 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_screen.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/softpipe/sp_screen.c | 2 | ||||
-rw-r--r-- | src/gallium/include/pipe/p_defines.h | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_extensions.c | 49 |
6 files changed, 41 insertions, 22 deletions
diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst index 8161c64253d..2af9f74e902 100644 --- a/src/gallium/docs/source/screen.rst +++ b/src/gallium/docs/source/screen.rst @@ -96,2 +96,5 @@ The integer capabilities: 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. + diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index 48a65696359..9a9418bc927 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -107,2 +107,5 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param) + case PIPE_CAP_GLSL_FEATURE_LEVEL: + return 120; + /* r300 cannot do swizzling of compressed textures. Supported otherwise. */ diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index c38fbc59c5a..1123557a5ec 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -369,2 +369,5 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param) + case PIPE_CAP_GLSL_FEATURE_LEVEL: + return debug_get_bool_option("R600_GLSL130", FALSE) ? 130 : 120; + /* Supported except the original R600. */ diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index 37bbc43f325..6cafeafbe19 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -134,2 +134,4 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param) return 1; + case PIPE_CAP_GLSL_FEATURE_LEVEL: + return 130; default: diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 2cd11f988ab..000be3d86cf 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -489,3 +489,4 @@ enum pipe_cap { PIPE_CAP_VERTEX_COLOR_UNCLAMPED = 60, - PIPE_CAP_VERTEX_COLOR_CLAMPED = 61 + PIPE_CAP_VERTEX_COLOR_CLAMPED = 61, + PIPE_CAP_GLSL_FEATURE_LEVEL = 62, }; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 49709d34260..f8b9ff879eb 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -260,6 +260,3 @@ void st_init_extensions(struct st_context *st) struct gl_context *ctx = st->ctx; - int i; - - ctx->Const.GLSLVersion = 120; - _mesa_override_glsl_version(st->ctx); + int i, glsl_feature_level; @@ -332,2 +329,29 @@ void st_init_extensions(struct st_context *st) + /* 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; + } + } + /* @@ -580,19 +604,2 @@ void st_init_extensions(struct st_context *st) - 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; |