Commit 7381c994 by Nicolas Capens

Defer worker thread creation until the first draw call.

crbug.com/336438
parent 5a35426e
...@@ -183,8 +183,6 @@ namespace sw ...@@ -183,8 +183,6 @@ namespace sw
delete drawCall[draw]; delete drawCall[draw];
} }
deleteBatches();
delete swiftConfig; delete swiftConfig;
} }
...@@ -1831,14 +1829,10 @@ namespace sw ...@@ -1831,14 +1829,10 @@ namespace sw
Clipper::CLIP_FINITE; // FIXME: xyz finite Clipper::CLIP_FINITE; // FIXME: xyz finite
} }
void Renderer::initializeThreads(int threads) void Renderer::initializeThreads()
{ {
terminateThreads(); unitCount = ceilPow2(threadCount);
deleteBatches(); clusterCount = ceilPow2(threadCount);
threadCount = threads;
unitCount = ceilPow2(threads);
clusterCount = ceilPow2(threads);
for(int i = 0; i < unitCount; i++) for(int i = 0; i < unitCount; i++)
{ {
...@@ -1894,10 +1888,7 @@ namespace sw ...@@ -1894,10 +1888,7 @@ namespace sw
deallocate(vertexTask[thread]); deallocate(vertexTask[thread]);
vertexTask[thread] = 0; vertexTask[thread] = 0;
} }
}
void Renderer::deleteBatches()
{
for(int i = 0; i < 16; i++) for(int i = 0; i < 16; i++)
{ {
deallocate(triangleBatch[i]); deallocate(triangleBatch[i]);
...@@ -2440,17 +2431,17 @@ namespace sw ...@@ -2440,17 +2431,17 @@ namespace sw
switch(configuration.textureSampleQuality) switch(configuration.textureSampleQuality)
{ {
case 0: Sampler::setFilterQuality(FILTER_POINT); break; case 0: Sampler::setFilterQuality(FILTER_POINT); break;
case 1: Sampler::setFilterQuality(FILTER_LINEAR); break; case 1: Sampler::setFilterQuality(FILTER_LINEAR); break;
case 2: Sampler::setFilterQuality(FILTER_ANISOTROPIC); break; case 2: Sampler::setFilterQuality(FILTER_ANISOTROPIC); break;
default: Sampler::setFilterQuality(FILTER_ANISOTROPIC); break; default: Sampler::setFilterQuality(FILTER_ANISOTROPIC); break;
} }
switch(configuration.mipmapQuality) switch(configuration.mipmapQuality)
{ {
case 0: Sampler::setMipmapQuality(MIPMAP_POINT); break; case 0: Sampler::setMipmapQuality(MIPMAP_POINT); break;
case 1: Sampler::setMipmapQuality(MIPMAP_LINEAR); break; case 1: Sampler::setMipmapQuality(MIPMAP_LINEAR); break;
default: Sampler::setMipmapQuality(MIPMAP_LINEAR); break; default: Sampler::setMipmapQuality(MIPMAP_LINEAR); break;
} }
setPerspectiveCorrection(configuration.perspectiveCorrection); setPerspectiveCorrection(configuration.perspectiveCorrection);
...@@ -2497,16 +2488,16 @@ namespace sw ...@@ -2497,16 +2488,16 @@ namespace sw
switch(configuration.transparencyAntialiasing) switch(configuration.transparencyAntialiasing)
{ {
case 0: transparencyAntialiasing = Context::TRANSPARENCY_NONE; break; case 0: transparencyAntialiasing = Context::TRANSPARENCY_NONE; break;
case 1: transparencyAntialiasing = Context::TRANSPARENCY_ALPHA_TO_COVERAGE; break; case 1: transparencyAntialiasing = Context::TRANSPARENCY_ALPHA_TO_COVERAGE; break;
default: transparencyAntialiasing = Context::TRANSPARENCY_NONE; break; default: transparencyAntialiasing = Context::TRANSPARENCY_NONE; break;
} }
switch(configuration.threadCount) switch(configuration.threadCount)
{ {
case -1: initializeThreads(CPUID::coreCount()); break; case -1: threadCount = CPUID::coreCount(); break;
case 0: initializeThreads(CPUID::processAffinity()); break; case 0: threadCount = CPUID::processAffinity(); break;
default: initializeThreads(configuration.threadCount); break; default: threadCount = configuration.threadCount; break;
} }
CPUID::setEnableSSE4_1(configuration.enableSSE4_1); CPUID::setEnableSSE4_1(configuration.enableSSE4_1);
...@@ -2531,5 +2522,10 @@ namespace sw ...@@ -2531,5 +2522,10 @@ namespace sw
maxPrimitives = configuration.maxPrimitives; maxPrimitives = configuration.maxPrimitives;
#endif #endif
} }
if(!initialUpdate && !worker[0])
{
initializeThreads();
}
} }
} }
...@@ -359,9 +359,8 @@ namespace sw ...@@ -359,9 +359,8 @@ namespace sw
void updateClipper(); void updateClipper();
void updateConfiguration(bool initialUpdate = false); void updateConfiguration(bool initialUpdate = false);
static unsigned int computeClipFlags(const float4 &v, const DrawData &data); static unsigned int computeClipFlags(const float4 &v, const DrawData &data);
void initializeThreads(int threadCount); void initializeThreads();
void terminateThreads(); void terminateThreads();
void deleteBatches();
void loadConstants(const VertexShader *vertexShader); void loadConstants(const VertexShader *vertexShader);
void loadConstants(const PixelShader *pixelShader); void loadConstants(const PixelShader *pixelShader);
......
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