[Mesa-dev] [PATCH 13/61] radeonsi: adjust the signature of si_get_vs_prolog_key

Nicolai Hähnle nhaehnle at gmail.com
Fri Apr 28 10:32:09 UTC 2017


On 24.04.2017 10:45, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
>  src/gallium/drivers/radeonsi/si_shader.c | 29 ++++++++++++++++++++---------
>  1 file changed, 20 insertions(+), 9 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> index 00aabc9..f6cd313 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -7060,35 +7060,41 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx,
>  		return false;
>  	}
>
>  	si_llvm_build_ret(ctx, ctx->return_value);
>  	return true;
>  }
>
>  /**
>   * Compute the VS prolog key, which contains all the information needed to
>   * build the VS prolog function, and set shader->info bits where needed.
> + *
> + * \param shader_in	Vertex shader
> + * \param prolog_key	Key of the VS prolog
> + * \param shader_out	Same as shader_in, or the next shader if merging LS+HS or ES+GS.
> + * \param key		Output shader part key.
>   */
> -static void si_get_vs_prolog_key(struct si_shader *shader,
> +static void si_get_vs_prolog_key(const struct tgsi_shader_info *info,
> +				 unsigned num_input_sgprs,
> +				 const struct si_vs_prolog_bits *prolog_key,
> +				 struct si_shader *shader_out,
>  				 union si_shader_part_key *key)

The comment doesn't match the function signature.

Cheers,
Nicolai


>  {
> -	struct tgsi_shader_info *info = &shader->selector->info;
> -
>  	memset(key, 0, sizeof(*key));
> -	key->vs_prolog.states = shader->key.part.vs.prolog;
> -	key->vs_prolog.num_input_sgprs = shader->info.num_input_sgprs;
> +	key->vs_prolog.states = *prolog_key;
> +	key->vs_prolog.num_input_sgprs = num_input_sgprs;
>  	key->vs_prolog.last_input = MAX2(1, info->num_inputs) - 1;
>
>  	/* Set the instanceID flag. */
>  	for (unsigned i = 0; i < info->num_inputs; i++)
>  		if (key->vs_prolog.states.instance_divisors[i])
> -			shader->info.uses_instanceid = true;
> +			shader_out->info.uses_instanceid = true;
>  }
>
>  /**
>   * Compute the VS epilog key, which contains all the information needed to
>   * build the VS epilog function, and set the PrimitiveID output offset.
>   */
>  static void si_get_vs_epilog_key(struct si_shader *shader,
>  				 struct si_vs_epilog_bits *states,
>  				 union si_shader_part_key *key)
>  {
> @@ -7561,21 +7567,24 @@ int si_compile_tgsi_shader(struct si_screen *sscreen,
>  		bool need_prolog;
>  		bool need_epilog;
>
>  		need_prolog = sel->vs_needs_prolog;
>  		need_epilog = !shader->key.as_es && !shader->key.as_ls;
>
>  		parts[need_prolog ? 1 : 0] = ctx.main_fn;
>
>  		if (need_prolog) {
>  			union si_shader_part_key prolog_key;
> -			si_get_vs_prolog_key(shader, &prolog_key);
> +			si_get_vs_prolog_key(&sel->info,
> +					     shader->info.num_input_sgprs,
> +					     &shader->key.part.vs.prolog,
> +					     shader, &prolog_key);
>  			si_build_vs_prolog_function(&ctx, &prolog_key);
>  			parts[0] = ctx.main_fn;
>  		}
>
>  		if (need_epilog) {
>  			union si_shader_part_key epilog_key;
>  			si_get_vs_epilog_key(shader, &shader->key.part.vs.epilog, &epilog_key);
>  			si_build_vs_epilog_function(&ctx, &epilog_key);
>  			parts[need_prolog ? 2 : 1] = ctx.main_fn;
>  		}
> @@ -8010,22 +8019,24 @@ static bool si_get_vs_epilog(struct si_screen *sscreen,
>   */
>  static bool si_shader_select_vs_parts(struct si_screen *sscreen,
>  				      LLVMTargetMachineRef tm,
>  				      struct si_shader *shader,
>  				      struct pipe_debug_callback *debug)
>  {
>  	if (shader->selector->vs_needs_prolog) {
>  		union si_shader_part_key prolog_key;
>
>  		/* Get the prolog. */
> -		si_get_vs_prolog_key(shader, &prolog_key);
> -
> +		si_get_vs_prolog_key(&shader->selector->info,
> +				     shader->info.num_input_sgprs,
> +				     &shader->key.part.vs.prolog,
> +				     shader, &prolog_key);
>  		shader->prolog =
>  			si_get_shader_part(sscreen, &sscreen->vs_prologs,
>  					   PIPE_SHADER_VERTEX, true,
>  					   &prolog_key, tm, debug,
>  					   si_build_vs_prolog_function,
>  					   "Vertex Shader Prolog");
>  		if (!shader->prolog)
>  			return false;
>  	}
>
>


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list