- 27 Dec, 2016 1 commit
-
-
steve-lunarg authored
This commit adds support for copying nested hierarchical types of split types. E.g, a struct of a struct containing both user and builtin interstage IO variables. When copying split types, if any subtree does NOT contain builtin interstage IO, we can copy the whole subtree with one assignment, which saves a bunch of AST verbosity for memberwise copies of that subtree.
-
- 26 Dec, 2016 1 commit
-
-
steve-lunarg authored
This adds structure splitting, which among other things will enable GS support where input structs are passed, and thus become input arrays of structs in the GS inputs. That is a common GS case. The salient points of this PR are: * Structure splitting has been changed from "always between stages" to "only into the VS and out of the PS". It had previously happened between stages because it's not legal to pass a struct containing a builtin IO variable. * Structs passed between stages are now split into a struct containing ONLY user types, and a collection of loose builtin IO variables, if any. The user-part is passed as a normal struct between stages, which is valid SPIR-V now that the builtin IO is removed. * Internal to the shader, a sanitized struct (with IO qualifiers removed) is used, so that e.g, functions can work unmodified. * If a builtin IO such as Position occurs in an arrayed struct, for example as an input to a GS, the array reference is moved to the split-off loose variable, which is given the array dimension itself. When passing things around inside the shader, such as over a function call, the the original type is used in a sanitized form that removes the builtIn qualifications and makes them temporaries. This means internal function calls do not have to change. However, the type when returned from the shader will be member-wise copied from the internal sanitized one to the external type. The sanitized type is used in variable declarations. When copying split types and unsplit, if a sub-struct contains only user variables, it is copied as a single entity to avoid more AST verbosity. Above strategy arrived at with talks with @johnkslang. This is a big complex change. I'm inclined to leave it as a WIP until it can get some exposure to real world cases.
-
- 22 Dec, 2016 1 commit
-
-
John Kessenich authored
Modify shader ballot extension by adding OpSubgroupReadInvocationKHR
-
- 21 Dec, 2016 10 commits
-
-
John Kessenich authored
-
chaoc authored
-
John Kessenich authored
-
John Kessenich authored
-
John Kessenich authored
Add support for SPV_NV_geometry_shader_passthrough
-
John Kessenich authored
Fix a large number of Clang warnings about inconsistent usage of 'override'
-
Henrik Rydgård authored
-
John Kessenich authored
Also, eliminate the 'atom' field of TPpToken. Parsing a real 300 line shader, through to making the AST, is about 10% faster. Memory is slightly reduced (< 1%). The whole google-test suite, inclusive of all testing overhead, SPIR-V generation, etc., runs 3% faster. Since this is a code *simplification* that leads to perf. improvement, I'm not going to invest too much more in measuring the perf. than this. The PP code is simply now in a better state to see how to further rationalize/improve it.
-
John Kessenich authored
Always keep 'token' outside. Always return the string to upper levels inside.
-
John Kessenich authored
-
- 20 Dec, 2016 8 commits
-
-
chaoc authored
-
John Kessenich authored
CMake: Add option to make it possible to not build the executables
-
John Kessenich authored
Add support for SPV_NV_sample_mask_override_coverage
-
John Kessenich authored
Removed the preprocesser memory pool. Removed extra copies and unnecessary allocations of objects related to the ones that were using the pool. Replaced some allocated pointers with objects instead, generally using more modern techiques. There end up being fewer memory allocations/deletions to get right. Overall combined effect of all changes is to use slightly less memory and run slightly faster (< 1% for both, but noticable). As part of simplifying the code base, this change makes it easier to see PP symbol tracking, which I suspect has an even bigger run-time simplification to make.
-
Henrik Rydgård authored
-
John Kessenich authored
Also, checking both 'atom' and 'name' is redundant, and I'm hoping to eliminate more atom stuff.
-
chaoc authored
-
chaoc authored
-
- 19 Dec, 2016 7 commits
-
-
John Kessenich authored
-
John Kessenich authored
PP: Implement token pasting for PP identifiers.
-
John Kessenich authored
WIP: Remapper: remove debug info for IDs stripped in other passes
-
John Kessenich authored
HLSL: allow "sample" in expressions.
-
John Kessenich authored
Unbreak build on FreeBSD with GCC/libstdc++ 6.2.0
-
John Kessenich authored
Implement token pasting as per the C++ specification, within the current style of the PP code. Non-identifiers (turning 12 ## 10 into the numeral 1210) is not yet covered; they should be a simple incremental change built on this one. Addresses issue #255.
-
steve-lunarg authored
Unlike other qualifiers, HLSL allows "sample" to be either a qualifier keyword or an identifier (e.g, a variable or function name). A fix to allow this was made a while ago, but that fix was insufficient when 'sample' was used in an expression. The problem was around the initial ambiguity between: sample float a; // "sample" is part of a fully specified type and sample.xyz; // sample is a keyword in a dot expression Both start the same. The "sample" was being accepted as a qualifier before enough further parsing was done to determine we were not a declaration after all. This consumed the token, causing it to fail for its real purpose. Now, when accepting a fully specified type, the token is pushed back onto the stack if the thing is not a fully specified type. This leaves it available for subsequent purposes. Changed the "hlsl.identifier.sample.frag" test to exercise this situation, distilled down from a production shaders.
-
- 17 Dec, 2016 1 commit
-
-
John Kessenich authored
-
- 15 Dec, 2016 1 commit
-
-
John Kessenich authored
-
- 14 Dec, 2016 3 commits
-
-
John Kessenich authored
Change unicode dash to ASCII.
-
Jamie Madill authored
This change is helpful for integration with Chromium, which recently added a compiler option to warn when compiling any source files which use extended characters. In this case the offending character was a single unicode dash in a comment.
-
John Kessenich authored
Fix size_t to int cast warnings.
-
- 13 Dec, 2016 1 commit
-
-
Jamie Madill authored
Several instances in Visual Studio 2015: warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
-
- 12 Dec, 2016 2 commits
-
-
John Kessenich authored
-
steve-lunarg authored
If some DCE is performed such as removing dead functions, then even if we are NOT stripping debug info, we still must remove the debug opcodes that refer to the now-dead IDs. Also, this adds a small change to perform no ID remapping if none is requested, making spirv-remap properly be a no-op if no options are given.
-
- 10 Dec, 2016 3 commits
-
-
John Kessenich authored
Fixes issue #610. Also provides a testing option to keep uncalled functions.
-
John Kessenich authored
-
John Kessenich authored
This wasn't needed until the recent generalization of "main" to "entry point", so makes some HLSL-specific code be generic now, for GLSL functional correctness.
-
- 09 Dec, 2016 1 commit
-
-
Jan Beich authored
In file included from C:/Projects/glslang/glslang/MachineIndependent/glslang.y:59:0: glslang/MachineIndependent/ParseHelper.h:276:24: error: 'va_list' has not been declared va_list args); ^~~~~~~
-