[Mesa-dev] [PATCH] nvc0/ir: make sure to align the second arg of TXD to 4, as we do for TEX

Samuel Pitoiset samuel.pitoiset at gmail.com
Sun May 15 12:57:32 UTC 2016


I don't like this code duplication but we don't really have the choice here.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 05/15/2016 01:27 AM, Ilia Mirkin wrote:
> This was handled in handleTEX(), however the way the logic works, those
> extra arguments aren't added on by then, so it did nothing. Instead we
> must duplicate that bit here. GK110 appears to complain about
> MISALIGNED_GPR, however it's reasonable to believe that GK104 has the
> same requirements.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95403
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Cc: mesa-stable at lists.freedesktop.org
> ---
>  .../drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp      | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> index 1068c21..869b06c 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> @@ -993,6 +993,20 @@ NVC0LoweringPass::handleTXD(TexInstruction *txd)
>        txd->dPdx[c].set(NULL);
>        txd->dPdy[c].set(NULL);
>     }
> +
> +   // In this case we have fewer than 4 "real" arguments, which means that
> +   // handleTEX didn't apply any padding. However we have to make sure that
> +   // the second "group" of arguments still gets padded up to 4.
> +   if (chipset >= NVISA_GK104_CHIPSET) {
> +      int s = arg + 2 * dim;
> +      if (s >= 4 && s < 7) {
> +         if (txd->srcExists(s)) // move potential predicate out of the way
> +            txd->moveSources(s, 7 - s);
> +         while (s < 7)
> +            txd->setSrc(s++, bld.loadImm(NULL, 0));
> +      }
> +   }
> +
>     return true;
>  }
>
>


More information about the mesa-dev mailing list