Allow printf in shaders
This change gets closer to letting shader printf work in the idiomatic way for vulkan. If an env var is set, the appropriate layer is included. Together with #406, where device extensions can be selected, this almost works from the python side. There is still one problem which I don't fully understand yet whereby shader printf do not appear in the log (even if I set the information bit in on the debug logger), but it does appear if I set the (now considered obsolete) vulkan env var DEBUG_PRINTF_TO_STDOUT=1.
Note - the python logging objects were used without acquiring the GIL - which is invalid use of pybind11 that leads to race conditions. I encountered many of those while I was working on this branch. This PR fixes those issues by explicitly acquiring the GIL during the log methods.
One thing I didn't yet look into is this note:
When using Validation Layers, the fragmentStoresAndAtomics, vertexPipelineStoresAndAtomics, and timelineSemaphore features are required
This is can be handled using the vulkan extension VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT , see here for details . I can add some example code if that helps?