summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/clover/spirv/invocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/clover/spirv/invocation.cpp')
-rw-r--r--src/gallium/state_trackers/clover/spirv/invocation.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/clover/spirv/invocation.cpp b/src/gallium/state_trackers/clover/spirv/invocation.cpp
index fbcbbe8cd19..fa5b4dba606 100644
--- a/src/gallium/state_trackers/clover/spirv/invocation.cpp
+++ b/src/gallium/state_trackers/clover/spirv/invocation.cpp
@@ -680,6 +680,30 @@ clover::spirv::is_valid_spirv(const std::vector<char> &binary,
return spvTool.Validate(reinterpret_cast<const uint32_t *>(binary.data()),
binary.size() / 4u);
}
+
+std::string
+clover::spirv::print_module(const std::vector<char> &binary,
+ const std::string &opencl_version) {
+ const spv_target_env target_env =
+ convert_opencl_str_to_target_env(opencl_version);
+ spvtools::SpirvTools spvTool(target_env);
+ spv_context spvContext = spvContextCreate(target_env);
+ if (!spvContext)
+ return "Failed to create an spv_context for disassembling the module.";
+
+ spv_text disassembly;
+ spvBinaryToText(spvContext,
+ reinterpret_cast<const uint32_t *>(binary.data()),
+ binary.size() / 4u, SPV_BINARY_TO_TEXT_OPTION_NONE,
+ &disassembly, nullptr);
+ spvContextDestroy(spvContext);
+
+ const std::string disassemblyStr = disassembly->str;
+ spvTextDestroy(disassembly);
+
+ return disassemblyStr;
+}
+
#else
bool
clover::spirv::is_valid_spirv(const std::vector<char> &/*binary*/,
@@ -702,4 +726,10 @@ clover::spirv::link_program(const std::vector<module> &/*modules*/,
r_log += "SPIR-V support in clover is not enabled.\n";
throw error(CL_LINKER_NOT_AVAILABLE);
}
+
+std::string
+clover::spirv::print_module(const std::vector<char> &binary,
+ const std::string &opencl_version) {
+ return std::string();
+}
#endif