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 | |
| parent | 1b9c3eacc58b3901a5f1156e27e5ead8d54438d3 (diff) | |
clock intrinsics for spirv (#3159)
| -rw-r--r-- | source/slang/hlsl.meta.slang | 42 | ||||
| -rw-r--r-- | tests/expected-failure.txt | 1 |
2 files changed, 31 insertions, 12 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 + }; + } } // diff --git a/tests/expected-failure.txt b/tests/expected-failure.txt index 83fd576d6..bd26bf1f3 100644 --- a/tests/expected-failure.txt +++ b/tests/expected-failure.txt @@ -40,5 +40,4 @@ tests/slang-extension/atomic-int64-byte-address-buffer.slang.4 (vk) tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang.4 (vk) tests/slang-extension/cas-int64-byte-address-buffer.slang.4 (vk) tests/slang-extension/exchange-int64-byte-address-buffer.slang.4 (vk) -tests/slang-extension/realtime-clock.slang.2 (vk) tests/type/texture-sampler/texture-sampler-2d.slang (vk) |
