Posted: Fri Mar 16, 2018 6:07 pm Post subject: Support for multi-core software rendering
Given that openGL renderer is unlikely to happen, it would be great if ZDaemon was capable of utilizing all available cores for rendering.
This could greatly boost performance at CPU intensive rendering tasks such as:
-Middle textures on double sided lines in general
-Translucent textures / sprites
-High resolution textures / sprites
-Mix of the previous two
-Zdaemon's anti aliasing feature in video mode settings
"Other people who work on ZDoom/prBoom/etc. (C/C++ based ports) occasionally reported maximum gains of 10% or so with their own multithreaded renderers, so the general feeling is that they are not worth the effort."
"Affirmative on the first account. I have experimented with multithreading the drawing of wall and sky columns, sky and floor flats, and even masked columns (sprites, transparent textures) in Mocha Doom for at least a year now. You can find posts and reports about this all over DW.
I also tried several multithreading/work distribution strategies. In general, you might get a measurable performance boost only in very specific situations, and then rarely over 10-15% at regular resolutions, when the time to render to the screen is usually a fraction of normal processing. Higher resolutions make multithreading more appealing (I'm always talking about software rendering here), but still nothing to write home about.
Such situations include e.g. rendering many separate visible walls at high resolutions (provided you parallelize by walls and not by columns), or drawing thousands of sprites in something like NUTS.WAD (provided you have devised an efficient method for splitting work/dealing with overlapping/masked textures and avoiding overdrawing).
With all the possible variations and experimentations I've tried in Mocha Doom, I never achieved speedups over 25% on a quad core, because in maps where multithreaded rendering would help, there are often non-rendering related bottlenecks as well (e.g. NOT rendering NUTS.WAD's sprites AT ALL results in 90 FPS at a given resolution, serial rendering results in 60 fps, best possible multithreaded method for rendering sprites resulted in around 70-72 fps, after I got around all stability/display glitches). Even if I could render in zero-time with infinitely many cores, there would still be at most a speedup of 90/60 = 1.5 aka 50%. An overall speedup of 16.7% with just 4 cores seems about right."
Most sense could be rewrite some rutines into assembly (yet most of it already is in asm i think).
I wouldn't throw the OpenGL idea to trash fully. Its the only proper way afterall. Using a GPU, a dedicated chip for that.
Even oldest GP will wipe the floor with software render.
It's here, and even younger than the software render one.
And possibly easier to code. It's just fully abandoned and stucked
in 1.04 version or so?
Rendering is a task which is very much suitable for parallelization, no matter if software or hardware rendering is used. How much the performance gain is by doing so is an another question. I realize that in the majority of cases it won't make any significant difference, but in the cases I've written, and in the topic you linked, higher resolutions to render do matter. Most people use 1080p nowadays and that is already high enough resolution to slow things down on complex maps. ZDaemon's anti aliasing feature is something that would clearly benefit from this. Right now, you either use low resolution with anti aliasing, or use high resolution with no anti aliasing because otherwise it would cause huge fps drop.
Of course the best thing would be to have dedicated hardware rendering to let the CPU 'concentrate' on other things like actor management.
Well I am running 4K (mostly toke it because of mapping) so any enhancement is a good idea.
(also scaling is becoming a must have, since the radar for example becames a tiny square you don't even notice...)
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum