April 8, 2021, 13:06 (GMT) |
Cycles: Improvements for the resolution divider calculation * Do not report render and denoising time if render has been cancelled. It is not possible to estimate full rendering time from a cancelled state, and reporting wrong time gives the scheduler the wrong idea about how fast render is. * Use timing of the first sample to calculate start resolution divider. This timing is more accurate, because in viewport is known to include a single sample, and it resembles performance better because later on multiple samples might be scheduled, making it seen that render is faster. * Add some tolerance to the desired timing, so that if the higher resolution gives close enough timing we use higher resolution. This solves resolution divider bouncing between two values on a boundary values of render time (however, it does not eliminate requirement of hysteresis to really ensure this). Some utilities became public, so that they can be covered with the tests. This is mainly to verify own mental math, but also to allow to play with analytical formulas without breaking things. |
April 8, 2021, 13:06 (GMT) |
Cycles: Stop rendering as quickly as possible The goal is to make it so stopping viewport render will happen as quick as possible. For example, when existing render mode or when opening a file browser. There is no need to wait for the viewport to be uniformly sampled in those cases. |
April 7, 2021, 16:43 (GMT) |
Cleanup: allocate active path arrays once in advance In practice the size of this matches the max path states anyway, avoiding reallocation in the middle of queueing kernels will simplify some things later. |
April 7, 2021, 16:43 (GMT) |
Cleanup: rename IntegratorPathQueue for clarity It's only counting the queue sizes, it's not the actual queue. |
April 7, 2021, 16:43 (GMT) |
Cycles: add shader sorting for shade_surface kernel * intersect_closest and intersect_subsurface compute a sorting key and with atomics count how many paths are queued for each key. * Then we compute the prefix sum of the sorting keys, and use that for sorting paths according to the key in a single pass with atomics. |
April 7, 2021, 16:43 (GMT) |
Cycles: disable megakernel for now, see code comments |
April 7, 2021, 16:43 (GMT) |
Cycles: add debug logging for CUDA device queue |
April 7, 2021, 16:43 (GMT) |
Cycles: allocate Scene in Session, pass DeviceScene to path trace work Needed for shader sorting. |
April 7, 2021, 16:18 (GMT) |
Cycles: Bring OptiX denoiser back Basically putting old code to be used by the new denoiser implementation in the integrator. The main denoising function in the OptiXDevice was split, to make it easier to follow and understand what's going on. The current limitation is that currently it only works when rendering on the OptiX device. Attempts to render on CPU and denoise on OptiX will currently error out (error is printed to the console, denoising is not run). This will be worked on next. |
April 7, 2021, 12:16 (GMT) |
Cycles: Move multi-device workaround to the PathTrace This change makes it so the actual device is actually created with all denoising devices in it. Noticed when started working on OptiX denoiser and had CPU render device (the OptiX device was never created). |
April 7, 2021, 12:16 (GMT) |
Cycles: Simplify TileManager Prepare it for being used for big tile scheduling and not worry about samples and sample ranges. Rather straightforward removal of unused code. The only part which still does not feel fully ideal is that the Session now needs to hold buffer parameters. Not sure whether there is a better place for them. The pixel progress is now fully disabled. It was not updated anyway, so within the current state of the project this is not a regression. The status report needs to be worked on and this is part of the TODO. |
April 7, 2021, 12:16 (GMT) |
Cycles: Pass DeviceInfo by const reference |
April 7, 2021, 12:16 (GMT) |
Cycles: Some basements for the OptiX denoiser The actual logic is not implemented, but some initial APIs are in place. The main purpose of this change is to make sure the device for OptiX denoiser is actually created and available. Still some work is needed to create denoiser on an appropriate device but this better to happen as a followup development, because it will require some deeper logic change somewhere. |
April 7, 2021, 12:16 (GMT) |
Cycles: Remove unused task pool from CUDA device |
April 7, 2021, 12:16 (GMT) |
Cycles: Remove task API from denoising parameters |
April 7, 2021, 12:16 (GMT) |
Cycles: Mark path trace TODO as solved The scheduling block is what the PathTraceWorkGPU is doing with the maximum number of path states. |
April 7, 2021, 12:16 (GMT) |
Cycles: Rename device_task to device_denoise The file only contained denoiser settings and parameters, so renaming to better match content from the file name. The task is nowhere used anymore. |
April 7, 2021, 12:16 (GMT) |
Cycles: Remove adaptive stopping per sample capability It is supposed to be always supported. Without it is not really possible to do an efficient adaptive stopping on a big tile scale. |
April 7, 2021, 12:16 (GMT) |
Cycles: Remove unused forward declarations in the device Arguably, they are bad level calls as well. |
April 7, 2021, 12:16 (GMT) |
Cycles: Don't link device against render Seems that device does not use render types anymore, and from architecture point of view it should not use it. |
|