aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGil Pitney <gil.pitney@linaro.org>2015-04-20 22:45:03 +0000
committerGil Pitney <gil.pitney@linaro.org>2015-04-20 22:45:03 +0000
commit5a06e4bef4800fbd1d0d2625e500726587d82bc8 (patch)
treef7e82f1879add072f5996e2a841dba1190614766
parent3f9e40056b9c28398d5c55eb89762e56c58307e3 (diff)
clEnqueueMapBuffer: Add new CL_MAP_WRITE_INVALIDATE_REGION flag
Add a check for this new flag. Fix alignment on subBuffer check per TI OpenCL code sync. Signed-off-by: Gil Pitney <gil.pitney@linaro.org>
-rw-r--r--src/core/events.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/core/events.cpp b/src/core/events.cpp
index 3e62a86..03aa656 100644
--- a/src/core/events.cpp
+++ b/src/core/events.cpp
@@ -126,7 +126,7 @@ bool BufferEvent::isSubBufferAligned(const MemObject *buffer,
return false;
size_t mask = 0;
- if (align != 0) mask = align - 1;
+ if (align != 0) mask = (align >> 3) - 1; // align in bits, offset in bytes
if (((SubBuffer *)buffer)->offset() & mask)
return false;
@@ -224,7 +224,7 @@ MapBufferEvent::MapBufferEvent(CommandQueue *parent,
if (*errcode_ret != CL_SUCCESS) return;
// Check flags
- if (map_flags & ~(CL_MAP_READ | CL_MAP_WRITE))
+ if (map_flags & ~(CL_MAP_READ | CL_MAP_WRITE | CL_MAP_WRITE_INVALIDATE_REGION))
{
*errcode_ret = CL_INVALID_VALUE;
return;
@@ -236,6 +236,17 @@ MapBufferEvent::MapBufferEvent(CommandQueue *parent,
*errcode_ret = CL_INVALID_VALUE;
return;
}
+
+ // check conflict between map flags and buffer flags
+ cl_mem_flags buf_flags = buffer->flags();
+ if ( ((map_flags & CL_MAP_READ)
+ && (buf_flags & (CL_MEM_HOST_WRITE_ONLY | CL_MEM_HOST_NO_ACCESS)))
+ || ((map_flags & (CL_MAP_WRITE | CL_MAP_WRITE_INVALIDATE_REGION))
+ && (buf_flags & (CL_MEM_HOST_READ_ONLY | CL_MEM_HOST_NO_ACCESS))) )
+ {
+ *errcode_ret = CL_INVALID_OPERATION;
+ return;
+ }
}
Event::Type MapBufferEvent::type() const