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')
-rw-r--r--intern/cycles/blender/image.cpp10
-rw-r--r--intern/cycles/blender/image.h2
-rw-r--r--intern/cycles/blender/shader.cpp8
3 files changed, 14 insertions, 6 deletions
diff --git a/intern/cycles/blender/image.cpp b/intern/cycles/blender/image.cpp
index 3ea3a47c1f4..4f5744d86a8 100644
--- a/intern/cycles/blender/image.cpp
+++ b/intern/cycles/blender/image.cpp
@@ -24,8 +24,14 @@ CCL_NAMESPACE_BEGIN
/* Packed Images */
-BlenderImageLoader::BlenderImageLoader(BL::Image b_image, int frame)
- : b_image(b_image), frame(frame), free_cache(!b_image.has_data())
+BlenderImageLoader::BlenderImageLoader(BL::Image b_image,
+ const int frame,
+ const bool is_preview_render)
+ : b_image(b_image),
+ frame(frame),
+ /* Don't free cache for preview render to avoid race condition from T93560, to be fixed
+ properly later as we are close to release. */
+ free_cache(!is_preview_render && !b_image.has_data())
{
}
diff --git a/intern/cycles/blender/image.h b/intern/cycles/blender/image.h
index 6f1e72c21af..b4aa4299ed1 100644
--- a/intern/cycles/blender/image.h
+++ b/intern/cycles/blender/image.h
@@ -25,7 +25,7 @@ CCL_NAMESPACE_BEGIN
class BlenderImageLoader : public ImageLoader {
public:
- BlenderImageLoader(BL::Image b_image, int frame);
+ BlenderImageLoader(BL::Image b_image, const int frame, const bool is_preview_render);
bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override;
bool load_pixels(const ImageMetaData &metadata,
diff --git a/intern/cycles/blender/shader.cpp b/intern/cycles/blender/shader.cpp
index 0cd9052b47a..0f17834906d 100644
--- a/intern/cycles/blender/shader.cpp
+++ b/intern/cycles/blender/shader.cpp
@@ -762,7 +762,8 @@ static ShaderNode *add_node(Scene *scene,
int scene_frame = b_scene.frame_current();
int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame);
image->handle = scene->image_manager->add_image(
- new BlenderImageLoader(b_image, image_frame), image->image_params());
+ new BlenderImageLoader(b_image, image_frame, b_engine.is_preview()),
+ image->image_params());
}
else {
ustring filename = ustring(
@@ -797,8 +798,9 @@ static ShaderNode *add_node(Scene *scene,
if (is_builtin) {
int scene_frame = b_scene.frame_current();
int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame);
- env->handle = scene->image_manager->add_image(new BlenderImageLoader(b_image, image_frame),
- env->image_params());
+ env->handle = scene->image_manager->add_image(
+ new BlenderImageLoader(b_image, image_frame, b_engine.is_preview()),
+ env->image_params());
}
else {
env->set_filename(