]>
git.tdb.fi Git - libs/gl.git/log
Mikko Rasa [Thu, 4 Mar 2021 21:30:13 +0000 (23:30 +0200)]
Load builtin GLSL declarations from a file
I'm going to add a lot more stuff into it so having it in the C++ source
would be inconvenient.
Mikko Rasa [Thu, 4 Mar 2021 21:26:19 +0000 (23:26 +0200)]
Use a different method of adding builtins to stages
This gets them in the correct order with the module's shared stage, and
also allows builtins to have shared declarations.
Mikko Rasa [Thu, 4 Mar 2021 21:25:03 +0000 (23:25 +0200)]
Add a missing symmetry to linking variables
This caused invalid memory accesses when destroying syntax trees.
Mikko Rasa [Thu, 4 Mar 2021 19:24:59 +0000 (21:24 +0200)]
Only set assign_to_subfield when in assignment target
Mikko Rasa [Thu, 4 Mar 2021 15:57:00 +0000 (17:57 +0200)]
Check for function declaration conflicting with something else
Functions are allowed to have multiple declarations but only one
definition.
Mikko Rasa [Thu, 4 Mar 2021 15:52:11 +0000 (17:52 +0200)]
Improve rules for interface blocks
The GLSL specification says that using the same block name in different
interfaces is allowed, so we must separate blocks by interface.
Mikko Rasa [Thu, 4 Mar 2021 14:50:57 +0000 (16:50 +0200)]
Check for missing lines in error output
Mikko Rasa [Thu, 4 Mar 2021 13:39:08 +0000 (15:39 +0200)]
Use insert instead of [] to retain the first item with the same name
Mikko Rasa [Thu, 4 Mar 2021 12:50:46 +0000 (14:50 +0200)]
Add some test cases to test shader validation
Mikko Rasa [Thu, 4 Mar 2021 12:49:59 +0000 (14:49 +0200)]
Make the GLSL compiler tester able to verify errors
Mikko Rasa [Thu, 4 Mar 2021 12:30:02 +0000 (14:30 +0200)]
Use the new append utility function to build GLSL compile errors
Mikko Rasa [Thu, 4 Mar 2021 12:17:04 +0000 (14:17 +0200)]
Flip the parameters of Tokenizer::begin
Everything else has the filename as the last parameter, so let's be
consistent here.
Mikko Rasa [Thu, 4 Mar 2021 11:20:53 +0000 (13:20 +0200)]
Remove a redundant declaration of shadow_coord
This is declared in shadow.glsl
Mikko Rasa [Thu, 4 Mar 2021 11:16:26 +0000 (13:16 +0200)]
Copy the location when moving output declarations out of functions
Mikko Rasa [Thu, 4 Mar 2021 11:16:04 +0000 (13:16 +0200)]
Have generate_interface return the generated statement
Mikko Rasa [Thu, 4 Mar 2021 10:50:52 +0000 (12:50 +0200)]
Add basic validation to the GLSL compiler
Currently the only thing validated is multiple definitions.
Mikko Rasa [Thu, 4 Mar 2021 09:45:55 +0000 (11:45 +0200)]
Remove unnecessary includes
Mikko Rasa [Wed, 3 Mar 2021 23:56:26 +0000 (01:56 +0200)]
Fix function inlining in iteration init statement
Also reword the other related comment to be more accurate.
Mikko Rasa [Wed, 3 Mar 2021 23:54:47 +0000 (01:54 +0200)]
Update .gitignore
Remove some old build products and add glslcompiler.
Mikko Rasa [Wed, 3 Mar 2021 23:50:31 +0000 (01:50 +0200)]
Add the shader for UnlitMaterial
This was supposed to be in
2f198e3
Mikko Rasa [Wed, 3 Mar 2021 23:47:11 +0000 (01:47 +0200)]
Add extension file for NV_half_float
This should have been in
9087cc0 but went unnoticed for a month due to
how the extension headers are handled.
Mikko Rasa [Wed, 3 Mar 2021 23:44:59 +0000 (01:44 +0200)]
Add a unit test framework and some tests for the GLSL compiler
Some of the tests fail due to bugs in the compiler.
Mikko Rasa [Wed, 3 Mar 2021 23:05:22 +0000 (01:05 +0200)]
Add expression inlining
Mikko Rasa [Wed, 3 Mar 2021 18:17:13 +0000 (20:17 +0200)]
Make the iteration init statement a Statement instead of Node
Mikko Rasa [Wed, 3 Mar 2021 18:06:12 +0000 (20:06 +0200)]
Add a new associativity type for fully associative operators
Mikko Rasa [Wed, 3 Mar 2021 18:05:28 +0000 (20:05 +0200)]
Add some comments to the more complex parts of the GLSL compiler
Mikko Rasa [Wed, 3 Mar 2021 18:01:35 +0000 (20:01 +0200)]
Visit iteration statement components in semantically correct order
Mikko Rasa [Wed, 3 Mar 2021 17:55:55 +0000 (19:55 +0200)]
Minor, largely cosmetic tweaks
Mikko Rasa [Wed, 3 Mar 2021 17:47:53 +0000 (19:47 +0200)]
Remove some unnecessary bits
Mikko Rasa [Wed, 3 Mar 2021 16:48:34 +0000 (18:48 +0200)]
Fix an issue where member assignments were incorrectly optimized away
They are now treated as subfield assignments, same as array subscripts.
Mikko Rasa [Wed, 3 Mar 2021 15:14:12 +0000 (17:14 +0200)]
Don't copy type declaration of a generated interface variable
It's better to let it be resolved again.
Mikko Rasa [Wed, 3 Mar 2021 15:13:22 +0000 (17:13 +0200)]
Fix VariableResolver doing bogus things on certain invalid constructs
Mikko Rasa [Wed, 3 Mar 2021 15:10:03 +0000 (17:10 +0200)]
Fix passthroughs being generated for non-output variables
Mikko Rasa [Wed, 3 Mar 2021 12:59:19 +0000 (14:59 +0200)]
Rename members of visitors to indicate which are "return values"
Mikko Rasa [Wed, 3 Mar 2021 11:02:55 +0000 (13:02 +0200)]
Handle all constructs when inlining GLSL functions
We need to look for function calls inside conditional and iteration
statements too, and inline calls within condition expressions.
Mikko Rasa [Wed, 3 Mar 2021 10:41:15 +0000 (12:41 +0200)]
Fix a block management error in FunctionInliner
Mikko Rasa [Wed, 3 Mar 2021 09:32:28 +0000 (11:32 +0200)]
Add a missing #include
This was left out from
d5c7c7f
Mikko Rasa [Wed, 3 Mar 2021 09:28:14 +0000 (11:28 +0200)]
Store a pointer to operator info rather than the token in expressions
Also make it a property of Expression rather than the subtypes.
Mikko Rasa [Mon, 1 Mar 2021 23:25:30 +0000 (01:25 +0200)]
Further improve inlining of GLSL functions
Functions of any lenght can now be inlined, as long as they have linear
control flow.
Mikko Rasa [Mon, 1 Mar 2021 23:17:01 +0000 (01:17 +0200)]
Clear previous state when resolving functions
Mikko Rasa [Mon, 1 Mar 2021 23:13:23 +0000 (01:13 +0200)]
Remove expression statements without side effects
Mikko Rasa [Mon, 1 Mar 2021 19:03:52 +0000 (21:03 +0200)]
Fix another case of future features leaking
Mikko Rasa [Mon, 1 Mar 2021 15:39:07 +0000 (17:39 +0200)]
Fix an issue with line numbers after #line being off-by-one
I had added the flag for this back in
1083ad1 but forgot to use it.
Mikko Rasa [Mon, 1 Mar 2021 15:37:31 +0000 (17:37 +0200)]
Explicitly call base class copy constructor for expressions
Mikko Rasa [Mon, 1 Mar 2021 15:36:19 +0000 (17:36 +0200)]
Refactor FunctionInliner to do any necessary declaration reordering
Mikko Rasa [Mon, 1 Mar 2021 14:19:09 +0000 (16:19 +0200)]
Clarify SL::Compiler::optimize return values by using an enum
Mikko Rasa [Sun, 28 Feb 2021 19:37:05 +0000 (21:37 +0200)]
Inject builtins into the module
This makes identifier resolution easier to manage and also helps an
eventual SPIR-V implementation.
Mikko Rasa [Sun, 28 Feb 2021 14:10:09 +0000 (16:10 +0200)]
Debug output tweaks
Mikko Rasa [Sun, 28 Feb 2021 12:02:55 +0000 (14:02 +0200)]
Clear the stage map at the beginning if a resolving pass
This avoids accidentally resolving things to a declarations which is not
visible to the reference.
Mikko Rasa [Sun, 28 Feb 2021 11:25:56 +0000 (13:25 +0200)]
Remove things that weren't supposed to go in yet
Mikko Rasa [Sun, 28 Feb 2021 11:19:25 +0000 (13:19 +0200)]
Store functions definitions in Stage
Mikko Rasa [Sun, 28 Feb 2021 11:16:23 +0000 (13:16 +0200)]
Move function override processing to FunctionResolver
Mikko Rasa [Sun, 28 Feb 2021 00:12:48 +0000 (02:12 +0200)]
Make the GLSL parser resilient against common errors
It will now attempt to continue parsing the source, with the intent of
reporting all syntax errors at once.
Mikko Rasa [Sat, 27 Feb 2021 14:32:33 +0000 (16:32 +0200)]
Add some documentation to the GLSL compiler
Mikko Rasa [Fri, 26 Feb 2021 23:46:34 +0000 (01:46 +0200)]
Fixes for compatibility with legacy unsized PixelFormats
Mikko Rasa [Fri, 26 Feb 2021 23:28:46 +0000 (01:28 +0200)]
Don't copy layouts to generated out interfaces
Mikko Rasa [Fri, 26 Feb 2021 23:27:16 +0000 (01:27 +0200)]
Use specialization constants in the builtin material shaders
This has the side effect that RenderPass now requires a collection
to use the builtin shaders.
Mikko Rasa [Fri, 26 Feb 2021 23:21:11 +0000 (01:21 +0200)]
Add interfaces for using specialization constants with Programs
This replaces the old way of redefining variables withing the GLSL
source, and as such the Program constructor from string is now
deprecated.
Mikko Rasa [Fri, 26 Feb 2021 21:10:17 +0000 (23:10 +0200)]
Support specialization constants in the GLSL compiler
Mikko Rasa [Fri, 26 Feb 2021 18:26:27 +0000 (20:26 +0200)]
Mostly cosmetic tweaks
Mikko Rasa [Thu, 25 Feb 2021 23:20:02 +0000 (01:20 +0200)]
Copy layouts when generating interfaces
Mikko Rasa [Thu, 25 Feb 2021 23:09:21 +0000 (01:09 +0200)]
Don't allow arbitrary statements in structs or interface blocks
Mikko Rasa [Thu, 25 Feb 2021 23:03:36 +0000 (01:03 +0200)]
Store types and interface blocks in Stage
They're only allowed at top level so it seems pointless for every block
to have the maps.
Mikko Rasa [Thu, 25 Feb 2021 22:50:52 +0000 (00:50 +0200)]
Populate the interface block map in VariableResolver
They're more variable-y than block-y.
Mikko Rasa [Thu, 25 Feb 2021 22:38:43 +0000 (00:38 +0200)]
Unlink declarations on destruction
Just in case
Mikko Rasa [Thu, 25 Feb 2021 22:38:10 +0000 (00:38 +0200)]
Support automatic generation of interface blocks
Mikko Rasa [Thu, 25 Feb 2021 19:30:36 +0000 (21:30 +0200)]
Improve support for interface blocks
Blocks with instance names are now properly supported in the syntax tree.
Mikko Rasa [Thu, 25 Feb 2021 19:16:54 +0000 (21:16 +0200)]
Tweak debug output
Mikko Rasa [Thu, 25 Feb 2021 19:15:08 +0000 (21:15 +0200)]
Only generate or link interfaces in the correct scope
Mikko Rasa [Thu, 25 Feb 2021 10:24:41 +0000 (12:24 +0200)]
Don't add null entries to variable values
This triggered a bug now that function parameters are processed within
the function's scope.
Mikko Rasa [Wed, 24 Feb 2021 13:51:30 +0000 (15:51 +0200)]
Refactor interface management
Rather than having separate maps in Stage, pull the variables from the
content block's map.
Mikko Rasa [Tue, 23 Feb 2021 23:15:33 +0000 (01:15 +0200)]
Refactor block management in NodeRemover
This was supposed to go in
9971979 but I forgot.
Mikko Rasa [Tue, 23 Feb 2021 22:37:04 +0000 (00:37 +0200)]
Ignore function parameters in InterfaceGenerator
Mikko Rasa [Tue, 23 Feb 2021 22:11:43 +0000 (00:11 +0200)]
Refactor scope management
TraversingVisitor now takes care of maintaining current_block correctly
for functions and loops. This fixes an issue where InterfaceGenerator
was treating function in/out parameters as global interface variables.
Now there's a different bug where it generates global interface variables
for them.
Mikko Rasa [Tue, 23 Feb 2021 22:03:31 +0000 (00:03 +0200)]
Avoid incorrectly matching interfaces in certain cases
I removed this in
ab5f2e6 , thinking it was unnecessary. But if a stage
declares a local output variable of the same name as an output variable
in the previous stage, this is needed to avoid a mismatch.
Mikko Rasa [Tue, 23 Feb 2021 21:35:59 +0000 (23:35 +0200)]
Remove the using declarations from visitors
Instead always invoke visit through the node
Mikko Rasa [Mon, 22 Feb 2021 15:06:02 +0000 (17:06 +0200)]
Some tweaks to GLSL debug output
Mikko Rasa [Mon, 22 Feb 2021 00:34:12 +0000 (02:34 +0200)]
Output the passthrough statement in both GLSL and debug modes
Mikko Rasa [Sun, 21 Feb 2021 23:52:29 +0000 (01:52 +0200)]
Slightly refactor layout qualifiers in the GLSL parser
Their values are now stored as integers, since no qualifier takes a
value of any other type.
Mikko Rasa [Sun, 21 Feb 2021 23:50:19 +0000 (01:50 +0200)]
Check that requested shader stages are supported
Mikko Rasa [Sun, 21 Feb 2021 23:39:30 +0000 (01:39 +0200)]
Throw an exception if a feature required by a shader is missing
Workarounds are not always available.
Mikko Rasa [Sun, 21 Feb 2021 23:12:25 +0000 (01:12 +0200)]
Add a standalone GLSL compiler frontend
This makes debugging the compiler easier and will eventually allow
shaders to be compiled into SPIR-V during build.
Mikko Rasa [Sun, 21 Feb 2021 22:58:57 +0000 (00:58 +0200)]
Reduce coupling between the GLSL compiler and the graphics engine
Feature states are now recorded in a struct.
Mikko Rasa [Sun, 21 Feb 2021 23:02:14 +0000 (01:02 +0200)]
Header fixes in the GLSL compiler
Mikko Rasa [Sun, 21 Feb 2021 21:35:13 +0000 (23:35 +0200)]
Fix environment map uniform name
Mikko Rasa [Sun, 21 Feb 2021 21:33:32 +0000 (23:33 +0200)]
Update the desertpillars demo
Mikko Rasa [Sun, 21 Feb 2021 21:30:55 +0000 (23:30 +0200)]
Implement an unlit material type
Mikko Rasa [Sun, 21 Feb 2021 21:29:37 +0000 (23:29 +0200)]
Support addint datafile statements for uniform material properties
Mikko Rasa [Sun, 21 Feb 2021 21:28:02 +0000 (23:28 +0200)]
Add sampler parameter to RenderPass::set_texture
Mikko Rasa [Sun, 21 Feb 2021 21:26:05 +0000 (23:26 +0200)]
Add missing keyword to set sampler compare mode from datafile
Mikko Rasa [Sun, 21 Feb 2021 14:23:07 +0000 (16:23 +0200)]
Redesign the way shader programs are loaded
Vulkan uses SPIR-V modules which can be specialized so there has to be a
way to keep the module around. A module can also contain multiple shader
stages. The abstraction for individual stages with the Shader class is
outdated and has been replaced with Module.
GLSL code is stored in the Module in combined form and split into stages
when loaded to a Program.
Mikko Rasa [Sun, 21 Feb 2021 10:19:52 +0000 (12:19 +0200)]
Allow using SL::Formatter on single nodes
This is occasionally useful for debugging.
Mikko Rasa [Sun, 21 Feb 2021 03:12:28 +0000 (05:12 +0200)]
Further refactor block and scope management
TraversingVisitor now provides a current_block variable and block know
their parent block so checking if we're in the toplevel block is easy.
Mikko Rasa [Sun, 21 Feb 2021 02:39:57 +0000 (04:39 +0200)]
Tweaks to the AST debug output
Mikko Rasa [Sun, 21 Feb 2021 02:31:35 +0000 (04:31 +0200)]
Fix scoping of GLSL loop variables and function parameters
TraversingVisitor visits those before the body, so they were being
inserted into the enclosing scope's variables map.
Mikko Rasa [Sun, 21 Feb 2021 02:20:32 +0000 (04:20 +0200)]
Rewrite syntax tree modifications
BlockModifier left dangling pointers in various variable maps, which
started causing trouble when I wanted to print out the entire AST.
NodeRemover is now used for all removal operations and it properly
handles the maps.
Mikko Rasa [Sat, 20 Feb 2021 22:59:07 +0000 (00:59 +0200)]
Avoid copying raw pointers in the syntax tree
They will potentially point to incorrect nodes and must be resolved
again.
Mikko Rasa [Sat, 20 Feb 2021 22:47:44 +0000 (00:47 +0200)]
Add a visitor to dump the AST for debugging purposes
Mikko Rasa [Sat, 20 Feb 2021 18:20:47 +0000 (20:20 +0200)]
Rearrange secondary operations in GLSL compiler
These are now performed internally by the main operation visitor.
Mikko Rasa [Sat, 20 Feb 2021 18:10:30 +0000 (20:10 +0200)]
Tweaks to visitor classes in the GLSL compiler