On 07/05/2016 12:57 AM, Ilia Mirkin wrote:
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.

Sure, this was my plan too.



On Jul 4, 2016 6:08 PM, "Samuel Pitoiset" <samuel.pitoi...@gmail.com
<mailto:samuel.pitoi...@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.pitoi...@gmail.com
    <mailto:samuel.pitoi...@gmail.com>>
    Cc: "11.2 12.0" <mesa-sta...@lists.freedesktop.org
    <mailto:mesa-sta...@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@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org>
    https://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to