Merge pull request #6442 from stenzek/async-compiler-priority

ShaderCache: Implement compile priority
This commit is contained in:
Markus Wick
2018-03-19 09:16:53 +01:00
committed by GitHub
4 changed files with 60 additions and 41 deletions

View File

@ -20,7 +20,7 @@ AsyncShaderCompiler::~AsyncShaderCompiler()
ASSERT(!HasWorkerThreads());
}
void AsyncShaderCompiler::QueueWorkItem(WorkItemPtr item)
void AsyncShaderCompiler::QueueWorkItem(WorkItemPtr item, u32 priority)
{
// If no worker threads are available, compile synchronously.
if (!HasWorkerThreads())
@ -31,7 +31,7 @@ void AsyncShaderCompiler::QueueWorkItem(WorkItemPtr item)
else
{
std::lock_guard<std::mutex> guard(m_pending_work_lock);
m_pending_work.push_back(std::move(item));
m_pending_work.emplace(priority, std::move(item));
m_worker_thread_wake.notify_one();
}
}
@ -219,8 +219,9 @@ void AsyncShaderCompiler::WorkerThreadRun()
while (!m_pending_work.empty() && !m_exit_flag.IsSet())
{
m_busy_workers++;
WorkItemPtr item(std::move(m_pending_work.front()));
m_pending_work.pop_front();
auto iter = m_pending_work.begin();
WorkItemPtr item(std::move(iter->second));
m_pending_work.erase(iter);
pending_lock.unlock();
if (item->Compile())