GLuint LoadCompileAndLinkShaders(char *vs, char *fs){ // Compile Vertex Shader LoadCode(vs, 0); LoadCode(fs, 1); return CompileAndLinkShaders(&shader_code[0][0], &shader_code[1][0]); }
int C_DECL main(int argc, char* argv[]) { ProcessArguments(argc, argv); if (Options & EOptionDumpConfig) { printf("%s", DefaultConfig); if (Worklist.empty()) return ESuccess; } if (Options & EOptionDumpVersions) { printf("Glslang Version: %s %s\n", GLSLANG_REVISION, GLSLANG_DATE); printf("ESSL Version: %s\n", glslang::GetEsslVersionString()); printf("GLSL Version: %s\n", glslang::GetGlslVersionString()); std::string spirvVersion; glslang::GetSpirvVersion(spirvVersion); printf("SPIR-V Version %s\n", spirvVersion.c_str()); printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision); if (Worklist.empty()) return ESuccess; } if (Worklist.empty()) { usage(); } ProcessConfigFile(); // // Two modes: // 1) linking all arguments together, single-threaded, new C++ interface // 2) independent arguments, can be tackled by multiple asynchronous threads, for testing thread safety, using the old handle interface // if (Options & EOptionLinkProgram || Options & EOptionOutputPreprocessed) { glslang::InitializeProcess(); CompileAndLinkShaders(); glslang::FinalizeProcess(); } else { ShInitialize(); bool printShaderNames = Worklist.size() > 1; if (Options & EOptionMultiThreaded) { const int NumThreads = 16; void* threads[NumThreads]; for (int t = 0; t < NumThreads; ++t) { threads[t] = glslang::OS_CreateThread(&CompileShaders); if (! threads[t]) { printf("Failed to create thread\n"); return EFailThreadCreate; } } glslang::OS_WaitForAllThreads(threads, NumThreads); } else CompileShaders(0); // Print out all the resulting infologs for (int w = 0; w < NumWorkItems; ++w) { if (Work[w]) { if (printShaderNames) PutsIfNonEmpty(Work[w]->name.c_str()); PutsIfNonEmpty(Work[w]->results.c_str()); delete Work[w]; } } ShFinalize(); } if (CompileFailed) return EFailCompile; if (LinkFailed) return EFailLink; return 0; }
int C_DECL main(int argc, char* argv[]) { if (argc < 6) { usage(); return 1; } const char* tempdir = argv[4]; //Options |= EOptionHumanReadableSpv; Options |= EOptionSpv; Options |= EOptionLinkProgram; //Options |= EOptionSuppressInfolog; NumWorkItems = 1; Work = new glslang::TWorkItem*[NumWorkItems]; Work[0] = 0; std::string name(argv[2]); if (!SetConfigFile(name)) { Work[0] = new glslang::TWorkItem(name); Worklist.add(Work[0]); } ProcessConfigFile(); glslang::InitializeProcess(); KrafixIncluder includer(name); krafix::Target target; target.system = getSystem(argv[5]); target.es = false; if (strcmp(argv[1], "d3d9") == 0) { target.lang = krafix::HLSL; target.version = 9; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else if (strcmp(argv[1], "d3d11") == 0) { target.lang = krafix::HLSL; target.version = 11; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else if (strcmp(argv[1], "glsl") == 0) { target.lang = krafix::GLSL; if (target.system == krafix::Linux) target.version = 100; else target.version = 330; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else if (strcmp(argv[1], "essl") == 0) { target.lang = krafix::GLSL; target.version = 100; target.es = true; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else if (strcmp(argv[1], "agal") == 0) { target.lang = krafix::AGAL; target.version = 100; target.es = true; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else if (strcmp(argv[1], "metal") == 0) { target.lang = krafix::Metal; target.version = 1; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else if (strcmp(argv[1], "varlist") == 0) { target.lang = krafix::VarList; target.version = 1; CompileAndLinkShaders(target, argv[3], tempdir, includer); } else { std::cout << "Unknown profile " << argv[1] << std::endl; CompileFailed = true; } glslang::FinalizeProcess(); if (CompileFailed) return EFailCompile; if (LinkFailed) return EFailLink; return 0; }