summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Fröhlich <[email protected]>2012-08-18 11:43:51 +0200
committerTom Stellard <[email protected]>2012-08-20 16:27:23 +0000
commit926a4a922f9a5ec397cb3d316dd915b00b39c54d (patch)
tree7790e375c69e0fbaf0302b0e7097f3d167c0e784
parent59361d76a5b0b6b77d6e6bc976e02df2e8df9ec3 (diff)
radeon-llvm: Start multithreaded before using llvm.
This is required to make some of llvm's api calls thread save. In particular the PassRegistry, which is implicitly accessed while compiling shader programs. The PassRegistry uses a mutex that is only active if the llvm_is_multithreaded() returns true. Calling llvm_start_multithreading() makes this happen and by calling this function we try to make sure that we can savely compile shaders in paralell. Since there is also a call llvm_stop_multithreading() in the llvm api, we cannot guarantee that this does not get switched off while we are relying on this being set, but for the easier use cases this fixes a race with the radeon llvm compiler we have as of today. Signed-off-by: Mathias Froehlich <[email protected]> Signed-off-by: Tom Stellard <[email protected]>
-rw-r--r--src/gallium/drivers/radeon/radeon_llvm_emit.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
index 89130b33157..eef55a8e93a 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
+++ b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
@@ -35,6 +35,7 @@
#include <llvm/Support/SourceMgr.h>
#include <llvm/Support/TargetRegistry.h>
#include <llvm/Support/TargetSelect.h>
+#include <llvm/Support/Threading.h>
#include <llvm/Target/TargetData.h>
#include <llvm/Target/TargetMachine.h>
@@ -57,6 +58,20 @@ void LLVMInitializeAMDGPUTargetInfo(void);
}
#endif
+namespace {
+
+class LLVMEnsureMultithreaded {
+public:
+ LLVMEnsureMultithreaded()
+ {
+ llvm_start_multithreaded();
+ }
+};
+
+static LLVMEnsureMultithreaded lLVMEnsureMultithreaded;
+
+}
+
/**
* Compile an LLVM module to machine code.
*