anv/pipeline: use less instructions for multiview
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Wed, 14 Mar 2018 23:12:44 +0000 (16:12 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 21 Mar 2018 21:49:50 +0000 (14:49 -0700)
The view_index is encoded in the remainder of dividing instance id by
the number of views in the view mask (n). In the general case (handled
by the else clause), there is a need to map from 0..n-1 into the
number of the view being masked. For that a map is encoded.

In the case only the first n bits in the mask are set, the mapping is
trivial, 0..n-1 already represent what view is being referred to.

That case was in the original patch that added
anv_nir_lower_multiview.c but disabled.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_nir_lower_multiview.c

index 88e6f9af877ad73063aad6c9c74206cbb7c592d9..d2aefdee62026a7245665b85e5b28e5fb9d95075 100644 (file)
@@ -86,7 +86,7 @@ build_view_index(struct lower_multiview_state *state)
             nir_umod(b, nir_load_instance_id(b),
                         nir_imm_int(b, _mesa_bitcount(state->view_mask)));
 
-         if (0 && util_is_power_of_two(state->view_mask + 1)) {
+         if (util_is_power_of_two(state->view_mask + 1)) {
             /* If we have a full view mask, then compacted is what we want */
             state->view_index = compacted;
          } else {