diff options
author | Ian Romanick <[email protected]> | 2011-07-11 10:46:01 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2011-07-20 18:20:59 -0700 |
commit | 02c5ae1b3fef75d5c0a715313a69e6b95ebd5b95 (patch) | |
tree | 25b08fc7dd9d6dd68b32d0847f95d18ad4b19d0d /src/glsl/ast_to_hir.cpp | |
parent | 1ad3ba4ad954b86751bd5b6ad0a431920bff9958 (diff) |
glsl: Reject shaders that contain static recursion
The GLSL 1.20 and later specs say:
"Recursion is not allowed, not even statically. Static recursion is
present if the static function call graph of the program contains
cycles."
Recursion is detected and rejected both a compile-time and at
link-time. The complie-time check happens to detect some cases that
may be removed by various optimization passes. The spec doesn't seem
to allow this, but other vendors (e.g., NVIDIA) appear to only check
at link-time after all optimizations.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=33885
Reviewed-by: Paul Berry <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl/ast_to_hir.cpp')
-rw-r--r-- | src/glsl/ast_to_hir.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 2312c297c40..c0524bf0bcc 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -83,6 +83,8 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) foreach_list_typed (ast_node, ast, link, & state->translation_unit) ast->hir(instructions, state); + + detect_recursion_unlinked(state, instructions); } |