If the compilation subprocess crashes due to an internal driver error,
the end semaphore is never signaled and leaves Blender hanging.
This replaces the `decrement` calls with `try_decrement` and checks
every second if the subprocess is lost.
Additionally, if the issue comes from a broken binary, the crashes will
happen every time a Blender session tries to load it.
So now we store the shader hash in the shared memory before trying to
load the binary. If the subprocess is lost mid compilation, the main
process will delete the broken cached binary.
Pull Request: https://projects.blender.org/blender/blender/pulls/139747