[Mesa-dev] [PATCH 2/3] clover: Check allocation size against context maximum

Jan Vesely jan.vesely at rutgers.edu
Sun Dec 15 14:28:15 PST 2013


From: Jan Vesely <jan.vesely at cs.rutgers.edu>

Check maximum size across all devices in the context

Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
---
 src/gallium/state_trackers/clover/api/memory.cpp   |  2 +-
 src/gallium/state_trackers/clover/core/context.cpp | 11 +++++++++++
 src/gallium/state_trackers/clover/core/context.hpp |  2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/clover/api/memory.cpp b/src/gallium/state_trackers/clover/api/memory.cpp
index 15f5b7f..b5b75cd 100644
--- a/src/gallium/state_trackers/clover/api/memory.cpp
+++ b/src/gallium/state_trackers/clover/api/memory.cpp
@@ -35,7 +35,7 @@ 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 > ctx.max_mem_alloc_size())
       throw error(CL_INVALID_BUFFER_SIZE);
 
    if (flags & ~(CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY |
diff --git a/src/gallium/state_trackers/clover/core/context.cpp b/src/gallium/state_trackers/clover/core/context.cpp
index e2658f2..d00c5b5 100644
--- a/src/gallium/state_trackers/clover/core/context.cpp
+++ b/src/gallium/state_trackers/clover/core/context.cpp
@@ -48,3 +48,14 @@ context::device_range
 context::devs() const {
    return map(derefs(), _devs);
 }
+
+static bool max_alloc_comp(const clover::device *a, const clover::device *b)
+{
+   return a->max_mem_alloc_size() < b->max_mem_alloc_size();
+}
+
+cl_ulong context::max_mem_alloc_size() const {
+   const clover::device *dev =
+      *(std::max_element(_devs.begin(), _devs.end(), max_alloc_comp));
+   return dev->max_mem_alloc_size();
+}
diff --git a/src/gallium/state_trackers/clover/core/context.hpp b/src/gallium/state_trackers/clover/core/context.hpp
index 0b5cf8a..0bb5953 100644
--- a/src/gallium/state_trackers/clover/core/context.hpp
+++ b/src/gallium/state_trackers/clover/core/context.hpp
@@ -50,6 +50,8 @@ namespace clover {
 
       device_range
       devs() const;
+   
+      cl_ulong max_mem_alloc_size() const;
 
    private:
       property_list _props;
-- 
1.8.3.1



More information about the mesa-dev mailing list