@@ -52,6 +52,21 @@ struct olLaunchKernelNoArgsTest : LaunchKernelTestBase {
5252};
5353OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE (olLaunchKernelNoArgsTest);
5454
55+ struct olLaunchKernelLocalMemTest : LaunchKernelTestBase {
56+ void SetUp () override {
57+ RETURN_ON_FATAL_FAILURE (LaunchKernelTestBase::SetUpKernel (" localmem" ));
58+ }
59+ };
60+ OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE (olLaunchKernelLocalMemTest);
61+
62+ struct olLaunchKernelLocalMemReductionTest : LaunchKernelTestBase {
63+ void SetUp () override {
64+ RETURN_ON_FATAL_FAILURE (
65+ LaunchKernelTestBase::SetUpKernel (" localmem_reduction" ));
66+ }
67+ };
68+ OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE (olLaunchKernelLocalMemReductionTest);
69+
5570TEST_P (olLaunchKernelTest, Success) {
5671 void *Mem;
5772 ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
@@ -99,3 +114,51 @@ TEST_P(olLaunchKernelTest, SuccessSynchronous) {
99114
100115 ASSERT_SUCCESS (olMemFree (Mem));
101116}
117+
118+ TEST_P (olLaunchKernelLocalMemTest, Success) {
119+ LaunchArgs.NumGroups .x = 4 ;
120+ LaunchArgs.DynSharedMemory = 64 * sizeof (uint32_t );
121+
122+ void *Mem;
123+ ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
124+ LaunchArgs.GroupSize .x * LaunchArgs.NumGroups .x *
125+ sizeof (uint32_t ),
126+ &Mem));
127+ struct {
128+ void *Mem;
129+ } Args{Mem};
130+
131+ ASSERT_SUCCESS (olLaunchKernel (Queue, Device, Kernel, &Args, sizeof (Args),
132+ &LaunchArgs, nullptr ));
133+
134+ ASSERT_SUCCESS (olWaitQueue (Queue));
135+
136+ uint32_t *Data = (uint32_t *)Mem;
137+ for (uint32_t i = 0 ; i < LaunchArgs.GroupSize .x * LaunchArgs.NumGroups .x ; i++)
138+ ASSERT_EQ (Data[i], (i % 64 ) * 2 );
139+
140+ ASSERT_SUCCESS (olMemFree (Mem));
141+ }
142+
143+ TEST_P (olLaunchKernelLocalMemReductionTest, Success) {
144+ LaunchArgs.NumGroups .x = 4 ;
145+ LaunchArgs.DynSharedMemory = 64 * sizeof (uint32_t );
146+
147+ void *Mem;
148+ ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
149+ LaunchArgs.NumGroups .x * sizeof (uint32_t ), &Mem));
150+ struct {
151+ void *Mem;
152+ } Args{Mem};
153+
154+ ASSERT_SUCCESS (olLaunchKernel (Queue, Device, Kernel, &Args, sizeof (Args),
155+ &LaunchArgs, nullptr ));
156+
157+ ASSERT_SUCCESS (olWaitQueue (Queue));
158+
159+ uint32_t *Data = (uint32_t *)Mem;
160+ for (uint32_t i = 0 ; i < LaunchArgs.NumGroups .x ; i++)
161+ ASSERT_EQ (Data[i], 2 * LaunchArgs.GroupSize .x );
162+
163+ ASSERT_SUCCESS (olMemFree (Mem));
164+ }
0 commit comments