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 88eb233e79e..9aa57c44569 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -758,6 +758,13 @@ spirv_builder_emit_kill(struct spirv_builder *b) spirv_buffer_emit_word(&b->instructions, SpvOpKill | (1 << 16)); } +void +spirv_builder_emit_demote(struct spirv_builder *b) +{ + spirv_buffer_prepare(&b->instructions, b->mem_ctx, 1); + spirv_buffer_emit_word(&b->instructions, SpvOpDemoteToHelperInvocation | (1 << 16)); +} + SpvId spirv_builder_emit_vote(struct spirv_builder *b, SpvOp op, SpvId src) { diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h index 2d5887e19a4..f4515deea5c 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h @@ -268,6 +268,9 @@ spirv_builder_set_phi_operand(struct spirv_builder *b, size_t position, void spirv_builder_emit_kill(struct spirv_builder *b); +void +spirv_builder_emit_demote(struct spirv_builder *b); + SpvId spirv_builder_emit_vote(struct spirv_builder *b, SpvOp op, SpvId src);