]>
git.tdb.fi Git - libs/gl.git/log
Mikko Rasa [Tue, 16 Mar 2021 18:05:24 +0000 (20:05 +0200)]
Add idempotence test cases for GLSL compiler
Already compiled GLSL code should not change when passed through the
compiler again.
Mikko Rasa [Tue, 16 Mar 2021 18:04:30 +0000 (20:04 +0200)]
Refactor the GLSL compiler test cases with a helper class
I'm not super pleased with the virtual fail function in the helper, but
no better ideas came to mind so it can be like that for now.
Mikko Rasa [Tue, 16 Mar 2021 18:00:51 +0000 (20:00 +0200)]
Always show shader compiler diagnostics in debug builds
Mikko Rasa [Tue, 16 Mar 2021 17:53:04 +0000 (19:53 +0200)]
Forbid certain operations in SL::Compiler if compilation isn't done
In particular, Formatter can't deal with unresolved declarations.
Mikko Rasa [Tue, 16 Mar 2021 17:06:37 +0000 (19:06 +0200)]
Adjust naming of generated variables
Using the inlined function name as a prefix easily produces inconsistent
results, so better to just use numbers after the name.
Mikko Rasa [Tue, 16 Mar 2021 16:58:46 +0000 (18:58 +0200)]
Test case tweaks
Mikko Rasa [Tue, 16 Mar 2021 16:51:34 +0000 (18:51 +0200)]
Support inlining GLSL functions with parameters
Mikko Rasa [Tue, 16 Mar 2021 14:10:03 +0000 (16:10 +0200)]
Refactor variable renaming in InlineContentInjector once again
It should now be even better at recognizing conflicts, and avoid renaming
when not necessary.
Mikko Rasa [Tue, 16 Mar 2021 11:08:27 +0000 (13:08 +0200)]
Use a temporary staging block in InlineContentInjector
This allows the return variable name generation to avoid other names from
the source function, such as a return variable from previous inlining.
Mikko Rasa [Tue, 16 Mar 2021 10:08:16 +0000 (12:08 +0200)]
Remove an obsolete variable
This hasn't been used since
0388083 .
Mikko Rasa [Tue, 16 Mar 2021 09:38:55 +0000 (11:38 +0200)]
Don't modify the target block's variable map from InlineContentInjector
This felt hacky, and also seemed wrong since the variable map contains
the original names of the variables, not new ones. Instead avoid
inlining more than one function per pass into any given function.
Mikko Rasa [Mon, 15 Mar 2021 09:13:36 +0000 (11:13 +0200)]
Check that the types of ternary branches exist before accessing them
This fixes a bug introduced in
3a1fe83 and triggered by
5e4204e .
Mikko Rasa [Mon, 15 Mar 2021 09:05:26 +0000 (11:05 +0200)]
Eliminate constant ternary expressions
Mikko Rasa [Mon, 15 Mar 2021 09:05:12 +0000 (11:05 +0200)]
Implement constant folding in the GLSL compiler
This replaces the old expression evaluator with a more comprehensive
solution. Folding constant expressions may open up further possibilities
for inlining.
Mikko Rasa [Sun, 14 Mar 2021 17:35:01 +0000 (19:35 +0200)]
Fix the declaration of the builtin textureLod function
Mikko Rasa [Sun, 14 Mar 2021 17:13:02 +0000 (19:13 +0200)]
Fix some bugs with name conflicts in function inlining
One of these is a regression from
b89239e , but the other has been around
for longer.
Mikko Rasa [Sun, 14 Mar 2021 14:38:29 +0000 (16:38 +0200)]
Resolve and validate the parameters of constructors in GLSL
Mikko Rasa [Sun, 14 Mar 2021 14:11:07 +0000 (16:11 +0200)]
Make variable renaming while inlining more robust
It now prevents accidentally hiding global variables too.
Mikko Rasa [Sun, 14 Mar 2021 13:51:32 +0000 (15:51 +0200)]
Move unique name generation to syntax.cpp
It's going to be needed elsewhere too.
Mikko Rasa [Sat, 13 Mar 2021 19:36:56 +0000 (21:36 +0200)]
Resolve constructors in FunctionResolver
Mikko Rasa [Sat, 13 Mar 2021 19:30:48 +0000 (21:30 +0200)]
Remove the ParenthesizedExpression node type
Since this is a proper compiler now, it's no longer necessary to
reproduce the parentheses from the input.
Mikko Rasa [Sat, 13 Mar 2021 19:29:40 +0000 (21:29 +0200)]
Cleanup ExpressionInliner
Mikko Rasa [Sat, 13 Mar 2021 19:15:07 +0000 (21:15 +0200)]
Move parenthesizing expressions to Formatter
Mikko Rasa [Sat, 13 Mar 2021 19:08:28 +0000 (21:08 +0200)]
Rearrange operator metadata
A secondary token can now be stored for the operators that need one.
The member access operator is categorized as postfix because it only has
one actual operand (the right-hand side is just an identifier).
Mikko Rasa [Sat, 13 Mar 2021 14:22:43 +0000 (16:22 +0200)]
Better error message for the subscript operator
Mikko Rasa [Sat, 13 Mar 2021 14:02:41 +0000 (16:02 +0200)]
Add GLSL keywords for overriding functions
Overriding with a plain redefinition is now deprecated.
Mikko Rasa [Sat, 13 Mar 2021 14:00:36 +0000 (16:00 +0200)]
Fix some errors in the shader library
Mikko Rasa [Sat, 13 Mar 2021 13:56:19 +0000 (15:56 +0200)]
Don't require builtin inputs to be linked
Many of them provide access to external values from the API.
Mikko Rasa [Sat, 13 Mar 2021 11:51:25 +0000 (13:51 +0200)]
Add declarations for some more builtin variables
Mikko Rasa [Sat, 13 Mar 2021 11:46:28 +0000 (13:46 +0200)]
Avoid generating passthroughs for builtin variables
Mikko Rasa [Sat, 13 Mar 2021 11:38:26 +0000 (13:38 +0200)]
Make it deprecated to redeclare non-builtin variables
This is no longer necessary now that specialization constants are
supported. There's some additional rules for declaring builtins too,
but I'll get back to those later.
Mikko Rasa [Fri, 12 Mar 2021 21:58:14 +0000 (23:58 +0200)]
Handle redeclaration of variables in VariableResolver
Mikko Rasa [Fri, 12 Mar 2021 19:10:39 +0000 (21:10 +0200)]
Add missing Diagnostic constructor
This is needed by the changes in
16c02e4 .
Mikko Rasa [Fri, 12 Mar 2021 18:27:42 +0000 (20:27 +0200)]
Implement the ternary operator in GLSL
Mikko Rasa [Fri, 12 Mar 2021 18:25:06 +0000 (20:25 +0200)]
Refactor Parser::parse_expression to take a pointer to the outer operator
Mikko Rasa [Fri, 12 Mar 2021 09:53:11 +0000 (11:53 +0200)]
Limit GLSL passthrough statement to variables declared by that point
This fixes an issue where a base module's passthrough statement would
generate references to inputs declared in an importing module, resulting
in a compile error.
Mikko Rasa [Thu, 11 Mar 2021 22:24:40 +0000 (00:24 +0200)]
Fix a test case and add a couple more
Mikko Rasa [Thu, 11 Mar 2021 22:23:10 +0000 (00:23 +0200)]
Improve reporting of errors from function resolution
If there are some overloads, report that none of them matched the
argument types.
Mikko Rasa [Thu, 11 Mar 2021 21:39:59 +0000 (23:39 +0200)]
Avoid generating invalid interfaces in geometry shader
Geometry inputs need an extra array dimension compared to vertex shader
outputs, but multi-dimensional arrays currently can't be properly
represented.
Mikko Rasa [Wed, 10 Mar 2021 13:35:42 +0000 (15:35 +0200)]
Expand the selection of available builtin GLSL functions
Mikko Rasa [Wed, 10 Mar 2021 11:14:48 +0000 (13:14 +0200)]
Some rearranging and comments
Mikko Rasa [Wed, 10 Mar 2021 11:05:41 +0000 (13:05 +0200)]
Count EmitVertex as referencing all active outputs
Mikko Rasa [Wed, 10 Mar 2021 11:01:12 +0000 (13:01 +0200)]
Rewrite UnusedVariableRemover
The old implementation was getting too complex with its multitude of
flags. The new one is based on the idea of reaching definition analysis
and is much more straightforward.
Mikko Rasa [Wed, 10 Mar 2021 10:18:23 +0000 (12:18 +0200)]
Don't omit builtins when formatting a single node
This produces more useful output for debugging.
Mikko Rasa [Wed, 10 Mar 2021 10:12:26 +0000 (12:12 +0200)]
Make ConstantConditionEliminator less trigger-happy
Since I removed the variable value tracking in
1cd0ea7 it started
optimizing conditions on specialization constants, even when they
had not been specialized yet.
Mikko Rasa [Wed, 10 Mar 2021 10:03:24 +0000 (12:03 +0200)]
Check for existence of required version in Formatter
This way it doesn't depend on whether get_combined_glsl or get_stage_glsl
was called.
Mikko Rasa [Wed, 10 Mar 2021 10:01:33 +0000 (12:01 +0200)]
Support compile modes and specialization constants in the test harness
Mikko Rasa [Tue, 9 Mar 2021 20:27:04 +0000 (22:27 +0200)]
Avoid removing outputs which are referenced but not assigned
The values from such reads are undefined but the variables should be
kept nevertheless.
Mikko Rasa [Tue, 9 Mar 2021 17:27:58 +0000 (19:27 +0200)]
Rename and rearrange a few things
Mikko Rasa [Tue, 9 Mar 2021 17:17:36 +0000 (19:17 +0200)]
Require GLSL functions to be declared before use
Mikko Rasa [Tue, 9 Mar 2021 17:16:42 +0000 (19:16 +0200)]
Add declarations for most of the builtin functions in GLSL
Mikko Rasa [Tue, 9 Mar 2021 14:00:19 +0000 (16:00 +0200)]
Validate return types of overloaded functions
Mikko Rasa [Tue, 9 Mar 2021 13:08:43 +0000 (15:08 +0200)]
Add support for function overloading
Mikko Rasa [Tue, 9 Mar 2021 12:34:09 +0000 (14:34 +0200)]
Resolve functions after inlining functions
Inlining clones expressions, and the clones FunctionCall nodes don't have
a declaration pointer.
Mikko Rasa [Tue, 9 Mar 2021 12:31:22 +0000 (14:31 +0200)]
Properly use r_any_resolved in FunctionResolver
Apparently lacking this has not caused any trouble so far, but it would
soon.
Mikko Rasa [Tue, 9 Mar 2021 10:05:29 +0000 (12:05 +0200)]
Handle expression replacement through TraversingVisitor
There were several cases missing, like VariableResolver not handling
replacement of swizzles in return statements. This way each of the
visitors can just concentrate on what they're actually doing.
Mikko Rasa [Tue, 9 Mar 2021 08:39:58 +0000 (10:39 +0200)]
Use accurate assignment targets in ExpressionInliner
This fixes an issue where it inline an assignment to a subfield in place
of a reference to the whole variable.
Mikko Rasa [Tue, 9 Mar 2021 08:21:18 +0000 (10:21 +0200)]
Refactor UnusedVariableRemover
It can now track and remove named interface blocks.
Mikko Rasa [Tue, 9 Mar 2021 07:43:08 +0000 (09:43 +0200)]
Record assignment targets more precisely
If the assignment is to a structure or vector field or an array element,
it's recorded to the node so optimizers can better match assignments and
references (they don't do that yet).
Mikko Rasa [Mon, 8 Mar 2021 20:14:41 +0000 (22:14 +0200)]
Sort diagnostics according to their provoking location
Mikko Rasa [Mon, 8 Mar 2021 20:13:55 +0000 (22:13 +0200)]
Record information of the provoking location of a diagnostic
In case of diagnostics providing extra information to a previous one,
this can be different from the direct location.
Mikko Rasa [Mon, 8 Mar 2021 17:18:22 +0000 (19:18 +0200)]
Validate member names
Mikko Rasa [Mon, 8 Mar 2021 15:37:06 +0000 (17:37 +0200)]
Fix some errors in test cases
Mikko Rasa [Mon, 8 Mar 2021 14:59:12 +0000 (16:59 +0200)]
Recognize swizzles in GLSL
Mikko Rasa [Mon, 8 Mar 2021 14:05:57 +0000 (16:05 +0200)]
Resolve functions after inlining expressions
This fixes a bug introduced in
c1d3a1d .
Mikko Rasa [Mon, 8 Mar 2021 13:06:01 +0000 (15:06 +0200)]
Transform interface block contents into structs
This allows handling them in expression trees like everything else. It
also helps with SPIR-V, which requires interface blocks to have struct
types.
Mikko Rasa [Mon, 8 Mar 2021 11:49:03 +0000 (13:49 +0200)]
Remove the NodeGatherer visitor
It was somewhat poorly thought out since it's unable to gather nodes of
a base class type.
Mikko Rasa [Mon, 8 Mar 2021 11:47:30 +0000 (13:47 +0200)]
Populate the builtin module's type maps directly
TypeResolver may do other, potentially disruptive things. The contents
will be copied into the compiled module and properly resolved there.
Mikko Rasa [Mon, 8 Mar 2021 00:49:40 +0000 (02:49 +0200)]
Improve reporting of function name conflicts
Prototype declarations were not being recorded, and definitions were
causing multiple definition errors to be reported in double.
Mikko Rasa [Mon, 8 Mar 2021 00:49:03 +0000 (02:49 +0200)]
Check for extra error lines in compiler output
Somehow I thought this was handled already
Mikko Rasa [Sun, 7 Mar 2021 22:24:30 +0000 (00:24 +0200)]
Apply replacement to variable declaration components in VariableResolver
This got missed on
cb8ee1f .
Mikko Rasa [Sun, 7 Mar 2021 22:16:15 +0000 (00:16 +0200)]
Complain about named interface blocks if not supported
Mikko Rasa [Sun, 7 Mar 2021 22:14:55 +0000 (00:14 +0200)]
Report unsupported shader errors through the diagnostic mechanism
Mikko Rasa [Sun, 7 Mar 2021 22:03:25 +0000 (00:03 +0200)]
Easier way of adding complex subtrees to GLSL debug dump
Mikko Rasa [Sun, 7 Mar 2021 16:32:04 +0000 (18:32 +0200)]
Add another variation of a partially unused interface block
I discovered a case where the compiler behaves incorrectly so recording
it here.
Mikko Rasa [Sun, 7 Mar 2021 10:58:23 +0000 (12:58 +0200)]
Further refactor the resolving process in SL::Compiler
There's now five different types of resolve operations, many of which
depend on some others. Better put the logic in one place to keep it
straight.
This also includes some rearrangements to the resolver classes to have
all of them return a boolean indicating if anything was done.
Mikko Rasa [Sun, 7 Mar 2021 09:36:17 +0000 (11:36 +0200)]
Additional rules for bit shift operators
Mikko Rasa [Sun, 7 Mar 2021 09:13:23 +0000 (11:13 +0200)]
Properly resolve arithmetic assignment operators
After
50ab5ca operations like vec3 *= float were failing because the
validator required both operands to be of the same type. Conversions
also need to be resolved for the right-hand operand.
Mikko Rasa [Sat, 6 Mar 2021 12:27:16 +0000 (14:27 +0200)]
Rearrange expression node replacement
Rather than every expression visiting function clearing the replacement
result, clear it in the replacement function both before and after. This
is more compact and less prone to forgetting it from somewhere.
Mikko Rasa [Sat, 6 Mar 2021 12:04:24 +0000 (14:04 +0200)]
Refactor resolution of declarations for MemberAccess
Now that expressions have types, there's no need to "return" the members
from deeper in the hierarchy anymore.
Since member type resolution now depends on the type of the left-hand
expression of MemberAccess, variables and expressions need to be resolved
in a loop until there's nothing more to resolve.
Mikko Rasa [Sat, 6 Mar 2021 11:39:20 +0000 (13:39 +0200)]
Remove fallback from Assignment to BinaryExpression in TraversingVisitor
It's causing some trouble when the base class version is called for an
assignment and it gets handled as a binary expression. Almost all classes
are handling the two separately anyway.
Mikko Rasa [Sat, 6 Mar 2021 01:05:01 +0000 (03:05 +0200)]
Remove an unnecessary loop over block hierarchy
Mikko Rasa [Sat, 6 Mar 2021 00:51:04 +0000 (02:51 +0200)]
Add some test cases for unused interface blocks
Mikko Rasa [Fri, 5 Mar 2021 23:04:58 +0000 (01:04 +0200)]
Fix a type error in a test case
Mikko Rasa [Fri, 5 Mar 2021 22:46:43 +0000 (00:46 +0200)]
Assign a result type to all expressions
This requires some additional work for function overloads and swizzles.
Mikko Rasa [Fri, 5 Mar 2021 22:45:54 +0000 (00:45 +0200)]
Remove a debug thing
Mikko Rasa [Fri, 5 Mar 2021 22:33:44 +0000 (00:33 +0200)]
Ignore precedence for prefix operators
Since the operator appears at the start of an expression or after another
operator, there's no way for it to bind to anything but whatever follows.
This fixes a bug where chained prefix operators were not recognized.
Mikko Rasa [Fri, 5 Mar 2021 21:08:41 +0000 (23:08 +0200)]
Create array type declarations as necessary
Mikko Rasa [Fri, 5 Mar 2021 21:06:45 +0000 (23:06 +0200)]
Tweak the builtin type generation
Give bool a size and insert the types in the order they're defined in.
Mikko Rasa [Fri, 5 Mar 2021 20:09:31 +0000 (22:09 +0200)]
Store actual values for literals
Mikko Rasa [Fri, 5 Mar 2021 19:04:54 +0000 (21:04 +0200)]
Visit structs during unused type removal
Otherwise types which are only used by struct member declarations would
be removed.
Mikko Rasa [Fri, 5 Mar 2021 19:03:48 +0000 (21:03 +0200)]
Mark function return types as used
Mikko Rasa [Fri, 5 Mar 2021 18:40:09 +0000 (20:40 +0200)]
Actually call the type validator
Mikko Rasa [Fri, 5 Mar 2021 18:37:21 +0000 (20:37 +0200)]
Check that errors were generated as expected
Mikko Rasa [Fri, 5 Mar 2021 11:28:22 +0000 (13:28 +0200)]
Follow type aliases in TypeResolver
Mikko Rasa [Fri, 5 Mar 2021 11:23:13 +0000 (13:23 +0200)]
Use resolved type names for output
Mikko Rasa [Fri, 5 Mar 2021 11:22:47 +0000 (13:22 +0200)]
Resolve the return types of functions
Mikko Rasa [Fri, 5 Mar 2021 11:09:55 +0000 (13:09 +0200)]
Validate some aspects of type declarations
Mikko Rasa [Fri, 5 Mar 2021 10:59:27 +0000 (12:59 +0200)]
Catch exceptions from parsing while testing the compiler
Mikko Rasa [Fri, 5 Mar 2021 00:17:23 +0000 (02:17 +0200)]
Fix a bug with resolving member declarations
The logic changes in
7daccf2 caused members of variables declared within
anonymous interface blocks to not be resolved correctly.