OSDN Git Service

SpirvShader: Fixes for complex loops.
authorBen Clayton <bclayton@google.com>
Thu, 28 Mar 2019 16:07:00 +0000 (16:07 +0000)
committerBen Clayton <bclayton@google.com>
Fri, 29 Mar 2019 20:28:44 +0000 (20:28 +0000)
commit513ed1d5a8150542608fad2251120854c2091bab
treed61da121c8f0a97facbe46c74005176290a13cb2
parentfe3f01367f8071e6125ddff212d39b5b17f83e25
SpirvShader: Fixes for complex loops.

Emit loops in forward direction. While traversing backwards from the loop back-edge means you don't have to worry about flowing down the merge block, it can lead to blocks being generated in orders that can break the visit-once logic.

Don't consider flows passing through the return block as a back edge.

Strip unreachable blocks from ins - nothing should ever consider them.

Tests: dEQP-VK.glsl.loops.*
Bug: b/128527271
Change-Id: I497a06f5ce65d54b39294e4016b2df6d2c70487c
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28188
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
src/Pipeline/SpirvShader.cpp
src/Pipeline/SpirvShader.hpp