[Mesa-dev] [PATCH 3/3] glsl_compiler: Add binding hash tables to avoid SIGSEVs on linking stage
Ian Romanick
idr at freedesktop.org
Tue Nov 18 10:56:55 PST 2014
On 11/18/2014 07:40 AM, Brian Paul wrote:
> 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.
You can add
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
to patches 2 and 3 too.
> -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();
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list