Releases: IrisShaders/glsl-transformer
Releases · IrisShaders/glsl-transformer
v0.21.0 - Execution planning for fixed job parameters, conditional dependencies and more tests
v0.21.0 - Execution planning for fixed job parameters, conditional dependencies and more tests
Pre-release
Pre-release
- Added execution plan caching for fixed job parameters (#16). This means that the execution plan will be optimized for the "fixed" part of the job parameters and re-used when a matching set of job parameters is used for a transformation job.
- Made all job parameter type parameters extend
JobParameters
- Added the
FixedWrappedParameters
,WrappedParameters
andNonFixedJobParameters
classes for handling parameters and caching - Added tests for fixed parameters
- Added conditional dependency graph setup through the
setupGraph
method onTransformation
which should be used to setup the dependency graph of transformations where the configuration of the dependencies depends on the fixed job parameters. - Added tests for
RunPhase
methods - Removed some dead code
- Added some tests for better coverage in some places
- Instead of
Error
now anAssertionError
is thrown when something that should break, breaks - All lifecycle users can now be initialized
- Moved classes related to tree traversal into their own package
traversal
- Added tests for the detection of cyclic dependencies
Meta
- Moved documentation into it's own folder
- Progress tracking now happens on the project board
- There is also now a milestone for tracking progress towards the 1.0.0 release (which will have the latest minor version as the major version)
Full Changelog: v0.20.1...v0.21.0
v0.20.1 - Minimum tree-walks optimization in ExecutionPlanner
- Added optimal walk phase scheduling to
ExecutionPlanner
. This means it uses the minimum number of tree-walk operations to satisfy the dependency tree. - Updated javadoc on
resetState
because of the optimization
Full Changelog: v0.20.0...v0.20.1
v0.20.0 - Early tree walk stopping, grammar refactor and more snapshot tests
Pre-release
- Refactored the GLSL grammar to use a simpler structure for parsing expressions. This makes the resulting parse tree have less nested nodes for expressions.
- Added many grammar rule alternative and element labels. This should make using the generated structures easier to use and traverse.
- Fixed node injection to work with the new grammar and also improve how injection locations are found.
- Removed redundant visibility keywords from some interfaces
- Added the
canWalk
method onTransformationPhase
that will be used in the future to improve execution planning such that it produces more efficient schedules, which should have less walk-containing execution levels. - Added snapshot tests for the structure of the parse tree. They use a special format that's not indented but better to git-diff on. These generated snapshot files are very large but help find bugs with the grammar when changes are made to it.
- Added a few resource files for testing
- Added support for stopping the
DynamicParseTreeWalker
early based on signals from the listener. Support for this also involves the transformation phase, proxy parse tree listener and execution planner. - Added the
PartialParseTreeListener
interface that defines methods for stopping the dynamic parse tree walker early.isFinished
stops iterating child nodes whileisDeepEnough
doesn't iterate child nodes at all. - Added
walkFinished
with which a transformation phase can signal to the execution planner that it's done with walking the parse tree in the current execution. - Changed
ExtendedContext
to useParserRuleContext
as its superclass which has less overhead
The parse tree walk early-stopping features don't have tests yet.
Meta:
- Updated
Transformation
method diagrams after the rename that happened last release
Full Changelog: v0.19.0...v0.20.0
v0.19.0 - Bug fix for chaining in append and prepend Transformation methods
- Renamed the
Transformation
methodprependDependent
toprependDependency
andappendDependency
toappendDependent
in order to better reflect the effect these operations have on the chaining state (the dependent and dependency of the most recently added dependency relationship) - Fixed bug where chaining wouldn't work properly after prepend or append (the chaining state just wasn't being updated at all)
- Added tests to make sure this bug doesn't happen
Mostly just a bug fix update but since it breaks the API it gets a major version bump.
Meta:
- Added graph diagrams for the
Transformation
methods. Hopefully these make the various operations easier to understand. The name changes made in this release haven't been incorporated into these diagrams yet though. I hope to create more in-depth documentation at some point once the API stabilizes and matures more and when I have the time and patience to write it. - Updated README example code
Full Changelog: v0.18.0...v0.19.0
v0.18.0 - Dependency Graph-based Phase Execution
- Added dependency graph-based phase execution. This means instead of putting phases into levels, they can now be added as nodes in a dependency graph and the
ExecutionPlanner
will compute a plan made up of as few as possible execution levels so that all dependencies are satisfied and all phases are executed. - Abstracted some functionality, mainly init and state reset, of phases and transformations into
LifecycleUser
- Changed
Transformation
to track the dependencies of lifecycle users enclosed in nodes - Renamed
PhaseCollector
toExecutionPlanner
and changed how transformations are added to it - Introduced the internal data structure
Node
that transformations use to track dependencies between lifecycle users - Transformations and phases can be part of other transformations. In fact, the execution planner simply contains a root transformation to which all other transformations and phases are added.
- Added lots of tests for
Transformation
andExecutionPlanner
- Updated
WrapIdentifier
and subclasses to use the new APIs - Added a utility method for generating simple instances to
RunPhase
Full Changelog: v0.17.2...v0.18.0
v0.17.2 - RunPhase utility fix
- Made the new RunPhase methods introduced in the last release actually static
Full Changelog: v0.17.1...v0.17.2
v0.17.1 - RunPhase utilities and Transformation default index
- Added utility methods to
RunPhase
for creating it with a single injection - Added
DEFAULT_INDEX
toTransformation
- Added
resetNextPhaseIndex
toTransformation
that resets the next phase index. This makes compactly constructing transformations with complex schedules a little easier.
Full Changelog: v0.17.0...v0.17.1
v0.17.0 - More flexibility in SearchTerminals and many bugfixes
- Made
SearchTerminals
dynamic meaning it can be used in contexts where the targets aren't known at transformation init-time. SearchTerminals
will now test all terminal tokens if the invalid token type is set as the token type to test- Moved most of the specific search terminals stuff to
SearchTerminalsImpl
- Added constructor that only takes a terminal token type to
SearchTerminalsImpl
- Added
SearchTerminalsDynamic
for using it dynamically with caching - Made all custom node types implement
MoveCheckable
which fixes a bug withDynamicParseTreeWalker
getting into an infinite loop while searching for a replaced node - Fixed another bug with
DynamicParseTreeWalker
that resulted in an NPE if a child array was null - Improved
MoveCheckable
to also check deeply nested replacements - Introduced the concept of child transformations which allows transformations indirectly added to a phase collector through
Transformation#append
orTransformation#merge
to also receive job parameters - Simplified
EmptyTerminalNode
since all nodes may receive a previous node now - Added tests for the fixed bugs (hopefully making sure they won't regress)
Full Changelog: v0.16.1...v0.17.0
v0.16.1 - Job parameters in transformations
Transformation
has access to job parameters now
Full Changelog: v0.16.0...v0.16.1
v0.16.0 - WrapIdentifier changes and a new WrapThrowTarget
- Changed
WrapIdentifier
to be more general - Added
WrapIdentifierDynamic
andWrapIdentifierExternalDeclaration
for specific implementations but removedWrapIdentifierImpl
- Added
WrapThrowTarget
and its concrete implementation
Full Changelog: v0.15.1...v0.16.0