#include "slang-spirv-val.h" namespace Slang { SlangResult disassembleSPIRV(const List& spirv, String& outErr, String& outDis) { // Set up our process CommandLine commandLine; commandLine.m_executableLocation.setName("spirv-dis"); commandLine.addArg("--comment"); commandLine.addArg("--color"); RefPtr p; // If we failed to even start the process, then validation isn't available SLANG_RETURN_ON_FAIL(Process::create(commandLine, 0, p)); const auto in = p->getStream(StdStreamType::In); const auto out = p->getStream(StdStreamType::Out); const auto err = p->getStream(StdStreamType::ErrorOut); List outData; List outErrData; SLANG_RETURN_ON_FAIL(StreamUtil::readAndWrite(in, spirv.getArrayView(), out, outData, err, outErrData)); SLANG_RETURN_ON_FAIL(p->waitForTermination(10)); outDis = String( reinterpret_cast(outData.begin()), reinterpret_cast(outData.end()) ); outErr = String( reinterpret_cast(outErrData.begin()), reinterpret_cast(outErrData.end()) ); const auto ret = p->getReturnValue(); return ret == 0 ? SLANG_OK : SLANG_FAIL; } }