mesa/src/compiler
Tomasz Figa 0d11c8abfe glsl: Allow precision mismatch on dead data with GLSL ES 1.00
Commit 259fc50545 added linker error for
mismatching uniform precision, as required by GLES 3.0 specification and
conformance test-suite.

Several Android applications, including Forge of Empires, have shaders
which violate this rule, on a dead varying that will be eliminated.
The problem affects a big number of applications using Cocos2D engine
and other GLES implementations accept this, this poses a serious
application compatibility issue.

Starting from GLSL ES 3.0, declarations with conflicting precision
qualifiers are explicitly prohibited. However GLSL ES 1.00 does not
clearly specify the behavior, except that

  "Uniforms are defined to behave as if they are using the same storage in
  the vertex and fragment processors and may be implemented this way.
  If uniforms are used in both the vertex and fragment shaders, developers
  should be warned if the precisions are different. Conversion of
  precision should never be implicit."

The word "used" is not clear in this context and might refer to
 1) declared (same as GLES 3.x)
 2) referred after post-processing, or
 3) linked after all optimizations are done.

Looking at existing applications, 2) or 3) seems to be widely adopted.
To avoid compatibility issues, turn the error into a warning if GLSL ES
version is lower than 3.0 and the data is dead in at least one of the
shaders.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97532
Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
(cherry picked from commit 0886be093f)
2017-11-13 17:17:16 +00:00
..
glsl glsl: Allow precision mismatch on dead data with GLSL ES 1.00 2017-11-13 17:17:16 +00:00
nir nir: Don't print swizzles when there are more than 4 components 2017-11-13 17:17:16 +00:00
spirv spirv: Claim support for the simple memory model 2017-10-27 18:55:46 +01:00
.gitignore nir/spirv: Remove a duplicate spirv2nir from .gitignore 2016-10-04 07:43:15 -07:00
Android.glsl.gen.mk Android: clean-up trailing '\' in make variables 2017-03-22 17:52:06 +00:00
Android.glsl.mk android: glsl: build shader cache sources 2017-02-20 16:30:37 +00:00
Android.mk Android: glsl: add rules to generate ir_expression*.h header files 2016-09-06 15:58:55 +01:00
Android.nir.gen.mk Android: fix spirv_info.c generation 2017-07-21 08:48:45 +03:00
Android.nir.mk android: fix libmesa_nir build 2017-07-21 08:47:56 +03:00
blob.c blob: Use intptr_t instead of ssize_t 2017-10-13 15:02:34 -07:00
blob.h blob: Use intptr_t instead of ssize_t 2017-10-13 15:02:34 -07:00
builtin_type_macros.h glsl: Add basic ARB_gpu_shader_int64 types 2017-01-20 15:41:23 -08:00
glsl_types.cpp st/mesa: get rid of st_glsl_types 2017-07-31 14:55:30 +02:00
glsl_types.h glsl: add get_internal_ifc_packing() type helper 2017-08-22 11:29:27 +10:00
Makefile.am compiler: Add $(WNO_OVERRIDE_INIT) to AM_CFLAGS 2017-08-29 15:20:57 -07:00
Makefile.glsl.am glsl: automake: export abs_builddir for the tests 2017-03-28 15:31:22 +01:00
Makefile.nir.am spirv: Generate spirv_info.c 2017-07-18 09:43:12 -07:00
Makefile.sources glsl: fix derived cs variables 2017-10-27 18:50:02 +01:00
meson.build compiler: Move blob up a level 2017-10-12 21:47:06 -07:00
nir_types.cpp nir: add glsl_channel_type() helper 2017-10-16 09:06:53 +11:00
nir_types.h nir: add glsl_channel_type() helper 2017-10-16 09:06:53 +11:00
SConscript glsl: Generate ir_expression_operation.h from Python 2016-08-30 16:28:00 -07:00
SConscript.glsl mesa: Remove prog_hash_table.c 2016-09-12 10:48:35 +10:00
SConscript.nir glsl: Generate ir_expression_operation.h from Python 2016-08-30 16:28:00 -07:00
shader_enums.c compiler: Add a system value and varying for ViewIndex 2017-05-03 11:25:46 -07:00
shader_enums.h nir: Move vc4's alpha test lowering to core NIR. 2017-10-10 11:42:04 -07:00
shader_info.h compiler: Move gl_program::TexelFetchSamplers to shader_info. 2017-10-12 17:22:39 -07:00