summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorJunyan He <junyan.he@intel.com>2016-04-13 00:50:52 +0800
committerJunyan He <junyan.he@intel.com>2016-04-13 00:50:52 +0800
commit18ac5fa905e5f5c091e6d03b1b378b4db177accc (patch)
tree504e6d3682202071414075c4d3bd23934bec43e8 /backend
parentcfc15c5470079ad408dec58f27cd7e1e23633344 (diff)
seperate map
Diffstat (limited to 'backend')
-rw-r--r--backend/src/driver/cl_gen_mem.cpp46
1 files changed, 28 insertions, 18 deletions
diff --git a/backend/src/driver/cl_gen_mem.cpp b/backend/src/driver/cl_gen_mem.cpp
index 7b65d700..9a256464 100644
--- a/backend/src/driver/cl_gen_mem.cpp
+++ b/backend/src/driver/cl_gen_mem.cpp
@@ -223,29 +223,15 @@ cl_int GenReleaseMem(cl_mem mem, const cl_device_id device)
return CL_SUCCESS;
}
-extern "C"
-cl_int GenEnqueueMapBuffer(cl_command_queue queue, cl_mem mem, void** ret_addr, cl_bool block,
- cl_map_flags flags, size_t offset, size_t size, cl_uint num_events,
- const cl_event *event_list, cl_event *event_ret)
+static void* genDoMapBuffer(GenGPUMem* genMem, cl_mem mem, cl_map_flags flags, size_t offset, size_t size)
{
- if (mem->type != CL_MEM_OBJECT_BUFFER) {
- return CL_INVALID_VALUE;
- }
cl_mem_buffer buffer = cl_mem_to_buffer(mem);
- GenGPUMem* genMem = reinterpret_cast<GenGPUMem*>(getGenMemPrivate(mem, queue->device));
char* retAddr = NULL;
-
- if (genMem == NULL)
- return CL_INVALID_VALUE;
-
- if (genMem->genAllocMemBo(mem) == false) {
- return CL_MEM_OBJECT_ALLOCATION_FAILURE;
- }
-
bool mapWrite = flags & (CL_MAP_WRITE | CL_MAP_WRITE_INVALIDATE_REGION);
+
void* mappedAddr = genMem->genMapBo(mem, mapWrite);
if (mappedAddr == NULL) {
- return CL_MAP_FAILURE;
+ return NULL;
}
if (mem->flags & CL_MEM_USE_HOST_PTR) {
@@ -260,9 +246,33 @@ cl_int GenEnqueueMapBuffer(cl_command_queue queue, cl_mem mem, void** ret_addr,
memcpy((char*)mem->host_ptr + buffer->sub_offset + offset, ptr, size);
}
+ return (void*)retAddr;
+}
+
+extern "C"
+cl_int GenEnqueueMapBuffer(cl_command_queue queue, cl_mem mem, void** ret_addr, cl_bool block,
+ cl_map_flags flags, size_t offset, size_t size, cl_uint num_events,
+ const cl_event *event_list, cl_event *event_ret)
+{
+ if (mem->type != CL_MEM_OBJECT_BUFFER) {
+ return CL_INVALID_VALUE;
+ }
+ GenGPUMem* genMem = reinterpret_cast<GenGPUMem*>(getGenMemPrivate(mem, queue->device));
+ void* retAddr = NULL;
+
+ if (genMem == NULL)
+ return CL_INVALID_VALUE;
+
+ if (genMem->genAllocMemBo(mem) == false) {
+ return CL_MEM_OBJECT_ALLOCATION_FAILURE;
+ }
+
+ retAddr = genDoMapBuffer(genMem, mem, flags, offset, size);
+ if (retAddr == NULL)
+ return CL_MAP_FAILURE;
+
if (ret_addr)
*ret_addr = retAddr;
-
return CL_SUCCESS;
}