Current GLSL badly optimizes the code making it incompatible with the GL_ARB_separate_shader_objects extension.
Typical example of the current behavior: VS: out SHADER { vec4 var_zero; // location will always be 0 vec2 var_one; // location will always be 1 } VSout; FS: in SHADER { vec4 var_zero; vec2 var_one; // ERROR: location would be wrongly set to 0 if var_zero is inactive } PSin; In short, SSO allow to match by name but you can't make any hypothesis on the previous/next stage. Therefore you must consider all inputs as actives. Commit decription: patch 1/ Tighten up some linker error checks to avoid dependency with the deadcode optimization phase. Phase that will be partially removed in patch 3. patch 2/ Add a new variable flags in the AST to distinguish attribute from varying. It is still legal to removed unused attribute. patch 3/ Disable the optimization of varying inputs that don't have an explicit location. The idea was to keep the optimization for all builtins varyings. Besides it won't trigger the bug if explicit location are used for all variables. I'm not sure what it is the best solutions. Piglit test done on older Mesa/Nouveau (8276ba260) due to libdrm newer requirement. [30454/30454] crash: 29, fail: 221, pass: 20749, skip: 9451, warn: 4 - The fix was validated on the PCSX2 application. I will try to create a piglit tests of the above situation. Gregory Hainaut (3): glsl/link: don't consider unused variable as read variable. glsl/ast2hir: add a new flag attribute_input for VS input glsl/opt: disable optimization of varying input src/glsl/ast_to_hir.cpp | 4 ++++ src/glsl/ir.h | 9 +++++++++ src/glsl/link_varyings.cpp | 4 ++-- src/glsl/opt_dead_code.cpp | 16 ++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) -- 2.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev