From 10284b1d2d3f59c2d54b8c975c400be29548e0cc Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Mon, 16 Sep 2013 21:38:32 -0700 Subject: [PATCH] clover: Clean up the interface of the context object slightly. Tested-by: Tom Stellard --- src/gallium/state_trackers/clover/api/context.cpp | 4 ++-- src/gallium/state_trackers/clover/api/program.cpp | 12 ++++++------ src/gallium/state_trackers/clover/api/queue.cpp | 2 +- src/gallium/state_trackers/clover/core/context.cpp | 14 ++++++-------- src/gallium/state_trackers/clover/core/context.hpp | 7 ++++--- src/gallium/state_trackers/clover/core/format.cpp | 11 ++++------- 6 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/gallium/state_trackers/clover/api/context.cpp b/src/gallium/state_trackers/clover/api/context.cpp index 98bc2141e11..c6c71ceb92f 100644 --- a/src/gallium/state_trackers/clover/api/context.cpp +++ b/src/gallium/state_trackers/clover/api/context.cpp @@ -111,11 +111,11 @@ clGetContextInfo(cl_context d_ctx, cl_context_info param, break; case CL_CONTEXT_NUM_DEVICES: - buf.as_scalar() = ctx.devs.size(); + buf.as_scalar() = ctx.devs().size(); break; case CL_CONTEXT_DEVICES: - buf.as_vector() = descs(map(derefs(), ctx.devs)); + buf.as_vector() = descs(ctx.devs()); break; case CL_CONTEXT_PROPERTIES: diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp index 84260472953..45640424a0d 100644 --- a/src/gallium/state_trackers/clover/api/program.cpp +++ b/src/gallium/state_trackers/clover/api/program.cpp @@ -63,8 +63,8 @@ clCreateProgramWithBinary(cl_context d_ctx, cl_uint n, if (!lengths || !binaries) throw error(CL_INVALID_VALUE); - if (any_of([&](device &dev) { - return !ctx.has_device(dev); + if (any_of([&](const device &dev) { + return !count(dev, ctx.devs()); }, devs)) throw error(CL_INVALID_DEVICE); @@ -133,15 +133,15 @@ clBuildProgram(cl_program d_prog, cl_uint num_devs, void *user_data) try { auto &prog = obj(d_prog); auto devs = (d_devs ? objs(d_devs, num_devs) : - ref_vector(map(derefs(), prog.ctx.devs))); + ref_vector(prog.ctx.devs())); auto opts = (p_opts ? p_opts : ""); if (bool(num_devs) != bool(d_devs) || (!pfn_notify && user_data)) throw error(CL_INVALID_VALUE); - if (any_of([&](device &dev) { - return !prog.ctx.has_device(dev); + if (any_of([&](const device &dev) { + return !count(dev, prog.ctx.devs()); }, devs)) throw error(CL_INVALID_DEVICE); @@ -224,7 +224,7 @@ clGetProgramBuildInfo(cl_program d_prog, cl_device_id d_dev, auto &prog = obj(d_prog); auto &dev = obj(d_dev); - if (!prog.ctx.has_device(dev)) + if (!count(dev, prog.ctx.devs())) return CL_INVALID_DEVICE; switch (param) { diff --git a/src/gallium/state_trackers/clover/api/queue.cpp b/src/gallium/state_trackers/clover/api/queue.cpp index b68dfa1f62a..0fdb7356b35 100644 --- a/src/gallium/state_trackers/clover/api/queue.cpp +++ b/src/gallium/state_trackers/clover/api/queue.cpp @@ -32,7 +32,7 @@ clCreateCommandQueue(cl_context d_ctx, cl_device_id d_dev, auto &ctx = obj(d_ctx); auto &dev = obj(d_dev); - if (!ctx.has_device(dev)) + if (!count(dev, ctx.devs())) throw error(CL_INVALID_DEVICE); if (props & ~(CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | diff --git a/src/gallium/state_trackers/clover/core/context.cpp b/src/gallium/state_trackers/clover/core/context.cpp index f4f98004790..e2658f28cb4 100644 --- a/src/gallium/state_trackers/clover/core/context.cpp +++ b/src/gallium/state_trackers/clover/core/context.cpp @@ -20,20 +20,13 @@ // OTHER DEALINGS IN THE SOFTWARE. // -#include - #include "core/context.hpp" using namespace clover; context::context(const property_list &props, const ref_vector &devs) : - devs(map(addresses(), devs)), _props(props) { -} - -bool -context::has_device(device &dev) const { - return std::count(devs.begin(), devs.end(), &dev); + _props(props), _devs(map(addresses(), devs)) { } bool @@ -50,3 +43,8 @@ const context::property_list & context::props() const { return _props; } + +context::device_range +context::devs() const { + return map(derefs(), _devs); +} diff --git a/src/gallium/state_trackers/clover/core/context.hpp b/src/gallium/state_trackers/clover/core/context.hpp index e739f5e2ec2..0b5cf8aede6 100644 --- a/src/gallium/state_trackers/clover/core/context.hpp +++ b/src/gallium/state_trackers/clover/core/context.hpp @@ -30,6 +30,7 @@ namespace clover { class context : public ref_counter, public _cl_context { private: + typedef adaptor_range &> device_range; typedef clover::property_list property_list; public: @@ -39,8 +40,6 @@ namespace clover { context & operator=(const context &ctx) = delete; - bool has_device(device &dev) const; - bool operator==(const context &ctx) const; bool @@ -49,10 +48,12 @@ namespace clover { const property_list & props() const; - const std::vector devs; + device_range + devs() const; private: property_list _props; + const std::vector _devs; }; } diff --git a/src/gallium/state_trackers/clover/core/format.cpp b/src/gallium/state_trackers/clover/core/format.cpp index 40d5ded1d76..79582306a60 100644 --- a/src/gallium/state_trackers/clover/core/format.cpp +++ b/src/gallium/state_trackers/clover/core/format.cpp @@ -20,8 +20,6 @@ // OTHER DEALINGS IN THE SOFTWARE. // -#include - #include "core/format.hpp" #include "core/memory.hpp" #include "pipe/p_screen.h" @@ -154,11 +152,10 @@ namespace clover { PIPE_BIND_TRANSFER_WRITE); for (auto f : formats) { - if (std::all_of(ctx.devs.begin(), ctx.devs.end(), - [=](const device *dev) { - return dev->pipe->is_format_supported( - dev->pipe, f.second, target, 1, bindings); - })) + if (all_of([=](const device &dev) { + return dev.pipe->is_format_supported( + dev.pipe, f.second, target, 1, bindings); + }, ctx.devs())) s.insert(f.first); } -- 2.30.2