glsl: fix lower jumps for returns when loop is inside an if
authorTimothy Arceri <tarceri@itsqueeze.com>
Sun, 26 Mar 2017 12:34:13 +0000 (23:34 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Mon, 27 Mar 2017 22:54:31 +0000 (09:54 +1100)
commitc1096b7f1d49f33c85b1042f82ccb063f63e7c20
tree3dbee77693f390af6492f186e93c65f2e295a66c
parentb640dfcd0506253231b93c03de7ee393fb0dfc46
glsl: fix lower jumps for returns when loop is inside an if

Previously we would just escape the loop and move everything
following the loop inside the if to the else branch of a new if
with a return flag conditional. However everything outside the
if the loop was nested in would still get executed.

Adding a new return to the then branch of the new if fixes this
and we just let a follow pass clean it up if needed.

Fixes:
tests/spec/glsl-1.10/execution/vs-nested-return-sibling-loop.shader_test
tests/spec/glsl-1.10/execution/vs-nested-return-sibling-loop2.shader_test

Cc: "13.0 17.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/compiler/glsl/lower_jumps.cpp