[Mesa-dev] [PATCH] clover: Fix host access validation for sub-buffer creation

Aaron Watry awatry at gmail.com
Sat Apr 7 18:47:37 UTC 2018


  From CL 1.2 Section 5.2.1:
    CL_INVALID_VALUE if buffer was created with CL_MEM_HOST_WRITE_ONLY and
    flags specify CL_MEM_HOST_READ_ONLY , or if buffer was created with
    CL_MEM_HOST_READ_ONLY and flags specify CL_MEM_HOST_WRITE_ONLY , or if
    buffer was created with CL_MEM_HOST_NO_ACCESS and flags specify
    CL_MEM_HOST_READ_ONLY or CL_MEM_HOST_WRITE_ONLY .

Fixes CL 1.2 CTS test/api get_buffer_info

Signed-off-by: Aaron Watry <awatry at gmail.com>
Cc: Francisco Jerez <currojerez at riseup.net>
---
 src/gallium/state_trackers/clover/api/memory.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/memory.cpp b/src/gallium/state_trackers/clover/api/memory.cpp
index 9b3cd8b1f5..451e8a8c56 100644
--- a/src/gallium/state_trackers/clover/api/memory.cpp
+++ b/src/gallium/state_trackers/clover/api/memory.cpp
@@ -57,10 +57,14 @@ 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.
+         const cl_mem_flags new_flags = flags & ~(parent.flags()) & ~CL_MEM_HOST_NO_ACCESS;
+         if (new_flags & host_access_flags & parent.flags())
+            throw error (CL_INVALID_VALUE);
+
          return flags;
 
       } else {
-- 
2.14.1



More information about the mesa-dev mailing list