diff options
| author | venkataram-nv <vedavamadath@nvidia.com> | 2024-07-10 23:34:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-10 23:34:44 -0700 |
| commit | 055d4acd8c4d37a45b27e1333af96c203bec85e8 (patch) | |
| tree | 65b432442e9546c068b82a589b871d80997d22c6 | |
| parent | 4ae755f0a1f9828284f1bb8de15719a7b94938d6 (diff) | |
Implement 64-bit version of clockARB (#4571)
* Implement 64-bit version of clockARB
* Fix capability versions
* Corrections to capabilities
---------
Co-authored-by: Yong He <yonghe@outlook.com>
| -rw-r--r-- | source/slang/hlsl.meta.slang | 20 | ||||
| -rw-r--r-- | source/slang/slang-capabilities.capdef | 4 | ||||
| -rw-r--r-- | tests/glsl-intrinsic/clock-read.slang | 23 |
3 files changed, 37 insertions, 10 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 9fcd002a8..2639c1e88 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -20156,7 +20156,6 @@ struct ConstBufferPointer __glsl_version(450) __glsl_extension(GL_ARB_shader_clock) -__target_intrinsic(glsl, clock2x32ARB) [require(glsl_spirv, GL_ARB_shader_clock)] uint2 clock2x32ARB() { @@ -20172,3 +20171,22 @@ uint2 clock2x32ARB() }; } } + +__glsl_version(450) +__glsl_extension(GL_ARB_shader_clock) +__glsl_extension(GL_ARB_gpu_shader_int64) +[require(glsl_spirv, GL_ARB_shader_clock64)] +uint64_t clockARB() +{ + __target_switch + { + case glsl: __intrinsic_asm "clockARB"; + case spirv: + const uint32_t scopeId_subgroup = 3; + return spirv_asm { + OpCapability ShaderClockKHR; + OpExtension "SPV_KHR_shader_clock"; + result:$$uint64_t = OpReadClockKHR $scopeId_subgroup; + }; + } +} diff --git a/source/slang/slang-capabilities.capdef b/source/slang/slang-capabilities.capdef index 38fd708a5..a27146bf9 100644 --- a/source/slang/slang-capabilities.capdef +++ b/source/slang/slang-capabilities.capdef @@ -317,6 +317,8 @@ def _GL_ARB_sparse_texture_clamp : _GL_ARB_sparse_texture2; def _GL_ARB_texture_gather : _GLSL_130; def _GL_ARB_texture_query_levels : _GLSL_130; def _GL_ARB_shader_clock : _GLSL_450; +def _GL_ARB_gpu_shader_int64 : _GLSL_400; +def _GL_ARB_shader_clock64 : _GL_ARB_shader_clock + _GL_ARB_gpu_shader_int64; def _GL_KHR_memory_scope_semantics : _GLSL_420; def _GL_KHR_shader_subgroup_arithmetic : _GLSL_140; @@ -373,6 +375,8 @@ alias GL_ARB_sparse_texture_clamp = _GL_ARB_sparse_texture_clamp | spvSparseResi alias GL_ARB_texture_gather = _GL_ARB_texture_gather | spvImageGatherExtended | metal; alias GL_ARB_texture_query_levels = _GL_ARB_texture_query_levels | spvImageQuery | metal; alias GL_ARB_shader_clock = _GL_ARB_shader_clock | spvShaderClockKHR; +alias GL_ARB_shader_clock64 = _GL_ARB_shader_clock64 | spvShaderClockKHR; +alias GL_ARB_gpu_shader_int64 = _GL_ARB_gpu_shader_int64; alias GL_KHR_memory_scope_semantics = _GL_KHR_memory_scope_semantics | _spirv_1_0; alias GL_KHR_shader_subgroup_arithmetic = _GL_KHR_shader_subgroup_arithmetic | spvGroupNonUniformArithmetic; diff --git a/tests/glsl-intrinsic/clock-read.slang b/tests/glsl-intrinsic/clock-read.slang index 4bac5a07d..9f13012d6 100644 --- a/tests/glsl-intrinsic/clock-read.slang +++ b/tests/glsl-intrinsic/clock-read.slang @@ -1,19 +1,24 @@ -//TEST:SIMPLE(filecheck=CHECK1): -target glsl -//TEST:SIMPLE(filecheck=CHECK2): -target spirv -//TEST:SIMPLE(filecheck=CHECK3): -target spirv -emit-spirv-via-glsl +//TEST:SIMPLE(filecheck=GLSL): -target glsl +//TEST:SIMPLE(filecheck=SPIRV): -target spirv +//TEST:SIMPLE(filecheck=SPIRV): -target spirv -emit-spirv-via-glsl +// GLSL: GL_ARB_shader_clock : require +// GLSL: GL_ARB_gpu_shader_int64 : require -// CHECK1: GL_ARB_shader_clock : require -// CHECK2: OpCapability ShaderClockKHR -// CHECK2: OpExtension "SPV_KHR_shader_clock" +//SPIRV: OpCapability ShaderClockKHR +//SPIRV: OpExtension "SPV_KHR_shader_clock" RWStructuredBuffer<float> output; [shader("compute")] [numthreads(1, 1, 1)] void computeMain(uint3 id: SV_DispatchThreadID) { + //GLSL: clock2x32ARB + //SPIRV: OpReadClockKHR %v2uint %uint_3 output[0] = clock2x32ARB().x; - // CHECK1: clock2x32ARB - // CHECK2: OpReadClockKHR %v2uint %uint_3 - // CHECK3: OpReadClockKHR %v2uint %uint_3 + + //GLSL: clockARB + //SPIRV: OpReadClockKHR %ulong %uint_3 + uint64_t c = clockARB(); + output[1] = c; } |
