// SPDX-License-Identifier: Apache-2.0 #pragma once #include #include #include /** * Compile a single glslang source from string value. This is only meant * to be used for testing as it's non threadsafe, and it had to be removed * from the glslang dependency and now can only run the CLI directly due to * license issues: see https://github.com/KomputeProject/kompute/pull/235 * * @param source An individual raw glsl shader in string format * @return The compiled SPIR-V binary in unsigned int32 format */ static std::vector compileSource( const std::string& source) { std::ofstream fileOut("tmp_kp_shader.comp"); fileOut << source; fileOut.close(); if (system(std::string("glslangValidator -V tmp_kp_shader.comp -o tmp_kp_shader.comp.spv").c_str())) throw std::runtime_error("Error running glslangValidator command"); std::ifstream fileStream("tmp_kp_shader.comp.spv", std::ios::binary); std::vector buffer; buffer.insert(buffer.begin(), std::istreambuf_iterator(fileStream), {}); return {(uint32_t*)buffer.data(), (uint32_t*)(buffer.data() + buffer.size())}; }