diff options
| -rw-r--r-- | src/mesa/main/api_validate.c | 34 | ||||
| -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 | 
5 files changed, 53 insertions, 29 deletions
| diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index f6da86d296..150bc3886c 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -105,21 +105,31 @@ check_valid_to_render(GLcontext *ctx, const char *function)        return GL_FALSE;     } +   switch (ctx->API) {  #if FEATURE_es2_glsl -   /* For ES2, we can draw if any vertex array is enabled (and we should -    * always have a vertex program/shader). -    */ -   if (ctx->Array.ArrayObj->_Enabled == 0x0 || !ctx->VertexProgram._Current) -      return GL_FALSE; -#else -   /* For regular OpenGL, only draw if we have vertex positions (regardless -    * of whether or not we have a vertex program/shader). -    */ -   if (!ctx->Array.ArrayObj->Vertex.Enabled && -       !ctx->Array.ArrayObj->VertexAttrib[0].Enabled) -      return GL_FALSE; +   case API_OPENGLES2: +      /* For ES2, we can draw if any vertex array is enabled (and we +       * should always have a vertex program/shader). */ +      if (ctx->Array.ArrayObj->_Enabled == 0x0 || !ctx->VertexProgram._Current) +	 return GL_FALSE; +      break;  #endif +#if FEATURE_ES1 || FEATURE_GL +   case API_OPENGLES: +   case API_OPENGL: +      /* For regular OpenGL, only draw if we have vertex positions +       * (regardless of whether or not we have a vertex program/shader). */ +      if (!ctx->Array.ArrayObj->Vertex.Enabled && +	  !ctx->Array.ArrayObj->VertexAttrib[0].Enabled) +	 return GL_FALSE; +      break; +#endif + +   default: +      ASSERT_NO_FEATURE(); +   } +     return GL_TRUE;  } diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index f77a773753..a6ada8a048 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 4b876a460c..2d8116850f 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 ad86676157..e7938e55ad 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 b16778f8ad..3d4208ce4c 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 | 
