int C_DECL Hlsl2Glsl_Initialize(GlobalAllocateFunction alloc, GlobalFreeFunction free, void* user) { TInfoSink infoSink; bool ret = true; SetGlobalAllocationAllocator(alloc, free, user); if (!InitProcess()) return 0; // This method should be called once per process. If its called by multiple threads, then // we need to have thread synchronization code around the initialization of per process // global pool allocator if (!PerProcessGPA) { TPoolAllocator *builtInPoolAllocator = new TPoolAllocator(true); builtInPoolAllocator->push(); TPoolAllocator* gPoolAllocator = &GlobalPoolAllocator; SetGlobalPoolAllocatorPtr(builtInPoolAllocator); TSymbolTable symTables[EShLangCount]; GenerateBuiltInSymbolTable(infoSink, symTables, EShLangCount); PerProcessGPA = new TPoolAllocator(true); PerProcessGPA->push(); SetGlobalPoolAllocatorPtr(PerProcessGPA); SymbolTables[EShLangVertex].copyTable(symTables[EShLangVertex]); SymbolTables[EShLangFragment].copyTable(symTables[EShLangFragment]); SetGlobalPoolAllocatorPtr(gPoolAllocator); symTables[EShLangVertex].pop(); symTables[EShLangFragment].pop(); initializeHLSLSupportLibrary(); builtInPoolAllocator->popAll(); delete builtInPoolAllocator; } return ret ? 1 : 0; }
// // Driver must call this first, once, before doing any other // compiler/linker operations. // int ShInitialize() { TInfoSink infoSink; bool ret = true; if (!InitProcess()) return 0; // This method should be called once per process. If its called by multiple threads, then // we need to have thread synchronization code around the initialization of per process // global pool allocator if (!PerProcessGPA) { TPoolAllocator *builtInPoolAllocator = new TPoolAllocator(true); builtInPoolAllocator->push(); TPoolAllocator* gPoolAllocator = &GlobalPoolAllocator; SetGlobalPoolAllocatorPtr(builtInPoolAllocator); TSymbolTable symTables[EShLangCount]; GenerateBuiltInSymbolTable(0, infoSink, symTables); PerProcessGPA = new TPoolAllocator(true); PerProcessGPA->push(); SetGlobalPoolAllocatorPtr(PerProcessGPA); SymbolTables[EShLangVertex].copyTable(symTables[EShLangVertex]); SymbolTables[EShLangFragment].copyTable(symTables[EShLangFragment]); SetGlobalPoolAllocatorPtr(gPoolAllocator); symTables[EShLangVertex].pop(); symTables[EShLangFragment].pop(); builtInPoolAllocator->popAll(); delete builtInPoolAllocator; } return ret ? 1 : 0; }
int C_DECL Hlsl2Glsl_Initialize() { TInfoSink infoSink; if (!InitProcess()) return 0; if (!PerProcessGPA) { TPoolAllocator *builtInPoolAllocator = new TPoolAllocator(); builtInPoolAllocator->push(); TPoolAllocator* gPoolAllocator = &GlobalPoolAllocator; SetGlobalPoolAllocatorPtr(builtInPoolAllocator); TSymbolTable symTables[EShLangCount]; GenerateBuiltInSymbolTable(infoSink, symTables, EShLangCount); PerProcessGPA = new TPoolAllocator(); PerProcessGPA->push(); SetGlobalPoolAllocatorPtr(PerProcessGPA); SymbolTables[EShLangVertex].copyTable(symTables[EShLangVertex]); SymbolTables[EShLangFragment].copyTable(symTables[EShLangFragment]); SetGlobalPoolAllocatorPtr(gPoolAllocator); symTables[EShLangVertex].pop(); symTables[EShLangFragment].pop(); builtInPoolAllocator->popAll(); delete builtInPoolAllocator; } return 1; }