clover: Fix host access validation for sub-buffer creation

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

v2: Correct host_access_flags check (Francisco)

Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
Aaron Watry 2018-04-07 13:44:53 -05:00
parent c366f422f0
commit 354b12681b

View file

@ -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;