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:
authorBrecht Van Lommel <brecht@blender.org>2022-01-06 18:41:44 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-01-07 19:20:04 +0300
commitae28d90578be516bf81f3532846c29f9985f1085 (patch)
treec34a11d1d63829beb4178fcfcd59ab895729d18b /intern/cycles/integrator/path_trace_work.cpp
parentefe3d60a2c8306aefd41bc304548da35b67c252c (diff)
Fix T93350: Cycles renders shows black during rendering huge resolutions
The root of the issue is caused by Cycles ignoring OpenGL limitation on the maximum resolution of textures: Cycles was allocating texture of the final render resolution. It was exceeding limitation on certain GPUs and driver. The idea is simple: use multiple textures for the display, each of which will fit into OpenGL limitations. There is some code which allows the display driver to know when to start the new tile. Also added some code to allow force graphics interop to be re-created. The latter one ended up not used in the final version of the patch, but it might be helpful for other drivers implementation. The tile size is limited to 8K now as it is the safest size for textures on many GPUs and OpenGL drivers. This is an updated fix with a workaround for freezing with the NVIDIA driver on Linux. Differential Revision: https://developer.blender.org/D13385
Diffstat (limited to 'intern/cycles/integrator/path_trace_work.cpp')
-rw-r--r--intern/cycles/integrator/path_trace_work.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/intern/cycles/integrator/path_trace_work.cpp b/intern/cycles/integrator/path_trace_work.cpp
index b0c40cfe15c..4ecc7d775ee 100644
--- a/intern/cycles/integrator/path_trace_work.cpp
+++ b/intern/cycles/integrator/path_trace_work.cpp
@@ -194,10 +194,10 @@ PassAccessor::Destination PathTraceWork::get_display_destination_template(
PassAccessor::Destination destination(film_->get_display_pass());
const int2 display_texture_size = display->get_texture_size();
- const int texture_x = effective_buffer_params_.full_x - effective_full_params_.full_x +
- effective_buffer_params_.window_x;
- const int texture_y = effective_buffer_params_.full_y - effective_full_params_.full_y +
- effective_buffer_params_.window_y;
+ const int texture_x = effective_buffer_params_.full_x - effective_big_tile_params_.full_x +
+ effective_buffer_params_.window_x - effective_big_tile_params_.window_x;
+ const int texture_y = effective_buffer_params_.full_y - effective_big_tile_params_.full_y +
+ effective_buffer_params_.window_y - effective_big_tile_params_.window_y;
destination.offset = texture_y * display_texture_size.x + texture_x;
destination.stride = display_texture_size.x;