Module: Mesa
Branch: master
Commit: 21f82188ce389a2543c894dd6d88fbebb25cc796
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=21f82188ce389a2543c894dd6d88fbebb25cc796

Author: Jan Vesely <jan.ves...@rutgers.edu>
Date:   Tue Dec 17 11:19:09 2013 -0500

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.ves...@rutgers.edu>
Reviewed-by: Francisco Jerez <curroje...@riseup.net>

---

 src/gallium/state_trackers/clover/api/memory.cpp |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/memory.cpp 
b/src/gallium/state_trackers/clover/api/memory.cpp
index 785a509..b8b3692 100644
--- a/src/gallium/state_trackers/clover/api/memory.cpp
+++ b/src/gallium/state_trackers/clover/api/memory.cpp
@@ -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);
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to