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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user