diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2020-11-05 12:59:39 -0500 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-11-08 14:34:11 +0000 |
commit | 95e15f774dce2939d19f76a115bcd2d960724fc5 (patch) | |
tree | b1ab83f84c1955d912014fd642610b4b0ed610b8 | |
parent | 758e932ad27921c77ec1b163d45f3d07d8d336e1 (diff) |
zink: add a quadop function in spirv_builder
this takes 4 operands like the unop/binop/triop functions we already have
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7486>
-rw-r--r-- | src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 16 | ||||
-rw-r--r-- | src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h | 4 |
2 files changed, 20 insertions, 0 deletions
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 f82ea821e2a..92430291ba7 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -445,6 +445,22 @@ spirv_builder_emit_triop(struct spirv_builder *b, SpvOp op, SpvId result_type, } SpvId +spirv_builder_emit_quadop(struct spirv_builder *b, SpvOp op, SpvId result_type, + SpvId operand0, SpvId operand1, SpvId operand2, SpvId operand3) +{ + SpvId result = spirv_builder_new_id(b); + spirv_buffer_prepare(&b->instructions, b->mem_ctx, 7); + spirv_buffer_emit_word(&b->instructions, op | (7 << 16)); + spirv_buffer_emit_word(&b->instructions, result_type); + spirv_buffer_emit_word(&b->instructions, result); + spirv_buffer_emit_word(&b->instructions, operand0); + spirv_buffer_emit_word(&b->instructions, operand1); + spirv_buffer_emit_word(&b->instructions, operand2); + spirv_buffer_emit_word(&b->instructions, operand3); + return result; +} + +SpvId spirv_builder_emit_composite_extract(struct spirv_builder *b, SpvId result_type, SpvId composite, const uint32_t indexes[], size_t num_indexes) 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 5ed0d461eab..a01d4fab8c4 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h @@ -185,6 +185,10 @@ spirv_builder_emit_triop(struct spirv_builder *b, SpvOp op, SpvId result_type, SpvId operand0, SpvId operand1, SpvId operand2); SpvId +spirv_builder_emit_quadop(struct spirv_builder *b, SpvOp op, SpvId result_type, + SpvId operand0, SpvId operand1, SpvId operand2, SpvId operand3); + +SpvId spirv_builder_emit_composite_extract(struct spirv_builder *b, SpvId result_type, SpvId composite, const uint32_t indexes[], size_t num_indexes); |