Fix #35102: crash with experimental cycles displacement feature due to
uninitialized memory usage.
This commit is contained in:
@@ -889,7 +889,7 @@ void MeshManager::device_update(Device *device, DeviceScene *dscene, Scene *scen
|
||||
bool displacement_done = false;
|
||||
|
||||
foreach(Mesh *mesh, scene->meshes)
|
||||
if(mesh->need_update && displace(device, scene, mesh, progress))
|
||||
if(mesh->need_update && displace(device, dscene, scene, mesh, progress))
|
||||
displacement_done = true;
|
||||
|
||||
/* todo: properly handle cancel halfway displacement */
|
||||
|
@@ -140,7 +140,7 @@ public:
|
||||
MeshManager();
|
||||
~MeshManager();
|
||||
|
||||
bool displace(Device *device, Scene *scene, Mesh *mesh, Progress& progress);
|
||||
bool displace(Device *device, DeviceScene *dscene, Scene *scene, Mesh *mesh, Progress& progress);
|
||||
|
||||
/* attributes */
|
||||
void update_osl_attributes(Device *device, Scene *scene, vector<AttributeRequestSet>& mesh_attributes);
|
||||
|
@@ -28,7 +28,7 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& progress)
|
||||
bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Mesh *mesh, Progress& progress)
|
||||
{
|
||||
/* verify if we have a displacement shader */
|
||||
bool has_displacement = false;
|
||||
@@ -106,6 +106,9 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p
|
||||
device_vector<float4> d_output;
|
||||
d_output.resize(d_input_size);
|
||||
|
||||
/* needs to be up to data for attribute access */
|
||||
device->const_copy_to("__data", &dscene->data, sizeof(dscene->data));
|
||||
|
||||
device->mem_alloc(d_input, MEM_READ_ONLY);
|
||||
device->mem_copy_to(d_input);
|
||||
device->mem_alloc(d_output, MEM_WRITE_ONLY);
|
||||
|
Reference in New Issue
Block a user