Kind reminder that patches 1 and 3 are still unreviewed. Sam
On Fri, 2017-05-05 at 12:38 +0200, Samuel Iglesias Gonsálvez wrote: > We are going to add a packing feature to reduce the usage of the push > constant buffer. One of the consequences is that 'nr_params' would be > modified by vec4_visitor's run call, so we need to restore it if one > of > them failed before executing the fallback ones. Same thing happens to > the > uniforms values that would be reordered afterwards. > > Fixes GL45-CTS.arrays_of_arrays_gl.InteractionFunctionCalls2 when > the dvec4 alignment and packing patch is applied. > > Signed-off-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com> > Cc: "17.1" <mesa-sta...@lists.freedesktop.org> > --- > src/intel/compiler/brw_vec4_gs_visitor.cpp | 26 > ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/src/intel/compiler/brw_vec4_gs_visitor.cpp > b/src/intel/compiler/brw_vec4_gs_visitor.cpp > index 4a8b5be30e..5fcd02831a 100644 > --- a/src/intel/compiler/brw_vec4_gs_visitor.cpp > +++ b/src/intel/compiler/brw_vec4_gs_visitor.cpp > @@ -868,10 +868,36 @@ brw_compile_gs(const struct brw_compiler > *compiler, void *log_data, > > vec4_gs_visitor v(compiler, log_data, &c, prog_data, > shader, > mem_ctx, true /* no_spills */, > shader_time_index); > + > + /* Backup 'nr_params' and 'param' as they can be modified > by the > + * the DUAL_OBJECT visitor. If it fails, we will run the > fallback > + * (DUAL_INSTANCED or SINGLE mode) and we need to restore > original > + * values. > + */ > + const unsigned param_count = prog_data- > >base.base.nr_params; > + gl_constant_value **param = ralloc_array(NULL, > gl_constant_value*, > + param_count); > + memcpy(param, prog_data->base.base.param, > + sizeof(gl_constant_value*) * param_count); > + > if (v.run()) { > + /* Success! Backup is not needed */ > + ralloc_free(param); > return brw_vec4_generate_assembly(compiler, log_data, > mem_ctx, > shader, &prog_data- > >base, v.cfg, > final_assembly_size); > + } else { > + /* These variables could be modified by the execution of > the GS > + * visitor if it packed the uniforms in the push > constant buffer. > + * As it failed, we need restore them so we can start > again with > + * DUAL_INSTANCED or SINGLE mode. > + * > + * FIXME: Could more variables be modified by this > execution? > + */ > + memcpy(prog_data->base.base.param, param, > + sizeof(gl_constant_value*) * param_count); > + prog_data->base.base.nr_params = param_count; > + ralloc_free(param); > } > } > }
signature.asc
Description: This is a digitally signed message part
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev