Shading Language Support
+Shading Language
This page describes the features and status of Mesa's support for the - + OpenGL Shading Language.
@@ -49,8 +49,9 @@ execution. These are generally used for debugging.Example: export MESA_GLSL=dump,nopt
+Experimenting with Shader Replacements
++Shaders can be dumped and replaced on runtime for debugging purposes. This +feature is not currently supported by SCons build. + +This is controlled via following environment variables: +
+-
+
- MESA_SHADER_DUMP_PATH - path where shader sources are dumped +
- MESA_SHADER_READ_PATH - path where replacement shaders are read +
Capturing Shaders
+ +
+Setting MESA_SHADER_CAPTURE_PATH to a directory will cause the compiler
+to write .shader_test
files for use with
+shader-db, a tool
+which compiler developers can use to gather statistics about shaders
+(instructions, cycles, memory accesses, and so on).
+
+Notably, this captures linked GLSL shaders - with all stages together - +as well as ARB programs. +
GLSL Version
@@ -158,7 +189,7 @@ This tool is useful for:-After building Mesa, the compiler can be found at src/glsl/glsl_compiler +After building Mesa, the compiler can be found at src/compiler/glsl/glsl_compiler
@@ -166,7 +197,7 @@ 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.vert + src/compiler/glsl/glsl_compiler --version XXX --dump-ast myshader.vertOptions include @@ -174,7 +205,11 @@ Options include
The source code for Mesa's shading language compiler is in the
-src/glsl/
directory.
+src/compiler/glsl/
directory.
@@ -195,51 +230,6 @@ The final vertex and fragment programs may be interpreted in software (see drivers/dri/i915/i915_fragprog.c for example).
-Code Generation Options
- --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; -}; -- -
-
-
- EmitHighLevelInstructions -
- -This option controls instruction selection for loops and conditionals. -If the option is set high-level IF/ELSE/ENDIF, LOOP/ENDLOOP, CONT/BRK -instructions will be emitted. -Otherwise, those constructs will be implemented with BRA instructions. - - -
- EmitCondCodes -
- -If set, condition codes (ala GL_NV_fragment_program) will be used for -branching and looping. -Otherwise, ordinary registers will be used (the IF instruction will -examine the first operand's X component and do the if-part if non-zero). -This option is only relevant if EmitHighLevelInstructions is set. - - -
- EmitComments -
- -If set, instructions will be annotated with comments to help with debugging. -Extra NOP instructions will also be inserted. - -
Compiler Validation
@@ -248,7 +238,7 @@ regressions.
-The Piglit project +The Piglit project has many GLSL tests.