@@ -69,9 +69,11 @@ const IECore::InternedString g_sampleFilterOption( "ri:samplefilter" );
6969const IECore::InternedString g_pixelFilterNameOption ( " ri:Ri:PixelFilterName" );
7070const IECore::InternedString g_pixelFilterWidthOption ( " ri:Ri:PixelFilterWidth" );
7171const IECore::InternedString g_pixelVarianceOption ( " ri:Ri:PixelVariance" );
72+ const IECore::InternedString g_progressModeOption ( " ri:progressMode" );
7273const IECore::InternedString g_xpuCPUConfigOption ( " ri:xpuCpuConfig" );
7374const IECore::InternedString g_xpuGPUConfigOption ( " ri:xpuGpuConfig" );
7475
76+ const RtUString g_progressModeParameter ( " progressMode" );
7577const RtUString g_xpuCPUConfigParameter ( " xpu:cpuconfig" );
7678ConstDataPtr g_xpuCPUConfigDefault = new IntData( 1 );
7779// We default GPUs to off, on the assumption that most rendering will still occur
@@ -194,6 +196,11 @@ Globals::Globals( RtUString rileyVariant, IECoreScenePreview::Renderer::RenderTy
194196 m_options.SetString ( Loader::strings ().k_bucket_order , RtUString ( " circle" ) );
195197 }
196198
199+ m_renderParameters.SetString (
200+ RtUString ( " renderMode" ),
201+ renderType == IECoreScenePreview::Renderer::RenderType::Interactive ? RtUString ( " interactive" ) : RtUString ( " batch" )
202+ );
203+
197204 for ( const auto &[name, value] : g_lpeLobeDefaults )
198205 {
199206 // Set up default lobe definitions.
@@ -337,6 +344,25 @@ void Globals::option( const IECore::InternedString &name, const IECore::Object *
337344 auto data = optionCast<const Data>( value, name );
338345 ParamListAlgo::convertParameter ( g_xpuGPUConfigParameter, data ? data : g_xpuGPUConfigDefault.get (), m_rileyParameters );
339346 }
347+ else if ( name == g_progressModeOption )
348+ {
349+ if ( auto *d = optionCast<const IntData>( value, name ) )
350+ {
351+ // This is the XPU way of requesting progress reporting - an undocumented
352+ // parameter passed to the `Riley::Render()` call.
353+ m_renderParameters.SetInteger ( RtUString ( " progressMode" ), d->readable () );
354+ // But RIS wants progress specified as a "command line argument" to
355+ // `PRManRenderBegin()` instead, so we smuggle the value into `Session.cpp`
356+ // via `m_options` as well.
357+ // / \todo Remove when RIS is no longer.
358+ m_options.SetInteger ( RtUString ( " progressMode" ), d->readable () );
359+ }
360+ else
361+ {
362+ m_renderParameters.Remove ( RtUString ( " progressMode" ) );
363+ m_options.Remove ( RtUString ( " progressMode" ) );
364+ }
365+ }
340366 else if ( boost::starts_with ( name.c_str (), " ri:lpe:" ) )
341367 {
342368 const RtUString renderManName ( name.c_str () + g_renderManPrefix.size () );
@@ -532,18 +558,14 @@ void Globals::render()
532558 switch ( m_session->renderType )
533559 {
534560 case IECoreScenePreview::Renderer::Batch : {
535- RtParamList renderOptions;
536- renderOptions.SetString ( RtUString ( " renderMode" ), RtUString ( " batch" ) );
537- m_session->riley ->Render ( { 1 , &m_renderView }, renderOptions );
561+ m_session->riley ->Render ( { 1 , &m_renderView }, m_renderParameters );
538562 break ;
539563 }
540564 case IECoreScenePreview::Renderer::Interactive :
541565 // / \todo Would it reduce latency if we reused the same thread?
542566 m_interactiveRenderThread = std::thread (
543567 [this ] {
544- RtParamList renderOptions;
545- renderOptions.SetString ( RtUString ( " renderMode" ), RtUString ( " interactive" ) );
546- m_session->riley ->Render ( { 1 , &m_renderView }, renderOptions );
568+ m_session->riley ->Render ( { 1 , &m_renderView }, m_renderParameters );
547569 }
548570 );
549571 break ;
0 commit comments