X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fcompiler.h;h=0ae2ed4114924946f2fbc04ae33a34b7d84b4676;hb=8c4d64c71df5c4dcab1838d81412d7a7244ada58;hp=29561407f9fa80282fbbd5296fe7736cca0aac43;hpb=1f09306906fbf57c05dccb27189264706cc64cfa;p=libs%2Fgl.git diff --git a/source/glsl/compiler.h b/source/glsl/compiler.h index 29561407..0ae2ed41 100644 --- a/source/glsl/compiler.h +++ b/source/glsl/compiler.h @@ -28,9 +28,20 @@ private: REDO_PREVIOUS }; + enum ResolveFlags + { + RESOLVE_BLOCKS = 1, + RESOLVE_TYPES = 2, + RESOLVE_VARIABLES = 4, + RESOLVE_EXPRESSIONS = 8, + RESOLVE_FUNCTIONS = 16, + RESOLVE_ALL = 31 + }; + Features features; Module *module; std::vector imported_names; + bool compiled; bool specialized; std::map spec_values; @@ -113,8 +124,20 @@ private: variables. */ void generate(Stage &, Mode); + template + bool resolve(Stage &, unsigned &, unsigned); + + /** Resolves various references between nodes. Flags can be specified to + request resolving particular aspects. Resolving may ripple into other + aspects as necessary. */ + void resolve(Stage &, unsigned = RESOLVE_ALL); + + /** Checks the validity of the module. If the return value is false, the + module's diagnostics list will contain additional information of errors. */ bool validate(Stage &); + static bool diagnostic_line_order(const Diagnostic &, const Diagnostic &); + /** Applies optimizations to a stage. The return value indicates which stage should be optimized next. */ OptimizeResult optimize(Stage &);