freedreno/ir3: Add a NIR pass to select tex instructions eligible for pre-fetch
authorEduardo Lima Mitev <elima@igalia.com>
Mon, 5 Aug 2019 06:09:23 +0000 (08:09 +0200)
committerRob Clark <robdclark@gmail.com>
Fri, 18 Oct 2019 21:11:54 +0000 (21:11 +0000)
commit2a0d45ae6cf09d60c048d7854e3d082bf15e374f
tree53352a462f92cb5bc478c1124e047407da8a7edb
parent7d4213fe88a5398fa1624615780decf113d44359
freedreno/ir3: Add a NIR pass to select tex instructions eligible for pre-fetch

The pass should run once at the end of shader compilation, for a4xx
onwards. It iterates texture sampling instructions and mark those
eligibile for pre-dispatch by changing the tex op from 'tex' to
'tex_prefetch'. An instruction is eligibile if:

* The coordinate is a vector where all its components come from a
  shader input.
* The order of the components match exactly that of the input (no
  swizzles).
* The instruction is in the 'main' function, and in the outer
  most-block.

The first two restrictions were arrived to empirically, so more
testing could tighten or loosen it.

The 3rd restriction is there to allow moving the instructions
eligible for pre-dispatch to the beginning of the shader, so
that we don't block the registers holding the result for too
long.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
src/freedreno/ir3/ir3_nir.h
src/freedreno/ir3/ir3_nir_lower_tex_prefetch.c [new file with mode: 0644]
src/freedreno/ir3/meson.build