summaryrefslogtreecommitdiffstats
path: root/source/slang
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang')
-rw-r--r--source/slang/hlsl.meta.slang11
1 files changed, 8 insertions, 3 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index dc87eb6fd..8ec5c2c67 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -196,16 +196,20 @@ ${{{{
// float32 and int64 atomic support. This is a Slang specific extension, it uses
// GL_EXT_shader_atomic_float on vk
- // NVAPI support on DX
- // NOTE! To use this feature on HLSL, the shader needs to include 'nvHLSLExtns.h' from the NVAPI SDK
- //
+ // NvAPI support on DX
+ // NOTE! To use this feature on HLSL, the shader needs to include 'nvHLSLExtns.h' from the NvAPI SDK
+ //
+ // https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_shader_atomic_float
+ // https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_shader_atomic_float_add.html
// Fp32
__target_intrinsic(hlsl, "($3 = NvInterlockedAddFp32($0, $1, $2))")
+ __cuda_sm_version(2.0)
__target_intrinsic(cuda, "(*$3 = atomicAdd((float*)$0._getPtrAt($1), $2))")
void InterlockedAddFp32(uint byteAddress, float valueToAdd, out float originalValue);
+
__specialized_for_target(glsl)
void InterlockedAddFp32(uint byteAddress, float valueToAdd, out float originalValue)
{
@@ -216,6 +220,7 @@ ${{{{
// Without returning original value
__target_intrinsic(hlsl, "(NvInterlockedAddFp32($0, $1, $2))")
+ __cuda_sm_version(2.0)
__target_intrinsic(cuda, "atomicAdd((float*)$0._getPtrAt($1), $2)")
void InterlockedAddFp32(uint byteAddress, float valueToAdd);