[Mesa-dev] [PATCH] i965: do not release GLSL IR for SSO programs
Tapani Pälli
tapani.palli at intel.com
Wed Oct 26 05:50:47 UTC 2016
On 10/26/2016 08:15 AM, Timothy Arceri wrote:
> On Tue, 2016-10-25 at 09:39 +0300, Tapani Pälli wrote:
>> SSO shader programs can be later modified by attaching/detaching
>> shaders and relinked, this requires IR.
>
> Doesn't relinking recreate the IR? We can relink exiting shaders into
> new programs. The IR is cloned from gl_shader (the compiled IR) before
> this happens.
>
> Where exactly are things falling over for SSO?
I went this way as I haven't seen this happening elsewhere but when
relinking program created by glCreateShaderProgram. TBH I'm not sure if
this could happen with regular programs, I would assume we had already
bugs if it would be so (?)
In practice things go bad in brw_link_shader where process_glsl_ir()
gets called, like this:
--- 8< ---
#0 do_expression_flattening (instructions=instructions at entry=0x0,
predicate=predicate at entry=0x7ffff0f808a0
<mat_op_to_vec_predicate(ir_instruction*)>) at
glsl/ir_expression_flattening.cpp:60
#1 0x00007ffff0f816b9 in do_mat_op_to_vec (instructions=0x0) at
glsl/lower_mat_op_to_vec.cpp:96
#2 0x00007ffff10385bd in process_glsl_ir (shader_prog=0x9b74d8,
shader=0x9b2688, brw=0x7d2478) at brw_link.cpp:108
#3 brw_link_shader (ctx=0x7d2478, shProg=0x9b74d8) at brw_link.cpp:234
#4 0x00007ffff0ec1f31 in _mesa_glsl_link_shader (ctx=0x7d2478,
prog=0x9b74d8) at program/ir_to_mesa.cpp:3067
#5 0x00007ffff0ddc99b in _mesa_link_program (ctx=0x7d2478,
shProg=0x9b74d8) at main/shaderapi.c:1098
#6 0x00007ffff7ac8d15 in stub_glLinkProgram (program=2) at
/home/tpalli/source/fdo/piglit/tests/util/piglit-dispatch-gen.c:33005
#7 0x00000000004019ab in
relink_program_created_by_glCreateShaderProgram () at
/home/tpalli/source/fdo/piglit/tests/spec/arb_separate_shader_objects/api-errors.c:78
>> This patch fixes regression
>> caused by 4542c7ed5fc6d8cb2495d322b4f06d802d7292cc.
>>
>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97715
>> Cc: "12.0 13.0" <mesa-stable at lists.freedesktop.org>
>> ---
>> src/mesa/drivers/dri/i965/brw_link.cpp | 17 ++++++++++-------
>> 1 file changed, 10 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp
>> b/src/mesa/drivers/dri/i965/brw_link.cpp
>> index 5ea9773..ffb66a9 100644
>> --- a/src/mesa/drivers/dri/i965/brw_link.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_link.cpp
>> @@ -290,14 +290,17 @@ brw_link_shader(struct gl_context *ctx, struct
>> gl_shader_program *shProg)
>>
>> build_program_resource_list(ctx, shProg);
>>
>> - for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders);
>> stage++) {
>> - struct gl_linked_shader *shader = shProg-
>>> _LinkedShaders[stage];
>> - if (!shader)
>> - continue;
>> + /* We can't free IR for SSO programs since those may need
>> relinking. */
>> + if (!shProg->SeparateShader) {
>> + for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders);
>> stage++) {
>> + struct gl_linked_shader *shader = shProg-
>>> _LinkedShaders[stage];
>> + if (!shader)
>> + continue;
>>
>> - /* The GLSL IR won't be needed anymore. */
>> - ralloc_free(shader->ir);
>> - shader->ir = NULL;
>> + /* The GLSL IR won't be needed anymore. */
>> + ralloc_free(shader->ir);
>> + shader->ir = NULL;
>> + }
>> }
>>
>> return true;
More information about the mesa-dev
mailing list