nir/lower_non_uniform: Better handle non-derefs

In particular, if we have an index or bindless handle we were passing
the original handle which, technically, is uniform within the context of
the if.  However, we can save the back-end compiler some effort if we
pass it the result of the read_first_invocation().

(Rebased by Kenneth Graunke and Rhys Perry.)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7592>
This commit is contained in:
Jason Ekstrand 2020-11-12 17:32:41 -06:00 committed by Marge Bot
parent 0bf8d156a9
commit c47fe54bc7

View file

@ -74,6 +74,8 @@ nu_handle_rewrite(nir_builder *b, struct nu_handle *h)
nir_deref_instr *deref =
nir_build_deref_array(b, h->parent_deref, h->first);
*(h->src) = nir_src_for_ssa(&deref->dest.ssa);
} else {
*(h->src) = nir_src_for_ssa(h->first);
}
}