diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/glsl/builtin_variables.h | 7 | ||||
| -rw-r--r-- | src/glsl/ir_variable.cpp | 75 | 
2 files changed, 82 insertions, 0 deletions
diff --git a/src/glsl/builtin_variables.h b/src/glsl/builtin_variables.h index a7dbe480e9..a34c67e348 100644 --- a/src/glsl/builtin_variables.h +++ b/src/glsl/builtin_variables.h @@ -39,6 +39,13 @@ static const builtin_variable builtin_core_fs_variables[] = {     { ir_var_in,  FRAG_ATTRIB_WPOS,  "vec4",  "gl_FragCoord" },     { ir_var_in,  FRAG_ATTRIB_FACE,  "bool",  "gl_FrontFacing" },     { ir_var_out, FRAG_RESULT_COLOR, "vec4",  "gl_FragColor" }, +}; + +static const builtin_variable builtin_100ES_fs_variables[] = { +   { ir_var_in,  FRAG_ATTRIB_PNTC,   "vec2",   "gl_PointCoord" }, +}; + +static const builtin_variable builtin_110_fs_variables[] = {     { ir_var_out, FRAG_RESULT_DEPTH, "float", "gl_FragDepth" },  }; diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index e638c9602f..3fed4d9e6e 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -97,6 +97,32 @@ add_builtin_constant(exec_list *instructions,     var->constant_value = new(var) ir_constant(value);  } +/* Several constants in GLSL ES have different names than normal desktop GLSL. + * Therefore, this function should only be called on the ES path. + */ +static void +generate_100ES_uniforms(exec_list *instructions, +		     struct _mesa_glsl_parse_state *state) +{ +   add_builtin_constant(instructions, state, "gl_MaxVertexAttribs", +			state->Const.MaxVertexAttribs); +   add_builtin_constant(instructions, state, "gl_MaxVertexUniformVectors", +			state->Const.MaxVertexUniformComponents); +   add_builtin_constant(instructions, state, "gl_MaxVaryingVectors", +			state->Const.MaxVaryingFloats / 4); +   add_builtin_constant(instructions, state, "gl_MaxVertexTextureImageUnits", +			state->Const.MaxVertexTextureImageUnits); +   add_builtin_constant(instructions, state, "gl_MaxCombinedTextureImageUnits", +			state->Const.MaxCombinedTextureImageUnits); +   add_builtin_constant(instructions, state, "gl_MaxTextureImageUnits", +			state->Const.MaxTextureImageUnits); +   add_builtin_constant(instructions, state, "gl_MaxFragmentUniformVectors", +			state->Const.MaxFragmentUniformComponents); + +   add_uniform(instructions, state, "gl_DepthRange", +	       state->symbols->get_type("gl_DepthRangeParameters")); +} +  static void  generate_110_uniforms(exec_list *instructions,  		      struct _mesa_glsl_parse_state *state) @@ -189,6 +215,23 @@ generate_110_uniforms(exec_list *instructions,  	       state->symbols->get_type("gl_FogParameters"));  } +/* This function should only be called for ES, not desktop GL. */ +static void +generate_100ES_vs_variables(exec_list *instructions, +			  struct _mesa_glsl_parse_state *state) +{ +   for (unsigned i = 0; i < Elements(builtin_core_vs_variables); i++) { +      add_builtin_variable(& builtin_core_vs_variables[i], +			   instructions, state->symbols); +   } + +   generate_100ES_uniforms(instructions, state); + +   generate_ARB_draw_buffers_variables(instructions, state, false, +				       vertex_shader); +} + +  static void  generate_110_vs_variables(exec_list *instructions,  			  struct _mesa_glsl_parse_state *state) @@ -264,6 +307,9 @@ initialize_vs_variables(exec_list *instructions,  {     switch (state->language_version) { +   case 100: +      generate_100ES_vs_variables(instructions, state); +      break;     case 110:        generate_110_vs_variables(instructions, state);        break; @@ -276,6 +322,27 @@ initialize_vs_variables(exec_list *instructions,     }  } +/* This function should only be called for ES, not desktop GL. */ +static void +generate_100ES_fs_variables(exec_list *instructions, +			  struct _mesa_glsl_parse_state *state) +{ +   for (unsigned i = 0; i < Elements(builtin_core_fs_variables); i++) { +      add_builtin_variable(& builtin_core_fs_variables[i], +			   instructions, state->symbols); +   } + +   for (unsigned i = 0; i < Elements(builtin_100ES_fs_variables); i++) { +      add_builtin_variable(& builtin_100ES_fs_variables[i], +			   instructions, state->symbols); +   } + +   generate_100ES_uniforms(instructions, state); + +   generate_ARB_draw_buffers_variables(instructions, state, false, +				       fragment_shader); +} +  static void  generate_110_fs_variables(exec_list *instructions,  			  struct _mesa_glsl_parse_state *state) @@ -285,6 +352,11 @@ generate_110_fs_variables(exec_list *instructions,  			   instructions, state->symbols);     } +   for (unsigned i = 0; i < Elements(builtin_110_fs_variables); i++) { +      add_builtin_variable(& builtin_110_fs_variables[i], +			   instructions, state->symbols); +   } +     for (unsigned i = 0  	   ; i < Elements(builtin_110_deprecated_fs_variables)  	   ; i++) { @@ -382,6 +454,9 @@ initialize_fs_variables(exec_list *instructions,  {     switch (state->language_version) { +   case 100: +      generate_100ES_fs_variables(instructions, state); +      break;     case 110:        generate_110_fs_variables(instructions, state);        break;  | 
