Commit Graph

477 Commits

Author SHA1 Message Date
Robert Konrad
7d8be83cb3 Support shadow sampling in HLSL 2017-04-21 17:52:04 +02:00
Robert Konrad
585339f3cd Test HLSL cube maps 2017-04-21 14:55:01 +02:00
Robert Konrad
9020c48076 Support and test 1D and 3D textures in HLSL4/5 2017-04-21 14:05:17 +02:00
Robert Konrad
23d993546c Add texture sampling HLSL test 2017-04-21 11:46:10 +02:00
Robert Konrad
be4c919d08 Update HLSL test results 2017-04-18 15:17:55 +02:00
Robert Konrad
3804292c43 Merge branch 'master' of github.com:KhronosGroup/SPIRV-Cross into fix 2017-04-03 11:43:35 +02:00
Robert Konrad
1fb2315a35 Add a test for HLSL matrix unrolling 2017-04-03 11:42:36 +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
b2c2e6483b Analyze parameter preservation for functions.
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.
2017-03-25 16:25:30 +01:00
Hans-Kristian Arntzen
24382a8ea2 Use findLSB as well in bitfield test. 2017-03-25 15:46:12 +01:00
Hans-Kristian Arntzen
6801af4dce Fix bitfield functions. 2017-03-25 15:38:20 +01:00
Hans-Kristian Arntzen
f4749df09a Merge pull request #151 from Kode/fix
Transform more functions for HLSL
2017-03-24 16:13:34 +01:00
Robert Konrad
9fadd34afe Add new HLSL tests 2017-03-24 15:41:20 +01:00
Robert Konrad
78ec0fcb22 Update HLSL test output
HLSL requires builtins to be defined after
texcoords in some cases.
2017-03-24 14:40:13 +01:00
Hans-Kristian Arntzen
840a72d47a Workaround empty struct declaration and empty IO variables. 2017-03-24 10:03:11 +01:00
Robert Konrad
eab111ed32 Add tests for legacy lod handling 2017-03-23 15:51:43 +01:00
Hans-Kristian Arntzen
a0a582dd04 Do not emit interpolation qualifiers to static globals. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
b8bda45802 Add test case for interpolation qualifiers in HLSL. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
447545311b Add test for input I/O blocks in fragment. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
e89b789af3 Add some tests for no stage inputs or outputs in HLSL. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
62df60ea3d Update vertex locations test to include I/O blocks. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
784a23b92a Add instancing test to HLSL. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
a4aa89e992 Add test for fragment builtins like gl_FragDepth/gl_FragCoord. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
61c31c6054 Make use of explicit locations in HLSL. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
bdea1a444a Begin rewriting how HLSL deals with inputs and outputs. 2017-03-21 13:48:50 +01:00
Hans-Kristian Arntzen
75391f9a68 Handle vector variants of OpLogicalAnd/Or/Not. 2017-03-20 22:45:40 +01:00
Bill Hollings
5550c87b1f CompilerMSL options access and UBO alignment test case.
CompilerMSL accesses options using same design pattern as CompilerGLSL and CompilerHLSL.
CompilerMSL support setting VA & rez binding specs via either constructor or compile() method overload.
CompilerMSL support single UBO packing and padding in single pass.
spriv_cross app (main.cpp) supports turning off UBO packing and padding via command line option.
Add MSL UBO alignment test shader.
2017-03-12 17:42:51 -04:00
Hans-Kristian Arntzen
fd12124bf7 Add tests for legacy I/O flattening. 2017-03-06 14:04:01 +01:00
Hans-Kristian Arntzen
7f2e17969b Add built-in cull distance. 2017-03-05 12:47:03 +01:00
Hans-Kristian Arntzen
036b9b73f5 Emit storage qualifier in the correct place.
Need to emit qualifiers in a specific order for legacy GLSL.

