summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-12-13 12:24:27 -0800
committerGitHub <noreply@github.com>2023-12-13 12:24:27 -0800
commit1406aa2bc9e398e5e5565ba9c6adbb780c29fee1 (patch)
treeab284f85a72d77db7462d3f38a272a3966ed7c83 /source/slang/hlsl.meta.slang
parent6cbe215e58eeb8edc53d71e8f315e2fb55c0eeee (diff)
Add spirv intrinsics for `ConstBufferPointer`. (#3407)
Fixes #3305. Fixes #3404. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang34
1 files changed, 32 insertions, 2 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 477e0cfaf..39ed13488 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -12546,7 +12546,37 @@ struct ConstBufferPointer
{
__glsl_version(450)
__glsl_extension(GL_EXT_buffer_reference)
- __target_intrinsic(glsl, "$0._data")
[__NoSideEffect]
- T get();
+ T get()
+ {
+ __target_switch
+ {
+ case glsl:
+ __intrinsic_asm "$0._data";
+ case spirv:
+ return spirv_asm {
+ result:$$T = OpLoad $this Aligned $Alignment;
+ };
+ }
+ }
+
+ __glsl_version(450)
+ __glsl_extension(GL_EXT_shader_explicit_arithmetic_types_int64)
+ __glsl_extension(GL_EXT_buffer_reference)
+ [__NoSideEffect]
+ [ForceInline]
+ bool isValid()
+ {
+ __target_switch
+ {
+ case glsl:
+ __intrinsic_asm "(uint64_t($0) != 0)";
+ case spirv:
+ uint64_t zero = 0ULL;
+ return spirv_asm {
+ %ptrval:$$uint64_t = OpConvertPtrToU $this;
+ result:$$bool = OpINotEqual %ptrval $zero;
+ };
+ }
+ }
}