Age | Commit message (Collapse) | Author |
|
|
|
|
|
Some fallout where internal functions are using stronger types.
Overkill to move everything over to strong types right now, but perhaps
move over to it slowly over time.
|
|
Traverse backwards instead, far more robust. Should elide basically all
redundant continue; statements now.
|
|
Just like loops, we need complicated hoisting again to make this work.
|
|
There is a risk that we try to preserve a loop variable through multiple
iterations, even though the dominating block is inside a loop.
Fix this by analyzing if a block starts off by writing to a variable. In
that case, there cannot be any preservation going on. If we don't, pretend the
loop header is reading the variable, which moves the variable to an
appropriate scope.
|
|
- Replace ostringstream with custom implementation.
~30% performance uplift on vector-shuffle-oom test.
Allocations are measurably reduced in Valgrind.
- Replace std::vector with SmallVector.
Classic malloc optimization, small vectors are backed by inline data.
~ 7-8% gain on vector-shuffle-oom on GCC 8 on Linux.
- Use an object pool for IVariant type.
We generally allocate a lot of SPIR* objects. We can amortize these
allocations neatly by pooling them.
- ~15% overall uplift on ./test_shaders.py --iterations 10000 shaders/.
|
|
This is a pragmatic trick to avoid symbol collision where a project
links against SPIRV-Cross statically, while linking to other projects
which also use SPIRV-Cross statically. We can end up with very awkward
symbol collisions which can resolve themselves silently because
SPIRV-Cross is pulled in as necessary. To fix this, we must use
different symbols and embed two copies of SPIRV-Cross in this scenario,
now with different namespaces, which in turn leads to different symbols.
|
|
The arrays are incredibly sparse for the most part as we only need
entires per basic block.
For a small shader with ID bound of 8 million, we now have about 30x
uplift.
|
|
|
|
|
|
|
|
The algorithm was too conservative causing lots of unnecessary
temporaries to be created.
|
|
Need to prune already walked blocks.
|
|
|
|
This is kinda tricky, because if we only conditionally write to a
function parameter variable it is implicitly preserved in SPIR-V, so we must force
an in qualifier on the parameter to get the same behavior in GLSL.
|
|
|
|
|
|
|
|
Handle the weird opcodes CopyMemory/CopyObject.
|
|
All tests pass now.
Still need to handle OpFunction, atomics, OpPhi, etc ...
|
|
Not complete yet, but partly working ...
|