Skip to content

Commit 9b36c18

Browse files
authored
[SYCL][UR][L0 v2] fix mem buffer for integrated graphics (#18345)
ur_integrated_buffer_handle_t was missing logic for writing back memory to the hostPtr suplied during buffer construction. getDevicePtr and mapHostPtr did not take into account offset.
1 parent 2d51147 commit 9b36c18

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

unified-runtime/source/adapters/level_zero/v2/memory.cpp

+11-4
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ ur_integrated_buffer_handle_t::ur_integrated_buffer_handle_t(
9494

9595
if (hostPtr) {
9696
std::memcpy(this->ptr.get(), hostPtr, size);
97+
writeBackPtr = hostPtr;
9798
}
9899
}
99100
}
@@ -110,17 +111,23 @@ ur_integrated_buffer_handle_t::ur_integrated_buffer_handle_t(
110111
});
111112
}
112113

114+
ur_integrated_buffer_handle_t::~ur_integrated_buffer_handle_t() {
115+
if (writeBackPtr) {
116+
std::memcpy(writeBackPtr, this->ptr.get(), size);
117+
}
118+
}
119+
113120
void *ur_integrated_buffer_handle_t::getDevicePtr(
114121
ur_device_handle_t /*hDevice*/, device_access_mode_t /*access*/,
115-
size_t /*offset*/, size_t /*size*/,
122+
size_t offset, size_t /*size*/,
116123
std::function<void(void *src, void *dst, size_t)> /*migrate*/) {
117-
return ptr.get();
124+
return ur_cast<char *>(ptr.get()) + offset;
118125
}
119126

120127
void *ur_integrated_buffer_handle_t::mapHostPtr(
121-
ur_map_flags_t /*flags*/, size_t /*offset*/, size_t /*size*/,
128+
ur_map_flags_t /*flags*/, size_t offset, size_t /*size*/,
122129
std::function<void(void *src, void *dst, size_t)> /*migrate*/) {
123-
return ptr.get();
130+
return ur_cast<char *>(ptr.get()) + offset;
124131
}
125132

126133
void ur_integrated_buffer_handle_t::unmapHostPtr(

unified-runtime/source/adapters/level_zero/v2/memory.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ struct ur_integrated_buffer_handle_t : ur_mem_buffer_t {
8787
size_t size, device_access_mode_t accesMode,
8888
bool ownHostPtr);
8989

90+
~ur_integrated_buffer_handle_t();
91+
9092
void *
9193
getDevicePtr(ur_device_handle_t, device_access_mode_t, size_t offset,
9294
size_t size,
@@ -98,6 +100,7 @@ struct ur_integrated_buffer_handle_t : ur_mem_buffer_t {
98100

99101
private:
100102
usm_unique_ptr_t ptr;
103+
void *writeBackPtr = nullptr;
101104
};
102105

103106
struct host_allocation_desc_t {

0 commit comments

Comments
 (0)