OSDN Git Service

glsl/linker: check same name is not used in block and outside
authorJuan A. Suarez Romero <jasuarez@igalia.com>
Mon, 5 Feb 2018 16:38:39 +0000 (17:38 +0100)
committerJuan A. Suarez Romero <jasuarez@igalia.com>
Mon, 5 Feb 2018 17:10:43 +0000 (18:10 +0100)
commit4195eed961ccfe404ae81b9112189fc93a254ded
treea5b0bfb0976daf661514015ff4d6b76a3e2cf8a5
parent3d14e720574ea933b172affdafd53c74a9381e9c
glsl/linker: check same name is not used in block and outside

According with OpenGL GLSL 3.20 spec, section 4.3.9:

  "It is a link-time error if any particular shader interface
   contains:
     - two different blocks, each having no instance name, and each
       having a member of the same name, or
     - a variable outside a block, and a block with no instance name,
       where the variable has the same name as a member in the block."

This fixes a previous commit 9b894c8 ("glsl/linker: link-error using the
same name in unnamed block and outside") that covered this case, but
did not take in account that precision qualifiers are ignored when
comparing blocks with no instance name.

With this commit, the original tests
KHR-GL*.shaders.uniform_block.common.name_matching keep fixed, and also
dEQP-GLES31.functional.shaders.linkage.uniform.block.differing_precision
regression is fixed, which was broken by previous commit.

v2: use helper varibles (Matteo Bruni)

Fixes: 9b894c8 ("glsl/linker: link-error using the same name in unnamed block and outside")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104668
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104777
CC: Mark Janes <mark.a.janes@intel.com>
CC: "18.0" <mesa-stable@lists.freedesktop.org>
Tested-by: Matteo Bruni <matteo.mystral@gmail.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
src/compiler/glsl/linker.cpp