mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
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:
parent
cc71457b48
commit
c6d9801409
2 changed files with 8 additions and 5 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue