More data races fixed A few more variables were causing possible data races, so they were changed to AtomicInt variables. Change-Id: Icf233482528e086fc58f6919232ab2e3f0784689 Reviewed-on: https://swiftshader-review.googlesource.com/12368 Tested-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Renderer/QuadRasterizer.cpp b/src/Renderer/QuadRasterizer.cpp index f88c39e..4721591 100644 --- a/src/Renderer/QuadRasterizer.cpp +++ b/src/Renderer/QuadRasterizer.cpp
@@ -49,6 +49,7 @@ constants = *Pointer<Pointer<Byte>>(data + OFFSET(DrawData,constants)); occlusion = 0; + int clusterCount = Renderer::getClusterCount(); Do { @@ -290,6 +291,8 @@ } } + int clusterCount = Renderer::getClusterCount(); + for(int index = 0; index < RENDERTARGETS; index++) { if(state.colorWriteActive(index))
diff --git a/src/Renderer/Renderer.cpp b/src/Renderer/Renderer.cpp index e918c43..3e75253 100644 --- a/src/Renderer/Renderer.cpp +++ b/src/Renderer/Renderer.cpp
@@ -63,8 +63,8 @@ int batchSize = 128; int threadCount = 1; - int unitCount = 1; - int clusterCount = 1; + AtomicInt Renderer::unitCount = 1; + AtomicInt Renderer::clusterCount = 1; TranscendentalPrecision logPrecision = ACCURATE; TranscendentalPrecision expPrecision = ACCURATE;
diff --git a/src/Renderer/Renderer.hpp b/src/Renderer/Renderer.hpp index 4576d23..173706d 100644 --- a/src/Renderer/Renderer.hpp +++ b/src/Renderer/Renderer.hpp
@@ -39,8 +39,6 @@ extern int batchSize; extern int threadCount; - extern int unitCount; - extern int clusterCount; enum TranscendentalPrecision { @@ -405,6 +403,8 @@ void resetTimers(); #endif + static int getClusterCount() { return clusterCount; } + private: static void threadFunction(void *parameters); void threadLoop(int threadIndex); @@ -468,8 +468,11 @@ AtomicInt nextDraw; Task taskQueue[32]; - unsigned int qHead; - unsigned int qSize; + AtomicInt qHead; + AtomicInt qSize; + + static AtomicInt unitCount; + static AtomicInt clusterCount; MutexLock schedulerMutex;