mesa: extend GLSLZeroInit semantics
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Fri, 24 Apr 2020 16:32:02 +0000 (18:32 +0200)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tue, 5 May 2020 10:26:02 +0000 (12:26 +0200)
commitea289d1502dc5739ec9bf69328c037b72dc02789
tree6940b2864756497f0ed34b4fd3dd06c18ec4f919
parent679421628bf89067b4cbfa85530f196ca2835717
mesa: extend GLSLZeroInit semantics

This commit introduces a new way to zero-init variables but keep the
old one to not break any existing behavior.

With this change GLSLZeroInit becomes an integer, with the following
possible values:
 - 0: no 0 init
 - 1: current behavior
 - 2: new behavior. Similar to 1, except ir_var_function_out type are
      0 initialized but ir_var_shader_out.

The rationale behind 2 is: zero initializing ir_var_shader_out can
prevent some optimization where out variables are completely eliminated
when not written to.

On the other hand, zero initializing "ir_var_function_out" has no
effect on correct shaders but typically helps shadertoy since the main
function is:

   void mainImage(out vec4 fragColor) { ... }

So with this change we're sure that fragColor will always get a value.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4607>
src/compiler/glsl/glsl_parser_extras.cpp
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/main/mtypes.h
src/mesa/state_tracker/st_extensions.c