Now that we're using nir_intrinsic_load_layer_id for ViewIndex, we can
use primitive replication even when the FS uses ViewIndex. Also, only
check that active_stages doesn't contain anything other than VS and FS,
not that it's exactly VS | FS. This both decouples things more and
allows primitive rplication in the depth-only case where we have no
fragment shader at all.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17602>
* later than Vertex. In that case only the last stage can refer to
* gl_ViewIndex.
*/
- if (pipeline->active_stages != (VK_SHADER_STAGE_VERTEX_BIT |
- VK_SHADER_STAGE_FRAGMENT_BIT)) {
+ if (pipeline->active_stages & ~(VK_SHADER_STAGE_VERTEX_BIT |
+ VK_SHADER_STAGE_FRAGMENT_BIT))
return false;
- }
uint32_t view_mask = pipeline->view_mask;
int view_count = util_bitcount(view_mask);
if (view_count == 1 || view_count > primitive_replication_max_views)
return false;
- /* We can't access the view index in the fragment shader. */
- if (nir_shader_uses_view_index(shaders[MESA_SHADER_FRAGMENT]))
- return false;
-
return nir_can_lower_multiview(shaders[MESA_SHADER_VERTEX]);
}