Add definitions for 1.10 built-in uniforms for ff state.
[mesa.git] / ast.h
diff --git a/ast.h b/ast.h
index ad614e98fe617b4ae699a0c111aa37dea642b18d..a158910421d427ae1db1ed2ce86cb0f48d46694c 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -39,8 +39,8 @@ class ast_node : public simple_node {
 public:
    virtual ~ast_node();
    virtual void print(void) const;
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    /**
     * Retrieve the source location of an AST node
@@ -162,8 +162,8 @@ public:
 
    static const char *operator_string(enum ast_operators op);
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    virtual void print(void) const;
 
@@ -198,16 +198,35 @@ public:
  */
 class ast_function_expression : public ast_expression {
 public:
-   ast_function_expression(ast_node *callee)
-      : ast_expression(ast_function_call, (ast_expression *) callee,
-                      NULL, NULL)
+   ast_function_expression(ast_expression *callee)
+      : ast_expression(ast_function_call, callee,
+                      NULL, NULL),
+       cons(false)
    {
       /* empty */
    }
 
+   ast_function_expression(class ast_type_specifier *type)
+      : ast_expression(ast_function_call, (ast_expression *) type,
+                      NULL, NULL),
+       cons(true)
+   {
+      /* empty */
+   }
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   bool is_constructor() const
+   {
+      return cons;
+   }
+
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
+
+private:
+   /**
+    * Is this function call actually a constructor?
+    */
+   bool cons;
 };
 
 
@@ -226,8 +245,8 @@ public:
    ast_compound_statement(int new_scope, ast_node *statements);
    virtual void print(void) const;
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    int new_scope;
    struct simple_node statements;
@@ -338,11 +357,27 @@ class ast_type_specifier : public ast_node {
 public:
    ast_type_specifier(int specifier);
 
+   /** Construct a type specifier from a type name */
+   ast_type_specifier(const char *name) 
+      : type_specifier(ast_type_name), type_name(name), structure(NULL),
+       is_array(false), array_size(NULL), precision(ast_precision_high)
+   {
+      /* empty */
+   }
+
+   /** Construct a type specifier from a structure definition */
+   ast_type_specifier(ast_struct_specifier *s)
+      : type_specifier(ast_struct), type_name(s->name), structure(s),
+       is_array(false), array_size(NULL), precision(ast_precision_high)
+   {
+      /* empty */
+   }
+
    virtual void print(void) const;
 
    enum ast_types type_specifier;
 
-   char *type_name;
+   const char *type_name;
    ast_struct_specifier *structure;
 
    int is_array;
@@ -366,8 +401,8 @@ public:
    ast_declarator_list(ast_fully_specified_type *);
    virtual void print(void) const;
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    ast_fully_specified_type *type;
    struct simple_node declarations;
@@ -387,8 +422,8 @@ class ast_parameter_declarator : public ast_node {
 public:
    virtual void print(void) const;
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    ast_fully_specified_type *type;
    char *identifier;
@@ -434,8 +469,8 @@ public:
    ast_expression_statement(ast_expression *);
    virtual void print(void) const;
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    ast_expression *expression;
 };
@@ -496,6 +531,9 @@ public:
    ast_jump_statement(int mode, ast_expression *return_value);
    virtual void print(void) const;
 
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
+
    enum ast_jump_modes {
       ast_continue,
       ast_break,
@@ -511,8 +549,8 @@ class ast_function_definition : public ast_node {
 public:
    virtual void print(void) const;
 
-   virtual ir_instruction *hir(exec_list *instructions,
-                              struct _mesa_glsl_parse_state *state);
+   virtual ir_rvalue *hir(exec_list *instructions,
+                         struct _mesa_glsl_parse_state *state);
 
    ast_function *prototype;
    ast_compound_statement *body;
@@ -522,7 +560,7 @@ public:
 extern void
 _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state);
 
-extern struct ir_instruction *
+extern struct ir_rvalue *
 _mesa_ast_field_selection_to_hir(const struct ast_expression *expr,
                                 exec_list *instructions,
                                 struct _mesa_glsl_parse_state *state);