From 6437c38e0a3c2c1daf36cb5e543dc0b467fa4b15 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 23 Aug 2023 05:49:33 -0700 Subject: Lower all ByteAddressBuffer uses for SPIRV. (#3143) Co-authored-by: Yong He --- prelude/slang-cuda-prelude.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'prelude') diff --git a/prelude/slang-cuda-prelude.h b/prelude/slang-cuda-prelude.h index 1447be05b..ad757bdbb 100644 --- a/prelude/slang-cuda-prelude.h +++ b/prelude/slang-cuda-prelude.h @@ -1251,7 +1251,9 @@ struct ByteAddressBuffer SLANG_CUDA_CALL T Load(size_t index) const { SLANG_BOUND_CHECK_BYTE_ADDRESS(index, sizeof(T), sizeInBytes); - return *(const T*)(((const char*)data) + index); + T data; + memcpy(&data, ((const char*)this->data) + index, sizeof(T)); + return data; } const uint32_t* data; @@ -1292,7 +1294,9 @@ struct RWByteAddressBuffer SLANG_CUDA_CALL T Load(size_t index) const { SLANG_BOUND_CHECK_BYTE_ADDRESS(index, sizeof(T), sizeInBytes); - return *(const T*)((const char*)data + index); + T data; + memcpy(&data, ((const char*)this->data) + index, sizeof(T)); + return data; } SLANG_CUDA_CALL void Store(size_t index, uint32_t v) const @@ -1328,14 +1332,14 @@ struct RWByteAddressBuffer SLANG_CUDA_CALL void Store(size_t index, T const& value) const { SLANG_BOUND_CHECK_BYTE_ADDRESS(index, sizeof(T), sizeInBytes); - *(T*)(((char*)data) + index) = value; + memcpy((char*)data + index, &value, sizeof(T)); } /// Can be used in stdlib to gain access template SLANG_CUDA_CALL T* _getPtrAt(size_t index) { - SLANG_BOUND_CHECK_BYTE_ADDRESS(index, sizeof(T), sizeInBytes); + SLANG_BOUND_CHECK_BYTE_ADDRESS(index, 4, sizeInBytes); return (T*)(((char*)data) + index); } -- cgit v1.2.3