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
> Cc: "17.1"
> ---
> 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