Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 8 additions & 53 deletions sycl/include/sycl/accessor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@ using AccessorImplPtr = std::shared_ptr<AccessorImplHost>;
class __SYCL_EXPORT AccessorBaseHost {
protected:
AccessorBaseHost(const AccessorImplPtr &Impl) : impl{Impl} {}
friend sycl::detail::ImplUtils;

public:
AccessorBaseHost(id<3> Offset, range<3> AccessRange, range<3> MemoryRange,
Expand Down Expand Up @@ -550,16 +551,6 @@ class __SYCL_EXPORT AccessorBaseHost {

void *getMemoryObject() const;

template <class Obj>
friend const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);
template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

template <typename, int, access::mode, access::target, access::placeholder,
typename>
friend class accessor;
Expand All @@ -574,6 +565,8 @@ class LocalAccessorImplHost;
using LocalAccessorImplPtr = std::shared_ptr<LocalAccessorImplHost>;

class __SYCL_EXPORT LocalAccessorBaseHost {
friend sycl::detail::ImplUtils;

protected:
LocalAccessorBaseHost(const LocalAccessorImplPtr &Impl) : impl{Impl} {}

Expand All @@ -589,17 +582,6 @@ class __SYCL_EXPORT LocalAccessorBaseHost {
const property_list &getPropList() const;

protected:
template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);
template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

LocalAccessorImplPtr impl;
};
} // namespace detail
Expand All @@ -623,6 +605,8 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor :
public detail::OwnerLessBase<
accessor<DataT, Dimensions, AccessMode, AccessTarget, IsPlaceholder,
PropertyListT>> {
friend sycl::detail::ImplUtils;

protected:
static_assert((AccessTarget == access::target::global_buffer ||
AccessTarget == access::target::constant_buffer ||
Expand Down Expand Up @@ -854,17 +838,6 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor :
friend class sycl::stream;
friend class sycl::ext::intel::esimd::detail::AccessorPrivateProxy;

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);
template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

public:
// 4.7.6.9.1. Interface for buffer command accessors
// value_type is defined as const DataT for read_only accessors, DataT
Expand Down Expand Up @@ -2249,17 +2222,6 @@ class __SYCL_SPECIAL_CLASS local_accessor_base :
return Result;
}

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);
template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

template <typename DataT_, int Dimensions_> friend class local_accessor;

public:
Expand Down Expand Up @@ -2474,6 +2436,7 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor
access::placeholder::false_t>,
public detail::OwnerLessBase<local_accessor<DataT, Dimensions>> {

friend sycl::detail::ImplUtils;
using local_acc =
local_accessor_base<DataT, Dimensions,
detail::accessModeFromConstness<DataT>(),
Expand Down Expand Up @@ -2647,6 +2610,8 @@ template <typename DataT, int Dimensions = 1,
class __SYCL_EBO host_accessor
: public accessor<DataT, Dimensions, AccessMode, target::host_buffer,
access::placeholder::false_t> {
friend sycl::detail::ImplUtils;

protected:
using AccessorT = accessor<DataT, Dimensions, AccessMode, target::host_buffer,
access::placeholder::false_t>;
Expand All @@ -2671,16 +2636,6 @@ class __SYCL_EBO host_accessor
host_accessor(const detail::AccessorImplPtr &Impl)
: accessor<DataT, Dimensions, AccessMode, target::host_buffer,
access::placeholder::false_t>{Impl} {}

template <class Obj>
friend const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);
template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);
#endif // __SYCL_DEVICE_ONLY__

public:
Expand Down
78 changes: 6 additions & 72 deletions sycl/include/sycl/accessor_image.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ class __SYCL_EXPORT UnsampledImageAccessorBaseHost {
protected:
UnsampledImageAccessorBaseHost(const UnsampledImageAccessorImplPtr &Impl)
: impl{Impl} {}
friend sycl::detail::ImplUtils;

public:
UnsampledImageAccessorBaseHost(sycl::range<3> Size, access_mode AccessMode,
Expand All @@ -97,18 +98,6 @@ class __SYCL_EXPORT UnsampledImageAccessorBaseHost {
const property_list &getPropList() const;

protected:
template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

UnsampledImageAccessorImplPtr impl;

// The function references helper methods required by GDB pretty-printers
Expand Down Expand Up @@ -151,6 +140,7 @@ class __SYCL_EXPORT SampledImageAccessorBaseHost {
protected:
SampledImageAccessorBaseHost(const SampledImageAccessorImplPtr &Impl)
: impl{Impl} {}
friend sycl::detail::ImplUtils;

public:
SampledImageAccessorBaseHost(sycl::range<3> Size, void *SYCLMemObject,
Expand All @@ -173,18 +163,6 @@ class __SYCL_EXPORT SampledImageAccessorBaseHost {
const property_list &getPropList() const;

protected:
template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

SampledImageAccessorImplPtr impl;

// The function references helper methods required by GDB pretty-printers
Expand Down Expand Up @@ -789,6 +767,7 @@ class __SYCL_EBO unsampled_image_accessor :
#endif // __SYCL_DEVICE_ONLY__
public detail::OwnerLessBase<
unsampled_image_accessor<DataT, Dimensions, AccessMode, AccessTarget>> {
friend sycl::detail::ImplUtils;
static_assert(std::is_same_v<DataT, int4> || std::is_same_v<DataT, uint4> ||
std::is_same_v<DataT, float4> ||
std::is_same_v<DataT, half4>,
Expand Down Expand Up @@ -940,18 +919,6 @@ class __SYCL_EBO unsampled_image_accessor :
{
(void)Impl;
}

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);
};

template <typename DataT, int Dimensions = 1,
Expand All @@ -962,6 +929,7 @@ class __SYCL_EBO host_unsampled_image_accessor
: private detail::UnsampledImageAccessorBaseHost,
public detail::OwnerLessBase<
host_unsampled_image_accessor<DataT, Dimensions, AccessMode>> {
friend sycl::detail::ImplUtils;
static_assert(std::is_same_v<DataT, int4> || std::is_same_v<DataT, uint4> ||
std::is_same_v<DataT, float4> ||
std::is_same_v<DataT, half4>,
Expand Down Expand Up @@ -1082,18 +1050,6 @@ class __SYCL_EBO host_unsampled_image_accessor
host_unsampled_image_accessor(
const detail::UnsampledImageAccessorImplPtr &Impl)
: base_class{Impl} {}

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);
};

template <typename DataT, int Dimensions,
Expand All @@ -1104,6 +1060,7 @@ class __SYCL_EBO sampled_image_accessor :
#endif // __SYCL_DEVICE_ONLY__
public detail::OwnerLessBase<
sampled_image_accessor<DataT, Dimensions, AccessTarget>> {
friend sycl::detail::ImplUtils;
static_assert(std::is_same_v<DataT, int4> || std::is_same_v<DataT, uint4> ||
std::is_same_v<DataT, float4> ||
std::is_same_v<DataT, half4>,
Expand Down Expand Up @@ -1231,25 +1188,14 @@ class __SYCL_EBO sampled_image_accessor :
{
(void)Impl;
}

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);
};

template <typename DataT, int Dimensions>
class __SYCL_EBO host_sampled_image_accessor
: private detail::SampledImageAccessorBaseHost,
public detail::OwnerLessBase<
host_sampled_image_accessor<DataT, Dimensions>> {
friend sycl::detail::ImplUtils;
static_assert(std::is_same_v<DataT, int4> || std::is_same_v<DataT, uint4> ||
std::is_same_v<DataT, float4> ||
std::is_same_v<DataT, half4>,
Expand Down Expand Up @@ -1340,18 +1286,6 @@ class __SYCL_EBO host_sampled_image_accessor
private:
host_sampled_image_accessor(const detail::SampledImageAccessorImplPtr &Impl)
: base_class{Impl} {}

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);
};

} // namespace _V1
Expand Down
5 changes: 2 additions & 3 deletions sycl/include/sycl/buffer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ struct BufferInterop;

// The non-template base for the sycl::buffer class
class __SYCL_EXPORT buffer_plain {
friend sycl::detail::ImplUtils;

protected:
buffer_plain(size_t SizeInBytes, size_t, const property_list &Props,
std::unique_ptr<detail::SYCLMemObjAllocator> Allocator);
Expand Down Expand Up @@ -730,9 +732,6 @@ class buffer : public detail::buffer_plain,
}

private:
template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);
template <typename A, int dims, typename C, typename Enable>
friend class buffer;
template <typename DataT, int dims, access::mode mode, access::target target,
Expand Down
13 changes: 2 additions & 11 deletions sycl/include/sycl/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ auto get_native(const SyclT &Obj) -> backend_return_t<Backend, SyclT>;
///
/// \ingroup sycl_api
class __SYCL_EXPORT context : public detail::OwnerLessBase<context> {
friend sycl::detail::ImplUtils;

public:
/// Constructs a SYCL context instance using an instance of default_selector.
///
Expand Down Expand Up @@ -255,17 +257,6 @@ class __SYCL_EXPORT context : public detail::OwnerLessBase<context> {
template <backend Backend, class SyclT>
friend auto get_native(const SyclT &Obj) -> backend_return_t<Backend, SyclT>;

template <class Obj>
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(
std::add_rvalue_reference_t<decltype(T::impl)> ImplObj);
template <class T>
friend T detail::createSyclObjFromImpl(
std::add_lvalue_reference_t<const decltype(T::impl)> ImplObj);

const property_list &getPropList() const;
};

Expand Down
Loading