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 <currojerez@riseup.net>

CC: "10.3" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
Tom Stellard 2014-09-22 10:00:39 -04:00
parent cc71457b48
commit c6d9801409
2 changed files with 8 additions and 5 deletions

View file

@ -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

View file

@ -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;