diff options
author | Tom Stellard <[email protected]> | 2014-09-22 10:00:39 -0400 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2014-09-22 12:32:34 -0400 |
commit | c6d980140913307d48648058ec24da42a31fc37c (patch) | |
tree | 3afb9513e2e474507f5b0b624900d40e93986f72 /src/gallium/state_trackers/clover | |
parent | cc71457b48906f4f19d2735879c157f7f5f96edf (diff) |
clover: Add support to mem objects for multiple destructor callbacks v2
The spec says that mem objects should maintain a stack of callbacks
not just one.
v2:
- Remove stray printf.
Reviewed-by: Francisco Jerez <[email protected]>
CC: "10.3" <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/clover')
-rw-r--r-- | src/gallium/state_trackers/clover/core/memory.cpp | 10 | ||||
-rw-r--r-- | src/gallium/state_trackers/clover/core/memory.hpp | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/gallium/state_trackers/clover/core/memory.cpp b/src/gallium/state_trackers/clover/core/memory.cpp index ba6869d78bc..905ebc0fd02 100644 --- a/src/gallium/state_trackers/clover/core/memory.cpp +++ b/src/gallium/state_trackers/clover/core/memory.cpp @@ -29,14 +29,16 @@ using namespace clover; memory_obj::memory_obj(clover::context &ctx, cl_mem_flags flags, size_t size, void *host_ptr) : context(ctx), _flags(flags), - _size(size), _host_ptr(host_ptr), - _destroy_notify([]{}) { + _size(size), _host_ptr(host_ptr) { if (flags & (CL_MEM_COPY_HOST_PTR | CL_MEM_USE_HOST_PTR)) data.append((char *)host_ptr, size); } memory_obj::~memory_obj() { - _destroy_notify(); + while (_destroy_notify.size()) { + _destroy_notify.top()(); + _destroy_notify.pop(); + } } bool @@ -46,7 +48,7 @@ memory_obj::operator==(const memory_obj &obj) const { void memory_obj::destroy_notify(std::function<void ()> f) { - _destroy_notify = f; + _destroy_notify.push(f); } cl_mem_flags diff --git a/src/gallium/state_trackers/clover/core/memory.hpp b/src/gallium/state_trackers/clover/core/memory.hpp index f649ca0d296..bd6da6be4d1 100644 --- a/src/gallium/state_trackers/clover/core/memory.hpp +++ b/src/gallium/state_trackers/clover/core/memory.hpp @@ -26,6 +26,7 @@ #include <functional> #include <map> #include <memory> +#include <stack> #include "core/object.hpp" #include "core/queue.hpp" @@ -61,7 +62,7 @@ namespace clover { cl_mem_flags _flags; size_t _size; void *_host_ptr; - std::function<void ()> _destroy_notify; + std::stack<std::function<void ()>> _destroy_notify; protected: std::string data; |