summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-08-29 15:31:31 +0800
committerGitHub <noreply@github.com>2023-08-29 15:31:31 +0800
commitb8fcb586f6a931ab674b0da7f375f38aff9608d4 (patch)
tree64eeaf53908d1d04c51dc6212b28e99c546092b5
parent1b9c3eacc58b3901a5f1156e27e5ead8d54438d3 (diff)
clock intrinsics for spirv (#3159)
-rw-r--r--source/slang/hlsl.meta.slang42
-rw-r--r--tests/expected-failure.txt1
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)