March 19, 2021, 15:58 (GMT) |
Cleanup: add utility functions write writing ray and isect to integrator state |
March 19, 2021, 15:57 (GMT) |
Fix CUDA runtime compilation after last commit |
March 19, 2021, 12:29 (GMT) |
Cleanup: rename and move various files for consistency * Shorten filenames when they are in a device specific folder * Rename kernel/kernels to kernel/device * Move kernel_*_compat.h to kernel/device/*/compat.h * Move kernel_globals.h to kernel/device/*/globals.h * Move kernel.h and filter.h into kernel/device/cpu * Rename path trace work classes from Pixel/Tiled to CPU/GPU * Remove old OpenCL split kernel files |
March 19, 2021, 12:04 (GMT) |
Cycles: Move GPU display texture state tracking to base class While is still not ideal and feels rather fragile, at least now the actual implementation of a sub-class is straightforward and does not require state tracking. |
March 19, 2021, 11:33 (GMT) |
Cycles: refactor CPU/megakernel for more flexible execution order Previously it would call kernels in a fixed order, which becomes harder with a more complex state machine for SSS and volumes. Further, there was code duplication in that kernels would be indicate the next kernel to execute, and check if the current kernel needs to be executed. Instead use queued_kernel on both CPU and GPU, and implement the megakernel as a switch statement using this value. |
March 18, 2021, 18:01 (GMT) |
Fix crash rendering scene without light |
March 18, 2021, 18:01 (GMT) |
Fix OpenImageDenoise link error |
March 18, 2021, 17:15 (GMT) |
Fix Cycles viewport flicker after recent refactor Was a mistake in the modification check of the GPU display parameters. |
March 18, 2021, 16:58 (GMT) |
Cycles: Fix possible missing updates in PathTrace The path tracer schedules multiple samples to render to keep device busy between updates. This was causing an issue with a time check in the update function: it is possible that N samples finished rendering slightly faster than aimed 1 second, so the update callback will not be called. So perceptually rendering was looking sluggish in some scenes, especially at the lower number of samples rendered. Now the frequency of updates is fully under PathTrace::render_samples control. Technically, simple scenes might be rendering slower now, since there will be more updates now. This could be addressed by aiming for a longer render times between updates (schedule more samples to the device) after reaching certain noise level. |
March 18, 2021, 16:33 (GMT) |
Cycles: Fix possible stalling in viewport updates If rendering a sample takes longer than update timeout it was possible to have viewport navigation which will never update a viewport during navigation. For example, rendering on CPU with high start resolution and denoising enabled could have taken a bit more than configured 0.1sec. Before this change the viewport would have only updated after navigation was finished. After this change the viewport will be refreshed at about 10fps, which is better for artists. |
March 18, 2021, 16:33 (GMT) |
Cycles: Remove kernel status from Progress Was a remaining part from feature kernels. The kernel status was never called now, meaning, all the places which were using that status were using an empty string, effectively ignoring it. |
March 18, 2021, 16:33 (GMT) |
Cycles: Fix crash when rendering with OSL enabled Implement move semantic for the CPUKernelThreadGlobals. Without this the way how kernels globals were initialized was using move semantic, but was leaving runtime pointers in original and a moved copy. |
March 18, 2021, 16:33 (GMT) |
Cycles: Remove unused update time tracking |
March 18, 2021, 16:33 (GMT) |
Cycles: Remove unused reset time tracking |
March 18, 2021, 16:33 (GMT) |
Cycles: Log render time from main rendering loop This way it is possible to log render time of viewport. Ideally would need to also be possible to expose it into the interface so that artists can use it for benchmarking as well, but that would be a more intrusive change. |
March 18, 2021, 16:33 (GMT) |
Cycles: Remove duplicated code This was a leftover from run_cpu() times which was doing an explicit reset before main loop iteration. Now this is all handled at the top of the main render loop in run_update_for_next_iteration(). Should be no functional changes. |
March 18, 2021, 16:33 (GMT) |
Cycles: Hide more logic from main render loop No functional changes, just moving decision making logic to a more consolidated place. |
March 18, 2021, 16:33 (GMT) |
Cycles: Fix usage of emplace_back() |
March 18, 2021, 16:33 (GMT) |
Cycles: Initial implementation of GPUDisplay The idea of GPUDisplay is to take care of viewport texture update and drawing in a way that is the same exact from API point of view for both CPU and GPU rendering. This change moves a lot of code and refactors it in a more reusable and isolated building blocks to implement the GPUDIsplay for Blender viewport. The CPU rendering is same exact from users perspective. The GPU rendering currently does not use CUDA OpenGL buffers, which can potentially cause degradation in the performance. There is also a temporary half buffer in BlenderGPUDisplay, because it is not clear yet how to create OpenGL context, so that we can update texture from different thread than the drawing. The update of the GPUDisplay is performed by the Session. Ideally, this will be done in PathTracer so that it can avoid unnecessary updates if sample rendered quick enough. This behavior will need a bit deeper change in a way how TIleManager, Session::render() and PathTracer are communicating to each other. |
March 16, 2021, 17:41 (GMT) |
Cycles: Remove unused draw() return value Should be no functional changes since the return value was never used. |
|