@@ -3413,29 +3413,34 @@ ShadingSystemImpl::ReParameter(ShaderGroup& group, string_view layername_,
34133413
34143414 // Do the deed
34153415 int offset = group.interactive_param_offset (layerindex, sym->name ());
3416- size_t size = type.size ();
3417- m_stat_reparam_calls_total += 1 ;
3418- m_stat_reparam_bytes_total += size;
3419-
3420- // Copy ustringhashes instead of ustrings
3421- const void * payload;
3422- ustringhash string_hash;
3423- if (type == TypeDesc::STRING) {
3424- string_hash = ustringhash_from (*reinterpret_cast <const ustring*>(val));
3425- payload = &string_hash;
3426- } else
3427- payload = val;
34283416
3429- if (memcmp (group.interactive_arena_ptr () + offset, payload, size)) {
3430- memcpy (group.interactive_arena_ptr () + offset, payload, type.size ());
3431- if (use_optix ())
3432- renderer ()->copy_to_device (group.device_interactive_arena ().d_get ()
3433- + offset,
3434- payload, type.size ());
3435- m_stat_reparam_calls_changed += 1 ;
3436- m_stat_reparam_bytes_changed += size;
3417+ if (offset >= 0 ) {
3418+ size_t size = type.size ();
3419+ m_stat_reparam_calls_total += 1 ;
3420+ m_stat_reparam_bytes_total += size;
3421+
3422+ // Copy ustringhashes instead of ustrings
3423+ const void * payload;
3424+ ustringhash string_hash;
3425+ if (type == TypeDesc::STRING) {
3426+ string_hash = ustringhash_from (*reinterpret_cast <const ustring*>(val));
3427+ payload = &string_hash;
3428+ } else
3429+ payload = val;
3430+
3431+ if (memcmp (group.interactive_arena_ptr () + offset, payload, size)) {
3432+ memcpy (group.interactive_arena_ptr () + offset, payload, type.size ());
3433+ if (use_optix ())
3434+ renderer ()->copy_to_device (group.device_interactive_arena ().d_get ()
3435+ + offset,
3436+ payload, type.size ());
3437+ m_stat_reparam_calls_changed += 1 ;
3438+ m_stat_reparam_bytes_changed += size;
3439+ }
3440+ return true ;
34373441 }
3438- return true ;
3442+ else
3443+ return true ;
34393444}
34403445
34413446
0 commit comments