summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-07-11 15:19:47 -0700
committerTom Stellard <thomas.stellard@amd.com>2013-07-11 15:19:47 -0700
commit4df8fd42410372513c1b60a97ba74c2a3e50a4f2 (patch)
treee45255f119167db8de8cc04a7ee080002206e264
parent1cdfacdedb621a39609153fc4fbd6878f2d15cd7 (diff)
XXX: Everything worksclover-icd-v3
-rw-r--r--src/gallium/state_trackers/clover/api/icd.cpp5
-rw-r--r--src/gallium/state_trackers/clover/api/icd.hpp29
-rw-r--r--src/gallium/state_trackers/clover/api/platform.cpp6
-rw-r--r--src/gallium/state_trackers/clover/core/context.cpp2
-rw-r--r--src/gallium/state_trackers/clover/core/context.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/device.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/event.cpp2
-rw-r--r--src/gallium/state_trackers/clover/core/event.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/kernel.cpp2
-rw-r--r--src/gallium/state_trackers/clover/core/kernel.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/memory.cpp1
-rw-r--r--src/gallium/state_trackers/clover/core/memory.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/platform.cpp3
-rw-r--r--src/gallium/state_trackers/clover/core/platform.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/program.cpp4
-rw-r--r--src/gallium/state_trackers/clover/core/program.hpp2
-rw-r--r--src/gallium/state_trackers/clover/core/queue.cpp3
-rw-r--r--src/gallium/state_trackers/clover/core/queue.hpp3
-rw-r--r--src/gallium/state_trackers/clover/core/sampler.cpp2
-rw-r--r--src/gallium/state_trackers/clover/core/sampler.hpp2
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);