Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/mesh_displace.cpp')
-rw-r--r--intern/cycles/render/mesh_displace.cpp26
1 files changed, 12 insertions, 14 deletions
diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp
index 350a56bf185..ab3ae40d931 100644
--- a/intern/cycles/render/mesh_displace.cpp
+++ b/intern/cycles/render/mesh_displace.cpp
@@ -64,8 +64,8 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
/* setup input for device task */
const size_t num_verts = mesh->verts.size();
vector<bool> done(num_verts, false);
- device_vector<uint4> d_input;
- uint4 *d_input_data = d_input.resize(num_verts);
+ device_vector<uint4> d_input(device, "displace_input", MEM_READ_ONLY);
+ uint4 *d_input_data = d_input.alloc(num_verts);
size_t d_input_size = 0;
size_t num_triangles = mesh->num_triangles();
@@ -115,17 +115,14 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
return false;
/* run device task */
- device_vector<float4> d_output;
- d_output.resize(d_input_size);
+ device_vector<float4> d_output(device, "displace_output", MEM_WRITE_ONLY);
+ d_output.alloc(d_input_size);
+ d_output.zero_to_device();
+ d_input.copy_to_device();
/* needs to be up to data for attribute access */
device->const_copy_to("__data", &dscene->data, sizeof(dscene->data));
- device->mem_alloc("displace_input", d_input, MEM_READ_ONLY);
- device->mem_copy_to(d_input);
- device->mem_alloc("displace_output", d_output, MEM_WRITE_ONLY);
- device->mem_zero(d_output);
-
DeviceTask task(DeviceTask::SHADER);
task.shader_input = d_input.device_pointer;
task.shader_output = d_output.device_pointer;
@@ -139,14 +136,13 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
device->task_wait();
if(progress.get_cancel()) {
- device->mem_free(d_input);
- device->mem_free(d_output);
+ d_input.free();
+ d_output.free();
return false;
}
- device->mem_copy_from(d_output, 0, 1, d_output.size(), sizeof(float4));
- device->mem_free(d_input);
- device->mem_free(d_output);
+ d_output.copy_from_device(0, 1, d_output.size());
+ d_input.free();
/* read result */
done.clear();
@@ -183,6 +179,8 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
}
}
+ d_output.free();
+
/* for displacement method both, we only need to recompute the face
* normals, as bump mapping in the shader will already alter the
* vertex normal, so we start from the non-displaced vertex normals