zink: add some spirv builder functions for barriers

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7486>
This commit is contained in:
Mike Blumenkrantz 2020-07-17 09:51:03 -04:00 committed by Marge Bot
parent 95e15f774d
commit fb1793bf9c
2 changed files with 25 additions and 0 deletions

View File

@ -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)
{

View File

@ -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);