diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-01-06 18:41:44 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-01-07 19:20:04 +0300 |
commit | ae28d90578be516bf81f3532846c29f9985f1085 (patch) | |
tree | c34a11d1d63829beb4178fcfcd59ab895729d18b /intern/cycles/integrator/path_trace.h | |
parent | efe3d60a2c8306aefd41bc304548da35b67c252c (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.h')
-rw-r--r-- | intern/cycles/integrator/path_trace.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/intern/cycles/integrator/path_trace.h b/intern/cycles/integrator/path_trace.h index 9b079352a63..bb41c8c3210 100644 --- a/intern/cycles/integrator/path_trace.h +++ b/intern/cycles/integrator/path_trace.h @@ -72,7 +72,9 @@ class PathTrace { * render result. */ bool ready_to_reset(); - void reset(const BufferParams &full_params, const BufferParams &big_tile_params); + void reset(const BufferParams &full_params, + const BufferParams &big_tile_params, + bool reset_rendering); void device_free(); @@ -112,6 +114,9 @@ class PathTrace { /* Perform drawing of the current state of the DisplayDriver. */ void draw(); + /* Flush outstanding display commands before ending the render loop. */ + void flush_display(); + /* Cancel rendering process as soon as possible, without waiting for full tile to be sampled. * Used in cases like reset of render session. * |