aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/clover/core
diff options
context:
space:
mode:
authorSerge Martin <[email protected]>2016-10-30 17:21:15 -0700
committerSerge Martin <[email protected]>2016-11-06 15:56:54 +0100
commitcc495055cdfe7e39002180d095d09fe4b6905eb9 (patch)
tree0ac1320ce58a9a14f5dcefae3e62c1dfa1b37196 /src/gallium/state_trackers/clover/core
parent05fcc73f087fa2b8c447ec8c79c7bdab57d49faf (diff)
clover: Add CL_PROGRAM_BINARY_TYPE support (CL1.2).
v3 [Francisco Jerez]: Loosely based on Serge's v1 of this patch in order to avoid CL-specific enums in the clover module binary format. In addition to other changes made in v2: Represent the CL program binary type as the section type instead of adding a CL API-specific enum, check that the binary types of the input objects are valid during clLinkProgram(), pass section type as argument to build_module_library() instead of using separate function. Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/clover/core')
-rw-r--r--src/gallium/state_trackers/clover/core/kernel.cpp2
-rw-r--r--src/gallium/state_trackers/clover/core/module.hpp6
-rw-r--r--src/gallium/state_trackers/clover/core/program.cpp12
-rw-r--r--src/gallium/state_trackers/clover/core/program.hpp1
4 files changed, 18 insertions, 3 deletions
diff --git a/src/gallium/state_trackers/clover/core/kernel.cpp b/src/gallium/state_trackers/clover/core/kernel.cpp
index 962f55507f6..47167053231 100644
--- a/src/gallium/state_trackers/clover/core/kernel.cpp
+++ b/src/gallium/state_trackers/clover/core/kernel.cpp
@@ -162,7 +162,7 @@ kernel::exec_context::bind(intrusive_ptr<command_queue> _q,
// Bind kernel arguments.
auto &m = kern.program().build(q->device()).binary;
auto margs = find(name_equals(kern.name()), m.syms).args;
- auto msec = find(type_equals(module::section::text), m.secs);
+ auto msec = find(type_equals(module::section::text_executable), m.secs);
auto explicit_arg = kern._args.begin();
for (auto &marg : margs) {
diff --git a/src/gallium/state_trackers/clover/core/module.hpp b/src/gallium/state_trackers/clover/core/module.hpp
index 5db0548872c..2ddd26426fb 100644
--- a/src/gallium/state_trackers/clover/core/module.hpp
+++ b/src/gallium/state_trackers/clover/core/module.hpp
@@ -33,7 +33,9 @@ namespace clover {
struct section {
enum type {
- text,
+ text_intermediate,
+ text_library,
+ text_executable,
data_constant,
data_global,
data_local,
@@ -43,7 +45,7 @@ namespace clover {
section(resource_id id, enum type type, size_t size,
const std::vector<char> &data) :
id(id), type(type), size(size), data(data) { }
- section() : id(0), type(text), size(0), data() { }
+ section() : id(0), type(text_intermediate), size(0), data() { }
resource_id id;
type type;
diff --git a/src/gallium/state_trackers/clover/core/program.cpp b/src/gallium/state_trackers/clover/core/program.cpp
index 79ac85117e3..ae4b50a8797 100644
--- a/src/gallium/state_trackers/clover/core/program.cpp
+++ b/src/gallium/state_trackers/clover/core/program.cpp
@@ -108,6 +108,18 @@ program::build::status() const {
return CL_BUILD_NONE;
}
+cl_program_binary_type
+program::build::binary_type() const {
+ if (any_of(type_equals(module::section::text_intermediate), binary.secs))
+ return CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT;
+ else if (any_of(type_equals(module::section::text_library), binary.secs))
+ return CL_PROGRAM_BINARY_TYPE_LIBRARY;
+ else if (any_of(type_equals(module::section::text_executable), binary.secs))
+ return CL_PROGRAM_BINARY_TYPE_EXECUTABLE;
+ else
+ return CL_PROGRAM_BINARY_TYPE_NONE;
+}
+
const struct program::build &
program::build(const device &dev) const {
static const struct build null;
diff --git a/src/gallium/state_trackers/clover/core/program.hpp b/src/gallium/state_trackers/clover/core/program.hpp
index 76f16d2f9f1..05964e78a79 100644
--- a/src/gallium/state_trackers/clover/core/program.hpp
+++ b/src/gallium/state_trackers/clover/core/program.hpp
@@ -63,6 +63,7 @@ namespace clover {
const std::string &log = {}) : binary(m), opts(opts), log(log) {}
cl_build_status status() const;
+ cl_program_binary_type binary_type() const;
module binary;
std::string opts;