diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2013-07-11 15:19:47 -0700 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2013-07-11 15:19:47 -0700 |
commit | 4df8fd42410372513c1b60a97ba74c2a3e50a4f2 (patch) | |
tree | e45255f119167db8de8cc04a7ee080002206e264 | |
parent | 1cdfacdedb621a39609153fc4fbd6878f2d15cd7 (diff) |
XXX: Everything worksclover-icd-v3
20 files changed, 35 insertions, 43 deletions
diff --git a/src/gallium/state_trackers/clover/api/icd.cpp b/src/gallium/state_trackers/clover/api/icd.cpp index 3a4bf4dd006..fcc01bbbc43 100644 --- a/src/gallium/state_trackers/clover/api/icd.cpp +++ b/src/gallium/state_trackers/clover/api/icd.cpp @@ -31,10 +31,6 @@ #include "core/program.hpp" #include "core/queue.hpp" -_cl_platform_id::_cl_platform_id() : dispatch(&clover_icd_dispatch), - __obj(new clover::platform()) { } -_cl_platform_id::~_cl_platform_id() { delete __obj; } - ICD_CLASS_IMPL(_cl_command_queue, command_queue) ICD_CLASS_IMPL(_cl_context, context) ICD_CLASS_IMPL(_cl_device_id, device) @@ -42,6 +38,7 @@ ICD_CLASS_IMPL(_cl_event, event) ICD_CLASS_IMPL(_cl_kernel, kernel) ICD_CLASS_IMPL(_cl_mem, memory_obj) ICD_CLASS_IMPL(_cl_program, program) +ICD_CLASS_IMPL(_cl_platform_id, platform) ICD_CLASS_IMPL(_cl_sampler, sampler) cl_icd_dispatch clover_icd_dispatch = diff --git a/src/gallium/state_trackers/clover/api/icd.hpp b/src/gallium/state_trackers/clover/api/icd.hpp index 612938f629b..7f4bb18d4fb 100644 --- a/src/gallium/state_trackers/clover/api/icd.hpp +++ b/src/gallium/state_trackers/clover/api/icd.hpp @@ -61,15 +61,6 @@ struct name { \ name::name(clover::internal_class *obj) : dispatch(&clover_icd_dispatch), \ __obj(obj) { } \ -struct _cl_platform_id { - cl_icd_dispatch *dispatch; - clover::platform *__obj; - _cl_platform_id(); - ~_cl_platform_id(); -}; - -extern cl_icd_dispatch clover_icd_dispatch; - namespace clover { template <class T> @@ -94,18 +85,18 @@ ICD_CLASS_DECL(_cl_event, event) ICD_CLASS_DECL(_cl_kernel, kernel) ICD_CLASS_DECL(_cl_mem, memory_obj) ICD_CLASS_DECL(_cl_program, program) +ICD_CLASS_DECL(_cl_platform_id, platform) ICD_CLASS_DECL(_cl_sampler, sampler) #define UNWRAP_ICD_OBJECT(obj) (obj)->__obj #define UNWRAP_ICD_PARAM(type, name) \ type *name = _##name->__obj; -#define WRAP_ICD_OBJECT(type, obj) \ - new type(obj) +#define WRAP_ICD_OBJECT(obj) (obj)->icd_obj() #define WRAP_ICD_RET_OBJECT(clover_type, cl_type, out, in) \ clover::clover_type *_##out; \ ret_object(&_##out, in); \ if (out) \ - *out = new cl_type(_##out); + *out = WRAP_ICD_OBJECT((_##out)); #define UNWRAP_ICD_PARAM_COMMAND_QUEUE(name) \ @@ -127,13 +118,13 @@ ICD_CLASS_DECL(_cl_sampler, sampler) #define UNWRAP_ICD_PARAM_SAMPLER(name) \ UNWRAP_ICD_PARAM(clover::sampler, name) -#define WRAP_ICD_CONTEXT(ctx) WRAP_ICD_OBJECT(_cl_context, ctx) -#define WRAP_ICD_DEVICE(dev) (dev)->icd_obj() -#define WRAP_ICD_EVENT(event) WRAP_ICD_OBJECT(_cl_event, event) -#define WRAP_ICD_KERNEL(kernel) WRAP_ICD_OBJECT(_cl_kernel, kernel) -#define WRAP_ICD_MEM(mem) WRAP_ICD_OBJECT(_cl_mem, mem) -#define WRAP_ICD_PROGRAM(prog) WRAP_ICD_OBJECT(_cl_program, prog) -#define WRAP_ICD_SAMPLER(sampler) WRAP_ICD_OBJECT(_cl_sampler, sampler) +#define WRAP_ICD_CONTEXT(ctx) WRAP_ICD_OBJECT(ctx) +#define WRAP_ICD_DEVICE(dev) WRAP_ICD_OBJECT(dev) +#define WRAP_ICD_EVENT(event) WRAP_ICD_OBJECT(event) +#define WRAP_ICD_KERNEL(kernel) WRAP_ICD_OBJECT(kernel) +#define WRAP_ICD_MEM(mem) WRAP_ICD_OBJECT(mem) +#define WRAP_ICD_PROGRAM(prog) WRAP_ICD_OBJECT(prog) +#define WRAP_ICD_SAMPLER(sampler) WRAP_ICD_OBJECT(sampler) #define WRAP_ICD_RET_OBJECT_EVENT(out, in) \ WRAP_ICD_RET_OBJECT(event, _cl_event, out, in) diff --git a/src/gallium/state_trackers/clover/api/platform.cpp b/src/gallium/state_trackers/clover/api/platform.cpp index e2f82b465a3..e5143507639 100644 --- a/src/gallium/state_trackers/clover/api/platform.cpp +++ b/src/gallium/state_trackers/clover/api/platform.cpp @@ -32,7 +32,7 @@ using namespace clover; -static struct _cl_platform_id __platform; +static clover::platform __platform; PUBLIC cl_int clGetPlatformIDs(cl_uint num_entries, cl_platform_id *platforms, @@ -44,7 +44,7 @@ clGetPlatformIDs(cl_uint num_entries, cl_platform_id *platforms, if (num_platforms) *num_platforms = 1; if (platforms) - *platforms = &__platform; + *platforms = WRAP_ICD_OBJECT(&__platform); return CL_SUCCESS; } @@ -53,7 +53,7 @@ PUBLIC cl_int CLOVER_API(clGetPlatformInfo)(cl_platform_id platform, cl_platform_info param_name, size_t size, void *buf, size_t *size_ret) { - if (platform != &__platform) + if (platform != WRAP_ICD_OBJECT(&__platform)) return CL_INVALID_PLATFORM; switch (param_name) { diff --git a/src/gallium/state_trackers/clover/core/context.cpp b/src/gallium/state_trackers/clover/core/context.cpp index dde960c7cb7..9ed685590b5 100644 --- a/src/gallium/state_trackers/clover/core/context.cpp +++ b/src/gallium/state_trackers/clover/core/context.cpp @@ -29,7 +29,7 @@ using namespace clover; context::context(const std::vector<cl_context_properties> &props, const std::vector<cl_device_id> &devs) : - devs(devs), __props(props) { + icd_container(new _cl_context(this)), devs(devs), __props(props) { for (std::vector<cl_device_id>::const_iterator i = devs.begin(), e = devs.end(); i != e; ++i) { diff --git a/src/gallium/state_trackers/clover/core/context.hpp b/src/gallium/state_trackers/clover/core/context.hpp index b8003372bad..4b88da54058 100644 --- a/src/gallium/state_trackers/clover/core/context.hpp +++ b/src/gallium/state_trackers/clover/core/context.hpp @@ -29,7 +29,7 @@ namespace clover { struct device; -struct context : public clover::ref_counter { +struct context : icd_container<cl_context>, public clover::ref_counter { public: context(const std::vector<cl_context_properties> &props, const std::vector<cl_device_id> &devs); diff --git a/src/gallium/state_trackers/clover/core/device.hpp b/src/gallium/state_trackers/clover/core/device.hpp index 28279aa2884..3c68a893e5a 100644 --- a/src/gallium/state_trackers/clover/core/device.hpp +++ b/src/gallium/state_trackers/clover/core/device.hpp @@ -38,7 +38,7 @@ namespace clover { class root_resource; class hard_event; -struct device : public icd_container <cl_device_id> { +struct device : icd_container <cl_device_id> { public: device(clover::platform &platform, pipe_loader_device *ldev); device(device &&dev); diff --git a/src/gallium/state_trackers/clover/core/event.cpp b/src/gallium/state_trackers/clover/core/event.cpp index ebcecaf0508..c6f4f15d0a0 100644 --- a/src/gallium/state_trackers/clover/core/event.cpp +++ b/src/gallium/state_trackers/clover/core/event.cpp @@ -29,7 +29,7 @@ using namespace clover; event::event(clover::context &ctx, std::vector<cl_event> deps, action action_ok, action action_fail) : - ctx(ctx), __status(0), wait_count(1), + icd_container(new _cl_event(this)), ctx(ctx), __status(0), wait_count(1), action_ok(action_ok), action_fail(action_fail) { for (auto ev : deps) UNWRAP_ICD_OBJECT(ev)->chain(this); diff --git a/src/gallium/state_trackers/clover/core/event.hpp b/src/gallium/state_trackers/clover/core/event.hpp index c718741373e..d931af343ca 100644 --- a/src/gallium/state_trackers/clover/core/event.hpp +++ b/src/gallium/state_trackers/clover/core/event.hpp @@ -49,7 +49,7 @@ class command_queue; /// the status() method, and it can be waited for completion using the /// wait() method. /// -struct event : public clover::ref_counter { +struct event : icd_container<cl_event>, public clover::ref_counter { public: typedef std::function<void (clover::event &)> action; diff --git a/src/gallium/state_trackers/clover/core/kernel.cpp b/src/gallium/state_trackers/clover/core/kernel.cpp index 985274f7646..e938280379a 100644 --- a/src/gallium/state_trackers/clover/core/kernel.cpp +++ b/src/gallium/state_trackers/clover/core/kernel.cpp @@ -30,7 +30,7 @@ using namespace clover; kernel::kernel(clover::program &prog, const std::string &name, const std::vector<clover::module::argument> &args) : - prog(prog), __name(name), exec(*this) { + icd_container(new _cl_kernel(this)), prog(prog), __name(name), exec(*this) { for (auto arg : args) { if (arg.type == module::argument::scalar) this->args.emplace_back(new scalar_argument(arg.size)); diff --git a/src/gallium/state_trackers/clover/core/kernel.hpp b/src/gallium/state_trackers/clover/core/kernel.hpp index be32766db4f..c03705f82ee 100644 --- a/src/gallium/state_trackers/clover/core/kernel.hpp +++ b/src/gallium/state_trackers/clover/core/kernel.hpp @@ -34,7 +34,7 @@ namespace clover { class argument; -struct kernel : public clover::ref_counter { +struct kernel : icd_container<cl_kernel>, public clover::ref_counter { private: /// /// Class containing all the state required to execute a compute diff --git a/src/gallium/state_trackers/clover/core/memory.cpp b/src/gallium/state_trackers/clover/core/memory.cpp index 4f01e9e20a0..c8afdd9722d 100644 --- a/src/gallium/state_trackers/clover/core/memory.cpp +++ b/src/gallium/state_trackers/clover/core/memory.cpp @@ -28,6 +28,7 @@ using namespace clover; memory_obj::memory_obj(clover::context &ctx, cl_mem_flags flags, size_t size, void *host_ptr) : + icd_container(new _cl_mem(this)), ctx(ctx), __flags(flags), __size(size), __host_ptr(host_ptr), __destroy_notify([]{}) { diff --git a/src/gallium/state_trackers/clover/core/memory.hpp b/src/gallium/state_trackers/clover/core/memory.hpp index 499de526e13..f36f5622e94 100644 --- a/src/gallium/state_trackers/clover/core/memory.hpp +++ b/src/gallium/state_trackers/clover/core/memory.hpp @@ -35,7 +35,7 @@ namespace clover { class resource; class sub_resource; -struct memory_obj : public clover::ref_counter { +struct memory_obj : icd_container<cl_mem>, public clover::ref_counter { protected: memory_obj(clover::context &ctx, cl_mem_flags flags, size_t size, void *host_ptr); diff --git a/src/gallium/state_trackers/clover/core/platform.cpp b/src/gallium/state_trackers/clover/core/platform.cpp index 31e88307605..a77639defa9 100644 --- a/src/gallium/state_trackers/clover/core/platform.cpp +++ b/src/gallium/state_trackers/clover/core/platform.cpp @@ -20,11 +20,12 @@ // OTHER DEALINGS IN THE SOFTWARE. // +#include "api/icd.hpp" #include "core/platform.hpp" using namespace clover; -platform::platform() { +platform::platform() : icd_container(new _cl_platform_id(this)){ int n = pipe_loader_probe(NULL, 0); std::vector<pipe_loader_device *> ldevs(n); diff --git a/src/gallium/state_trackers/clover/core/platform.hpp b/src/gallium/state_trackers/clover/core/platform.hpp index 54781788a26..51c5f860f3e 100644 --- a/src/gallium/state_trackers/clover/core/platform.hpp +++ b/src/gallium/state_trackers/clover/core/platform.hpp @@ -30,7 +30,7 @@ namespace clover { -struct platform { +struct platform : icd_container <cl_platform_id> { public: typedef std::vector<clover::device>::iterator iterator; diff --git a/src/gallium/state_trackers/clover/core/program.cpp b/src/gallium/state_trackers/clover/core/program.cpp index ef0b11cb66f..37127661230 100644 --- a/src/gallium/state_trackers/clover/core/program.cpp +++ b/src/gallium/state_trackers/clover/core/program.cpp @@ -27,13 +27,13 @@ using namespace clover; program::program(clover::context &ctx, const std::string &source) : - ctx(ctx), __source(source) { + icd_container(new _cl_program(this)), ctx(ctx), __source(source) { } program::program(clover::context &ctx, const std::vector<clover::device *> &devs, const std::vector<clover::module> &binaries) : - ctx(ctx) { + icd_container(new _cl_program(this)), ctx(ctx) { for_each([&](clover::device *dev, const clover::module &bin) { __binaries.insert({ dev, bin }); }, diff --git a/src/gallium/state_trackers/clover/core/program.hpp b/src/gallium/state_trackers/clover/core/program.hpp index e2908a8b7d3..b71aa5068d6 100644 --- a/src/gallium/state_trackers/clover/core/program.hpp +++ b/src/gallium/state_trackers/clover/core/program.hpp @@ -31,7 +31,7 @@ namespace clover { -struct program : public clover::ref_counter { +struct program : icd_container<cl_program>, public clover::ref_counter { public: program(clover::context &ctx, const std::string &source); diff --git a/src/gallium/state_trackers/clover/core/queue.cpp b/src/gallium/state_trackers/clover/core/queue.cpp index bacf42d74fe..4130fb27c6f 100644 --- a/src/gallium/state_trackers/clover/core/queue.cpp +++ b/src/gallium/state_trackers/clover/core/queue.cpp @@ -31,7 +31,8 @@ using namespace clover; command_queue::command_queue(context &ctx, device &dev, cl_command_queue_properties props) : - ctx(ctx), dev(dev), __props(props) { + icd_container(new _cl_command_queue(this)), ctx(ctx), dev(dev), + __props(props) { pipe = dev.pipe->context_create(dev.pipe, NULL); if (!pipe) throw error(CL_INVALID_DEVICE); diff --git a/src/gallium/state_trackers/clover/core/queue.hpp b/src/gallium/state_trackers/clover/core/queue.hpp index 50543c6cc8a..8b628472257 100644 --- a/src/gallium/state_trackers/clover/core/queue.hpp +++ b/src/gallium/state_trackers/clover/core/queue.hpp @@ -37,7 +37,8 @@ namespace clover { class sampler; class hard_event; -struct command_queue : public clover::ref_counter { +struct command_queue : icd_container<cl_command_queue>, + public clover::ref_counter { public: command_queue(clover::context &ctx, clover::device &dev, cl_command_queue_properties props); diff --git a/src/gallium/state_trackers/clover/core/sampler.cpp b/src/gallium/state_trackers/clover/core/sampler.cpp index 58a9283c112..83e1e1ca961 100644 --- a/src/gallium/state_trackers/clover/core/sampler.cpp +++ b/src/gallium/state_trackers/clover/core/sampler.cpp @@ -28,7 +28,7 @@ using namespace clover; sampler::sampler(clover::context &ctx, bool norm_mode, cl_addressing_mode addr_mode, cl_filter_mode filter_mode) : - ctx(ctx), __norm_mode(norm_mode), + icd_container(new _cl_sampler(this)), ctx(ctx), __norm_mode(norm_mode), __addr_mode(addr_mode), __filter_mode(filter_mode) { } diff --git a/src/gallium/state_trackers/clover/core/sampler.hpp b/src/gallium/state_trackers/clover/core/sampler.hpp index e630bc86f23..a8a4f2e2532 100644 --- a/src/gallium/state_trackers/clover/core/sampler.hpp +++ b/src/gallium/state_trackers/clover/core/sampler.hpp @@ -28,7 +28,7 @@ namespace clover { -struct sampler : public clover::ref_counter { +struct sampler : icd_container<cl_sampler>, public clover::ref_counter { public: sampler(clover::context &ctx, bool norm_mode, cl_addressing_mode addr_mode, cl_filter_mode filter_mode); |