diff options
author | Gil Pitney <gil.pitney@linaro.org> | 2015-04-20 22:45:03 +0000 |
---|---|---|
committer | Gil Pitney <gil.pitney@linaro.org> | 2015-04-20 22:45:03 +0000 |
commit | 5a06e4bef4800fbd1d0d2625e500726587d82bc8 (patch) | |
tree | f7e82f1879add072f5996e2a841dba1190614766 | |
parent | 3f9e40056b9c28398d5c55eb89762e56c58307e3 (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.cpp | 15 |
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 |