clover: Add parameter checks to clCreateBuffer.
v2: Use fewer if statements and functional tricks instead of single-use method,
suggested by Francisco Jerez.
Squash two small patches into one.
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
committed by
Francisco Jerez
parent
78fcc31d4a
commit
21f82188ce
@@ -20,6 +20,7 @@
|
||||
// OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
#include "util/u_math.h"
|
||||
#include "api/util.hpp"
|
||||
#include "core/memory.hpp"
|
||||
#include "core/format.hpp"
|
||||
@@ -35,7 +36,10 @@ clCreateBuffer(cl_context d_ctx, cl_mem_flags flags, size_t size,
|
||||
CL_MEM_COPY_HOST_PTR)))
|
||||
throw error(CL_INVALID_HOST_PTR);
|
||||
|
||||
if (!size)
|
||||
if (!size ||
|
||||
size > fold(maximum(), 0u,
|
||||
map(std::mem_fn(&device::max_mem_alloc_size), ctx.devs())
|
||||
))
|
||||
throw error(CL_INVALID_BUFFER_SIZE);
|
||||
|
||||
if (flags & ~(CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY |
|
||||
@@ -43,6 +47,14 @@ clCreateBuffer(cl_context d_ctx, cl_mem_flags flags, size_t size,
|
||||
CL_MEM_COPY_HOST_PTR))
|
||||
throw error(CL_INVALID_VALUE);
|
||||
|
||||
if (util_bitcount(flags & (CL_MEM_READ_ONLY | CL_MEM_WRITE_ONLY |
|
||||
CL_MEM_READ_WRITE)) > 1)
|
||||
throw error(CL_INVALID_VALUE);
|
||||
|
||||
if ((flags & CL_MEM_USE_HOST_PTR) &&
|
||||
(flags & (CL_MEM_COPY_HOST_PTR | CL_MEM_ALLOC_HOST_PTR)))
|
||||
throw error(CL_INVALID_VALUE);
|
||||
|
||||
ret_error(r_errcode, CL_SUCCESS);
|
||||
return new root_buffer(ctx, flags, size, host_ptr);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user