Граф коммитов

294 Коммитов

Автор SHA1 Сообщение Дата
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 6198e37f3f Merge pull request #96 from KhronosGroup/transpose-improvement
Legacy GLSL improvements
2017-01-17 20:06:27 +01:00
Hans-Kristian Arntzen 7fe07f9692 Merge pull request #98 from zeux/fix-get-declared-struct-member-size
Fix get_declared_struct_member_size for struct members
2017-01-17 15:05:13 +01:00
Arseny Kapoulkine f63e7c5c98 Fix get_declared_struct_member_size for struct members
When a member of a struct is a struct, get_declared_struct_member_size
instead returned the size of the entire outer struct because it added
the offset of the last field to the size of the last field.

Restructure the function so that it handles all arrays in the same way
(by using array stride) and for the rest reuses get_declared_struct_size
if possible - this simplifies the function and fixes the issue.
2017-01-17 01:52:12 -08:00
Hans-Kristian Arntzen 41f7e5b6a1 Add ability to have legacy-specific tests. 2017-01-16 09:08:06 +01: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 a3bac9e4ce Merge pull request #95 from KhronosGroup/msvc-maintenance
MSVC maintenance.
2017-01-12 12:23:05 +01:00
Hans-Kristian Arntzen ce3fe29557 MSVC maintenance. 2017-01-12 10:57:44 +01:00
Hans-Kristian Arntzen b50513c03a Merge pull request #94 from eoma/fix-locale-independent-float-conversions
Use the classic locale when converting floats to string
2017-01-11 19:17:36 +01:00
Endre Oma 6ad8b307a1 Use the classic locale when converting floats to string 2017-01-11 17:06:06 +01:00
Hans-Kristian Arntzen 4c05b8c3e3 Merge pull request #93 from eoma/fix-glm-swizzle
Switch to GLM_FORCE_SWIZZLE from deprecated GLM_SWIZZLE
2017-01-09 20:53:32 +01:00
Endre Oma 42ca3d9956 Switch to GLM_FORCE_SWIZZLE from deprecated GLM_SWIZZLE 2017-01-09 18:03:54 +01:00
Hans-Kristian Arntzen 81238656ea Merge pull request #91 from brenwill/master
Refactor emit_texture_op() function.
2017-01-08 15:14:56 +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 c7659507e8 Merge pull request #90 from gwihlidal/master
Improve useability of get_decoration and friends.
2017-01-05 23:07:40 +01:00
Graham Wihlidal 2edc350aa1 Remove whitespace 2017-01-05 21:04:42 +01:00
Graham Wihlidal bcfe2be332 Coding style fix 2017-01-05 21:02:57 +01:00
Graham Wihlidal 9b1ee8f10a Improve fix for boolean decorations queried in get_decoration, added support to get_member_decoration, and updated comments to reflect the change in behavior. 2017-01-05 21:01:49 +01:00
Graham Wihlidal acd98ac0d5 Fix typo in comment 2017-01-05 21:00:05 +01:00
Graham Wihlidal a4818f4391 Explicitly truncate (to keep the fprintf easily portable) 2017-01-05 20:51:14 +01:00
Hans-Kristian Arntzen 0338a5c755 Merge pull request #89 from KhronosGroup/nowrite-noread-fix
Fix handling of NoWrite/NoRead decoration for images.
2017-01-05 20:37:59 +01:00
Graham Wihlidal 862a71b4d3 Fix Compiler::get_decoration to correctly return > 0 if DecorationNonWritable or DecorationNonReadable are specified. 2017-01-05 20:19:59 +01:00
Graham Wihlidal fadc1f9e10 Fix for "error C4146: unary minus operator applied to unsigned type, result still unsigned" 2017-01-05 20:14:53 +01:00
Graham Wihlidal 33bee8a12e Fix for "warning C4267: '=': conversion from 'size_t' to 'uint32_t', possible loss of data" 2017-01-05 20:14:34 +01: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
Hans-Kristian Arntzen 3576cfb158 Fix warning in MSL. 2017-01-05 18:16:22 +01:00
Bill Hollings e27a5f7df6 CompilerMSL refactored to simplify handling of vertex attributes.
Combine all vertex attributes into a single stage_in structure.
Remove unneeded structure members from MSLConfiguration, MSLVertexAttr and Meta::Decoration.
Remove unneeded CompilerMSL functions that supported struct offsets and padding.
2017-01-01 14:43:20 -05: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
Hans-Kristian Arntzen c8e2269a78 Merge pull request #87 from brenwill/master
MSL enhancements
2016-12-22 11:22:16 +01:00
Bill Hollings 7d38f1822a CompilerMSL fixes to support pull-request feedback.
Make Compiler::OpcodeHandler and Compiler::traverse_all_reachable_opcodes protected
instead of private, for use by subclasses.
Add CompilerMSL::CustomFunctionHandler and traverse_all_reachable_opcodes() to detect
active opcodes that require the output of a custom function.
CompilerMSL::custom_function_ops use std::set to retain ordering to improve testability.
2016-12-21 16:31:13 -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 1a5dc0edcd CompilerMSL support emitting custom functions for SPIR-V ops.
CompilerMSL use custom mod() function instead of Metal's fmod() function.
2016-12-18 21:42:10 -05:00
Bill Hollings 32ae2eceed CompilerMSL enhancements to handling of in/out variables.
CompilerMSL sort in/out attributes by attribute number (location). Sort inputs in reverse order.
CompilerMSL propagate incoming vertex attribute offset values.
CompilerMSL elide unused in/out variables.
CompilerMSL replace use of sets with unordered_sets.
2016-12-18 18:48:15 -05: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 2f48065ec1 Merge pull request #86 from KhronosGroup/for-loop-fix
Fix for loops for legacy ESSL.
2016-12-16 14:14:19 +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
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