Hans-Kristian Arntzen
44b3216611
Sort loop variables to make sure Travis CI runs are reproducable.
2016-12-16 14:01:09 +01:00
Hans-Kristian Arntzen
45c797d54c
Improve debuggability of Travis CI when things go wrong.
2016-12-16 13:48:30 +01:00
Hans-Kristian Arntzen
d11b8aa3ef
Optimize += 1, -= 1 to ++, --.
...
Purely cosmetic, but easier to read.
2016-12-16 13:24:49 +01:00
Hans-Kristian Arntzen
62613df5a5
Optimize for read-modify-writes.
...
Required for legacy loop increments.
2016-12-16 13:14:22 +01:00
Hans-Kristian Arntzen
a714d424d0
Add directed test for for-loop-init.
2016-12-16 12:43:12 +01:00
Hans-Kristian Arntzen
51d45511a6
Check if we can use multiple initializers.
...
Need same type and qualifiers in GLSL and friends.
2016-12-15 17:54:49 +01:00
Hans-Kristian Arntzen
b8b202f489
Add more dedicated test shader for defer-parens.
2016-12-08 09:05:30 +01:00
Hans-Kristian Arntzen
03a26e593d
Fixes for MSL and strip redundant parens in some places.
2016-12-06 23:03:35 +01:00
Hans-Kristian Arntzen
e67f6f85a4
Defer parenthesis generation until needed.
...
Previously, we would generate parentheses proactively when generating
binary ops, however, this leads to uglier code and hits warnings in
compilers when used as a conditional.
2016-12-05 10:56:54 +01:00
Hans-Kristian Arntzen
2d79d365dc
Fix get_declared_struct_size for nested arrays of structs.
...
The array size was dropped from consideration during recursion.
2016-11-28 15:01:36 +01:00
Hans-Kristian Arntzen
5ff11cc689
Handle more corner cases with the CFG traversal.
2016-11-18 16:45:11 +01:00
Hans-Kristian Arntzen
edbe867b74
Improve handling of dead blocks.
...
All tests pass now.
Still need to handle OpFunction, atomics, OpPhi, etc ...
2016-11-17 22:15:07 +01:00
Hans-Kristian Arntzen
206cb9157c
Handle interpolation qualifiers inside IO blocks.
2016-10-07 16:30:11 +02:00
Hans-Kristian Arntzen
5d4bb687bc
Support arrays which have spec constant size.
...
The size of an array can be a specialization constant or a spec constant
op. This complicates things quite a lot.
Reflection becomes very painful in the presence of expressions instead
of literals so add a new array which expresses this.
It is unlikely that we will need to do accurate reflection of interface
types which have specialization constant size.
SSBOs and UBOs will for now throw exception if a dynamic size is used since it
is very difficult to know the real size.
2016-10-03 17:17:11 +02:00
Hans-Kristian Arntzen
7e8afa872b
Implement OpSpecConstantOp.
...
The details here get quite hairy, and it's not complete as not all
functionality is implemented in glslang yet.
2016-10-03 15:54:02 +02:00
Hans-Kristian Arntzen
25c4467a10
Add tests for all geometry shader primitive types.
2016-09-28 08:23:21 +02:00
Hans-Kristian Arntzen
f3220833e8
Fix triangle mode in tessellation output.
2016-09-28 08:12:04 +02:00
Hans-Kristian Arntzen
706d3ead29
Always run spirv-val for SPIR-V files created.
...
Add way to disable testing if SPIR-V is not validating properly.
2016-09-12 20:11:30 +02:00
Hans-Kristian Arntzen
88681fd7fd
Struct packing test now works again in glslang.
2016-09-12 19:39:43 +02:00
Hans-Kristian Arntzen
3c5f55cde1
Add special test for more coverage in combined image sampler.
2016-09-11 13:41:38 +02:00
Hans-Kristian Arntzen
50839910a2
Separate image samplers are compatible now.
2016-09-11 13:26:03 +02:00
Hans-Kristian Arntzen
fab9ee8adf
Update separate sampler test.
2016-09-11 13:23:38 +02:00
Hans-Kristian Arntzen
b6847168b2
Update test suite for latest glslang.
2016-09-10 12:53:41 +02:00
Hans-Kristian Arntzen
f61a5d1e5d
Implement dead variable elimination.
2016-08-26 12:58:50 +02:00
Hans-Kristian Arntzen
042475e88e
Add support for multiple entry points.
...
- Only consider I/O variables if part of OpEntryPoint.
- Keep a safe fallback if #entry-points is 1 to avoid potentially
breaking previously working shaders.
2016-07-28 13:18:55 +02:00
Hans-Kristian Arntzen
fc2230ffff
Add support for int64/uint64 in GLSL.
2016-07-27 11:31:58 +02:00
Hans-Kristian Arntzen
fa0255c43b
Add support for FP64 in GLSL.
2016-07-27 11:31:54 +02:00
Hans-Kristian Arntzen
81d00da573
Implement OpImageQueryLevels.
2016-07-19 09:28:32 +02:00
Hans-Kristian Arntzen
1b4f7662d3
Add support for OpImageQueryLod.
2016-07-19 09:23:49 +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
Hans-Kristian Arntzen
2bfe98c35d
Fix image-format test to use desktop extension.
2016-07-12 09:37:31 +02:00
Hans-Kristian Arntzen
606ecce0f1
Handle all desktop image formats.
2016-07-12 09:35:15 +02:00
Hans-Kristian Arntzen
3265e1fc3f
Implement subpassInputMS loading.
2016-07-11 13:36:11 +02:00
Hans-Kristian Arntzen
7af13b68d5
Support ImageRead/Write on multisampled images.
2016-07-11 13:26:22 +02:00
Hans-Kristian Arntzen
2c7d2e4d3c
Implement OpImageQuerySamples.
2016-07-11 12:47:46 +02:00
Hans-Kristian Arntzen
05a97883d2
Don't emit invocation layout for invocations == 1.
2016-06-23 13:49:19 +02:00
Hans-Kristian Arntzen
4bb9f092ab
Only split expression in OpCompositeExtract if we forward the temporary.
2016-06-23 12:13:41 +02:00
Hans-Kristian Arntzen
9d4360fddf
Fix sampler2DMS texelFetch.
2016-06-22 12:35:58 +02:00
Hans-Kristian Arntzen
81a8fc1952
Add support for OpQuantizeF16.
2016-05-31 16:56:15 +02:00
Hans-Kristian Arntzen
168e46fdf9
Use std::array in C++ backend.
...
Deals better with composite construction in C++
and also fixes a few bugs in GLSL backend with array-of-arrays.
2016-05-28 13:23:51 +02:00
Hans-Kristian Arntzen
4739d16e98
Remove workaround for overly conservative memory barriers.
...
This is now fixed in ESSL 3.10 backend of glslang, so we can remove the old workaround
of dropping full memory barriers.
Also fixes unrelated issue which newer glslang detects.
2016-05-28 11:46:33 +02:00
Hans-Kristian Arntzen
5ad4340976
Workaround case with identical structs but different types.
...
With the current workarounds for SSBO type aliasing, we have no choice
but to look at OpName in order to figure this out properly.
2016-05-28 09:47:52 +02:00
Hans-Kristian Arntzen
6aa2007cba
Deal better with OpName and OpMemberName which alias.
...
OpName is only for debug information, so we must be very careful that
we do not reuse the same name for different variables.
This was previously done for local variables, but this commit extends
this to global variables as well.
2016-05-23 13:19:41 +02:00
Hans-Kristian Arntzen
45ad58a903
Implement more correct integer op handling.
...
In some cases we need to bitcast when dealing with int vs. uint.
SPIR-V allows inputs to be of different integer signedness, so we need
to deal with this somehow.
Add testing system to test SPIR-V assembly.
For now, test all possible combination for all major cases.
- IAdd (which doesn't care about input type as long as they're equal)
- SDiv/UDiv operations which case about input type.
- Arith/Logical right shifts.
- IEqual to test outputs to bvec, which shouldn't get output cast. Also
tests casting in function-like calls.
2016-05-13 15:23:33 +02:00
Hans-Kristian Arntzen
8869a167d6
Drop --vulkan flag to test_shaders.py
...
We can infer shader types from file extensions.
2016-05-11 20:02:31 +02:00
Hans-Kristian Arntzen
44ef367141
Handle padding for struct members in buffers.
...
Fixes earlier issues with struct-packing test.
2016-05-05 16:32:15 +02:00
Hans-Kristian Arntzen
2d38c6e192
Fixups for struct-packing test.
...
There seems to have been some changes to alignment in glslang here,
so workaround to verify that the other cases at least still work as expected.
2016-05-05 11:59:33 +02:00
Hans-Kristian Arntzen
f144b767ce
Always emit DescriptorSet decoration for Vulkan GLSL.
2016-05-05 11:53:43 +02:00
Hans-Kristian Arntzen
b7a30b659e
Remove stale reference shader.
2016-05-05 10:46:34 +02:00
Hans-Kristian Arntzen
dbee4e4346
Add support for Vulkan GLSL as output target.
...
Mostly useful for debugging SPIR-V where it is useful to see the
"original" Vulkan GLSL constructs which created the SPIR-V.
2016-05-05 10:44:45 +02:00