From db1c9b36b441141eca9080a20a7c8a3e37dc84ea Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 7 Aug 2020 14:57:39 -0400 Subject: [PATCH] zink: add spirv builder function for OpAtomicStore Reviewed-by: Adam Jackson Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 12 ++++++++++++ src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h | 4 ++++ 2 files changed, 16 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 55e53b7..315be8b 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -407,6 +407,18 @@ spirv_builder_emit_store(struct spirv_builder *b, SpvId pointer, SpvId object) spirv_buffer_emit_word(&b->instructions, object); } +void +spirv_builder_emit_atomic_store(struct spirv_builder *b, SpvId pointer, SpvScope scope, + SpvMemorySemanticsMask semantics, SpvId object) +{ + spirv_buffer_prepare(&b->instructions, b->mem_ctx, 5); + spirv_buffer_emit_word(&b->instructions, SpvOpAtomicStore | (5 << 16)); + spirv_buffer_emit_word(&b->instructions, pointer); + 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)); + spirv_buffer_emit_word(&b->instructions, object); +} + SpvId spirv_builder_emit_access_chain(struct spirv_builder *b, SpvId result_type, SpvId base, const SpvId 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 54dab44..dc76db3 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h @@ -170,6 +170,10 @@ spirv_builder_emit_load(struct spirv_builder *b, SpvId result_type, SpvId pointer); void +spirv_builder_emit_atomic_store(struct spirv_builder *b, SpvId pointer, SpvScope scope, + SpvMemorySemanticsMask semantics, SpvId object); + +void spirv_builder_emit_store(struct spirv_builder *b, SpvId pointer, SpvId object); SpvId -- 2.7.4