mesa/src/compiler
Timothy Arceri d6b9202873 glsl: disable varying packing when its not safe
In GL 4.4+ there is no guarantee that interpolation qualifiers will
match between stages so we cannot safely pack varyings using the
current packing pass in Mesa.

We also disable packing on outerward facing interfaces for SSO
because in ES we need to retain the unpacked varying information
for draw time validation. For desktop GL we could allow packing for
SSO in versions < 4.4 but its just safer not to do so.

We do however enable packing on individual arrays, structs, and
matrices as these are required by the transform feedback code and it
is still safe to do so.

Finally we also enable packing when a varying is only used for
transform feedback and its not a SSO.

This fixes all remaining rendering issues with the dEQP SSO tests,
the only issues remaining with thoses tests are to do with validation.

Note: There is still one remaining SSO bug that this patch doesn't fix.
Their is a chance that VS -> TCS will have mismatching interfaces
because we pack VS output in case its used by transform feedback but
don't pack TCS input for performance reasons. This patch will make the
situation better but doesn't fix it.

V4: fix out of order function params after rebase, make sure packing
still disabled in tess stages. Update comments as to why we disable
packing on SSO.

V3: ES 3.1 *does* require interpolation to match so don't disable
packing there. Rebased on master rather than on enhanced layouts
component packing series.

V2: Make is_varying_packing_safe() a function in the varying_matches
class, fix spelling (Matt) and make sure to remove the outer array
when dealing with Geom and Tess shaders where appropriate.
Lastly fix piglit regression in new piglit test and document the
undefined behaviour it depends on:
arb_separate_shader_objects/execution/vs-gs-linking.shader_test

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
2016-03-18 10:26:34 +11:00
..
glsl glsl: disable varying packing when its not safe 2016-03-18 10:26:34 +11:00
nir nir: propagate bitsize information in nir_search 2016-03-17 11:54:45 +01:00
.gitignore compiler: fix .gitignore for glsl_compiler 2016-02-03 13:32:46 -05:00
Android.gen.mk Android: fix build break from nir/glsl move to compiler/ 2016-02-29 10:51:44 +00:00
Android.mk nir: move to compiler/ 2016-01-26 16:08:30 +00:00
builtin_type_macros.h glsl/types: Add a bare "sampler" type 2016-02-13 17:22:36 -08:00
glsl_types.cpp glsl: add offset to glsl interface type 2016-03-05 19:38:34 +11:00
glsl_types.h glsl: add offset to glsl interface type 2016-03-05 19:38:34 +11:00
Makefile.am glsl: Ensure glsl/ exists before making the lexer/parser. 2016-02-04 09:31:17 -08:00
Makefile.sources nir: Add a pass for lower indirect variable dereferences 2016-03-08 10:41:54 -08:00
nir_types.cpp nir/types: Add more type constructor functions 2016-02-13 17:22:36 -08:00
nir_types.h nir/types: add a function to get the bitsize of a base type 2016-03-17 11:16:33 +01:00
SConscript glsl: move to compiler/ 2016-01-26 16:08:33 +00:00
shader_enums.c nir: move shader_enums.[ch] to compiler 2016-01-26 16:08:20 +00:00
shader_enums.h glsl: keep track of ssbo variable being accessed, add access params 2016-01-29 21:05:08 -05:00