summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-21 21:10:48 -0700
committerGitHub <noreply@github.com>2024-03-21 21:10:48 -0700
commit00474731a90add7c0aaffc3a76d713ae2cecdbbe (patch)
treea99e6cd38901de6394c973992fc5ef6b600e3f2b /source/slang/hlsl.meta.slang
parent7a8ef896196ad0d7095412d8558dd9a2542874c8 (diff)
Partially implement vk_buffer_ref proposal. (#3814)
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang35
1 files changed, 35 insertions, 0 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index b660437d9..d2dfe6267 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -13912,6 +13912,41 @@ extension __TextureImpl<float, Shape, 0, 0, 0, $(kStdlibResourceAccessReadWrite)
// Buffer Pointer
+namespace vk
+{
+ // Partial implementation of the vk::buffer_ref proposal:
+ // https://github.com/microsoft/hlsl-specs/blob/main/proposals/0010-vk-buffer-ref.md
+ struct BufferPointer<T, let Alignment : int = 0>
+ {
+ T *_ptr;
+ [ForceInline] __init(T *ptr) { _ptr = ptr; }
+ [ForceInline] __init(uint64_t val) { _ptr = (T *)val; }
+ [ForceInline] Ref<T> Get() { return *_ptr; }
+ [ForceInline] T *getPtr() { return _ptr;}
+ }
+ [ForceInline]
+ BufferPointer<U, alignment> static_pointer_cast<U, let alignment : int = 0, T, let a : int>(BufferPointer<T, a> src)
+ {
+ return BufferPointer<U, alignment>((U*)(src.getPtr()));
+ }
+ [ForceInline]
+ BufferPointer<U, alignment> reinterpret_pointer_cast<U, let alignment : int = 0, T, let a : int>(BufferPointer<T, a> src)
+ {
+ return BufferPointer<U, alignment>((U *)(src.getPtr()));
+ }
+}
+
+attribute_syntax[vk_aliased_pointer] : VkAliasedPointerAttribute;
+attribute_syntax[vk_restrict_pointer] : VkRestrictPointerAttribute;
+
+extension uint64_t
+{
+ __init<T, let alignment : int>(vk::BufferPointer<T, alignment> ptr)
+ {
+ this = (uint64_t)ptr._ptr;
+ }
+}
+
__generic<T, let Alignment : int = 16>
__intrinsic_type($(kIROp_HLSLConstBufferPointerType))
__glsl_extension(GL_EXT_buffer_reference)