Skip to content

Commit 6b1f68c

Browse files
committed
don't perform the reparameter write/memcpy if we couldn't find the parameter
in the live-params records Signed-off-by: Clifford Stein <[email protected]>
1 parent 915b3fa commit 6b1f68c

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

src/liboslexec/shadingsys.cpp

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3412,30 +3412,36 @@ ShadingSystemImpl::ReParameter(ShaderGroup& group, string_view layername_,
34123412
return false;
34133413

34143414
// Do the deed
3415-
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;
3415+
int offset = group.interactive_param_offset(layerindex, sym->name());
3416+
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(
3427+
*reinterpret_cast<const ustring*>(val));
3428+
payload = &string_hash;
3429+
} else
3430+
payload = val;
3431+
3432+
if (memcmp(group.interactive_arena_ptr() + offset, payload, size)) {
3433+
memcpy(group.interactive_arena_ptr() + offset, payload,
3434+
type.size());
3435+
if (use_optix())
3436+
renderer()->copy_to_device(
3437+
group.device_interactive_arena().d_get() + offset, payload,
3438+
type.size());
3439+
m_stat_reparam_calls_changed += 1;
3440+
m_stat_reparam_bytes_changed += size;
3441+
}
3442+
return true;
34263443
} else
3427-
payload = val;
3428-
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;
3437-
}
3438-
return true;
3444+
return true;
34393445
}
34403446

34413447

0 commit comments

Comments
 (0)