[Mesa-dev] [PATCH v2 0/8] glsl/linker: fix location aliasing checks
Iago Toral Quiroga
itoral at igalia.com
Tue Oct 24 09:28:51 UTC 2017
This v2 series is in fact an update and merge of the these two series:
"glsl/linker: fix location aliasing checks" and "Implement location aliasing
checks for SSO programs"
This v2 series introduces 3 changes:
1. Use MAX_VARYINGS instead of MAX_VARYINGS_INCL_PATCH to define the size
of the explicit_locations array. This change, however, made a pre-existing
bug show up: we do not check that explicit locations on inputs are valid
(< MAX_VARYINGS) before indexing the explicit_locations array. That can lead
to out of bounds accesses. There are some tests in dEQP and CTS that check this
however, because we were using MAX_VARYINGS_INCL_PATCH as the size of the
array, we were sill indexing inside the bounds of the array (even if the
location index was not correct) and we would still produce linker errors
when we didn't found matching outputs, however that was just luck, as we
could still be indexing out of bounds if the invalid location provided for
shader inputs were large enough. The first patch in this v2 series fixes
this by adding a trivial check for the input location index.
2. For SSO, we only need to validate location aliasing for the inputs to the
first stage and outputs of the last stage, as pointed out by Timothy. This
is addressed in the last patch in the series.
3. When we were validating interface block locations, we were not computing
correctly the location slot index for patch variables (these start at
VARYING_SLOT_PATCH0 not VARYING_SLOT_VAR0).
Illia: I also checked your original patch and I think this series includes
all functional changes you had.
Patches 2-7 are already reviewed, changes 1) and 3) affect some of them but
trivially so. Patches 1 (new in this series) and 8 still need the Rb.
Iago Toral Quiroga (8):
glsl/linker: report linker errors for invalid explicit locations on
inputs
glsl/linker: refactor link-time validation of output locations
glsl/linker: fix location aliasing checks for interface variables
glsl/linker: outputs in the same location must share interpolation
glsl/linker: outputs in the same location must share auxiliary storage
glsl/linker: create a helper function to validate explicit locations
glsl/linker: generalize validate_explicit_variable_location for SSO
glsl/linker: validate explicit locations for SSO programs
src/compiler/glsl/link_varyings.cpp | 334 ++++++++++++++++++++++++++++--------
src/compiler/glsl/link_varyings.h | 6 +
src/compiler/glsl/linker.cpp | 10 ++
3 files changed, 279 insertions(+), 71 deletions(-)
--
2.11.0
More information about the mesa-dev
mailing list