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