Commit Graph

288 Commits

Author SHA1 Message Date
Bill Hollings
a759e2c872 Merge Brenwill fork with upstream. 2016-10-19 14:09:51 -07:00
Hans-Kristian Arntzen
206cb9157c Handle interpolation qualifiers inside IO blocks. 2016-10-07 16:30:11 +02:00
Corentin Wallez
ef9ee49276 Fix compilation on some old C++11 standard libraries. 2016-10-05 16:13:51 -04:00
Hans-Kristian Arntzen
253b15ff0c Remove fixed FIXME. 2016-10-03 17:25:20 +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
081620f811 Emit spec constants directly with Vulkan semantics.
Emit an actual spec constant declaration in Vulkan instead of resolving
the constant.
2016-10-03 12:52:56 +02:00
Hans-Kristian Arntzen
f3220833e8 Fix triangle mode in tessellation output. 2016-09-28 08:12:04 +02:00
Hans-Kristian Arntzen
6204d8e45d Move static extension checking out to appropriate method.
Also make sure extra statements are placed after extensions as extra
statements can depend on extensions.
2016-09-23 14:25:11 +02:00
Hans-Kristian Arntzen
62d223adda Comment the workaround for layout_for_variable. 2016-09-21 08:20:04 +02:00
rob
ace1911bd4 No layout qualifiers for versions that can't support GL_ARB_shading_language_420pack 2016-09-21 13:20:28 +09:00
rob
42fe8c31f1 Do not add layout qualifiers to variables for GLSL versions that don't support it 2016-09-21 10:21:52 +09:00
Hans-Kristian Arntzen
4d4e6d7a41 Document variable type remap interface a bit more.
Fix some minor missing pieces from C++.
Type remapping like this doesn't seem to fit MSL backend so well, as it
does a lot of remapping internally on its own.

Type name remapping, really is for fringe extension cases in GLSL which
aren't yet supported in SPIR-V.
2016-09-20 10:55:09 +02:00
Panagiotis Christopoulos Charitos
66e76d903f Add support of variable type remapping 2016-09-20 10:26:07 +02:00
Hans-Kristian Arntzen
6cc9624e88 Run format.sh. 2016-09-17 18:46:10 +02:00
Lubos Lenco
30dfd0d9b7 Clean up. 2016-09-17 18:42:38 +02:00
Lubos Lenco
1caaf2bba6 Typo. 2016-09-17 15:59:41 +02:00
Lubos Lenco
521586445f Clean up. 2016-09-17 15:56:23 +02:00
Lubos Lenco
80c394160a Legacy GLES extensions. 2016-09-17 14:33:16 +02:00
Rob Fischer
2199063e3c For arrayed textures in GLSL < 130, require GL_EXT_texture_array and emit correct texture lookup function names 2016-09-17 17:01:50 +09:00
Hans-Kristian Arntzen
378fbe8b92 Consistently use "image" nomenclature for separate images. 2016-09-11 13:48:25 +02:00
Hans-Kristian Arntzen
b4c67dafdd Pass down combined samplers to callees. 2016-09-11 13:20:35 +02:00
Hans-Kristian Arntzen
bff273636f Skip arguments if necessary. 2016-09-11 13:05:44 +02:00
Hans-Kristian Arntzen
313cb5f820 Declare shadow arguments. 2016-09-11 12:54:08 +02:00
Hans-Kristian Arntzen
948930b171 Build new IDs for shadow arguments. 2016-09-11 12:36:12 +02:00
Hans-Kristian Arntzen
dfb6597ee4 Begin redirecting separate params to other params. 2016-09-11 12:05:20 +02:00
Hans-Kristian Arntzen
dd1513b814 Trace usage of image/sampler variants through calls. 2016-09-10 21:52:22 +02:00
Hans-Kristian Arntzen
14bc1ffed8 Correctly emit variable declarations for combined image samplers.
Only support direct accesses to global variables in this commit.
2016-09-10 18:09:32 +02:00
Hans-Kristian Arntzen
71bacc4469 Basic combined image sampler emulation hooked up. 2016-09-10 17:48:52 +02:00
Hans-Kristian Arntzen
1b5ca8d868 Move combined image hiding logic into is_hidden. 2016-09-10 16:20:19 +02:00
Hans-Kristian Arntzen
bcb5560109 Sketch out interface for combined image samplers. 2016-09-10 13:56:36 +02:00
Hans-Kristian Arntzen
32b463f740 Only check for image load/store if sampling type is 2.
uniform texture2D is sampling type 1.
2016-09-10 13:00:07 +02:00
Bill Hollings
cf476f36d1 Merge MSL with upstream. 2016-08-31 21:00:56 -04:00
Hans-Kristian Arntzen
f61a5d1e5d Implement dead variable elimination. 2016-08-26 12:58:50 +02:00
Hans-Kristian Arntzen
6ae838c192 Fix legacy GLSL output with gl_FragData.
If the source GLSL file accessed gl_FragData, we got double up
with array access, giving invalid GLSL.
2016-08-18 12:55:19 +02:00
Hans-Kristian Arntzen
1c78f353a4 Merge pull request #39 from KTXSoftware/master
Change variable names beginning with gl_ in GLSL
2016-08-13 23:41:50 +02:00
Robert Konrad
3a40860869 Remove unused variable in replace_illegal_names 2016-08-13 22:56:53 +02:00
Robert Konrad
866cb014d1 Never try to rename remapped variables
Because remapping is used to map to builtins.
2016-08-13 22:56:08 +02:00
Hans-Kristian Arntzen
0eb89ecce0 Fix mistaken nullptr returned instead of empty string. 2016-08-13 10:31:29 +02:00
Robert Konrad
7693656d68 Change variable names beginning with gl_ in GLSL
Using old-school GLSL as input containing code ala
"gl_FragColor = whatever" resulted in illegal
declarations ala "out vec4 gl_FragColor;".
2016-08-13 00:14:52 +02:00
Bill Hollings
0dfeabc6d2 Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross 2016-08-01 15:38:57 -04: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
Bill Hollings
7c255dde4d Merged with upstream 2016-07-24 22:40:20 -07: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
7d8add33e4 Avoid conflict with C99 keyword. 2016-07-12 15:00:10 +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
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
Bill Hollings
65cc931da0 MSL support textures and samplers as global function args. 2016-07-06 21:47:42 -04:00
Bill Hollings
b321b83c8f MSL support textures and samplers as function args.
Add automatic sampler func arg when passing SampledImage type.
Pass texture and sampler in thread address space.
2016-07-06 20:30:47 -04:00
Bill Hollings
14f4339b1c Merge upstream.
Add explicit test for uniform var storage class (changed from test of storage class of var type).
2016-07-06 17:10:42 -04:00
Bill Hollings
fe8b8604bc For MSL, extract global var refs from within functions and convert them to function args. 2016-07-06 16:55:45 -04:00
Hans-Kristian Arntzen
078eec5894 Add support for generic remapping of variables. 2016-07-06 11:04:06 +02:00
Hans-Kristian Arntzen
8e63c770da Add explicit support for remapping variables.
Will enable use of extensions like framebuffer fetch, last fragment
depth and so on.
2016-07-06 09:58:01 +02:00
Hans-Kristian Arntzen
d5dc5f3f1c Fix issue with new glslang behavior for samplers as parameters.
Check case where storage class uniform is passed as function parameter.
2016-07-05 13:21:26 +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
5f629276a7 Use Boolean instead of Bool.
Xlib.h header uses a very ugly define for Bool which conflicts with
SPIRV-Cross.

