[Mesa-dev] [PATCH] virgl: drop const dimensions on first block.

Nicolai Hähnle nhaehnle at gmail.com
Wed Sep 13 15:05:17 UTC 2017


On 13.09.2017 01:28, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> The virgl protocol version of tgsi doesn't handle this yet,
> transform it back to the old ways.
> 
> Fixes: 41e342d5 tgsi/ureg: always emit constants (and their decls) as 2D
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>   src/gallium/drivers/virgl/virgl_tgsi.c | 26 ++++++++++++++++++++++++++
>   1 file changed, 26 insertions(+)
> 
> diff --git a/src/gallium/drivers/virgl/virgl_tgsi.c b/src/gallium/drivers/virgl/virgl_tgsi.c
> index 7ad1cbd..bf5c84c 100644
> --- a/src/gallium/drivers/virgl/virgl_tgsi.c
> +++ b/src/gallium/drivers/virgl/virgl_tgsi.c
> @@ -31,6 +31,24 @@ struct virgl_transform_context {
>      struct tgsi_transform_context base;
>   };
>   
> +static void
> +virgl_tgsi_transform_declaration(struct tgsi_transform_context *ctx,
> +                                 struct tgsi_full_declaration *decl)
> +{
> +   switch (decl->Declaration.File) {
> +   case TGSI_FILE_CONSTANT:
> +      if (decl->Declaration.Dimension) {
> +         if (decl->Dim.Index2D == 0)
> +            decl->Declaration.Dimension = 0;
> +      }
> +      break;
> +   default:
> +      break;
> +   }
> +   ctx->emit_declaration(ctx, decl);
> +
> +}
> +
>   /* for now just strip out the new properties the remote doesn't understand
>      yet */
>   static void
> @@ -54,6 +72,13 @@ virgl_tgsi_transform_instruction(struct tgsi_transform_context *ctx,
>   {
>      if (inst->Instruction.Precise)
>         inst->Instruction.Precise = 0;
> +
> +   for (unsigned i = 0; i < TGSI_FULL_MAX_SRC_REGISTERS; i++) {
> +      if (inst->Src[i].Register.File == TGSI_FILE_CONSTANT &&
> +          inst->Src[i].Register.Dimension &&
> +          inst->Src[i].Dimension.Index == 0)
> +         inst->Src[i].Register.Dimension = 0;

Maybe add a check that indirect addressing isn't used?

Cheers,
Nicolai


> +   }
>      ctx->emit_instruction(ctx, inst);
>   }
>   
> @@ -69,6 +94,7 @@ struct tgsi_token *virgl_tgsi_transform(const struct tgsi_token *tokens_in)
>         return NULL;
>   
>      memset(&transform, 0, sizeof(transform));
> +   transform.base.transform_declaration = virgl_tgsi_transform_declaration;
>      transform.base.transform_property = virgl_tgsi_transform_property;
>      transform.base.transform_instruction = virgl_tgsi_transform_instruction;
>      tgsi_transform_shader(tokens_in, new_tokens, newLen, &transform.base);
> 


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


More information about the mesa-dev mailing list