From a5ff286992e90a055680e2eaa3eca1a861804d0d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 12 Aug 2020 14:24:57 -0400 Subject: [PATCH] zink: add spirv_builder function for emitting a 3word literal exec mode used by compute Reviewed-by: Bas Nieuwenhuizen Part-of: --- .../drivers/zink/nir_to_spirv/spirv_builder.c | 12 ++++++++++++ .../drivers/zink/nir_to_spirv/spirv_builder.h | 3 +++ 2 files changed, 15 insertions(+) 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);