From 2fa1cf99b981294d25a5adb1b1de17b4332b7ed8 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 4 Aug 2020 14:27:36 -0400 Subject: [PATCH] zink: add util function for emitting ntv atomic ops these all need specific memory params, but otherwise they're the same as normal ops, so we can just make a helper function here to add in the memory params Reviewed-by: Erik Faye-Lund Part-of: --- .../drivers/zink/nir_to_spirv/nir_to_spirv.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index ba44de46503..beb03efbe3d 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -1054,6 +1054,25 @@ emit_so_outputs(struct ntv_context *ctx, } } +static SpvId +emit_atomic(struct ntv_context *ctx, SpvId op, SpvId type, SpvId src0, SpvId src1) +{ + if (!type) //AtomicStore + return spirv_builder_emit_triop(&ctx->builder, op, src0, + emit_uint_const(ctx, 32, SpvScopeWorkgroup), + emit_uint_const(ctx, 32, SpvMemorySemanticsUniformMemoryMask | SpvMemorySemanticsReleaseMask), + src1); + if (src1) + return spirv_builder_emit_quadop(&ctx->builder, op, type, src0, + emit_uint_const(ctx, 32, SpvScopeWorkgroup), + emit_uint_const(ctx, 32, SpvMemorySemanticsUniformMemoryMask | SpvMemorySemanticsReleaseMask), + src1); + //AtomicLoad + return spirv_builder_emit_triop(&ctx->builder, op, type, src0, + emit_uint_const(ctx, 32, SpvScopeWorkgroup), + emit_uint_const(ctx, 32, SpvMemorySemanticsUniformMemoryMask | SpvMemorySemanticsAcquireMask)); +} + static SpvId emit_binop(struct ntv_context *ctx, SpvOp op, SpvId type, SpvId src0, SpvId src1)