<interpolation> <storage> <precision> <type>.
2017-02-24 09:56:17 +01:00
Hans-Kristian Arntzen
fc80cd8cbf Add support for loading flattened structs. 2017-02-23 19:31:56 +01:00
Hans-Kristian Arntzen
97350d32fd Fix cases for flattened struct write.
Handle writing the entire struct as well as writing the elements
individually.
2017-02-23 19:05:11 +01:00
Bill Hollings
1699e69ccd Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross 2017-02-11 10:58:07 -05:00
Hans-Kristian Arntzen
0e7c33ff81 Update glslang to latest on Travis.
Fix a lingering bug with OpSelect and boolean mix().
2017-02-11 10:52:34 +01:00
Bill Hollings
e016de860a Update MSL reference shaders affected by upstream pull. 2017-02-09 13:16:13 -05:00
Bill Hollings
6159a61c95 CompilerMSL add support for texel buffers.
Compiler MSL support DimBuffer as image dimension.
CompilerMSL check texture coordinate result type dimension before adding swizzles.
Update MSL reference shaders affected by this update.
2017-02-09 12:14:30 -05:00
Hans-Kristian Arntzen
5dd7c04195 Merge branch 'master' of git://github.com/brenwill/SPIRV-Cross into pr-109 2017-02-05 10:59:44 +01:00
Hans-Kristian Arntzen
9cb8616c31 Do not use write/read counters for "global" parameters.
Fixes device const & SSBO issues.
2017-02-05 10:50:14 +01:00
Hans-Kristian Arntzen
4ca769b546 Merge branch 'msl_global-invocation-id' of git://github.com/Kangz/SPIRV-Cross into pr-105 2017-02-05 10:14:38 +01:00
Hans-Kristian Arntzen
ab21dfb25b Fix execution order for for-loop emission.
In some cases, the compiler decided to emit continue block first,
which invalidated the expressions used by the condition.
Parameters to functions can be evaluated in any order which caused
"random" behavior.
2017-02-04 10:07:20 +01:00
Bill Hollings
e791c0b9e6 Removed Travis-killing MSL test: frag/for-loop-init.frag. 2017-01-31 12:08:08 -05:00
Bill Hollings
de72b3328e Removed Travis-killing MSL test: flatten/copy.flatten.vert. 2017-01-31 12:01:13 -05:00
Bill Hollings
d1737c65cf Removed Travis-killing MSL test: flatten/dynamic.flatten.vert. 2017-01-31 11:53:20 -05:00
Bill Hollings
be4cb17a14 Enhance MSL testing and add numerous MSL test cases.
Add to suite of MSL tests and references any existing GLSL tests
that successfully convert GLSL->SPIRV->MSL and compile as MSL.
test_shaders_helper() ignores hidden files that start with '.',
to avoid accidentally finding hidden OSX files such as .DS_Store.
Use xcrun to compile MSL shaders instead of hard-coded path to Metal compiler.
Wrap calls to xcrun in exception handling to ignore if Xcode not installed.
For MSL tests, move call to validate_shader_msl() to after call to
regression_check() to allow a converted MSL shader to be saved for
manual review even if it doesn't successfully compile as MSL.
2017-01-30 22:55:21 -05:00
Hans-Kristian Arntzen
1850457b28 Merge pull request #107 from Kode/hlsl
HLSL Support
2017-01-28 08:53:24 +01:00
Robert Konrad
e49cff5055 Update HLSL reference shader 2017-01-27 16:34:52 +01:00
Corentin Wallez
d8278a8e3b msl: Add support for gl_LocalInvocationID and gl_LocalInvocationIndex 2017-01-26 20:22:31 -05:00
Corentin Wallez
3542168f51 Add SSBO and gl_GlobalInvocationID MSL tests 2017-01-26 20:12:00 -05:00
Robert Konrad
82959c86bb Use \n line endings in HLSL reference shaders 2017-01-26 13:22:52 +01:00
Robert Konrad
d6b3efaaaf Add HLSL reference shader outputs 2017-01-26 11:41:22 +01:00
Robert Konrad
7b3d0686ef Adjust metal reference output
Y flipping is now off by default.
2017-01-26 10:32:50 +01:00
Arseny Kapoulkine
f45075b08b Validate Metal shaders on OSX with Metal compiler
If we run on a system with Xcode installed to a default path, run Xcode
Metal shader compiler to validate the generated MSL shader.

This uncovers an issue in the existing MSL test - MSL backend currently
does not auto-assign attribute locations, which means that translating
GLSL shader without location layout produces an invalid MSL which
generates "error: 'attribute' index '0' is used more than once".
2017-01-25 00:12:09 -08:00
Hans-Kristian Arntzen
7daba19223 Merge pull request #108 from zeux/flatten-row-major-matrix-index
Implement flattening of row major matrix indexing
2017-01-24 18:47:00 +01:00
Arseny Kapoulkine
32a561a6c3 Remove redundant constructor calls for scalar types 2017-01-24 08:09:58 -08:00
Arseny Kapoulkine
ed04c95b08 Implement flattening of row major matrix indexing
To extract a column from row-major matrix, we need to do a strided load one
component at a time. In this case flattened_access_chain_offset still returns
the offset to the first element, but the stride is equal to matrix stride
instead of vector stride.

For this to work, we need to pass matrix stride (and transpose flag) through,
similar to how matrix flattening works.

