diff options
author | Kristian Høgsberg <[email protected]> | 2010-05-24 10:01:38 -0400 |
---|---|---|
committer | Kristian Høgsberg <[email protected]> | 2010-05-24 10:02:13 -0400 |
commit | f67b020a942911f80b7b774c6d64701d1981c608 (patch) | |
tree | 346fe4eb66b537070037f544cf632b88b1bf02ec /src/mesa/shader | |
parent | 740c8ea6d371732f3530accde44836930e03cc80 (diff) |
mesa: Handle FEATURE_es2_glsl differences at runtime too
Now that we can support different APIs at runtime, we need to check the
context for the API we're currently providing as well.
https://bugs.freedesktop.org/show_bug.cgi?id=28194
Diffstat (limited to 'src/mesa/shader')
-rw-r--r-- | src/mesa/shader/program.c | 3 | ||||
-rw-r--r-- | src/mesa/shader/slang/slang_codegen.c | 4 | ||||
-rw-r--r-- | src/mesa/shader/slang/slang_compile.c | 25 | ||||
-rw-r--r-- | src/mesa/shader/slang/slang_link.c | 16 |
4 files changed, 31 insertions, 17 deletions
diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index f77a7737530..a6ada8a048b 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -74,7 +74,8 @@ _mesa_init_program(GLcontext *ctx) #if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program ctx->VertexProgram.Enabled = GL_FALSE; #if FEATURE_es2_glsl - ctx->VertexProgram.PointSizeEnabled = GL_TRUE; + ctx->VertexProgram.PointSizeEnabled = + (ctx->API == API_OPENGLES2) ? GL_TRUE : GL_FALSE; #else ctx->VertexProgram.PointSizeEnabled = GL_FALSE; #endif diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 4b876a460c2..2d8116850f9 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -4971,6 +4971,7 @@ GLboolean _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var, slang_unit_type type) { + GET_CURRENT_CONTEXT(ctx); struct gl_program *prog = A->program; const char *varName = (char *) var->a_name; GLboolean success = GL_TRUE; @@ -5000,7 +5001,8 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var, } #if FEATURE_es2_glsl /* XXX should use FEATURE_texture_rect */ /* disallow rect samplers */ - if (is_rect_sampler_spec(&var->type.specifier)) { + if (ctx->API == API_OPENGLES2 && + is_rect_sampler_spec(&var->type.specifier)) { slang_info_log_error(A->log, "invalid sampler type for '%s'", varName); return GL_FALSE; } diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c index ad866761570..e7938e55ad9 100644 --- a/src/mesa/shader/slang/slang_compile.c +++ b/src/mesa/shader/slang/slang_compile.c @@ -2485,10 +2485,14 @@ parse_default_precision(slang_parse_ctx * C, slang_output_ctx * O) static void init_default_precision(slang_output_ctx *O, slang_unit_type type) { + GET_CURRENT_CONTEXT(ctx); GLuint i; for (i = 0; i < TYPE_SPECIFIER_COUNT; i++) { #if FEATURE_es2_glsl - O->default_precision[i] = PRECISION_LOW; + if (ctx->API == API_OPENGLES2) + O->default_precision[i] = PRECISION_LOW; + else + O->default_precision[i] = PRECISION_HIGH; #else O->default_precision[i] = PRECISION_HIGH; #endif @@ -2559,7 +2563,8 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit, /* allow 'invariant' keyword? */ #if FEATURE_es2_glsl - o.allow_invariant = GL_TRUE; + o.allow_invariant = + (ctx->API == API_OPENGLES2 || C->version >= 120) ? GL_TRUE : GL_FALSE; #else o.allow_invariant = (C->version >= 120) ? GL_TRUE : GL_FALSE; #endif @@ -2569,7 +2574,8 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit, /* allow 'lowp/mediump/highp' keywords? */ #if FEATURE_es2_glsl - o.allow_precision = GL_TRUE; + o.allow_precision = + (ctx->API == API_OPENGLES2 || C->version >= 120) ? GL_TRUE : GL_FALSE; #else o.allow_precision = (C->version >= 120) ? GL_TRUE : GL_FALSE; #endif @@ -2690,6 +2696,7 @@ compile_with_grammar(const char *source, unsigned int shader_type, unsigned int parsing_builtin) { + GET_CURRENT_CONTEXT(ctx); struct sl_pp_purify_options options; struct sl_pp_context *context; unsigned char *prod; @@ -2728,11 +2735,13 @@ compile_with_grammar(const char *source, #if FEATURE_es2_glsl - if (sl_pp_context_add_predefined(context, "GL_ES", "1") || - sl_pp_context_add_predefined(context, "GL_FRAGMENT_PRECISION_HIGH", "1")) { - slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context)); - sl_pp_context_destroy(context); - return GL_FALSE; + if (ctx->API == API_OPENGLES2) { + if (sl_pp_context_add_predefined(context, "GL_ES", "1") || + sl_pp_context_add_predefined(context, "GL_FRAGMENT_PRECISION_HIGH", "1")) { + slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context)); + sl_pp_context_destroy(context); + return GL_FALSE; + } } #endif diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c index b16778f8ad4..3d4208ce4c5 100644 --- a/src/mesa/shader/slang/slang_link.c +++ b/src/mesa/shader/slang/slang_link.c @@ -858,13 +858,15 @@ _slang_link(GLcontext *ctx, #if FEATURE_es2_glsl /* must have both a vertex and fragment program for ES2 */ - if (!vertProg) { - link_error(shProg, "missing vertex shader\n"); - return; - } - if (!fragProg) { - link_error(shProg, "missing fragment shader\n"); - return; + if (ctx->API == API_OPENGLES2) { + if (!vertProg) { + link_error(shProg, "missing vertex shader\n"); + return; + } + if (!fragProg) { + link_error(shProg, "missing fragment shader\n"); + return; + } } #endif |