Module: Mesa Branch: master Commit: fe107e3c1702c23cb8e3cdf01f3aef83b2e5abcb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe107e3c1702c23cb8e3cdf01f3aef83b2e5abcb
Author: George Kyriazis <[email protected]> Date: Fri Jan 19 15:47:07 2018 -0600 swr/rast: jit shader lib debug work Create shader_lib during build, link with shaders at DLL generation time Reviewed-by: Bruce Cherniak <[email protected]> --- src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp | 5 +++++ src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp index 5e5bba6f70..70f31379a7 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp @@ -586,6 +586,11 @@ int ExecUnhookedProcess(const char* pCmdLine) } #endif +#if defined(_WIN64) && defined(ENABLE_JIT_DEBUG) && defined(JIT_BASE_DIR) +EXTERN_C IMAGE_DOS_HEADER __ImageBase; +static __inline HINSTANCE GetModuleHINSTANCE() { return (HINSTANCE)&__ImageBase; } +#endif + /// notifyObjectCompiled - Provides a pointer to compiled code for Module M. void JitCache::notifyObjectCompiled(const llvm::Module *M, llvm::MemoryBufferRef Obj) { diff --git a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp index 351ff0bf9c..091db2449c 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp @@ -2890,6 +2890,10 @@ bool isComponentEnabled(ComponentEnable enableMask, uint8_t component) } } +// Don't want two threads compiling the same fetch shader simultaneously +// Has problems in the JIT cache implementation +// This is only a problem for fetch right now. +static std::mutex gFetchCodegenMutex; ////////////////////////////////////////////////////////////////////////// /// @brief JITs from fetch shader IR @@ -2902,6 +2906,7 @@ PFN_FETCH_FUNC JitFetchFunc(HANDLE hJitMgr, const HANDLE hFunc) JitManager* pJitMgr = reinterpret_cast<JitManager*>(hJitMgr); PFN_FETCH_FUNC pfnFetch; + gFetchCodegenMutex.lock(); pfnFetch = (PFN_FETCH_FUNC)(pJitMgr->mpExec->getFunctionAddress(func->getName().str())); // MCJIT finalizes modules the first time you JIT code from them. After finalized, you cannot add new IR to the module pJitMgr->mIsModuleFinalized = true; @@ -2916,6 +2921,7 @@ PFN_FETCH_FUNC JitFetchFunc(HANDLE hJitMgr, const HANDLE hFunc) #endif pJitMgr->DumpAsm(const_cast<llvm::Function*>(func), "final"); + gFetchCodegenMutex.unlock(); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
