Mesa (master): zink: add some spirv builder functions for barriers
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sun Nov 8 14:38:01 UTC 2020
Module: Mesa
Branch: master
Commit: fb1793bf9c89a4b0c8b475f3fa529ed70a3e6866
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fb1793bf9c89a4b0c8b475f3fa529ed70a3e6866
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri Jul 17 09:51:03 2020 -0400
zink: add some spirv builder functions for barriers
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7486>
---
src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 19 +++++++++++++++++++
src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h | 6 ++++++
2 files changed, 25 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 92430291ba7..df6d02168bd 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c
@@ -1167,6 +1167,25 @@ spirv_builder_emit_var(struct spirv_builder *b, SpvId type,
return ret;
}
+void
+spirv_builder_emit_memory_barrier(struct spirv_builder *b, SpvScope scope, SpvMemorySemanticsMask semantics)
+{
+ spirv_buffer_prepare(&b->instructions, b->mem_ctx, 3);
+ spirv_buffer_emit_word(&b->instructions, SpvOpMemoryBarrier | (3 << 16));
+ spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, scope));
+ spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, semantics));
+}
+
+void
+spirv_builder_emit_control_barrier(struct spirv_builder *b, SpvScope scope, SpvScope mem_scope, SpvMemorySemanticsMask semantics)
+{
+ spirv_buffer_prepare(&b->instructions, b->mem_ctx, 4);
+ spirv_buffer_emit_word(&b->instructions, SpvOpControlBarrier | (4 << 16));
+ spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, scope));
+ spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, mem_scope));
+ spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, semantics));
+}
+
SpvId
spirv_builder_import(struct spirv_builder *b, const char *name)
{
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 a01d4fab8c4..cb868034782 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h
+++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h
@@ -351,6 +351,12 @@ SpvId
spirv_builder_emit_var(struct spirv_builder *b, SpvId type,
SpvStorageClass storage_class);
+void
+spirv_builder_emit_memory_barrier(struct spirv_builder *b, SpvScope scope, SpvMemorySemanticsMask semantics);
+
+void
+spirv_builder_emit_control_barrier(struct spirv_builder *b, SpvScope scope, SpvScope mem_scope, SpvMemorySemanticsMask semantics);
+
SpvId
spirv_builder_import(struct spirv_builder *b, const char *name);
More information about the mesa-commit
mailing list