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 876b4dcad5c..1dce1123006 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 @@ -4644,8 +4644,6 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, const s case MESA_SHADER_GEOMETRY: spirv_builder_emit_cap(&ctx.builder, SpvCapabilityGeometry); - if (s->info.gs.active_stream_mask) - spirv_builder_emit_cap(&ctx.builder, SpvCapabilityGeometryStreams); if (s->info.outputs_written & BITFIELD64_BIT(VARYING_SLOT_PSIZ)) spirv_builder_emit_cap(&ctx.builder, SpvCapabilityGeometryPointSize); break; diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c index fb70bf61482..4a15137267a 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -281,6 +281,7 @@ spirv_builder_emit_vertex(struct spirv_builder *b, uint32_t stream, bool multist unsigned words = 1; SpvOp op = SpvOpEmitVertex; if (multistream) { + spirv_builder_emit_cap(b, SpvCapabilityGeometryStreams); op = SpvOpEmitStreamVertex; words++; } @@ -295,6 +296,10 @@ spirv_builder_end_primitive(struct spirv_builder *b, uint32_t stream, bool multi { unsigned words = 1; SpvOp op = SpvOpEndPrimitive; + + if (multistream) + spirv_builder_emit_cap(b, SpvCapabilityGeometryStreams); + if (multistream || stream > 0) { op = SpvOpEndStreamPrimitive; words++;