Add a critical section for dynamic code generation.
Bug 19864302
Change-Id: Iaca49fa72146ff35b6f1e5e40ade5cd2c5c48d0e
Reviewed-on: https://swiftshader-review.googlesource.com/2657
Reviewed-by: Greg Hartman <ghartman@google.com>
Tested-by: Greg Hartman <ghartman@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Renderer/Renderer.cpp b/src/Renderer/Renderer.cpp
index 8cc7651..1cc97d8 100644
--- a/src/Renderer/Renderer.cpp
+++ b/src/Renderer/Renderer.cpp
@@ -69,6 +69,8 @@
TranscendentalPrecision rsqPrecision = ACCURATE;
bool perspectiveCorrection = true;
+ BackoffLock Renderer::codegenMutex;
+
struct Parameters
{
Renderer *renderer;
@@ -230,9 +232,13 @@
setupState = SetupProcessor::update();
pixelState = PixelProcessor::update();
+ codegenMutex.lock();
+
vertexRoutine = VertexProcessor::routine(vertexState);
setupRoutine = SetupProcessor::routine(setupState);
pixelRoutine = PixelProcessor::routine(pixelState);
+
+ codegenMutex.unlock();
}
int batch = batchSize / ms;
@@ -593,9 +599,9 @@
draw->references = (count + batch - 1) / batch;
- mutex.lock();
+ schedulerMutex.lock();
nextDraw++;
- mutex.unlock();
+ schedulerMutex.unlock();
if(!threadsAwake)
{
@@ -726,7 +732,7 @@
void Renderer::scheduleTask(int threadIndex)
{
- mutex.lock();
+ schedulerMutex.lock();
if((int)qSize < threadCount - threadsAwake + 1)
{
@@ -763,7 +769,7 @@
threadsAwake--;
}
- mutex.unlock();
+ schedulerMutex.unlock();
}
void Renderer::executeTask(int threadIndex)
diff --git a/src/Renderer/Renderer.hpp b/src/Renderer/Renderer.hpp
index af1a950..3408ab5 100644
--- a/src/Renderer/Renderer.hpp
+++ b/src/Renderer/Renderer.hpp
@@ -403,7 +403,8 @@
unsigned int qHead;
unsigned int qSize;
- BackoffLock mutex;
+ BackoffLock schedulerMutex;
+ static BackoffLock codegenMutex;
#if PERF_HUD
int64_t vertexTime[16];