[Mesa-dev] [PATCH] r600: don't emit vfetch if tess eval isn't accessing any inputs.

Gert Wollny gw.fossdev at gmail.com
Wed Nov 15 07:53:41 UTC 2017


Hi Dave, 

tested on BARTS: the patch changes TESS_EVAL to end with a proper EOP
in 

  trivial-tess-gs_no-gs-inputs

(it doesn't fix the piglit though). However, it introduces a regression
in 

   vs-tcs-tes-tessinner-tessouter-inputs-quads
   vs-tes-tessinner-tessouter-inputs-quads

because in these two piglits in tgsi_declaration TESSINNER and
TESSOUTER are read from LDS, and this requires calling 
r600_fetch_tess_io_info first. Since the TESS_EVAL shader has no inputs
in these two cases the tests fail with the patch. 

One approach to solve this could be to scan the shader first for this
declaration (I'll do this is the experimental performance patches that
I'll send later), the other one could be to implement some kind of lazy
loading for the related fetch operation.

Best, 
Gert 

          
Am Mittwoch, den 15.11.2017, 11:25 +1000 schrieb Dave Airlie:
> From: Dave Airlie <airlied at redhat.com>
> 
> This should avoid emitting anything in the shader if we aren't
> accessing any inputs.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/drivers/r600/r600_shader.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/drivers/r600/r600_shader.c
> b/src/gallium/drivers/r600/r600_shader.c
> index 625537b48b..95a4c05e81 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -3167,7 +3167,8 @@ static int r600_shader_from_tgsi(struct
> r600_context *rctx,
>  		vs_add_primid_output(&ctx, key.vs.prim_id_out);
>  
>  	if (ctx.type == PIPE_SHADER_TESS_EVAL)
> -		r600_fetch_tess_io_info(&ctx);
> +		if (ctx.info.num_inputs)
> +			r600_fetch_tess_io_info(&ctx);
>  
>  	while (!tgsi_parse_end_of_tokens(&ctx.parse)) {
>  		tgsi_parse_token(&ctx.parse);


More information about the mesa-dev mailing list