diff --git a/src/kosmickrisp/bridge/mtl_device.h b/src/kosmickrisp/bridge/mtl_device.h index 1b8e127c11a..c180c9446e3 100644 --- a/src/kosmickrisp/bridge/mtl_device.h +++ b/src/kosmickrisp/bridge/mtl_device.h @@ -29,6 +29,9 @@ uint32_t mtl_device_get_peer_index(mtl_device *dev); uint64_t mtl_device_get_registry_id(mtl_device *dev); struct mtl_size mtl_device_max_threads_per_threadgroup(mtl_device *dev); +/* Timestamp query */ +uint64_t mtl_device_get_gpu_timestamp(mtl_device *dev); + /* Resource queries */ void mtl_heap_buffer_size_and_align_with_length(mtl_device *device, uint64_t *size_B, @@ -37,4 +40,4 @@ void mtl_heap_texture_size_and_align_with_descriptor(mtl_device *device, struct kk_image_layout *layout); -#endif /* MTL_DEVICE_H */ \ No newline at end of file +#endif /* MTL_DEVICE_H */ diff --git a/src/kosmickrisp/bridge/mtl_device.m b/src/kosmickrisp/bridge/mtl_device.m index 93b811a41ea..33aec0987da 100644 --- a/src/kosmickrisp/bridge/mtl_device.m +++ b/src/kosmickrisp/bridge/mtl_device.m @@ -129,6 +129,20 @@ mtl_device_max_threads_per_threadgroup(mtl_device *dev) } } +/* Timestamp query */ +uint64_t +mtl_device_get_gpu_timestamp(mtl_device *dev) +{ + @autoreleasepool { + id device = (id)dev; + MTLTimestamp cpu_ts, gpu_ts; + + [device sampleTimestamps:&cpu_ts gpuTimestamp:&gpu_ts]; + + return (uint64_t)gpu_ts; + } +} + /* Resource queries */ /* TODO_KOSMICKRISP Return a struct */ void diff --git a/src/kosmickrisp/bridge/stubs/mtl_device.c b/src/kosmickrisp/bridge/stubs/mtl_device.c index dfda0e905d9..260da172de2 100644 --- a/src/kosmickrisp/bridge/stubs/mtl_device.c +++ b/src/kosmickrisp/bridge/stubs/mtl_device.c @@ -59,6 +59,13 @@ mtl_device_max_threads_per_threadgroup(mtl_device *dev) return (struct mtl_size){}; } +/* Timestamp query */ +uint64_t +mtl_device_get_gpu_timestamp(mtl_device *dev) +{ + return 0u; +} + /* Resource queries */ void mtl_heap_buffer_size_and_align_with_length(mtl_device *device, uint64_t *size_B,