Hans-Kristian Arntzen
b5938e0538
Do not emit layout(location) for fragment output pre-330.
2017-10-19 10:31:48 +02:00
Hans-Kristian Arntzen
712084b5b2
Only emit layout() on vertex inputs in version 330/300 es.
2017-10-18 09:56:13 +02:00
Hans-Kristian Arntzen
94ff355812
Fix some naming issues for stripped and flattened structs.
2017-10-10 17:32:26 +02:00
Hans-Kristian Arntzen
6feff98295
Update HLSL cbuffer tests.
2017-10-10 15:37:53 +02:00
Hans-Kristian Arntzen
b9814a09bc
Add more robust HLSL packing support.
2017-10-10 15:23:07 +02:00
Hans-Kristian Arntzen
f0200bb18d
Use packoffset in HLSL.
...
Rewrite how cbuffers are emitted.
2017-10-10 13:15:49 +02:00
Hans-Kristian Arntzen
a8e991dec6
Run format_all.sh.
2017-10-10 11:31:05 +02:00
Hans-Kristian Arntzen
4d11220aa8
Add a test for enhanced layouts.
2017-10-10 11:30:29 +02:00
Hans-Kristian Arntzen
5a89606f26
Add support for GL_ARB_enhanced_layouts.
2017-10-10 11:05:46 +02:00
Hans-Kristian Arntzen
1079e7930b
Run format_all.sh.
2017-10-10 10:22:40 +02:00
Hans-Kristian Arntzen
6a7b95d2d6
Validate that std140 packing can actually be used.
2017-10-10 10:12:27 +02:00
Ben Clayton
e9621827c5
Require GL_ARB_shader_image_load_store extension.
...
The early_fragment_tests layout qualifier requires either OpenGL 4.2 or use of the GL_ARB_shader_image_load_store extension.
2017-10-09 10:37:11 +01:00
Hans-Kristian Arntzen
8538b4c9c0
Handle empty struct declarations with best effort.
...
This "feature" is a bit icky as we have no useful representation of it,
so never emit code which has anything to do with empty structs.
2017-10-06 13:05:14 +02:00
Hans-Kristian Arntzen
aab3107a3f
Add WorkGroupID/NumWorkGroups to MSL. Fix block name alias.
2017-09-29 12:16:53 +02:00
Hans-Kristian Arntzen
6583de8de7
ConstantID can be 0 for spec constants.
2017-09-29 10:33:28 +02:00
Hans-Kristian Arntzen
153fed031d
Add basic support for StorageClassStorageBuffer.
...
Needs more testing, but seems to work.
2017-09-28 13:29:57 +02:00
Hans-Kristian Arntzen
fae64f032d
Correctly resolve constant expressions for WorkGroupSize.
2017-09-28 12:34:48 +02:00
Hans-Kristian Arntzen
0e4ed4102b
Only declare with specialization constant when in Vulkan semantics.
2017-09-28 12:24:04 +02:00
Hans-Kristian Arntzen
86eb874568
Implement specialization constants for work group sizes.
2017-09-28 11:33:30 +02:00
Hans-Kristian Arntzen
ceefae5584
Support mixed constant composites.
2017-09-27 16:10:29 +02:00
Hans-Kristian Arntzen
9175363839
Fix typo.
2017-09-25 10:16:45 +02: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
1bc5b70752
Add exhaustive image query to HLSL.
...
Need to strip this down somehow ...
2017-09-20 10:00:13 +02:00
Hans-Kristian Arntzen
7c58f15928
Run format_all.sh.
2017-09-19 16:09:19 +02:00
Hans-Kristian Arntzen
7064c54820
Various fixes to texture/image query in GLSL.
2017-09-19 16:08:25 +02:00
Hans-Kristian Arntzen
6599a41aad
Add option to disable use of 420pack extension.
2017-09-08 09:56:06 +02:00
Hans-Kristian Arntzen
03db5c4847
Run format_all.sh.
2017-09-06 09:15:27 +02:00
David Srbecky
e596d40cad
Fix assignment optimization for logical and/or.
...
"x = x && y" was converted to "x &= y", which is invalid.
2017-09-05 16:07:41 +01:00
Hans-Kristian Arntzen
9091eadb0d
Support FrexpStruct/ModfStruct.
2017-09-04 10:27:08 +02:00
Hans-Kristian Arntzen
11dfcb6531
Add restrict qualifier for images.
2017-08-29 15:54:22 +02:00
Hans-Kristian Arntzen
d55898ec74
Fix declaration of coherent images.
2017-08-29 15:52:59 +02:00
Hans-Kristian Arntzen
713bd7c2b5
Run format_all.sh.
2017-08-28 09:01:03 +02:00
Hans-Kristian Arntzen
89a29becd4
Add support for coherent SSBO qualifiers.
2017-08-28 08:59:54 +02:00
Hans-Kristian Arntzen
d7f38ab4bf
Add support for SPV_KHR_multiview.
2017-08-15 13:28:16 +02:00
Hans-Kristian Arntzen
7d7f4b3b50
Emit flattened loads and stores.
2017-08-15 09:15:23 +02:00
Hans-Kristian Arntzen
3cbdbec712
Begin implementing ByteAddressBuffer flattening for HLSL.
2017-08-15 09:15:23 +02:00
Bill Hollings
1e84a379ff
Fix issue #245 : assignment of flattened input struct.
...
Emit input struct assignment by assigning member by member from stage_in struct.
Map qualified member name from pointer type, not base type.
Add Comiler::expression_type_id() function, similar to expression_type().
2017-08-12 00:21:13 -04:00
Hans-Kristian Arntzen
6cda7f120b
Merge pull request #246 from KhronosGroup/fix-241
...
Unify vertex clip-coord fixups.
2017-08-11 12:42:10 +02:00
Bill Hollings
730257cf67
Merge upstream
2017-08-10 17:27:01 -04:00
Hans-Kristian Arntzen
48ccde3779
Support OpConstantNull.
2017-08-03 14:32:29 +02:00
Hans-Kristian Arntzen
bdfa97a1cf
Unify vertex clip-coord fixups.
...
The different options were scattered around in different backends and
didn't really work right with CLI at all.
2017-08-03 13:02:59 +02:00
Hans-Kristian Arntzen
2abdc135c3
Declare undefined values up front.
...
They might potentially be used as part of OpStore in the SPIRV-Tools
inliner in some cases.
Implement these as declared variables but without any initializer.
2017-08-02 10:33:03 +02:00
Hans-Kristian Arntzen
56e71c1dad
Do not emit layout(location) qualifiers for older GLSL targets.
...
ESSL 300 and GLSL <410 do not support this along with legacy targets.
2017-07-31 11:17:02 +02:00
Hans-Kristian Arntzen
cbcaca5a39
Fix textureProj with shadow on GLSL.
2017-07-31 10:05:32 +02:00
Hans-Kristian Arntzen
1c6df1b7b4
Use _m* for member names without OpMemberName.
...
Member names could conflict with type names in stripped modules with
very large structs.
2017-07-29 21:44:20 +02:00
Hans-Kristian Arntzen
0d14448b4d
Minor optimization of enclose_expression.
2017-07-25 18:25:03 +02:00
Hans-Kristian Arntzen
6ff9007311
Fix unary enclosures.
2017-07-24 10:17:19 +02:00
Hans-Kristian Arntzen
c8d60914c4
Add support for SampleId/SampleMask/SamplePosition builtins.
2017-07-24 10:07:31 +02:00
Hans-Kristian Arntzen
df6aa0e609
Support SampleCmpLevelZero on cubes as well.
2017-07-24 09:28:24 +02:00
Bill Hollings
5f42746389
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross
2017-06-30 19:11:46 -04:00
Bill Hollings
f591bc0d4a
CompilerMSL enhancements.
...
Support BuiltInFragDepth.
Emit interface block for StorageClassUniformConstant.
Throw exception when output or fragment input structs contain matrix or array.
Dynamically created interface structs sorted by location number instead of alphabetically.
Add Compiler::is_array() function.
2017-06-30 19:10:46 -04:00
David Srbecky
edec5ea137
Add "texture" to the keyword list.
...
I have encountered several shaders where people use "texture" as
local variable (old shaders from times when it was not build-in).
2017-06-27 15:35:47 +01:00
Hans-Kristian Arntzen
0aac31bda1
Remove remnants of old OpCompositeInsert hack.
2017-06-26 22:58:41 +02:00
David Srbecky
77b5b4446b
Always make a copy when handling OpCompositeInsert
...
The modified object might not be mutable (e.g. shader input).
Added a test for the case when this happens.
2017-06-26 18:32:53 +01:00
Hans-Kristian Arntzen
d38b1b086a
Fix typo.
2017-06-23 09:50:01 +02:00
Hans-Kristian Arntzen
7bb749142c
Run format_all.sh.
2017-06-23 09:46:15 +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
b0f7deedec
Run format_all.sh.
2017-06-17 10:56:24 +02:00
Hans-Kristian Arntzen
978901f9e4
Avoid ugly workaround for separate shadow samplers in GLSL/HLSL.
2017-06-17 10:54:59 +02:00
rob
fb1820e2f5
Geometry shader core since GLSL 150
2017-06-17 10:06:46 +09:00
Bill Hollings
6f3381a5d3
Fixes from review of PR #190 .
2017-06-01 16:29:39 -04:00
Bill Hollings
ba245697f1
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross
2017-06-01 10:20:00 -04:00
Hans-Kristian Arntzen
326a7ffdf0
Check multidimensional extension in type_to_glsl_constructor.
2017-05-31 10:00:52 +02:00
Hans-Kristian Arntzen
470ae7a7f6
Add multidimensional array flattening test.
2017-05-31 10:00:52 +02:00
Hans-Kristian Arntzen
f0044b91a3
Add support for flattening multidimensional arrays.
2017-05-31 09:59:00 +02:00
Hans-Kristian Arntzen
842eff9647
Merge pull request #188 from KhronosGroup/sso
...
Add support for Separate Shader Objects
2017-05-31 09:55:34 +02:00
Bill Hollings
b41e1482c8
Support emitting SPIR-V type declarations tuned for specified SPIR-V objects.
...
CompilerGLSL type_to_glsl() and image_type_glsl() functions support optional object ID.
Add SPIRType::Image::access member to support SPIR-V OpTypeImage access qualifier.
Remove SPIRType::Image::is_read and ::is_written members.
Use DecorationNonReadable and DecorationNonWritable to mark read/write access for image variables.
CompilerMSL emit access qualifiers per image variable, instead of per image type.
CompilerGLSL and CompilerHLSL behaviour is unchanged.
2017-05-29 20:45:05 -04:00
Bill Hollings
c1b8154f2c
CompilerMSL fix variables used in interface blocks aren't resolved correctly ( #179 ).
2017-05-22 21:41:19 -04:00
Bill Hollings
542e8c37ad
Edits resulting from review of PR #186 .
2017-05-22 13:38:23 -04:00
Hans-Kristian Arntzen
167fffd4af
Enforce the standard builtin array names.
2017-05-22 15:55:42 +02:00
Hans-Kristian Arntzen
36650c890c
Add separate shader object support.
...
Allow redeclaring gl_PerVertex for stage compatibility.
2017-05-22 15:53:21 +02:00
Bill Hollings
d677e63860
Merge with upstream
2017-05-19 19:36:24 -04:00
Bill Hollings
8f6df770ce
CompilerMSL map many GLSL functions to MSL functions.
...
Add bool members is_read and is_written to SPIRType::Image.
Output correct texture read/write access by marking whether textures
are read from and written to by the shader.
Override bitcast_glsl_op() to use Metal as_type<type> functions.
Add implementations of SPIR-V functions inverse(), degrees() & radians().
Map inverseSqrt() to rsqrt().
Map roundEven() to rint().
GLSL functions imageSize() and textureSize() map to equivalent
expression using MSL get_width() & get_height() functions.
Map several SPIR-V integer bitfield functions to MSL equivalents.
Map SPIR-V atomic functions to MSL equivalents.
Map texture packing and unpacking functions to MSL equivalents.
Refactor existing, and add new, image query functions.
Reorganize header lines into includes and pragmas.
Simplify type_to_glsl() logic.
Add MSL test case vert/functions.vert for added function implementations.
Add MSL test case comp/atomic.comp for added function implementations.
test_shaders.py use macOS compilation for MSL shader compilation validations.
2017-05-19 18:14:08 -04:00
Hans-Kristian Arntzen
07ee7d09cb
Fix deep call hierarchies in CombinedImageSamplerUsageHandler.
2017-05-06 13:53:06 +02:00
Hans-Kristian Arntzen
3eb8a34173
Declare variables and parameters with samplerShadow if necessary.
2017-05-06 13:35:02 +02:00
Hans-Kristian Arntzen
f4d7268565
GLSL will also need shadow state analysis.
...
Refactor stuff out to top-level.
Fix some bugs with combined shadow samplers in regular GLSL.
2017-05-06 13:21:35 +02:00
Hans-Kristian Arntzen
100e9d34b8
HLSL: Basic support for separate image/samplers.
2017-05-06 12:39:04 +02:00
Hans-Kristian Arntzen
851acf3712
Avoid boolean mix in HLSL.
...
Update glslang travis checkout as boolean mix support was broken on that commit.
2017-05-04 10:28:30 +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
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
cb637db5d6
Handle GL_ARB_derivative_control
2017-03-24 15:58:54 +01:00
Robert Konrad
f3a82778f9
Fix OpLogicalNot in HLSL
2017-03-24 15:00:48 +01:00
Robert Konrad
9ec9dd0647
Add dFd(x/y)(Fine/Coarse) to GLSL
2017-03-24 13:59:19 +01:00
Hans-Kristian Arntzen
840a72d47a
Workaround empty struct declaration and empty IO variables.
2017-03-24 10:03:11 +01:00
Robert Konrad
ec39647d92
Check for legal lod id
...
And avoid passing superfluous has_lod parameter.
2017-03-24 09:26:02 +01:00
Robert Konrad
9760f1544c
Throw when an lod value is used but not supported
...
Plus requested changes.
2017-03-23 14:43:54 +01:00
Robert Konrad
edfc297179
Put check for lod legality in its own function
...
Also add requested code style changes.
2017-03-23 13:25:24 +01:00
Robert Konrad
3f74503aca
Prefer plain texture2D in legacy es vertex shaders
...
WebGL supports lod texture funcs only in fragment
shaders but SPIR-V supports only lod texture funcs
in vertex shaders. This reverts calls which were
forced (infered from using a 0 constant) to use
an lod to plain calls in vertex shaders when
using legacy es.
2017-03-23 10:11:45 +01:00
Hans-Kristian Arntzen
099f307123
Add traversal for active builtin variables.
...
Refactor some ugly type-copying for access chains.
2017-03-21 13:48:28 +01:00
Hans-Kristian Arntzen
75391f9a68
Handle vector variants of OpLogicalAnd/Or/Not.
2017-03-20 22:45:40 +01:00
Bill Hollings
dc69427402
Updates to MSL functionality to support PR review feedback.
2017-03-11 12:17:22 -05:00
Bill Hollings
65cd7eb670
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross
2017-03-09 13:18:48 -05:00
Henrik Rydgård
bfae041e21
Fix a few minor warnings. (i was used as a uint32_t in multiple places, like type_member_for_offset, so changed its type)
2017-03-07 10:19:08 +01:00
Bill Hollings
826de0e777
Merge with upstream and resolve conflicts.
2017-03-06 12:15:42 -05:00
Hans-Kristian Arntzen
c5de1cfa90
Add support for flattening I/O blocks.
...
Fix issue where layout() qualifiers are emitted for members in legacy
targets.
2017-03-06 14:01:51 +01:00
Hans-Kristian Arntzen
7f2e17969b
Add built-in cull distance.
2017-03-05 12:47:03 +01:00
Bill Hollings
b332bae3c3
spirv_msl unpack packed MSL uniform struct members.
...
spirv_glsl add member_is_packed_type() and unpack_expression_type() functions.
2017-03-01 13:07:40 -05:00
Bill Hollings
484931d8b2
spirv_msl auto-alignment of members of MSL uniform structs.
...
spirv_msl optionally add padding and packing to allow MSL
struct members to align with SPIR-V struct alignments.
spirv_cross add convenience methods for testing Decorations.
spirv_glsl replace member_decl() function with new emit_stuct_member().
Allow struct member types to be marked as packed via DecorationCPacked decoration.
2017-02-28 21:44:36 -05:00
Hans-Kristian Arntzen
bcf2303ba0
Do not emit storage qualifiers for local variables.
...
Metal backend uses local variables to implement global variables.
Do not emit storage qualifiers for any variable which is declared inside
a function.
2017-02-24 11:15:34 +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
eb5e09fa64
Run format_all.sh.
2017-02-23 19:33:14 +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
Hans-Kristian Arntzen
3c58bbbcbe
Flatten varying structs outputs in legacy targets.
2017-02-22 20:17:58 +01: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
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
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
Hans-Kristian Arntzen
18c37bcdab
Update license headers for 2017.
2017-01-28 09:00:40 +01:00
Robert Konrad
c53646a670
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross into hlsl
2017-01-25 17:03:57 +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
Robert Konrad
429b8cb25f
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross into hlsl
...
# Conflicts:
# spirv_glsl.hpp
2017-01-23 14:44:41 +01:00
Robert Konrad
beebcbd1aa
Splat even less in HLSL
2017-01-23 14:40:56 +01:00
Robert Konrad
ea24ee8145
Do not splat type contructor arguments in HLSL
2017-01-23 14:39:04 +01:00
Hans-Kristian Arntzen
d87249a2eb
Remove hack for accessing matrix decorations in flattened structs.
2017-01-22 09:25:01 +01:00
Hans-Kristian Arntzen
fe12fff324
Comment type ID a bit better.
2017-01-22 09:06:15 +01:00
Hans-Kristian Arntzen
efba610718
Cleanup emit_buffer_block_flattened.
2017-01-22 08:53:52 +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
87f3c57945
Formatting.
2017-01-21 12:47:26 +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
d3cad99347
Cleanups for flattened access chains.
2017-01-21 11:30:33 +01:00
Hans-Kristian Arntzen
7f787f09dc
Add flattening support for push constants.
2017-01-21 10:27:14 +01:00
Hans-Kristian Arntzen
016b1d86e9
Emit readonly, writeonly for SSBOs.
2017-01-21 10:08:27 +01:00
Bill Hollings
2d0d328f61
Run style formatter.
2017-01-20 11:33:59 -05:00
Corentin Wallez
e88c88c310
Fix compilation on some old C++11 standard libraries.
2017-01-18 17:22:54 -05: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
1ec6c1a029
Refactor flattened_access_chain functions
...
Instead of filling a std::string buffer passed by reference return a new
string. This may be slightly slower in certain cases but they are pretty
rare and this matches the code style better.
Also streamline error handling in different branches and extract function
to generate vector swizzle.
2017-01-17 23:26:22 -08:00
Arseny Kapoulkine
c5a821cdbf
Minor emit_buffer_block refactoring
...
Move buffer block variant dispatch into emit_buffer_block to match
emit_push_constant_block, move SSBO check into emit_buffer_block_legacy.
2017-01-17 23:26:20 -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
Arseny Kapoulkine
0185f0a6b8
Implement buffer block flattening
...
Legacy GLSL targets do not support uniform buffers, and as such require
some sort of emulation. There are two alternatives - one is to represent
a uniform buffer as a uniform struct, and another one is to flatten it
into an array of primitive vector types (vec4).
Uniform struct have two disadvantages that make using them prohibitive
in some applications:
- The location assignment for struct members is arbitrary which means
the application has to set each struct member one by one
- Some Android drivers fail to link shader programs if both vertex and
fragment shader use the same uniform struct
Because of this, we need to support flattening uniform buffers into an
array. This is not just important for legacy GLSL but also is sometimes
useful for ESSL 3.0 where some Android drivers do not have stable UBO
support.
The way flattening works is the entire buffer is represented as a vec4
array; each access chain is rewritten into a combination of array
accesses, swizzles and data type constructors. Specifically:
- Extracting a vector or a scalar requires indexing into the array with
an optional swizzle, for example CB0[13].yz for reading vec2
- Extracting a matrix or a struct requires extracting each individual
vector or struct member and then combining them into the resulting
object
- Extracting arrays is not supported, mostly because the resulting
construct is very inefficient and ESSL 1.0 does not support array
constructors.
Additionally, while we try to constant-fold each individual indexing
operation, there are cases where we have to use dynamic index
computation (specifically for indexing arrays with non-constants); so
the general form of the primitive array extraction expression is:
buffer[stride0*index0+...+strideN*indexN+offset]
Where stride/offset are integer literals and index represents variables.
2017-01-17 23:26:08 -08:00
Hans-Kristian Arntzen
27f4f75513
Run format_all.sh.
2017-01-13 16:32:54 +01:00
Hans-Kristian Arntzen
fadaec205b
Improvements to legacy GLSL output.
...
- By default, emit uniform structs for UBOs, like push constant.
- Forward transpose information,
and optimize transpose(matrix) * vector to vector * matrix.
2017-01-13 16:31:13 +01:00
Hans-Kristian Arntzen
ce3fe29557
MSVC maintenance.
2017-01-12 10:57:44 +01:00
Endre Oma
6ad8b307a1
Use the classic locale when converting floats to string
2017-01-11 17:06:06 +01:00
Bill Hollings
4e915e8c48
Run style formatter.
2017-01-08 08:52:57 -05:00
Bill Hollings
4a6358bb9f
Add clean_func_name() to support overrides to function names.
2017-01-07 22:15:58 -05:00
Bill Hollings
e6dab816b0
Removed names of unused function parameters.
2017-01-07 15:55:04 -05:00
Bill Hollings
91367799b0
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross
2017-01-06 14:13:56 -05:00
Hans-Kristian Arntzen
97f7ab865a
Fix handling of NoWrite/NoRead decoration for images.
...
The old workaround for glslang is no longer needed, so only apply workaround
carefully.
2017-01-05 18:16:33 +01:00
Bill Hollings
a2b8a0e5c9
Refactor emit_texture_op() function.
...
CompilerGLSL add to_function_name() and to_function_args() functions to organize
structure of emit_texture_op() function.
CompilerMSL add support for MSL gather(), gather_compare() and sample_compare() functions.
2016-12-28 18:36:42 -05:00
Bill Hollings
b1b68db835
Resolve conflict with upstream pull.
2016-12-21 11:43:32 -05:00
Hans-Kristian Arntzen
9ccd1aea42
Merge pull request #85 from godlikepanos/master
...
Add the option to build without exceptions
2016-12-19 12:32:04 +01:00
Bill Hollings
09c1e10d43
Merge branch 'master' of https://github.com/KhronosGroup/SPIRV-Cross
2016-12-17 17:15:14 -05:00
Bill Hollings
e73e8e4f48
Add support for the BuiltInClipDistance builtin for MSL.
...
CompilerGLSL builtin_to_glsl() function outputs gl_ClipDistance for BuiltInClipDistance
builtin, and includes builtin code in output when handling unknown builtin code.
CompilerMSL uses type ID instead of type object where appropriate to support array types,
where type.self is not consistent with actual type ID, plus support array stride calc
even when not explicitly set by SPIR-V code.
For output consistency, CompilerMSL prefers use of standard builtin names over specified
names, and output builtins qualified with output struct while in entry function.
2016-12-17 17:07:53 -05: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
Panagiotis Christopoulos Charitos
7f69f9395e
Rework after review
2016-12-15 20:46:10 +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
Panagiotis Christopoulos Charitos
946f7796c1
Add an option to disable exceptions
...
Some refactoring in the no-exceptions case
Grooming the no-exceptions patch for pull request
2016-12-15 17:49:01 +01:00
Hans-Kristian Arntzen
4f07a32c29
Begin implementing for loop initializer propagation.
2016-12-15 17:44:47 +01:00
Bill Hollings
1358362075
Fixes to non-native row-major matrix support.
...
Add support for OpLoad. Throw exception for non-square non-native row-major matrix.
Update variable and function names to clarify purposes.
2016-12-14 02:12:52 -05:00
Bill Hollings
343677e639
Support row-major matrices in access chain when not natively supported by backend (MSL).
2016-12-11 11:01:08 -05: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
ea781e602c
Fix code generated from optimized OpCompositeExtract.
2016-12-06 17:19:34 +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
Bill Hollings
c5c073699e
CompilerMSL fix func_call_arg() cast error when not passed SPIRVariable type.
...
CompilerGLSL allow retrieval of partial source if an error occurs.
2016-11-27 12:34:04 -05:00
Lubos Lenco
0028b4f278
Legacy GL_ARB_shader_texture_lod support.
2016-11-21 22:37:20 +01:00
Hans-Kristian Arntzen
7630d3cc9c
MSVC maintenance.
...
Fix compilation and warnings.
2016-11-21 12:18:45 +01:00
Hans-Kristian Arntzen
b847c88559
Cleanup, and make cfg analysis optional.
2016-11-18 17:06:49 +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
0c9683cd85
Distinguish between cross edges and back edges.
...
Handle the weird opcodes CopyMemory/CopyObject.
2016-11-18 09:59:54 +01:00
Hans-Kristian Arntzen
dad4a34072
Start adding CFG analysis.
...
Not complete yet, but partly working ...
2016-11-17 16:58:05 +01:00
Hans-Kristian Arntzen
75c2285f6e
Merge branch 'master' of git://github.com/brenwill/SPIRV-Cross
2016-10-27 16:26:00 +02:00
Bill Hollings
943191a1c8
Compliance fixes for pull request.
...
Use C++ style primitive casts.
Add BackendVariations.discard_literal to support language variation for discard syntax.
Tweaks to custom MSL defines.
2016-10-27 10:20:01 -04:00
Hans-Kristian Arntzen
48636b4af8
Fix style nits from last merge.
2016-10-27 13:56:10 +02:00
Bas Zalmstra
e042eab551
Changed keywords to const static unordered_set and indented the keywords
2016-10-27 13:48:15 +02:00
Bas Zalmstra
f537adf6e9
Added all glsl reserved keywords to replace_illegal_names
2016-10-27 12:51:22 +02:00
Bill Hollings
ac00c6032f
Run clang-format.
2016-10-24 09:24:24 -04:00
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