layers: faster threading layer for single thread
Add a check to the threading layer to detect a single thread case.
If the application has only called vulkan from one thread at a time,
then skip access counters for externally synchronized parameters.
This greatly reduces the overhead of the layer for applications
that don't truly use vulkan in a multi-threaded way.
diff --git a/layers/threading.h b/layers/threading.h
index 311ce7b..1d0924d 100644
--- a/layers/threading.h
+++ b/layers/threading.h
@@ -48,6 +48,26 @@
struct layer_data;
+namespace threading {
+volatile bool vulkan_in_use = false;
+volatile bool vulkan_multi_threaded = false;
+// starting check if an application is using vulkan from multiple threads.
+inline bool startMultiThread() {
+ if (vulkan_multi_threaded) {
+ return true;
+ }
+ if (vulkan_in_use) {
+ vulkan_multi_threaded = true;
+ return true;
+ }
+ vulkan_in_use = true;
+ return false;
+}
+
+// finishing check if an application is using vulkan from multiple threads.
+inline void finishMultiThread() { vulkan_in_use = false; }
+} // namespace threading
+
template <typename T> class counter {
public:
const char *typeName;