summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-10-27 09:40:17 -0700
committerGitHub <noreply@github.com>2024-10-27 09:40:17 -0700
commit14f4b45d4b977805c5dbe472e327bdd3e856fb94 (patch)
tree8c913b1465fd1cedb3e3a1ddca8bdccd3f0ba364 /source/slang/hlsl.meta.slang
parenta508b264eda4bc3c99ba1f44eab1dec6e5ce06c0 (diff)
Add `InterlockedAddF64` intrinsic. (#5412)
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang15
1 files changed, 15 insertions, 0 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 7c18f4717..39957f7ce 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -4425,6 +4425,21 @@ ${{{{
}
}
+ [require(cuda, cuda_sm_6_0)]
+ [require(spirv, spvAtomicFloat64AddEXT)]
+ void InterlockedAddF64(uint byteAddress, double valueToAdd, out double originalValue)
+ {
+ __target_switch
+ {
+ case cuda: __intrinsic_asm "(*$3 = atomicAdd($0._getPtrAt<double>($1), $2))";
+ default:
+ {
+ let buf = __getEquivalentStructuredBuffer<double>(this);
+ originalValue = __atomic_add(buf[byteAddress / 8], valueToAdd);
+ return;
+ }
+ }
+ }
// FP16x2
/// @internal