Commit Graph

13 Commits

Author SHA1 Message Date
Hans-Kristian Arntzen
0f4adaa09d Handle OpUnreachable in code-gen.
Forgot to add it to emit_block_chain. It should just be a noop.
2018-01-15 09:35:09 +01:00
Hans-Kristian Arntzen
d4e470babd Analyze the CFG for temporaries as well.
Normally, temporary declaration must dominate any use of it,
so we generally did not need to analyze the CFG for these variables,
but there is an edge case where you have an inliner doing:

do {
	create_temporary;
	break;
} while(0);

use_temporary;

The inside of the loop dominates the outer scope, but we cannot emit
code like this in GLSL, so make sure we hoist these temporaries outside
the "loop".
2018-01-12 10:56:11 +01:00
Hans-Kristian Arntzen
6d7af5c83c Add test for continue block lifting. 2017-12-05 17:44:52 +01:00
Hans-Kristian Arntzen
b629ca1c33 Fix complicated Phi case.
A continue block might have used a temporary which existed only in the
loop body.
2017-11-21 09:27:49 +01:00
Hans-Kristian Arntzen
851e584338 Do not allow base expressions when extracting struct members. 2017-11-20 21:32:13 +01:00
Hans-Kristian Arntzen
3339fd4e87 Fix case when Phi variable is a loop variable.
Need to flush variable to static expression rather than a variable.
2017-09-25 10:15:17 +02:00
Hans-Kristian Arntzen
48ccde3779 Support OpConstantNull. 2017-08-03 14:32:29 +02:00
Hans-Kristian Arntzen
a4fafa0607 Fix edge-case where do/while body is a dominator.
Shows up quite a lot in inlined code, should get more test coverage in
this area ...
2017-08-02 11:58:24 +02:00
Hans-Kristian Arntzen
dbaaf1b69e Add test for default member names. 2017-07-29 21:58:37 +02:00
Hans-Kristian Arntzen
df6aa0e609 Support SampleCmpLevelZero on cubes as well. 2017-07-24 09:28:24 +02:00
Hans-Kristian Arntzen
ad2b7c05e7 Implement workaround for textureLod on 2D array shadow.
This does not exist in GLSL, but it exists in HLSL if LOD == 0.0.
2017-06-23 09:45:42 +02:00
Hans-Kristian Arntzen
543e380d90 Fix case where samplerBuffer is emitted without combined sampler. 2017-04-02 11:03:07 +02:00
Hans-Kristian Arntzen
36a0b63f28 Fix various corner cases with expression dependencies.
There was a potential problem if variables were invalidated and SPIR-V
read expressions which depended on other expression which in turn depended on the
invalidated variable.

Also fixes issue where variables were considered immutable if they were
forwardable. This allowed some incorrect optimizations to slip through.
2016-07-12 14:50:23 +02:00