Pass* Technique::CreatePass(StringHash type) { Pass* oldPass = GetPass(type); if (oldPass) return oldPass; SharedPtr<Pass> newPass(new Pass(type)); passes_.Insert(type.Value(), newPass); return newPass; }
Pass* Technique::CreatePass(StringHash type) { /// \todo Memory use is not tracked when creating passes programmatically due to HashTable not returning the element count Pass* oldPass = GetPass(type); if (oldPass) return oldPass; SharedPtr<Pass> newPass(new Pass(type)); passes_.Insert(type.Value(), newPass); return newPass; }
Pass* Technique::CreatePass(const ea::string& name) { Pass* oldPass = GetPass(name); if (oldPass) return oldPass; ea::shared_ptr<Pass> newPass(new Pass(name)); unsigned passIndex = newPass->GetIndex(); if (passIndex >= passes_.size()) passes_.resize(passIndex + 1); passes_[passIndex] = newPass; // Calculate memory use now SetMemoryUse((unsigned)(sizeof(Technique) + GetNumPasses() * sizeof(Pass))); return newPass; }
sourcefile_t *assemble(void) { sourcefile_t *src; newPass(); if( (src=newSourcefile())!=NULL && cmdlineSourcefile(src, cmdLineSrc, cmdLineSrc_count) ) { do { pass_cnt++; if( cfg_verbose ) { printf("[pass %d]\n", pass_cnt); } if( !pass_parse(src) ) { delSourcefile(src); src = NULL; break; } if( cfg_debug ) { fprintf(debugLog, "<hr width=\"100%%\">\n<h1>[pass %d]</h1><p>\n", pass_cnt); fprintf(debugLog, "<hr width=\"100%%\">\n<h2>LABELS</h2><p>\n"); dump(debugLog, (localdepth_t)-1,true); fprintf(debugLog, "<hr width=\"100%%\">\n<h2>SOURCE</h2><p>\n"); src_debug(src, debugLog); segment_debug(debugLog); } if( cfg_verbose ) { printf("\n"); } if( cfg_verbose && errorcnt==0 ) { if( allBytesResolved ) { printf("All bytes resolved\n"); } else { printf("Unresolved bytes left\n"); } /* if( resolvedSomething() ) { printf("Undefined vars resolved in this pass\n"); } else { printf("No undefined vars resolved in this pass\n"); } */ } } while( errorcnt==0 && resolvedSomething() && !allBytesResolved ); } return src; }