summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/clover/api/memory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/clover/api/memory.cpp')
-rw-r--r--src/gallium/state_trackers/clover/api/memory.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/clover/api/memory.cpp b/src/gallium/state_trackers/clover/api/memory.cpp
index 9b3cd8b1f5c..df4b9baa1d9 100644
--- a/src/gallium/state_trackers/clover/api/memory.cpp
+++ b/src/gallium/state_trackers/clover/api/memory.cpp
@@ -57,8 +57,13 @@ namespace {
parent.flags() & host_access_flags) |
(parent.flags() & host_ptr_flags));
- if (~flags & parent.flags() &
- ((dev_access_flags & ~CL_MEM_READ_WRITE) | host_access_flags))
+ if (~flags & parent.flags() & (dev_access_flags & ~CL_MEM_READ_WRITE))
+ throw error(CL_INVALID_VALUE);
+
+ // Check if new host access flags cause a mismatch between
+ // host-read/write-only.
+ if (!(flags & CL_MEM_HOST_NO_ACCESS) &&
+ (~flags & parent.flags() & host_access_flags))
throw error(CL_INVALID_VALUE);
return flags;