[Mesa-dev] [PATCH] nvc0/ir: reset the base offset for indirect images accesses

Ilia Mirkin imirkin at alum.mit.edu
Mon Jul 4 22:57:12 UTC 2016


This makes the code identical to the new code I added in suq handling? If
so, r-b. As a separate patch, I'd encourage a refactor of the logic.

On Jul 4, 2016 6:08 PM, "Samuel Pitoiset" <samuel.pitoiset at gmail.com> wrote:

> In presence of an indirect image access, the base offset should be
> zeroed because the stride will be computed twice. This is a pretty
> rare situation but it can happen when tex.r > 0.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> Cc: "11.2 12.0" <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> 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 ce0f99c..ec349ec 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> @@ -1685,7 +1685,7 @@
> NVC0LoweringPass::processSurfaceCoordsNVE4(TexInstruction *su)
>     const int idx = su->tex.r;
>     const int dim = su->tex.target.getDim();
>     const int arg = dim + (su->tex.target.isArray() ||
> su->tex.target.isCube());
> -   const uint16_t base = idx * NVE4_SU_INFO__STRIDE;
> +   uint16_t base = idx * NVE4_SU_INFO__STRIDE;
>     int c;
>     Value *zero = bld.mkImm(0);
>     Value *p1 = NULL;
> @@ -1712,6 +1712,7 @@
> NVC0LoweringPass::processSurfaceCoordsNVE4(TexInstruction *su)
>        }
>        ind = bld.mkOp2v(OP_AND, TYPE_U32, bld.getSSA(), ind, bld.mkImm(7));
>        ind = bld.mkOp2v(OP_SHL, TYPE_U32, bld.getSSA(), ind, bld.mkImm(6));
> +      base = 0;
>     }
>
>     // calculate clamped coordinates
> @@ -2049,7 +2050,7 @@
> NVC0LoweringPass::processSurfaceCoordsNVC0(TexInstruction *su)
>     const int idx = su->tex.r;
>     const int dim = su->tex.target.getDim();
>     const int arg = dim + (su->tex.target.isArray() ||
> su->tex.target.isCube());
> -   const uint16_t base = idx * NVE4_SU_INFO__STRIDE;
> +   uint16_t base = idx * NVE4_SU_INFO__STRIDE;
>     int c;
>     Value *zero = bld.mkImm(0);
>     Value *src[3];
> @@ -2068,6 +2069,7 @@
> NVC0LoweringPass::processSurfaceCoordsNVC0(TexInstruction *su)
>        }
>        ind = bld.mkOp2v(OP_AND, TYPE_U32, bld.getSSA(), ind, bld.mkImm(7));
>        ind = bld.mkOp2v(OP_SHL, TYPE_U32, bld.getSSA(), ind, bld.mkImm(6));
> +      base = 0;
>     }
>
>     // get surface coordinates
> --
> 2.9.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160704/f3cc7f72/attachment-0001.html>


More information about the mesa-dev mailing list