anv: Decouple primitive replication check from the fragment shader
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>
This commit is contained in:

committed by
Marge Bot

parent
08d3c0e8e1
commit
4bdbc4c93f
@@ -312,19 +312,14 @@ anv_check_for_primitive_replication(nir_shader **shaders,
|
||||
* 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]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user