From a0c4815433ccd57322f4f7703ca35e9ccfa59250 Mon Sep 17 00:00:00 2001 From: marha Date: Thu, 8 Oct 2009 13:15:52 +0000 Subject: Added MesaLib-7.6 --- mesalib/docs/shading.html | 367 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 367 insertions(+) create mode 100644 mesalib/docs/shading.html (limited to 'mesalib/docs/shading.html') diff --git a/mesalib/docs/shading.html b/mesalib/docs/shading.html new file mode 100644 index 000000000..77c86be3a --- /dev/null +++ b/mesalib/docs/shading.html @@ -0,0 +1,367 @@ + + +Shading Language Support + + + + + +

Shading Language Support

+ +

+This page describes the features and status of Mesa's support for the + +OpenGL Shading Language. +

+ +

+Last updated on 15 December 2008. +

+ +

+Contents +

+ + + + + +

Environment Variables

+ +

+The MESA_GLSL environment variable can be set to a comma-separated +list of keywords to control some aspects of the GLSL compiler: +

+ +

+Example: export MESA_GLSL=dump,nopt +

+ + +
+

GLSL 1.20 support

+ +

+GLSL version 1.20 is supported in Mesa 7.3 and later. +Among the features/differences of GLSL 1.20 are: +

+ + + +
+

Unsupported Features

+ +

+The following features of the shading language are not yet fully supported +in Mesa: +

+ + + +

+All other major features of the shading language should function. +

+ + +
+

Implementation Notes

+ + + +

+These issues will be addressed/resolved in the future. +

+ + +
+

Programming Hints

+ + + + +
+

Stand-alone GLSL Compiler

+ +

+A unique stand-alone GLSL compiler driver has been added to Mesa. +

+ +

+The stand-alone compiler (like a conventional command-line compiler) +is a tool that accepts Shading Language programs and emits low-level +GPU programs. +

+ +

+This tool is useful for: +

+

+ +

+After building Mesa, the glslcompiler can be built by manually running: +

+
+    make realclean
+    make linux
+    cd src/mesa/drivers/glslcompiler
+    make
+
+ + +

+Here's an example of using the compiler to compile a vertex shader and +emit GL_ARB_vertex_program-style instructions: +

+
+    bin/glslcompiler --debug --numbers --fs progs/glsl/CH06-brick.frag.txt
+
+

+results in: +

+
+# Fragment Program/Shader
+  0: RCP TEMP[4].x, UNIFORM[2].xxxx;
+  1: RCP TEMP[4].y, UNIFORM[2].yyyy;
+  2: MUL TEMP[3].xy, VARYING[0], TEMP[4];
+  3: MOV TEMP[1], TEMP[3];
+  4: MUL TEMP[0].w, TEMP[1].yyyy, CONST[4].xxxx;
+  5: FRC TEMP[1].z, TEMP[0].wwww;
+  6: SGT.C TEMP[0].w, TEMP[1].zzzz, CONST[4].xxxx;
+  7: IF (NE.wwww); # (if false, goto 9);
+  8:    ADD TEMP[1].x, TEMP[1].xxxx, CONST[4].xxxx;
+  9: ENDIF;
+ 10: FRC TEMP[1].xy, TEMP[1];
+ 11: SGT TEMP[2].xy, UNIFORM[3], TEMP[1];
+ 12: MUL TEMP[1].z, TEMP[2].xxxx, TEMP[2].yyyy;
+ 13: LRP TEMP[0], TEMP[1].zzzz, UNIFORM[0], UNIFORM[1];
+ 14: MUL TEMP[0].xyz, TEMP[0], VARYING[1].xxxx;
+ 15: MOV OUTPUT[0].xyz, TEMP[0];
+ 16: MOV OUTPUT[0].w, CONST[4].yyyy;
+ 17: END
+
+ +

+Note that some shading language constructs (such as uniform and varying +variables) aren't expressible in ARB or NV-style programs. +Therefore, the resulting output is not always legal by definition of +those program languages. +

+

+Also note that this compiler driver is still under development. +Over time, the correctness of the GPU programs, with respect to the ARB +and NV languagues, should improve. +

+ + + +
+

Compiler Implementation

+ +

+The source code for Mesa's shading language compiler is in the +src/mesa/shader/slang/ directory. +

+ +

+The compiler follows a fairly standard design and basically works as follows: +

+ + +

+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). +

+ +

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;
+};
+
+ + + + +
+

Compiler Validation

+ +

+A Glean test has +been create to exercise the GLSL compiler. +

+

+The glsl1 test runs over 170 sub-tests to check that the language +features and built-in functions work properly. +This test should be run frequently while working on the compiler to catch +regressions. +

+

+The test coverage is reasonably broad and complete but additional tests +should be added. +

+ + + + -- cgit v1.2.3