The hassle free solution is to use Boolean instead.
2016-06-05 20:13:45 +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
5ea59bd11b Non-functional: Update formatting. 2016-05-23 13:30:02 +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
f05373bdd1 Do not rely on OpName when finding OpTypeStruct aliases.
SPIR-V can stamp out multiple variants of the same types to deal with
different offsets, layouts, array strides and so on in buffer blocks.
2016-05-23 10:57:22 +02:00
Hans-Kristian Arntzen
78e7615af6 Do not use flexible member arrays in C++.
This is supported as compiler extensions, but we can be standards
compliant here, so use the classic workaround of having a single entry
array at the end of the structs instead.
2016-05-23 09:15:49 +02:00
Hans-Kristian Arntzen
ffc5544c0b Don't need to force specific type for left shifts. 2016-05-13 15:30:40 +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
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
f144b767ce Always emit DescriptorSet decoration for Vulkan GLSL. 2016-05-05 11:53:43 +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
4b8ed53974 Add Clang format.
Reformats the entire codebase. Better to do it now than later.

Adds .clang-format and a convenience script format_all.sh which formats
everything automatically.
2016-05-05 09:40:58 +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
926916d745 Add -Wshadow.
Fixes lots of dubious variable shadowing.
2016-05-05 09:15:25 +02:00
Bill Hollings
5aafb28cc7 Track sampler ID in Meta for OpSampledImage objects.
Add virtual CompilerGLSL emit_sampled_image_op function for OpSampledImage.
Under MSL, set sampler ID for local OpSampledImage objects and extract it when emitting sampler.
2016-04-23 21:47:41 -04:00
Bill Hollings
2570121582 Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross 2016-04-19 10:14:01 -04: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
Bill Hollings
d7660fa129 Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross 2016-04-18 22:41:58 -04: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
Bill Hollings
6236cc79f0 Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross 2016-04-11 13:35:14 -04:00
Hans-Kristian Arntzen
5ac882765d Avoid out of range access to spirv data.
Avoids debug assertion crashes on MSVC 2015 when trying to access
elements out of range.
2016-04-11 13:40:36 +02:00
Bill Hollings
103aabf5e8 Initial support for Metal Shading Language. 2016-04-06 17:42:27 -04:00
Hans-Kristian Arntzen
147e53aeb2 Rename project to SPIRV-Cross.
Rename to coincide with moving the project to KhronosGroup.
2016-04-04 15:42:30 +02:00