This page describes the features and status of Mesa's support for the OpenGL Shading Language.
Contents
The MESA_GLSL environment variable can be set to a comma-separated list of keywords to control some aspects of the GLSL compiler and shader execution. These are generally used for debugging.
Example: export MESA_GLSL=dump,nopt
The GLSL compiler currently supports version 1.20 of the shading language.
Several GLSL extensions are also supported:
XXX update this section
The following features of the shading language are not yet fully supported in Mesa:
All other major features of the shading language should function.
These issues will be addressed/resolved in the future.
float x = 1.0 / sqrt(y);Write this:
float x = inversesqrt(y);
The stand-alone GLSL compiler program can be used to compile GLSL shaders into low-level GPU code.
This tool is useful for:
After building Mesa, the compiler can be found at src/glsl/glsl_compiler
Here's an example of using the compiler to compile a vertex shader and emit GL_ARB_vertex_program-style instructions:
src/glsl/glsl_compiler --dump-ast myshader.vertOptions include
The source code for Mesa's shading language compiler is in the
src/glsl/
directory.
XXX provide some info about the compiler....
The final vertex and fragment programs may be interpreted in software (see prog_execute.c) or translated into a specific hardware architecture (see drivers/dri/i915/i915_fragprog.c for example).
Internally, there are several options that control the compiler's code generation and instruction selection. These options are seen in the gl_shader_state struct and may be set by the device driver to indicate its preferences:
struct gl_shader_state { ... /** Driver-selectable options: */ GLboolean EmitHighLevelInstructions; GLboolean EmitCondCodes; GLboolean EmitComments; };
Developers working on the GLSL compiler should test frequently to avoid regressions.
The Piglit project has many GLSL tests and the Glean glsl1 test tests GLSL features.
The Mesa demos repository also has some good GLSL tests.