Skip to content

Commit

Permalink
Change return type of 1D-element named swizzles
Browse files Browse the repository at this point in the history
  • Loading branch information
GagaLP committed Jan 28, 2025
1 parent 98dc3b6 commit 247702e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
12 changes: 6 additions & 6 deletions include/simsycl/sycl/vec.hh
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,10 @@ class swizzled_vec {
}

#define SIMSYCL_DETAIL_DEFINE_1D_SWIZZLE(req, comp) \
auto comp() const \
ReferenceDataT &comp() const \
requires(req && num_elements > sycl::elem::comp) \
{ \
return detail::swizzled_vec<ReferenceDataT, indices[sycl::elem::comp]>(m_elems); \
return m_elems[indices[sycl::elem::comp]]; \
}

#define SIMSYCL_DETAIL_DEFINE_2D_SWIZZLE(req, comp1, comp2) \
Expand Down Expand Up @@ -612,15 +612,15 @@ class alignas(detail::vec_alignment_v<DataT, NumElements>) vec {
}

#define SIMSYCL_DETAIL_DEFINE_1D_SWIZZLE(req, comp) \
auto comp() \
DataT &comp() \
requires(req && num_elements > elem::comp) \
{ \
return detail::swizzled_vec<DataT, elem::comp>(m_elems); \
return m_elems[elem::comp]; \
} \
auto comp() const \
const DataT &comp() const \
requires(req && num_elements > elem::comp) \
{ \
return detail::swizzled_vec<const DataT, elem::comp>(m_elems); \
return m_elems[elem::comp]; \
}

#define SIMSYCL_DETAIL_DEFINE_2D_SWIZZLE(req, comp1, comp2) \
Expand Down
15 changes: 13 additions & 2 deletions test/vec_tests.cc
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,17 @@ TEST_CASE("Vector swizzled access is available", "[vec][swizzle]") {
vi.even() = {11, 12};
CHECK(check_bool_vec(vi == sycl::vec<int, 4>{11, 9, 12, 10}));
}

SECTION("1D swizzled vec return type") {
sycl::vec<uint8_t, 4> v4{255};
CHECK(std::is_same_v<decltype(v4.x()), uint8_t &>);
CHECK(std::is_same_v<decltype(v4.y()), uint8_t &>);
CHECK(std::is_same_v<decltype(v4.z()), uint8_t &>);
CHECK(std::is_same_v<decltype(v4.w()), uint8_t &>);

int i = (v4.x() + 1);
CHECK(i == 256);
}
}

TEST_CASE("Operations on swizzled vectors work as expected", "[vec][swizzle]") {
Expand Down Expand Up @@ -208,7 +219,7 @@ TEST_CASE("Operations on swizzled vectors work as expected", "[vec][swizzle]") {
CHECK(check_bool_vec(sycl::vec<int, 2>{0, 0} < vi.xy()));

CHECK(check_bool_vec(vi.zw() < 10));
CHECK(check_bool_vec(vi.z() == 3));
CHECK(check_bool_vec(4 == vi.a()));
CHECK((vi.z() == 3));
CHECK((4 == vi.a()));
}
}

0 comments on commit 247702e

Please sign in to comment.