}
}
+ if (pContext->pfnUpdateStreamOut)
+ pContext->pfnUpdateStreamOut(GetPrivateState(pDC), pDC->dynState.soPrims);
+
// Ensure all streaming writes are globally visible before marking this FE done
_mm_mfence();
pDC->doneFE = true;
CPUNumaNodes nodes;
uint32_t numThreadsPerProcGroup = 0;
CalculateProcessorTopology(nodes, numThreadsPerProcGroup);
+ assert(numThreadsPerProcGroup > 0);
// Assumption, for asymmetric topologies, multi-threaded cores will appear
// in the list before single-threaded cores. This appears to be true for
pContext->NumWorkerThreads = pPool->numThreads;
pPool->pThreadData = new (std::nothrow) THREAD_DATA[pPool->numThreads];
- SWR_ASSERT(pPool->pThreadData);
+ assert(pPool->pThreadData);
memset(pPool->pThreadData, 0, sizeof(THREAD_DATA) * pPool->numThreads);
pPool->numaMask = 0;
pContext->workerPrivateState.pfnInitWorkerData = nullptr;
pContext->workerPrivateState.pfnFinishWorkerData = nullptr;
}
-
+
// initialize contents of SWR_WORKER_DATA
size_t perWorkerSize =
AlignUpPow2(pContext->workerPrivateState.perWorkerPrivateStateSize, 64);
pPool->pThreadData[i].pWorkerPrivateData = pWorkerData;
if (pContext->workerPrivateState.pfnInitWorkerData)
{
- pContext->workerPrivateState.pfnInitWorkerData(pWorkerData, i);
+ pContext->workerPrivateState.pfnInitWorkerData(pContext, pWorkerData, i);
}
pWorkerData = PtrAdd(pWorkerData, perWorkerSize);
}
}
pPool->pThreads = new (std::nothrow) THREAD_PTR[pPool->numThreads];
- SWR_ASSERT(pPool->pThreads);
+ assert(pPool->pThreads);
if (pContext->threadInfo.MAX_WORKER_THREADS)
{
if (numRemovedThreads)
{
--numRemovedThreads;
- SWR_REL_ASSERT(numReservedThreads);
+ assert(numReservedThreads);
--numReservedThreads;
pPool->pApiThreadData[numReservedThreads].workerId = 0xFFFFFFFFU;
pPool->pApiThreadData[numReservedThreads].procGroupId = core.procGroup;
if (pContext->workerPrivateState.pfnFinishWorkerData)
{
pContext->workerPrivateState.pfnFinishWorkerData(
- pPool->pThreadData[t].pWorkerPrivateData, t);
+ pContext, pPool->pThreadData[t].pWorkerPrivateData, t);
}
}