From 4485cf3eaf142cfd5f8470e86739acc67d4e12ea Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 6 Mar 2025 14:26:34 -0800 Subject: Update SPIRV-Tools and fix new validation errors. (#6511) * Update SPIRV-Tools and fix new validation errors. * Implement pointers for glsl target. * Reworked packStorage/unpackStorage code gen to operate on pointers rather than values. --- source/slang/hlsl.meta.slang | 76 +++++++------------------------------------- 1 file changed, 11 insertions(+), 65 deletions(-) (limited to 'source/slang/hlsl.meta.slang') diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index d2abfc7fe..c26a7613b 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -21609,90 +21609,36 @@ extension uint64_t } } -__generic -__intrinsic_type($(kIROp_HLSLConstBufferPointerType)) -__glsl_extension(GL_EXT_buffer_reference) -__magic_type(ConstBufferPointerType) -[require(glsl_spirv, bufferreference)] -struct ConstBufferPointer +struct ConstBufferPointer { - __glsl_version(450) - __glsl_extension(GL_EXT_buffer_reference) - [__NoSideEffect] - T get() - { - __target_switch - { - case glsl: - __intrinsic_asm "$0._data"; - case spirv: - return spirv_asm { - result:$$T = OpLoad $this Aligned !Alignment; - }; - } - } - + T *_ptr; + [ForceInline] T get() { return loadAligned(_ptr); } __subscript(int index) -> T { [ForceInline] - get {return ConstBufferPointer.fromUInt(toUInt() + __naturalStrideOf() * index).get(); } + get { return _ptr[index]; } } - __glsl_version(450) - __glsl_extension(GL_EXT_shader_explicit_arithmetic_types_int64) - __glsl_extension(GL_EXT_buffer_reference) - [require(glsl_spirv, bufferreference_int64)] + [ForceInline] T* getPtr() { return _ptr; } + + [ForceInline] static ConstBufferPointer fromUInt(uint64_t val) { - __target_switch - { - case glsl: - __intrinsic_asm "$TR($0)"; - case spirv: - return spirv_asm { - result:$$ConstBufferPointer = OpConvertUToPtr $val; - }; - } + return {(T*)val}; } - __glsl_version(450) - __glsl_extension(GL_EXT_shader_explicit_arithmetic_types_int64) - __glsl_extension(GL_EXT_buffer_reference) - [require(glsl_spirv, bufferreference_int64)] + [ForceInline] uint64_t toUInt() { - __target_switch - { - case glsl: - __intrinsic_asm "uint64_t($0)"; - case spirv: - return spirv_asm { - result:$$uint64_t = OpConvertPtrToU $this; - }; - } + return (uint64_t)_ptr; } - __glsl_version(450) - __glsl_extension(GL_EXT_shader_explicit_arithmetic_types_int64) - __glsl_extension(GL_EXT_buffer_reference) - [__NoSideEffect] [ForceInline] - [require(glsl_spirv, bufferreference_int64)] 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; - }; - } + return _ptr != nullptr; } } -- cgit v1.2.3