From 0fa1c65ee30d5a9e742ab313de440d44424e427e Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Wed, 4 May 2022 20:05:59 +0200 Subject: Fix T95644: Cycles doesn't update modified object attributes on GPU evice_update_preprocess is supposed to detect modified attributes and flag the device_vector for a copy through device_update_flags. However, since object attributes are only created in device_update_attributes afterwards, they can't be included in that check. Change the function that actually updates the device_vector to tag it as modified as soon as its content gets updated. Differential Revision: https://developer.blender.org/D14815 --- intern/cycles/scene/geometry.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/intern/cycles/scene/geometry.cpp b/intern/cycles/scene/geometry.cpp index 349d8ad39c7..9152abacbdb 100644 --- a/intern/cycles/scene/geometry.cpp +++ b/intern/cycles/scene/geometry.cpp @@ -618,6 +618,7 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom, for (size_t k = 0; k < size; k++) { attr_uchar4[offset + k] = data[k]; } + attr_uchar4.tag_modified(); } attr_uchar4_offset += size; } @@ -630,6 +631,7 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom, for (size_t k = 0; k < size; k++) { attr_float[offset + k] = data[k]; } + attr_float.tag_modified(); } attr_float_offset += size; } @@ -642,6 +644,7 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom, for (size_t k = 0; k < size; k++) { attr_float2[offset + k] = data[k]; } + attr_float2.tag_modified(); } attr_float2_offset += size; } @@ -654,6 +657,7 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom, for (size_t k = 0; k < size * 3; k++) { attr_float4[offset + k] = (&tfm->x)[k]; } + attr_float4.tag_modified(); } attr_float4_offset += size * 3; } @@ -666,6 +670,7 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom, for (size_t k = 0; k < size; k++) { attr_float4[offset + k] = data[k]; } + attr_float4.tag_modified(); } attr_float4_offset += size; } @@ -678,6 +683,7 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom, for (size_t k = 0; k < size; k++) { attr_float3[offset + k] = data[k]; } + attr_float3.tag_modified(); } attr_float3_offset += size; } -- cgit v1.2.3