summaryrefslogtreecommitdiff
path: root/src/glsl/ast.h
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2011-07-29 15:28:52 -0700
committerPaul Berry <stereotype441@gmail.com>2011-08-08 12:43:38 -0700
commit0d81b0e18494a80c4326fbc98837842959675869 (patch)
tree6d09d0dc68216293d5aff9db52640f1dbd2e2713 /src/glsl/ast.h
parent482338842db6ad387316b52fbe9602eee56ad082 (diff)
glsl: Emit function signatures at toplevel, even for built-ins.
The ast-to-hir conversion needs to emit function signatures in two circumstances: when a function declaration (or definition) is encountered, and when a built-in function is encountered. To avoid emitting a function signature in an illegal place (such as inside a function), emit_function() checked whether we were inside a function definition, and if so, emitted the signature before the function definition. However, this didn't cover the case of emitting function signatures for built-in functions when those built-in functions are called from inside the constant integer expression that specifies the length of a global array. This failed because when processing an array length, we are emitting IR into a dummy exec_list (see process_array_type() in ast_to_hir.cpp). process_array_type() later checks (via an assertion) that no instructions were emitted to the dummy exec_list, based on the reasonable assumption that we shouldn't need to emit instructions to calculate the value of a constant. This patch changes emit_function() so that it emits function signatures at toplevel in all cases. This partially fixes bug 38625 (https://bugs.freedesktop.org/show_bug.cgi?id=38625). The remainder of the fix is in the patch that follows. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/glsl/ast.h')
-rw-r--r--src/glsl/ast.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index 878f48b207..d1de227187 100644
--- a/src/glsl/ast.h
+++ b/src/glsl/ast.h
@@ -730,7 +730,6 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr,
struct _mesa_glsl_parse_state *state);
void
-emit_function(_mesa_glsl_parse_state *state, exec_list *instructions,
- ir_function *f);
+emit_function(_mesa_glsl_parse_state *state, ir_function *f);
#endif /* AST_H */