diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-21 21:10:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-21 21:10:48 -0700 |
| commit | 00474731a90add7c0aaffc3a76d713ae2cecdbbe (patch) | |
| tree | a99e6cd38901de6394c973992fc5ef6b600e3f2b /source/slang/hlsl.meta.slang | |
| parent | 7a8ef896196ad0d7095412d8558dd9a2542874c8 (diff) | |
Partially implement vk_buffer_ref proposal. (#3814)
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 35 |
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) |
