From: Tom Stellard Date: Mon, 22 Sep 2014 14:00:39 +0000 (-0400) Subject: clover: Add support to mem objects for multiple destructor callbacks v2 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c6d980140913307d48648058ec24da42a31fc37c;p=mesa.git 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 CC: "10.3" --- 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 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 #include #include +#include #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 _destroy_notify; + std::stack> _destroy_notify; protected: std::string data;