[Mesa-dev] Discussion: C++11 std::future in Mesa
Markus Wick
markus at selfnet.de
Wed Jun 1 14:26:41 UTC 2016
Am 2016-06-01 15:53, schrieb Marek Olšák:
> On Wed, Jun 1, 2016 at 3:02 PM, ⚛ <0xe2.0x9a.0x9b at gmail.com> wrote:
> Shader compilation at game loading time is never a problem, so we can
> ignore that.
I have to disagree here. For the dolphin emulator, we proposed a GLSL
shader cache (because of mesa...). The idea was discarded as booting the
emulator took up to minutes.
> Shader compilation right before draw calls is what's unpleasant and
> when people talk about it in the negative sense, they mean this.
I guess games with this behavior also: compile one shader, use it,
repeat. Within a single frame. A threaded dispatcher (with shader
compilation starting on the dispatcher thread) may be able to improve
this behavior. I have no clue about the required effort, but I'm sure
it's _by far_ more than simple threading primitives abstracted by
std::async. And it's orthogonal to parallel compilation ;)
> Because of external factors you can't predict, your driver suddenly
> receives a bunch of shaders that take 2000 ms to compile right before
> a draw call. Your budget is 16 ms per frame to get 30 fps, but you
> can't render the frame if you don't compile those shaders. The problem
> is how to fit the compilation that takes 2000 ms and is required
> render the frame into 16 ms. Can you see where I'm going?
Of course, this will only improve this behavior. There is no way to fit
within the 16ms.
But such an implementation will be required for
ARB_parallel_shader_compile. For eg the dolphin emulator, we want to
compile some slow generic shaders. While running, specialized shaders
shall be compiled. But so we need the query to check if the compilation
has finished. Of course, in a non-blocking way.
But I see, emulators have some special requirements. I doubt this will
help games a lot. Hopefully, engines will start to use this features
wisely when they'll more available.
This does not replace the requirement for an on-disk cache, or vise
versa.
But bad luck, neither calling "use std::async" nor this mail helps at
all. The required restructuring needs months of man power. Not to
mention that the shader compiler needs to be thread-safe....
Regards, degasus
More information about the mesa-dev
mailing list