- Implement AST-to-HIR conversion of discard instructions. - Handle constant expressions of (matrix {+,-,*,/} scalar) - Handle constant expressions of (vector {+,-,*,/} scalar) - Handle constant expressions of (matrix * vector) - Handle constant expressions of (matrix * matrix) - Handle currently unsupported constant expression types - ir_unop_sign - ir_unop_exp2 - ir_unop_log2 - ir_unop_u2f - ir_unop_trunc - ir_unop_ceil - ir_unop_floor - ir_unop_sin - ir_unop_cos - ir_binop_dot - ir_binop_min - ir_binop_max - ir_binop_pow - Handle constant expressions of (struct == struct) - Handle constant expressions of (struct != struct) - Add support to ir_constant for array constants Arrays can only be - declared 'const' in GLSL 1.20+. This is because there are no array constructors in GLSL 1.10, and any variable declared as 'const' must have an initializer. - Handle constant expressions of (array == array) - Handle constant expressions of (array != array) - Treat built-in functions with constant parameters as constant expressions. - Rewrite all built-in functions return a single expression. - Modify the HIR generator for functions to automatically inline built-in functions durning translation. - Care must be taken to handle both the 1.10 rules and the 1.20+ rules. In 1.10, built-in functions cannot be constant expressions. - Detect non-void functions that lack a return statement - Detect return statements with a type not matching the funciton's return type. - Handle over-riding built-in functions - Is the overload per-compilation unit or per-linked shader? - Handle redeclaration of built-in variables - Handle addition of qualifiers such as 'invariant' or 'centroid'. - Handle resizing of arrays. - Other? We'll have to look at the spec. 1.30 features: - Implement AST-to-HIR conversion of bit-shift operators. - Implement AST-to-HIR conversion of bit-wise {&,|,^,!} operators. - Implement AST-to-HIR conversion of switch-statements - switch - case - Update break to correcly handle mixed nexting of switch-statements and loops. - Handle currently unsupported constant expression types - ir_unop_bit_not - ir_binop_mod - ir_binop_lshift - ir_binop_rshift - ir_binop_bit_and - ir_binop_bit_xor - ir_binop_bit_or