20 template <
class _name,
class _dataT,
int32_t _min_capacity = 0>
class pipe {
23 static constexpr int32_t min_capacity = _min_capacity;
27 static _dataT
read(
bool &_Success) {
28 #ifdef __SYCL_DEVICE_ONLY__
29 __ocl_RPipeTy<_dataT> _RPipe =
30 __spirv_CreatePipeFromPipeStorage_read<_dataT>(&m_Storage);
32 _Success = !
static_cast<bool>(
33 __spirv_ReadPipe(_RPipe, &TempData, m_Size, m_Alignment));
37 assert(!
"Pipes are not supported on a host device!");
38 #endif // __SYCL_DEVICE_ONLY__
43 static void write(
const _dataT &_Data,
bool &_Success) {
44 #ifdef __SYCL_DEVICE_ONLY__
45 __ocl_WPipeTy<_dataT> _WPipe =
46 __spirv_CreatePipeFromPipeStorage_write<_dataT>(&m_Storage);
47 _Success = !
static_cast<bool>(
48 __spirv_WritePipe(_WPipe, &_Data, m_Size, m_Alignment));
52 assert(!
"Pipes are not supported on a host device!");
53 #endif // __SYCL_DEVICE_ONLY__
60 #ifdef __SYCL_DEVICE_ONLY__
61 __ocl_RPipeTy<_dataT> _RPipe =
62 __spirv_CreatePipeFromPipeStorage_read<_dataT>(&m_Storage);
64 __spirv_ReadPipeBlockingINTEL(_RPipe, &TempData, m_Size, m_Alignment);
67 assert(!
"Pipes are not supported on a host device!");
68 #endif // __SYCL_DEVICE_ONLY__
73 static void write(
const _dataT &_Data) {
74 #ifdef __SYCL_DEVICE_ONLY__
75 __ocl_WPipeTy<_dataT> _WPipe =
76 __spirv_CreatePipeFromPipeStorage_write<_dataT>(&m_Storage);
77 __spirv_WritePipeBlockingINTEL(_WPipe, &_Data, m_Size, m_Alignment);
80 assert(!
"Pipes are not supported on a host device!");
81 #endif // __SYCL_DEVICE_ONLY__
85 static constexpr int32_t m_Size =
sizeof(_dataT);
86 static constexpr int32_t m_Alignment =
alignof(_dataT);
87 #ifdef __SYCL_DEVICE_ONLY__
88 static constexpr
struct ConstantPipeStorage m_Storage = {m_Size, m_Alignment,
90 #endif // __SYCL_DEVICE_ONLY__
113 template <
class _name,
class _dataT,
size_t _min_capacity = 0>
117 static constexpr int32_t min_capacity = _min_capacity;
121 static _dataT
read(
bool &_Success) {
122 #ifdef __SYCL_DEVICE_ONLY__
123 __ocl_RPipeTy<_dataT> _RPipe =
124 __spirv_CreatePipeFromPipeStorage_read<_dataT>(&m_Storage);
126 _Success = !
static_cast<bool>(
127 __spirv_ReadPipe(_RPipe, &TempData, m_Size, m_Alignment));
131 assert(!
"Pipes are not supported on a host device!");
132 #endif // __SYCL_DEVICE_ONLY__
139 #ifdef __SYCL_DEVICE_ONLY__
140 __ocl_RPipeTy<_dataT> _RPipe =
141 __spirv_CreatePipeFromPipeStorage_read<_dataT>(&m_Storage);
143 __spirv_ReadPipeBlockingINTEL(_RPipe, &TempData, m_Size, m_Alignment);
146 assert(!
"Pipes are not supported on a host device!");
147 #endif // __SYCL_DEVICE_ONLY__
151 static constexpr int32_t m_Size =
sizeof(_dataT);
152 static constexpr int32_t m_Alignment =
alignof(_dataT);
153 static constexpr int32_t ID = _name::id;
154 #ifdef __SYCL_DEVICE_ONLY__
155 static constexpr
struct ConstantPipeStorage m_Storage
156 __attribute__((io_pipe_id(ID))) = {m_Size, m_Alignment, min_capacity};
157 #endif // __SYCL_DEVICE_ONLY__
160 template <
class _name,
class _dataT,
size_t _min_capacity = 0>
164 static constexpr int32_t min_capacity = _min_capacity;
168 static void write(
const _dataT &_Data,
bool &_Success) {
169 #ifdef __SYCL_DEVICE_ONLY__
170 __ocl_WPipeTy<_dataT> _WPipe =
171 __spirv_CreatePipeFromPipeStorage_write<_dataT>(&m_Storage);
172 _Success = !
static_cast<bool>(
173 __spirv_WritePipe(_WPipe, &_Data, m_Size, m_Alignment));
177 assert(!
"Pipes are not supported on a host device!");
178 #endif // __SYCL_DEVICE_ONLY__
184 static void write(
const _dataT &_Data) {
185 #ifdef __SYCL_DEVICE_ONLY__
186 __ocl_WPipeTy<_dataT> _WPipe =
187 __spirv_CreatePipeFromPipeStorage_write<_dataT>(&m_Storage);
188 __spirv_WritePipeBlockingINTEL(_WPipe, &_Data, m_Size, m_Alignment);
191 assert(!
"Pipes are not supported on a host device!");
192 #endif // __SYCL_DEVICE_ONLY__
196 static constexpr int32_t m_Size =
sizeof(_dataT);
197 static constexpr int32_t m_Alignment =
alignof(_dataT);
198 static constexpr int32_t ID = _name::id;
199 #ifdef __SYCL_DEVICE_ONLY__
200 static constexpr
struct ConstantPipeStorage m_Storage
201 __attribute__((io_pipe_id(ID))) = {m_Size, m_Alignment, min_capacity};
202 #endif // __SYCL_DEVICE_ONLY__