void ShadingContext::record_error (ErrorHandler::ErrCode code, const std::string &text) const { m_buffered_errors.push_back (ErrorItem(code,text)); // If we aren't buffering, just process immediately if (! shadingsys().m_buffer_printf) process_errors (); }
ShadingContext::~ShadingContext () { process_errors (); m_shadingsys.m_stat_contexts -= 1; for (RegexMap::iterator it = m_regex_map.begin(); it != m_regex_map.end(); ++it) { delete it->second; } free_dict_resources (); }
int main() { /* Implementation defined. Set this to your initial id. */ if (sos_my_id() != 0) { printf("I am a child with pid: %d.\n", sos_my_id()); /* Try to delete our parent. Once again this is implementation defined.*/ assert(sos_process_delete(sos_my_id() - 1) == -1); assert(sos_process_wait(sos_my_id() - 1) == -1); printf("Child test exited successfully.\n"); return 0; } printf("Running timer error tests.\n"); timer_errors(); printf("Timer error tests passed.\n"); printf("Running file error tests.\n"); file_errors(); printf("File error tests passed.\n"); printf("Running memory error tests.\n"); printf("Warning: Here be implementation specific dragons.\n"); memory_errors(); printf("Memory error tests passed.\n"); printf("Running process error tests.\n"); process_errors(); printf("Process error tests passed.\n"); // TODO(karl): Write share vm tests. printf("Running crash tests. You need to manually comment out individual lines.\n"); crash_errors(); assert(!"Crash tests failed you should never get here!\n"); return 0; }
bool ShadingContext::execute (ShaderGroup &sgroup, ShaderGlobals &ssg, bool run) { m_attribs = &sgroup; // Optimize if we haven't already if (sgroup.nlayers()) { sgroup.start_running (); if (! sgroup.optimized()) { shadingsys().optimize_group (sgroup); if (shadingsys().m_greedyjit && shadingsys().m_groups_to_compile_count) { // If we are greedily JITing, optimize/JIT everything now shadingsys().optimize_all_groups (); } } if (sgroup.does_nothing()) return false; } else { // empty shader - nothing to do! return false; } int profile = shadingsys().m_profile; OIIO::Timer timer (profile); // Allocate enough space on the heap size_t heap_size_needed = sgroup.llvm_groupdata_size(); if (heap_size_needed > m_heap.size()) { if (shadingsys().debug()) info (" ShadingContext %p growing heap to %llu", this, (unsigned long long) heap_size_needed); m_heap.resize (heap_size_needed); } // Zero out the heap memory we will be using if (shadingsys().m_clearmemory) memset (&m_heap[0], 0, heap_size_needed); // Set up closure storage m_closure_pool.clear(); // Clear the message blackboard m_messages.clear (); // Clear miscellaneous scratch space m_scratch_pool.clear (); if (run) { ssg.context = this; ssg.renderer = renderer(); ssg.Ci = NULL; RunLLVMGroupFunc run_func = sgroup.llvm_compiled_version(); DASSERT (run_func); DASSERT (sgroup.llvm_groupdata_size() <= m_heap.size()); run_func (&ssg, &m_heap[0]); } // Process any queued up error messages, warnings, printfs from shaders process_errors (); if (profile) { long long ticks = timer.ticks(); shadingsys().m_stat_total_shading_time_ticks += ticks; sgroup.m_stat_total_shading_time_ticks += ticks; } return true; }