Hi Dean,
Thanks for your interest in SwiftShader. The short answer is yes, SwiftShader is thread safe.
For the example of glGenBuffers() and glDeleteBuffers() being called concurrently, note that gl::GenBuffers() and gl::DeleteBuffers() both call es2::getContext(). The latter returns a RAII pointer-like object which takes an exclusive lock of the resource manager, and releases it on destruction. See ContextPtr in src/OpenGL/libGLESv2/Context.h. We believe all other shareable resources are also thread safe.
We may not have thread safety for platform-specific edge cases though. The OpenGL ES and EGL specifications leave some threading behavior the responsibility of the application or system components. For what it's worth, SwiftShader is used extensively for Android testing, with no known grave threading concerns.
Please do note that our OpenGL ES implementation is slated to be removed. We're focussing solely on our Vulkan implementation now. That said, we'll be providing backward compatibility with GLES through the ANGLE project. We are working hard to ensure this stack will be at least as thread safe as the legacy GLES implementation. We'll share details on how to build this "SwANGLE" setup with the group soon.
Cheers,
Nicolas