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];