[Mesa-dev] [PATCH 3/7] clover: split module::section::text

EdB edb+mesa at sigluy.net
Sun Dec 14 02:31:23 PST 2014


OpenCL 1.2 make distinction between 3 binaries kind:
 executable as produce by clBuildProgram and clLinkProgam
 compiled as produce by clCompileProgram
 library as produce by clLinkProgam with -create-library option
---
 src/gallium/state_trackers/clover/core/kernel.cpp     | 2 +-
 src/gallium/state_trackers/clover/core/module.hpp     | 6 ++++--
 src/gallium/state_trackers/clover/llvm/invocation.cpp | 4 ++--
 src/gallium/state_trackers/clover/tgsi/compiler.cpp   | 3 ++-
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/gallium/state_trackers/clover/core/kernel.cpp b/src/gallium/state_trackers/clover/core/kernel.cpp
index 442762c..ed4b9b0 100644
--- a/src/gallium/state_trackers/clover/core/kernel.cpp
+++ b/src/gallium/state_trackers/clover/core/kernel.cpp
@@ -156,7 +156,7 @@ kernel::exec_context::bind(intrusive_ptr<command_queue> _q,
    // Bind kernel arguments.
    auto &m = kern.program().binary(q->device());
    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 ee6caf9..200b9de 100644
--- a/src/gallium/state_trackers/clover/core/module.hpp
+++ b/src/gallium/state_trackers/clover/core/module.hpp
@@ -32,7 +32,9 @@ namespace clover {
 
       struct section {
          enum type {
-            text,
+            text_executable,
+            text_compiled,
+            text_library,
             data_constant,
             data_global,
             data_local,
@@ -42,7 +44,7 @@ namespace clover {
          section(resource_id id, enum type type, size_t size,
                  const compat::vector<char> &data) :
                  id(id), type(type), size(size), data(data) { }
-         section() : id(0), type(text), size(0), data() { }
+         section() : id(0), type(text_executable), size(0), data() { }
 
          resource_id id;
          type type;
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
index 510e195..1eb47f5 100644
--- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
+++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
@@ -457,7 +457,7 @@ namespace {
       data.insert(0, (char*)(&header), sizeof(header));
       data.insert(data.end(), llvm_bitcode.begin(),
                                   llvm_bitcode.end());
-      m.secs.push_back(module::section(0, module::section::text,
+      m.secs.push_back(module::section(0, module::section::text_executable,
                                        header.num_bytes, data));
 
       return m;
@@ -622,7 +622,7 @@ namespace {
       std::string data;
       data.append((char*)(&header), sizeof(header));
       data.append(code.begin(), code.end());
-      m.secs.push_back(module::section(0, module::section::text,
+      m.secs.push_back(module::section(0, module::section::text_executable,
                                        header.num_bytes, data));
 
       for (std::map<std::string, unsigned>::iterator i = kernel_offsets.begin(),
diff --git a/src/gallium/state_trackers/clover/tgsi/compiler.cpp b/src/gallium/state_trackers/clover/tgsi/compiler.cpp
index 93dfeb5..d901d2b 100644
--- a/src/gallium/state_trackers/clover/tgsi/compiler.cpp
+++ b/src/gallium/state_trackers/clover/tgsi/compiler.cpp
@@ -83,7 +83,8 @@ namespace {
          throw build_error("translate failed");
 
       unsigned sz = tgsi_num_tokens(prog) * sizeof(tgsi_token);
-      m.secs.push_back({ 0, module::section::text, sz, { (char *)prog, sz } });
+      m.secs.push_back({ 0, module::section::text_executable,
+                         sz, { (char *)prog, sz } });
    }
 }
 
-- 
2.2.0



More information about the mesa-dev mailing list