summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Gomez <[email protected]>2014-11-18 06:49:00 -0700
committerBrian Paul <[email protected]>2014-11-18 08:47:04 -0700
commit1398ed724a90bd608ac4f6206c37eb2792ce9ab1 (patch)
treeed4967f68de458f49e8542ffb1faf6d24cd80cbc
parentf9fc3ae89baac45563bad824f2adbd41d26dcef7 (diff)
glsl_compiler: Add binding hash tables to avoid SIGSEVs on linking stage
When using the stand alone compiler, if we try to link a shader with vertex attributes it will segfault on linking as the binding hash tables are not included in the shader program. Obviously, we cannot make the linking stage succeed without the bound attributes but we can prevent the crash and just let the linker spit its own error. Reviewed-by: Brian Paul <[email protected]>
-rw-r--r--src/glsl/main.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 9b36a1feda1..91e457ada27 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -35,6 +35,7 @@
#include "glsl_parser_extras.h"
#include "ir_optimization.h"
#include "program.h"
+#include "program/hash_table.h"
#include "loop_analysis.h"
#include "standalone_scaffolding.h"
@@ -357,6 +358,11 @@ main(int argc, char **argv)
assert(whole_program != NULL);
whole_program->InfoLog = ralloc_strdup(whole_program, "");
+ /* Created just to avoid segmentation faults */
+ whole_program->AttributeBindings = new string_to_uint_map;
+ whole_program->FragDataBindings = new string_to_uint_map;
+ whole_program->FragDataIndexBindings = new string_to_uint_map;
+
for (/* empty */; argc > optind; optind++) {
whole_program->Shaders =
reralloc(whole_program, whole_program->Shaders,
@@ -415,6 +421,10 @@ main(int argc, char **argv)
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++)
ralloc_free(whole_program->_LinkedShaders[i]);
+ delete whole_program->AttributeBindings;
+ delete whole_program->FragDataBindings;
+ delete whole_program->FragDataIndexBindings;
+
ralloc_free(whole_program);
_mesa_glsl_release_types();
_mesa_glsl_release_builtin_functions();