diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2023-08-29 15:31:31 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-29 15:31:31 +0800 |
| commit | b8fcb586f6a931ab674b0da7f375f38aff9608d4 (patch) | |
| tree | 64eeaf53908d1d04c51dc6212b28e99c546092b5 /source | |
| parent | 1b9c3eacc58b3901a5f1156e27e5ead8d54438d3 (diff) | |
clock intrinsics for spirv (#3159)
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 2502ae75f..1255e43e0 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -7757,26 +7757,46 @@ void debugBreak(); // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_realtime_clock.txt [__requiresNVAPI] -__target_intrinsic(hlsl, "NvGetSpecial( NV_SPECIALOP_GLOBAL_TIMER_LO)") __glsl_extension(GL_EXT_shader_realtime_clock) -__target_intrinsic(glsl, "clockRealtime2x32EXT().x") -__target_intrinsic(cuda, "clock") -uint getRealtimeClockLow(); +uint getRealtimeClockLow() +{ + __target_switch + { + case hlsl: + __intrinsic_asm "NvGetSpecial( NV_SPECIALOP_GLOBAL_TIMER_LO)"; + case glsl: + return getRealtimeClock().x; + case cuda: + __intrinsic_asm "clock"; + case spirv: + return getRealtimeClock().x; + } +} __target_intrinsic(cuda, "clock64") int64_t __cudaGetRealtimeClock(); [__requiresNVAPI] -__target_intrinsic(hlsl, "uint2(NvGetSpecial( NV_SPECIALOP_GLOBAL_TIMER_LO), NvGetSpecial( NV_SPECIALOP_GLOBAL_TIMER_HI)) ") __glsl_extension(GL_EXT_shader_realtime_clock) -__target_intrinsic(glsl, "clockRealtime2x32EXT()") -uint2 getRealtimeClock(); - -__specialized_for_target(cuda) uint2 getRealtimeClock() { - int64_t ticks = __cudaGetRealtimeClock(); - return uint2(uint(ticks), uint(uint64_t(ticks) >> 32)); + __target_switch + { + case hlsl: + __intrinsic_asm "uint2(NvGetSpecial(NV_SPECIALOP_GLOBAL_TIMER_LO), NvGetSpecial( NV_SPECIALOP_GLOBAL_TIMER_HI))"; + case glsl: + __intrinsic_asm "clockRealtime2x32EXT()"; + case cuda: + int64_t ticks = __cudaGetRealtimeClock(); + return uint2(uint(ticks), uint(uint64_t(ticks) >> 32)); + case spirv: + return spirv_asm + { + OpCapability ShaderClockKHR; + OpExtension "SPV_KHR_shader_clock"; + result : $$uint2 = OpReadClockKHR Device + }; + } } // |
