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 315be8b0c8e..2dba96dc8bc 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -159,6 +159,18 @@ spirv_builder_emit_exec_mode_literal(struct spirv_builder *b, SpvId entry_point, spirv_buffer_emit_word(&b->exec_modes, param); } +void +spirv_builder_emit_exec_mode_literal3(struct spirv_builder *b, SpvId entry_point, + SpvExecutionMode exec_mode, uint32_t param[3]) +{ + spirv_buffer_prepare(&b->exec_modes, b->mem_ctx, 6); + spirv_buffer_emit_word(&b->exec_modes, SpvOpExecutionMode | (6 << 16)); + spirv_buffer_emit_word(&b->exec_modes, entry_point); + spirv_buffer_emit_word(&b->exec_modes, exec_mode); + for (unsigned i = 0; i < 3; i++) + spirv_buffer_emit_word(&b->exec_modes, param[i]); +} + void spirv_builder_emit_exec_mode(struct spirv_builder *b, SpvId entry_point, SpvExecutionMode exec_mode) 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 dc76db37f7a..8bc89df0f7e 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h @@ -144,6 +144,9 @@ void spirv_builder_emit_exec_mode_literal(struct spirv_builder *b, SpvId entry_point, SpvExecutionMode exec_mode, uint32_t param); void +spirv_builder_emit_exec_mode_literal3(struct spirv_builder *b, SpvId entry_point, + SpvExecutionMode exec_mode, uint32_t param[3]); +void spirv_builder_emit_exec_mode(struct spirv_builder *b, SpvId entry_point, SpvExecutionMode exec_mode);