John Kessenich
aa0298bfde
Merge pull request #220 from Qining/fix-built-in-spec-constants
...
Handle built-in constants redeclared with a specialization constant id.
2016-04-04 15:43:58 -06:00
qining
4f4bb81cd9
Built-in values declared as specialization constant
...
Support declaring built-in values as spec constants.
Refine the code in createSpvConstant().
2016-04-04 11:10:41 -04:00
John Kessenich
1c7e70763b
Merge branch 'master' into hlsl-frontend
2016-04-03 20:36:48 -06:00
Rex Xu
cb0e471ad4
Parser: Update array size of gl_ClipDistance/gl_CullDistance in gl_in[].
2016-03-27 08:47:43 +08:00
qining
0840838d17
Support specialization composite constants
...
Fix issue #163 , support creation and reference of composite type
specialization constants.
e.g.:
```
layout(constant_id = 200) const float myfloat = 1.25;
layout(constant_id = 201) const int myint = 14;
struct structtype {
float f;
int i;
};
const structtype outer_struct_var = {myfloat, myint};
void main(){}
```
generated code (use glslangValidator):
```
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 12
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main"
Source GLSL 450
Name 4 "main"
Name 10 "structtype"
MemberName 10(structtype) 0 "f"
MemberName 10(structtype) 1 "i"
Decorate 7 SpecId 200
Decorate 9 SpecId 201
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: 6(float) SpecConstant 1067450368
8: TypeInt 32 1
9: 8(int) SpecConstant 14
10(structtype): TypeStruct 6(float) 8(int)
11:10(structtype) SpecConstantComposite 7 9
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
```
Rname two function names to match their functionalities.
1) Rename `GlslangToSpvTraverser::createSpvSpecConstant()` to
`createSpvConstant()`;
2) Rename `GlslangToSpvTraverser::createSpvConstant()` to
`createSpvConstantFromConstUnionArray()`
Add function `GlslangToSpvTraverser::createSpvConstantFromSubTree()` to
handle constant creation from sub trees (e.g.: specialization constants).
Related PR: #208
2016-03-24 18:04:00 -04:00
John Kessenich
ddb65a46f7
Front-end: Propagate spec-constness up through aggregate constructors.
2016-03-21 12:55:00 -06:00
John Kessenich
6d2b07dc39
Front-end: propagate specialization-constness through conversions and swizzles.
2016-03-20 18:45:23 -06:00
John Kessenich
a5845766e0
Front-end: Add specialization-constant subtrees for const variables/symbols.
2016-03-20 16:46:00 -06:00
John Kessenich
7cc0e2896e
Front-end infrastructure: Encapsulate semantic-level questions/actions about const/temp.
...
Much about const or temp is mechanical, about actual declaration,
while much is semantic, about something higher level. This commit
checks every use everywhere, and for the high-level ones, substitutes
an encapsulated version instead.
2016-03-20 00:46:02 -06:00
John Kessenich
952543e757
Front-end infrastructure: simplify and localize creating symbol nodes, reducing replication.
2016-03-19 18:10:22 -06:00
John Kessenich
b3dc3acd59
Refactor TParseContext into 3 level inheritance.
...
Adds parseVersions.h as the base TParseVersions for versioning,
and splits the remainder between TParseContextBase (sharable across parsers)
and TParseContext (now the GLSL-specific part).
2016-03-12 19:08:55 -07:00
John Kessenich
4d65ee31a6
Generalize "main" to a settable entry point name.
2016-03-12 18:17:47 -07:00
John Kessenich
f7497e289b
SPV: Issue #180 : push_constants don't have descriptor sets.
2016-03-08 21:43:14 -07:00
John Kessenich
f2d8a5c53f
SPV: Use heuristic to avoid geometry multi-streams when possible.
2016-03-03 22:29:11 -07:00
John Kessenich
6c292d3ba7
SPV: Implement Vulkan version of GLSL (KHR_vulkan_glsl).
2016-02-15 21:46:55 -07:00
John Kessenich
f6eae2a54a
SPV: Require desktop 140 or ES 310 or above.
2016-01-22 17:47:22 -07:00
John Kessenich
4998789d4e
SPV: Fix array strides by explicitly computing them in the getBaseAlignment() algorithm.
2015-12-29 19:20:55 -07:00
John Kessenich
69d01eadd6
Semantics: Catch nested types containing 'int' with non-'flat' interpolation.
2015-12-22 16:39:07 -07:00
John Kessenich
3ac051e41d
SPV: recursively propagate row/col majorness through nested structures.
...
This includes doing structure uniqueness modulo majorness, for shared nested structures.
2015-12-20 12:25:21 -07:00
John Kessenich
61d9fb9048
Semantics: 'invocations' defaults to 1, not 0.
...
'invocations' was using 0 as the "shader never set" flag and as the
default. Formalize this and explicit set to 1 and link time.
2015-12-13 10:59:17 -07:00
John Kessenich
494a02a2b0
Semantics: Geometry stage can support max_vertices = 0.
...
To do this, more generally use a named -1 as a not set value.
2015-12-11 17:54:35 -07:00
John Kessenich
dd6ca17845
Semantics: Correct that std430 is universally disallowed with 'uniform'.
2015-12-06 18:10:27 -07:00
John Kessenich
1be8063e01
Require l-value patch-out indexing to be gl_InvocationID.
...
Also, generally allow ES variable indexing of in/out blocks.
2015-11-28 16:52:25 -07:00
John Kessenich
989df85dcd
Array-sizing bug fix: multiple array initializers of different size in the same declaration.
...
Handles the case of
float[] x = float[] (1.0, 2.0, 3.0),
y = float[] (1.0, 2.0, 3.0, 4.0);
where a shallow copy of the type arrayness from the left-most float[]
was getting used twice.
2015-11-28 12:52:29 -07:00
baldurk
876a0e392e
Add an osinclude.h below each OS directory, redirects by platform macro
...
* Linux folder has been renamed to Unix, to match defines and so that it
compiles on OS X.
* This removes the need for a per-platform include search path for the
right OS folder
2015-11-16 18:05:18 +01:00
John Kessenich
55e7d11ce8
SPIR-V: Move from Version .99 Rev 31 to Version 1.0, Rev 2.
2015-11-15 22:31:41 -07:00
John Kessenich
e690332c3c
SPV: Add modes for spacing, depth, depth replacing, winding, and point mode.
2015-10-13 16:29:02 -06:00
Rex Xu
19c6e5919f
Fix an issue related with texelFetchOffset
2015-10-12 17:02:21 +08:00
John Kessenich
820a22fcc8
Give error for calling a user-defined function at global scope.
2015-10-06 13:11:38 -06:00
John Kessenich
3cd0024ea8
GLSL front-end: Check recursively for opaque types in a block; these are all illegal.
2015-09-30 18:57:47 -06:00
Rex Xu
30f9258d5e
Merge master branch from upstream
2015-09-14 10:38:56 +08:00
John Kessenich
9312269d09
Front-end Arrays of arrays: Add ES-specific checks and tests. AoA should be quite close to done now.
2015-09-11 15:25:38 -06:00
John Kessenich
68e1c454da
Merge pull request #60 from xorgy/no-define-defined
...
Preprocessor: 'defined' cannot be used as a macro name in #define or #undef.
2015-09-09 15:45:23 -06:00
Rex Xu
0c81156c2d
SPIRV: Fix a comment issue
2015-09-06 14:55:45 +08:00
John Kessenich
c8b2e36f52
Implement GL_KHR_blend_equation_advanced.
2015-08-30 05:43:51 -06:00
Aaron Hamilton
7d3b73bfff
'defined' cannot be used as a macro name in #define or #undef.
2015-08-29 23:15:13 +00:00
John Kessenich
0fc4338f3e
Implement GL_OES_shader_multisample_interpolation, as well as core desktop versions of it.
2015-08-22 13:11:12 -06:00
John Kessenich
ef676b0a59
Front-end "pure" built-in TOperator: Finish adding full support, but still turned off.
...
This is to avoid all need to do text comparison of built-in function names
when consuming the AST. All built-in functions get enumerants.
Will want to turn on soon. See PureOperatorBuiltins. See issue #8 .
2015-08-18 23:17:15 -06:00
John Kessenich
fb5ba510ca
Implement GL_OES_shader_image_atomic.
2015-08-16 23:40:15 -06:00
John Kessenich
65c78a0b62
Array of array: Implement the core functionality: types, constructors, operations.
...
There will be subsequent commits to refine semantics, esp. version-specific semantics,
as well as I/O functionality and restrictions.
Note: I'm getting white-space differences in the preprocessor test results,
which I'm not checking in. I think they need to be tagged as binary or something.
2015-08-10 17:08:55 -06:00
John Kessenich
b35483587f
Array of Array prep: Turn a batch of 0's into nullptr or UnsizedArraySize.
...
Added some const as well. This will remove camouflage of the next commit,
which will add the bulk of Array of Array semantics and functionality.
(Note the basic grammar and data structure is already in place.)
2015-08-09 18:15:25 -06:00
baldurk
d7c5ead6a1
Compile fixes for gcc -Wall
2015-08-05 21:04:23 +02:00
Lei Zhang
54e47cc275
Use const reference for TSourceLoc in interfaces.
2015-07-28 12:45:41 -04:00
Lei Zhang
5011fbebc3
Extend the syntax of #line and __FILE__ to support filename strings.
...
According to the GLSL spec, the second parameter to #line should be
an integer source string number and __FILE__ will be substituted
with the integer source string number currently processed. This
patch extends the syntax of #line and __FILE__. Now #line accepts
as the second parameter a filename string quoted by double quotation
marks. And if such a #line is set, __FILE__ will be substituted with
the currently set filename string. The implementation is done via
introducing a new extension GL_GOOGLE_cpp_style_line_directive using
the extension framework.
The purpose is to support cpp-style #line directives, which is
required by #include.
2015-07-27 13:07:52 -04:00
John Kessenich
c777fc2c4c
Scanning: 1) rationalize end-of-input everywhere, 2) prevent infinite loop at end-of-input, 3) use positive chars.
...
Fixes issue #25 . (char 255 aliased to -1 and missing tests for end of input).
1) All layers of input scanning now share a single EndOfInput value.
This avoids translation of it across layers of encapsulation.
2) Some places looking for end of line were not stopping on EndOfInput.
3) Use of "char" for the input made char values > 127 be negative numbers.
This allowed for aliasing of 255 to -1, etc. This is fixed by using
unsigned char.
2015-07-27 09:37:55 -06:00
John Kessenich
91b977e172
Issue #39 : Prevent problem of inserting a zero-length symbol after cascading errors.
2015-07-25 18:14:09 -06:00
John Kessenich
f330f08129
Consolidate all token length limits (1024), including one bad one (80) hardcoded on the stack (issue #40 , issue #41 ).
2015-07-25 14:02:53 -06:00
John Kessenich
96d8042a64
Merge pull request #31 from google/explicit-extension-directive
...
Only output explicit extension directives in preprocessing.
2015-07-22 15:20:54 -06:00
John Kessenich
12a383379c
Issue 32: Guard against constructors consuming unsized arrays.
2015-07-22 11:44:59 -06:00
John Kessenich
8ba301c7c2
Issue #28 : Correctly handle a single input argument conversion when the input argument is an aggregate.
2015-07-21 16:00:34 -06:00