[Mesa-dev] [PATCH v2] nvc0/ir: don't check the format for surface stores on Kepler

Ilia Mirkin imirkin at alum.mit.edu
Sat May 21 14:37:52 UTC 2016


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Sat, May 21, 2016 at 10:28 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Initially to make sure the format doesn't mismatch and won't produce
> out-of-bounds access, we checked that both formats have exactly the same
> number of bytes, but this should not be checked for type stores.
>
> This fixes serious rendering issues in the UE4 demos (tested with
> realistic and reflections).
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  .../drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp     | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 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 5c05f6c..6940d63 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> @@ -1834,18 +1834,17 @@ NVC0LoweringPass::processSurfaceCoordsNVE4(TexInstruction *su)
>                  TYPE_U32, bld.mkImm(0),
>                  loadSuInfo32(ind, base + NVE4_SU_INFO_ADDR));
>
> -   if (su->tex.format) {
> +   if (su->op != OP_SUSTP && su->tex.format) {
>        const TexInstruction::ImgFormatDesc *format = su->tex.format;
>        int blockwidth = format->bits[0] + format->bits[1] +
>                         format->bits[2] + format->bits[3];
>
> -      if (blockwidth >= 8) {
> -         // make sure that the format doesn't mismatch
> -         bld.mkCmp(OP_SET_OR, CC_NE, TYPE_U32, pred1->getDef(0),
> -                   TYPE_U32, bld.loadImm(NULL, blockwidth / 8),
> -                   loadSuInfo32(ind, base + NVE4_SU_INFO_BSIZE),
> -                   pred1->getDef(0));
> -      }
> +      // make sure that the format doesn't mismatch
> +      assert(format->components != 0);
> +      bld.mkCmp(OP_SET_OR, CC_NE, TYPE_U32, pred1->getDef(0),
> +                TYPE_U32, bld.loadImm(NULL, blockwidth / 8),
> +                loadSuInfo32(ind, base + NVE4_SU_INFO_BSIZE),
> +                pred1->getDef(0));
>     }
>     su->setPredicate(CC_NOT_P, pred1->getDef(0));
>
> --
> 2.8.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list