TSAN detected many data race errors in the SwiftShader Renderer class. x86 has a strong memory ordering model which guarantees that changes are observed in the same order by other threads. However, C++ does not provide such guarantees unless specified using atomic operations. In order to fix these, a new AtomicInt class was added which is a basically a wrapper class for std::atomic<int> and which only exposes the portion of the API required by SwiftShader. Since std::atomic isn't available on older versions of Android, a fallback class was implemented without using std::atomic, which is closer to the previous implementation. Both classes appear to work properly after performing a few dEQP tests. Both also perform similarly. A few minor changes were made in order to attempt to reduce the use of atomic integer operations when possible. Change-Id: Ife6d3a2b6113346f8f8163b692e79c2a0e03b22f Reviewed-on: https://swiftshader-review.googlesource.com/12308Reviewed-by:Nicolas Capens <nicolascapens@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| BUILD.gn | Loading commit data... | |
| Blitter.cpp | Loading commit data... | |
| Blitter.hpp | Loading commit data... | |
| Clipper.cpp | Loading commit data... | |
| Clipper.hpp | Loading commit data... | |
| Color.cpp | Loading commit data... | |
| Color.hpp | Loading commit data... | |
| Context.cpp | Loading commit data... | |
| Context.hpp | Loading commit data... | |
| ETC_Decoder.cpp | Loading commit data... | |
| ETC_Decoder.hpp | Loading commit data... | |
| LRUCache.hpp | Loading commit data... | |
| Matrix.cpp | Loading commit data... | |
| Matrix.hpp | Loading commit data... | |
| PixelProcessor.cpp | Loading commit data... | |
| PixelProcessor.hpp | Loading commit data... | |
| Plane.cpp | Loading commit data... | |
| Plane.hpp | Loading commit data... | |
| Point.cpp | Loading commit data... | |
| Point.hpp | Loading commit data... | |
| Polygon.hpp | Loading commit data... | |
| Primitive.hpp | Loading commit data... | |
| QuadRasterizer.cpp | Loading commit data... | |
| QuadRasterizer.hpp | Loading commit data... | |
| Rasterizer.hpp | Loading commit data... | |
| Renderer.cpp | Loading commit data... | |
| Renderer.hpp | Loading commit data... | |
| RoutineCache.hpp | Loading commit data... | |
| Sampler.cpp | Loading commit data... | |
| Sampler.hpp | Loading commit data... | |
| SetupProcessor.cpp | Loading commit data... | |
| SetupProcessor.hpp | Loading commit data... | |
| Stream.hpp | Loading commit data... | |
| Surface.cpp | Loading commit data... | |
| Surface.hpp | Loading commit data... | |
| TextureStage.cpp | Loading commit data... | |
| TextureStage.hpp | Loading commit data... | |
| Triangle.hpp | Loading commit data... | |
| Vector.cpp | Loading commit data... | |
| Vector.hpp | Loading commit data... | |
| Vertex.hpp | Loading commit data... | |
| VertexProcessor.cpp | Loading commit data... | |
| VertexProcessor.hpp | Loading commit data... |