Skip to content

Commit 763d1f8

Browse files
committed
don't perform the reparameter write/memcpy if we couldn't find the parameter
in the live-params records
1 parent 915b3fa commit 763d1f8

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

src/liboslexec/shadingsys.cpp

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)