[Mesa-dev] [PATCH 3/3] glsl_compiler: Add binding hash tables to avoid SIGSEVs on linking stage
Brian Paul
brianp at vmware.com
Tue Nov 18 07:40:55 PST 2014
Thanks for splitting up the patch. Your commit message below line wraps
a bit short (~70 chars is about right). I'll fix that before pushing.
-Brian
On 11/18/2014 06:49 AM, Andres Gomez wrote:
> 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.
> ---
> src/glsl/main.cpp | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
> index 9b36a1f..91e457a 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();
>
More information about the mesa-dev
mailing list