#include #include #include static std::vector spirv_from_string(const std::string& source, shaderc_optimization_level optimization = shaderc_optimization_level_zero, std::vector> definitions = {}) { shaderc::Compiler compiler; shaderc::CompileOptions options; for (const std::pair& def : definitions) { options.AddMacroDefinition(def.first, def.second); } if (optimization) options.SetOptimizationLevel(optimization); std::string errorTag = "kompute"; shaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(source, shaderc_glsl_compute_shader, errorTag.c_str(), options); if (module.GetCompilationStatus() != shaderc_compilation_status_success) { throw std::runtime_error("Shader string invalid: " + module.GetErrorMessage()); } std::vector vi = {module.cbegin(), module.cend()}; auto p = reinterpret_cast(vi.data()); std::vector vc{p, p + vi.size() * sizeof(int)}; return vc; }