Additionally slightly clean up recursive flattened_access_chain structure -
specifically, instead of deciding mid-traversal that we need matrix stride
information, we can just pass the matrix stride through - for access chains
that end in matrix/vector this gets us what we need, and for access chains
that end in structs the flattened_access_chain_struct code will recompute
correct stride/transposition data to pass through further.
2017-01-24 07:42:19 -08:00
Hans-Kristian Arntzen
1c28ec6885 Add basic setup for regression testing Metal output. 2017-01-24 14:04:55 +01:00
Hans-Kristian Arntzen
a35073ad78 Add test for flattened 3-dimensional arrays. 2017-01-22 08:49:11 +01:00
Hans-Kristian Arntzen
3eb2e52c4e Fix bugs with row-major matrices inside flattened UBOs. 2017-01-21 13:50:01 +01:00
Hans-Kristian Arntzen
d93dc38415 Use correct glslang revision for reference output ... 2017-01-21 12:53:17 +01:00
Hans-Kristian Arntzen
d1dcced1cb Fixups to the flatten tests. 2017-01-21 12:39:16 +01:00
Hans-Kristian Arntzen
69af27d8be Expand array flatten test a little. 2017-01-21 12:35:57 +01:00
Hans-Kristian Arntzen
9540979c55 Support int and uint as flattened UBO types. 2017-01-21 12:29:20 +01:00
Hans-Kristian Arntzen
016b1d86e9 Emit readonly, writeonly for SSBOs. 2017-01-21 10:08:27 +01:00
Arseny Kapoulkine
62b27f1d81 Implement access chain flattening support for row major matrices
We currently only support access chains that end in a matrix by propagating
"needs transpose" flag upstream which flips the matrix multiplication order.

It's possible to support indexed extraction as well, however it would have to
generate code like this:

    vec4 row = vec4(UBO[0].y, UBO[1].y, UBO[2].y, UBO[3].y);

for a column equivalent of:

    vec4 row = UBO[1];

It is definitely possible to do so but it requires signaling the vector output
that it needs to switch to per-component extraction which is a bit more trouble
than this is worth for now.
2017-01-17 23:26:23 -08:00
Arseny Kapoulkine
64c17b59e5 Fix whitespace in generated flattened expressions
Add whitespace after comma and around arithmetic operators.
2017-01-17 23:26:19 -08:00
Arseny Kapoulkine
24c66250c7 Add tests for buffer block flattening 2017-01-17 23:26:18 -08:00
Hans-Kristian Arntzen
41f7e5b6a1 Add ability to have legacy-specific tests. 2017-01-16 09:08:06 +01:00
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
Hans-Kristian Arntzen
9d4b5c0c59 Use texel fetch instead of normalized sampling for subpass.
Cleaner output code, and matches more directly to how subpass reads work.
2016-05-05 09:19:38 +02:00
Hans-Kristian Arntzen
12cfbb221f Add support for querying DecorationInputAttachmentIndex.
Was missing from OpDecoration handling.
2016-05-04 13:41:04 +02:00
Hans-Kristian Arntzen
b6e3a00976 Support sampler and texture as function arguments.
sampler is also not an lvalue type.
2016-04-19 11:27:17 +02:00
Hans-Kristian Arntzen
7652c90802 Add support for separate samplers and textures.
This will not really make sense for plain GLSL/ESSL target, but other
backends might want it and useful to have for debugging.
2016-04-19 11:13:47 +02:00
Hans-Kristian Arntzen
b424851706 Fix floating point OpMod.
Floating point mod uses separate builtin in GLSL.
2016-04-16 09:25:14 +02:00
Hans-Kristian Arntzen
ba0ab875c8 Fix cases where SPIR-V conditionally branches to loop headers.
We should check if we are actually branching back to loop header.
Fixes some logic when continue_block == loop_header.
2016-04-04 08:53:37 +02:00
Hans-Kristian Arntzen
92134e410a Do not add dependencies for variables loaded from UniformConstant.
Fixes case where image variables (OpTypeImage), etc are
loaded from UniformConstant address space.
2016-04-01 19:58:26 +02:00
Hans-Kristian Arntzen
72e93672d3 Add array-of-SSBO test. 2016-03-22 14:49:43 +01:00
Hans-Kristian Arntzen
0ae2bcc3d0 Ensure that floating point literals are float.
Fixes regression from earlier workaround of std::to_string.
Update reference output.
2016-03-12 14:22:39 +01:00
Hans-Kristian Arntzen
75471fbb98 Initial commit. 2016-03-11 16:30:27 +01:00