[Mlir-commits] [mlir] [mlir][spirv] Add mgpu* wrappers for Vulkan runtime, migrate some tests (PR #123114)

Andrea Faulds llvmlistbot at llvm.org
Thu Jan 16 07:55:40 PST 2025


================
@@ -26,6 +28,37 @@
 
 namespace {
 
+class VulkanModule;
+
+// Class to be a thing that can be returned from `mgpuModuleGetFunction`.
+struct VulkanFunction {
+  VulkanModule *module;
+  std::string name;
+
+  VulkanFunction(VulkanModule *module, const char *name)
+      : module(module), name(name) {}
+};
+
+// Class to own a copy of the SPIR-V provided to `mgpuModuleLoad` and to manage
+// allocation of pointers returned from `mgpuModuleGetFunction`.
+class VulkanModule {
+public:
+  VulkanModule(const char *ptr, size_t size) : blob(ptr, ptr + size) {}
+  ~VulkanModule() = default;
+
+  VulkanFunction *getFunction(const char *name) {
+    return functions.emplace_back(std::make_unique<VulkanFunction>(this, name))
+        .get();
+  }
+
+  uint8_t *blobData() { return reinterpret_cast<uint8_t *>(blob.data()); }
+  uint32_t blobSize() { return static_cast<uint32_t>(blob.size()); }
----------------
andfau-amd wrote:

I don't want to add units because I think it creates a false sense of security. You can only really tell if the code is correct by auditing the whole chain, and what the code actually does and the types it uses are a stronger signal than names or comments. The implementation of `VulkanModule` speaks for itself.

https://github.com/llvm/llvm-project/pull/123114


More information about the Mlir-commits mailing list