summaryrefslogtreecommitdiff
path: root/src/cl_api_mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cl_api_mem.c')
-rw-r--r--src/cl_api_mem.c58
1 files changed, 41 insertions, 17 deletions
diff --git a/src/cl_api_mem.c b/src/cl_api_mem.c
index 1daf4039..13282748 100644
--- a/src/cl_api_mem.c
+++ b/src/cl_api_mem.c
@@ -309,7 +309,7 @@ clEnqueueMapBuffer(cl_command_queue command_queue,
if (map_flags & (CL_MAP_WRITE | CL_MAP_WRITE_INVALIDATE_REGION))
data->write_map = 1;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -322,6 +322,9 @@ clEnqueueMapBuffer(cl_command_queue command_queue,
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_map) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
ptr = data->ptr;
@@ -469,7 +472,7 @@ clEnqueueUnmapMemObject(cl_command_queue command_queue,
data->mem_obj = memobj;
data->ptr = mapped_ptr;
- if (e_status == CL_COMPLETE) { // No need to wait
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) { // No need to wait
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
break;
@@ -571,7 +574,7 @@ clEnqueueReadBuffer(cl_command_queue command_queue,
data->offset = offset;
data->size = size;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -583,6 +586,9 @@ clEnqueueReadBuffer(cl_command_queue command_queue,
break;
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_read) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
} while (0);
@@ -674,7 +680,7 @@ clEnqueueWriteBuffer(cl_command_queue command_queue,
data->offset = offset;
data->size = size;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -686,6 +692,9 @@ clEnqueueWriteBuffer(cl_command_queue command_queue,
break;
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_write) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
} while (0);
@@ -823,7 +832,7 @@ clEnqueueReadBufferRect(cl_command_queue command_queue,
data->host_row_pitch = host_row_pitch;
data->host_slice_pitch = host_slice_pitch;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -835,6 +844,9 @@ clEnqueueReadBufferRect(cl_command_queue command_queue,
break;
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_read) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
} while (0);
@@ -974,7 +986,7 @@ clEnqueueWriteBufferRect(cl_command_queue command_queue,
data->host_row_pitch = host_row_pitch;
data->host_slice_pitch = host_slice_pitch;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -986,6 +998,9 @@ clEnqueueWriteBufferRect(cl_command_queue command_queue,
break;
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_write) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
} while (0);
@@ -1093,7 +1108,7 @@ clEnqueueCopyBuffer(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}
@@ -1283,7 +1298,7 @@ clEnqueueCopyBufferRect(cl_command_queue command_queue,
if (e_status < CL_COMPLETE) { // Error happend, cancel.
err = CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST;
break;
- } else if (e_status == CL_COMPLETE) {
+ } else if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
err = cl_event_exec(e, CL_SUBMITTED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
@@ -1384,7 +1399,7 @@ clEnqueueFillBuffer(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}
@@ -1471,7 +1486,7 @@ clEnqueueMigrateMemObjects(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}
@@ -1764,7 +1779,7 @@ clEnqueueMapImage(cl_command_queue command_queue,
if (map_flags & (CL_MAP_WRITE | CL_MAP_WRITE_INVALIDATE_REGION))
data->write_map = 1;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -1777,6 +1792,9 @@ clEnqueueMapImage(cl_command_queue command_queue,
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_map) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
ptr = data->ptr;
@@ -2014,7 +2032,7 @@ clEnqueueReadImage(cl_command_queue command_queue,
data->row_pitch = row_pitch;
data->slice_pitch = slice_pitch;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -2026,6 +2044,9 @@ clEnqueueReadImage(cl_command_queue command_queue,
break;
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_read) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
} while (0);
@@ -2218,7 +2239,7 @@ clEnqueueWriteImage(cl_command_queue command_queue,
data->row_pitch = row_pitch;
data->slice_pitch = slice_pitch;
- if (e_status == CL_COMPLETE) {
+ if (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) {
// Sync mode, no need to queue event.
err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
if (err != CL_SUCCESS) {
@@ -2230,6 +2251,9 @@ clEnqueueWriteImage(cl_command_queue command_queue,
break;
}
cl_command_queue_enqueue_event(command_queue, e);
+ if (blocking_write) {
+ cl_event_wait_for_events_list(1, &e);
+ }
}
} while (0);
@@ -2364,7 +2388,7 @@ clEnqueueCopyImage(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}
@@ -2475,7 +2499,7 @@ clEnqueueCopyImageToBuffer(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}
@@ -2587,7 +2611,7 @@ clEnqueueCopyBufferToImage(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}
@@ -2697,7 +2721,7 @@ clEnqueueFillImage(cl_command_queue command_queue,
break;
}
- err = cl_event_exec(e, e_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
+ err = cl_event_exec(e, (cl_command_queue_allow_bypass_submit(command_queue) && (e_status == CL_COMPLETE)) ? CL_SUBMITTED : CL_QUEUED, CL_FALSE);
if (err != CL_SUCCESS) {
break;
}