summaryrefslogtreecommitdiff
path: root/glsl_parser_extras.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-06-07 18:53:06 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-06-07 18:53:06 -0700
commit15d162d7b1ebe09b0bdaf43194529f9ef995c623 (patch)
tree47f860e36c543b053726ac6f2ef4aa9bbfa64a43 /glsl_parser_extras.cpp
parent6cd2a5cc4b8eb1d445f2ae5311db8fda9d46b7a1 (diff)
Don't process empty shaders
Some valid shaders, such as 'precision highp float;', evaluate to empty sets of instructions. This causes some of the optimization stages to enter infinite loops. Instead, don't bother processing the empty ones.
Diffstat (limited to 'glsl_parser_extras.cpp')
-rw-r--r--glsl_parser_extras.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/glsl_parser_extras.cpp b/glsl_parser_extras.cpp
index afce9d9..f6b3028 100644
--- a/glsl_parser_extras.cpp
+++ b/glsl_parser_extras.cpp
@@ -737,7 +737,8 @@ main(int argc, char **argv)
ast->print();
}
- _mesa_ast_to_hir(&instructions, &state);
+ if (!state.translation_unit.is_empty())
+ _mesa_ast_to_hir(&instructions, &state);
} else {
/* FINISHME: We should initialize this to the max GLSL version supported
* FINISHME: by the driver. At the moment, we don't know what that is.
@@ -748,7 +749,7 @@ main(int argc, char **argv)
}
/* Optimization passes */
- if (!state.error) {
+ if (!state.error && !instructions.is_empty()) {
bool progress;
do {
progress = false;