glsl/linker: Use constant_initializer instead of constant_value to initialize uniforms
[mesa.git] / src / glsl / ast.h
index e185ed11e756b880518c44d4f13248c836e4a0cf..4c31436613304081eed3e4b19f45bde8f139d88f 100644 (file)
@@ -304,6 +304,16 @@ private:
     * Is this function call actually a constructor?
     */
    bool cons;
+   ir_rvalue *
+   handle_method(exec_list *instructions,
+                 struct _mesa_glsl_parse_state *state);
+};
+
+class ast_subroutine_list : public ast_node
+{
+public:
+   virtual void print(void) const;
+   exec_list declarations;
 };
 
 class ast_array_specifier : public ast_node {
@@ -434,6 +444,7 @@ struct ast_type_qualifier {
         unsigned out:1;
         unsigned centroid:1;
          unsigned sample:1;
+        unsigned patch:1;
         unsigned uniform:1;
         unsigned buffer:1;
         unsigned smooth:1;
@@ -480,6 +491,7 @@ struct ast_type_qualifier {
         /** \name Layout qualifiers for GL_ARB_uniform_buffer_object */
         /** \{ */
          unsigned std140:1;
+         unsigned std430:1;
          unsigned shared:1;
          unsigned packed:1;
          unsigned column_major:1;
@@ -526,6 +538,12 @@ struct ast_type_qualifier {
         /* tess control output layout */
         unsigned vertices:1;
         /** \} */
+
+         /** \name Qualifiers for GL_ARB_shader_subroutine */
+        /** \{ */
+         unsigned subroutine:1;  /**< Is this marked 'subroutine' */
+         unsigned subroutine_def:1; /**< Is this marked 'subroutine' with a list of types */
+        /** \} */
       }
       /** \brief Set of flags, accessed by name. */
       q;
@@ -622,6 +640,9 @@ struct ast_type_qualifier {
     */
    glsl_base_type image_base_type;
 
+   /** Flag to know if this represents a default value for a qualifier */
+   bool is_default_qualifier;
+
    /**
     * Return true if and only if an interpolation qualifier is present.
     */
@@ -668,6 +689,7 @@ struct ast_type_qualifier {
                            ast_type_qualifier q,
                            ast_node* &node);
 
+   ast_subroutine_list *subroutine_list;
 };
 
 class ast_declarator_list;
@@ -1151,4 +1173,9 @@ extern void
 check_builtin_array_max_size(const char *name, unsigned size,
                              YYLTYPE loc, struct _mesa_glsl_parse_state *state);
 
+extern void _mesa_ast_process_interface_block(YYLTYPE *locp,
+                                              _mesa_glsl_parse_state *state,
+                                              ast_interface_block *const block,
+                                              const struct ast_type_qualifier q);
+
 #endif /* AST_H */