summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2020-11-05 12:59:39 -0500
committerMarge Bot <eric+marge@anholt.net>2020-11-08 14:34:11 +0000
commit95e15f774dce2939d19f76a115bcd2d960724fc5 (patch)
treeb1ab83f84c1955d912014fd642610b4b0ed610b8
parent758e932ad27921c77ec1b163d45f3d07d8d336e1 (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.c16
-rw-r--r--src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h4
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);