Skip to content

Commit e98d276

Browse files
authored
[UR] Replace urMemBufferCreateWithHostPtrFlagsTests in CTS (#18094)
This test didn't work correctly; it assumed that `urMemBufferCreate` would return the host address of the buffer as its output, when instead it returns a `ur_mem_handle_t`. It has been replaced with two more tests which also check that the allocated memory behaves correctly.
1 parent 0a65094 commit e98d276

File tree

1 file changed

+65
-14
lines changed

1 file changed

+65
-14
lines changed

unified-runtime/test/conformance/memory/urMemBufferCreate.cpp

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,22 +85,73 @@ TEST_P(urMemBufferCreateTest, InvalidHostPtrValidHost) {
8585
urMemBufferCreate(context, flags, 4096, &properties, buffer.ptr()));
8686
}
8787

88-
using urMemBufferCreateWithHostPtrFlagsTest =
89-
urMemBufferCreateTestWithFlagsParam;
90-
UUR_DEVICE_TEST_SUITE_WITH_PARAM(
91-
urMemBufferCreateWithHostPtrFlagsTest,
92-
::testing::Values(UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER,
93-
UR_MEM_FLAG_USE_HOST_POINTER),
94-
uur::deviceTestWithParamPrinter<ur_mem_flag_t>);
88+
TEST_P(urMemBufferCreateTest, CopyHostPointer) {
89+
std::vector<unsigned char> dataWrite{};
90+
dataWrite.resize(4096);
91+
std::vector<unsigned char> dataRead{};
92+
dataRead.resize(dataWrite.size());
93+
for (size_t i = 0; i < dataWrite.size(); i++) {
94+
dataWrite[i] = i & 0xff;
95+
dataRead[i] = 1;
96+
}
97+
98+
ur_buffer_properties_t properties{UR_STRUCTURE_TYPE_BUFFER_PROPERTIES,
99+
nullptr, dataWrite.data()};
100+
101+
ur_queue_handle_t queue;
102+
ASSERT_SUCCESS(urQueueCreate(context, device, nullptr, &queue));
103+
104+
uur::raii::Mem buffer = nullptr;
105+
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER,
106+
dataWrite.size(), &properties,
107+
buffer.ptr()));
108+
109+
for (size_t i = 0; i < dataWrite.size(); i++) {
110+
dataWrite[i] = 2;
111+
}
112+
dataWrite.resize(0);
113+
114+
ASSERT_SUCCESS(urEnqueueMemBufferRead(queue, buffer, true, 0, dataRead.size(),
115+
dataRead.data(), 0, nullptr, nullptr));
95116

96-
TEST_P(urMemBufferCreateWithHostPtrFlagsTest, SUCCESS) {
97-
uur::raii::Mem host_ptr_buffer = nullptr;
98-
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_ALLOC_HOST_POINTER,
99-
4096, nullptr, host_ptr_buffer.ptr()));
117+
for (size_t i = 0; i < dataWrite.size(); i++) {
118+
ASSERT_EQ(dataRead[i], i & 0xff);
119+
}
120+
}
121+
122+
TEST_P(urMemBufferCreateTest, UseHostPointer) {
123+
// These all copy memory instead of mapping it
124+
UUR_KNOWN_FAILURE_ON(uur::LevelZero{}, uur::LevelZeroV2{}, uur::HIP{},
125+
uur::CUDA{}, uur::OpenCL{"Intel(R) UHD Graphics 770"});
126+
127+
std::vector<unsigned char> dataWrite{};
128+
dataWrite.resize(4096);
129+
std::vector<unsigned char> dataRead{};
130+
dataRead.resize(dataWrite.size());
131+
for (size_t i = 0; i < dataWrite.size(); i++) {
132+
dataWrite[i] = i & 0xff;
133+
dataRead[i] = 1;
134+
}
100135

101136
ur_buffer_properties_t properties{UR_STRUCTURE_TYPE_BUFFER_PROPERTIES,
102-
nullptr, host_ptr_buffer.ptr()};
137+
nullptr, dataWrite.data()};
138+
139+
ur_queue_handle_t queue;
140+
ASSERT_SUCCESS(urQueueCreate(context, device, nullptr, &queue));
141+
103142
uur::raii::Mem buffer = nullptr;
104-
ASSERT_SUCCESS(
105-
urMemBufferCreate(context, getParam(), 4096, &properties, buffer.ptr()));
143+
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_USE_HOST_POINTER,
144+
dataWrite.size(), &properties,
145+
buffer.ptr()));
146+
147+
for (size_t i = 0; i < dataWrite.size(); i++) {
148+
dataWrite[i] = i & 0x0f;
149+
}
150+
151+
ASSERT_SUCCESS(urEnqueueMemBufferRead(queue, buffer, true, 0, dataRead.size(),
152+
dataRead.data(), 0, nullptr, nullptr));
153+
154+
for (size_t i = 0; i < dataWrite.size(); i++) {
155+
ASSERT_EQ(dataRead[i], i & 0x0f);
156+
}
106157
}

0 commit comments

Comments
 (0)