Commit 9e22c542 by Alexis Hetu Committed by Alexis Hétu

TSAN fix

leadingVertexFirst is used within rendering threads and assigned in the Renderer's constructor, so TSAN detects this as a data race. In order to fix this, we can make sure any of these global rendering settings are only set once (since they never change). Change-Id: Ib4b43d181b140e500ca31e1ce48340c7f4ce500d Reviewed-on: https://swiftshader-review.googlesource.com/20008Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 7f1c3d07
......@@ -72,6 +72,24 @@ namespace sw
TranscendentalPrecision rsqPrecision = ACCURATE;
bool perspectiveCorrection = true;
static void setGlobalRenderingSettings(Conventions conventions, bool exactColorRounding)
{
static bool initialized = false;
if(!initialized)
{
sw::halfIntegerCoordinates = conventions.halfIntegerCoordinates;
sw::symmetricNormalizedDepth = conventions.symmetricNormalizedDepth;
sw::booleanFaceRegister = conventions.booleanFaceRegister;
sw::fullPixelPositionRegister = conventions.fullPixelPositionRegister;
sw::leadingVertexFirst = conventions.leadingVertexFirst;
sw::secondaryColor = conventions.secondaryColor;
sw::colorsDefaultToZero = conventions.colorsDefaultToZero;
sw::exactColorRounding = exactColorRounding;
initialized = true;
}
}
struct Parameters
{
Renderer *renderer;
......@@ -105,14 +123,7 @@ namespace sw
Renderer::Renderer(Context *context, Conventions conventions, bool exactColorRounding) : VertexProcessor(context), PixelProcessor(context), SetupProcessor(context), context(context), viewport()
{
sw::halfIntegerCoordinates = conventions.halfIntegerCoordinates;
sw::symmetricNormalizedDepth = conventions.symmetricNormalizedDepth;
sw::booleanFaceRegister = conventions.booleanFaceRegister;
sw::fullPixelPositionRegister = conventions.fullPixelPositionRegister;
sw::leadingVertexFirst = conventions.leadingVertexFirst;
sw::secondaryColor = conventions.secondaryColor;
sw::colorsDefaultToZero = conventions.colorsDefaultToZero;
sw::exactColorRounding = exactColorRounding;
setGlobalRenderingSettings(conventions, exactColorRounding);
setRenderTarget(0, 0);
clipper = new Clipper(symmetricNormalizedDepth);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment