The user submits a series of units,
in no particular order, to the
parasol implementation compiler, along with the
fully-qualified name of a
program.
The compiler combines the units, checks
for module
name collisions, checks the sanity of the submitted modules,
resolves all names, and checks the
types
of all
terms.
The compiler then erases all module_declarations from
the environment, renaming all terms to result in a set
of terms with unique names.
The compiler then determines all terms upon which
the program
depends, removing all unused terms and sorting
the resulting terms topologically.
At this point,
the environment contains a
vertex shaderV
with an associated ordered set of termsT, and
fragment shaderF
with an associated ordered set of termsU.
The operational semantics imply that the values of the terms in
T have been substituted into the
local declarations
of V. The
local declarations defined in V are evaluated.
The values resulting from evaluation are written to the
outputs of V.
Execution of F begins.
The terms in U are
evaluated in the order given.
The operational semantics imply that the values of the terms in
U have been substituted into the
local declarations
of F. The
local declarations defined in F are evaluated.
If F contains a
discard
declaration, and the condition evaluates to true,
execution of F halts and no
output is produced.
The values resulting from evaluation are written to the
outputs of F.