#include "LumeLib.h" #include #include #include #include #include #include #include #include namespace lume { mlir::OwningOpRef CompileSPVToMLIR(std::unique_ptr input, mlir::MLIRContext &context, mlir::spirv::DeserializationOptions &options) { if (!input) { return nullptr; } const auto *start = input->getBufferStart(); const auto size = input->getBufferSize(); if (size % sizeof(uint32_t) != 0) { return nullptr; } const auto binary = llvm::ArrayRef( reinterpret_cast(start), size / sizeof(uint32_t)); return mlir::spirv::deserialize(binary, &context, options); } llvm::LogicalResult ConvertSPVDialectToLLVMDialect( mlir::MLIRContext &context, mlir::ModuleOp *module) { if (!module) { return llvm::failure(); } mlir::ConvertSPIRVToLLVMPassOptions options; options.clientAPI = mlir::spirv::ClientAPI::Vulkan; mlir::PassManager pm(&context); pm.addPass(mlir::createConvertSPIRVToLLVMPass(options)); return pm.run(*module); } }