Fix #35102: crash with experimental cycles displacement feature due to

uninitialized memory usage.
This commit is contained in:
Brecht Van Lommel
2013-04-27 02:54:24 +00:00
parent 2b640a2519
commit ac849f98f5
3 changed files with 6 additions and 3 deletions

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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);