Common:
- gl_FrontMaterial diffuse and ambient are premultiplied by glColor() value when GL_COLOR_MATERIAL is enabled.
  But this will work with glColor() calls only, not with glColorPointer(). When lighting poly with color pointers,
  gl_FrontMaterial will be colorized by glColor() value (that's because gl_FrontMaterial is uniform, not attribute).

ATI:
- cannot handle "#if <undefined>", should use "#ifdef <...>" (that's GLSL standard). But NVidia handles "#if ..."
  correctly.
- problems with nested "#if..." constructions
- cannot compile shader when it has (write) access to a variable from other shader type; example: compiling vertex
  shader will be failed when there is a line with "gl_FragColor = ...", even when that line will never be executed.
- cannot handle "#define WEIGHT (W1+W2+W3...)" - will try to compile macro as it has arguments
- cannot handle "#version ..." when there is something before it (defines block cannot be before version difective)
  - the same valid for glsl_validate too
- ATI GLSL compiler has info messages even when shader successfully compiled. More info:
  http://wine.git.sourceforge.net/git/gitweb.cgi?p=wine/wine;a=blob_plain;f=dlls/wined3d/glsl_shader.c;hb=HEAD
    (check "spam[]" in print_glsl_info_log())
  http://www.nabble.com/-2-5--WineD3D:-Improve-the-GLSL-spam-filter-td23278426.html
