From 8a2ddcb4a940196a1698fe15a96963875bab47f0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 3 Aug 2020 11:48:15 -0400 Subject: [PATCH] zink: set multiviewport cap in ntv when gl_ViewportIndex is a written output this cap varies based on the shader stage, but it must be enabled any time this output is written Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 97ea028c939..00dea0399e6 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -2263,6 +2263,13 @@ nir_to_spirv(struct nir_shader *s, const struct zink_so_info *so_info) unreachable("invalid stage"); } + if (s->info.outputs_written & BITFIELD64_BIT(VARYING_SLOT_VIEWPORT)) { + if (s->info.stage < MESA_SHADER_GEOMETRY) + spirv_builder_emit_cap(&ctx.builder, SpvCapabilityShaderViewportIndex); + else + spirv_builder_emit_cap(&ctx.builder, SpvCapabilityMultiViewport); + } + // TODO: only enable when needed if (s->info.stage == MESA_SHADER_FRAGMENT) { spirv_builder_emit_cap(&ctx.builder, SpvCapabilitySampled1D);