summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvenkataram-nv <vedavamadath@nvidia.com>2024-07-10 23:34:44 -0700
committerGitHub <noreply@github.com>2024-07-10 23:34:44 -0700
commit055d4acd8c4d37a45b27e1333af96c203bec85e8 (patch)
tree65b432442e9546c068b82a589b871d80997d22c6
parent4ae755f0a1f9828284f1bb8de15719a7b94938d6 (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.slang20
-rw-r--r--source/slang/slang-capabilities.capdef4
-rw-r--r--tests/glsl-intrinsic/clock-read.slang23
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;
}