Lines Matching refs:pContext

51 void SetupDefaultState(SWR_CONTEXT *pContext);
58 void WakeAllThreads(SWR_CONTEXT *pContext)
60 pContext->FifosNotEmpty.notify_all();
74 SWR_CONTEXT *pContext = new (pContextMem) SWR_CONTEXT();
76 pContext->privateStateSize = pCreateInfo->privateStateSize;
78 pContext->dcRing.Init(KNOB_MAX_DRAWS_IN_FLIGHT);
79 pContext->dsRing.Init(KNOB_MAX_DRAWS_IN_FLIGHT);
81 pContext->pMacroTileManagerArray = (MacroTileMgr*)AlignedMalloc(sizeof(MacroTileMgr) * KNOB_MAX_DRAWS_IN_FLIGHT, 64);
82 pContext->pDispatchQueueArray = (DispatchQueue*)AlignedMalloc(sizeof(DispatchQueue) * KNOB_MAX_DRAWS_IN_FLIGHT, 64);
86 pContext->dcRing[dc].pArena = new CachingArena(pContext->cachingArenaAllocator);
87 new (&pContext->pMacroTileManagerArray[dc]) MacroTileMgr(*pContext->dcRing[dc].pArena);
88 new (&pContext->pDispatchQueueArray[dc]) DispatchQueue();
90 pContext->dsRing[dc].pArena = new CachingArena(pContext->cachingArenaAllocator);
93 pContext->threadInfo.MAX_WORKER_THREADS = KNOB_MAX_WORKER_THREADS;
94 pContext->threadInfo.MAX_NUMA_NODES = KNOB_MAX_NUMA_NODES;
95 pContext->threadInfo.MAX_CORES_PER_NUMA_NODE = KNOB_MAX_CORES_PER_NUMA_NODE;
96 pContext->threadInfo.MAX_THREADS_PER_CORE = KNOB_MAX_THREADS_PER_CORE;
97 pContext->threadInfo.SINGLE_THREADED = KNOB_SINGLE_THREADED;
101 pContext->threadInfo = *pCreateInfo->pThreadInfo;
104 memset(&pContext->WaitLock, 0, sizeof(pContext->WaitLock));
105 memset(&pContext->FifosNotEmpty, 0, sizeof(pContext->FifosNotEmpty));
106 new (&pContext->WaitLock) std::mutex();
107 new (&pContext->FifosNotEmpty) std::condition_variable();
109 CreateThreadPool(pContext, &pContext->threadPool);
111 pContext->ppScratch = new uint8_t*[pContext->NumWorkerThreads];
112 pContext->pStats = new SWR_STATS[pContext->NumWorkerThreads];
116 pContext->pArContext = new HANDLE[pContext->NumWorkerThreads+1];
117 pContext->pArContext[pContext->NumWorkerThreads] = ArchRast::CreateThreadContext(ArchRast::AR_THREAD::API);
122 for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
125 uint32_t numaNode = pContext->threadPool.pThreadData ?
126 pContext->threadPool.pThreadData[i].numaId : 0;
127 pContext->ppScratch[i] = (uint8_t*)VirtualAllocExNuma(
132 pContext->ppScratch[i] = (uint8_t*)AlignedMalloc(32 * sizeof(KILOBYTE), KNOB_SIMD_WIDTH * 4);
137 pContext->pArContext[i] = ArchRast::CreateThreadContext(ArchRast::AR_THREAD::WORKER);
142 SetupDefaultState(pContext);
145 pContext->pHotTileMgr = new HotTileMgr();
151 pContext->pfnLoadTile = pCreateInfo->pfnLoadTile;
152 pContext->pfnStoreTile = pCreateInfo->pfnStoreTile;
153 pContext->pfnClearTile = pCreateInfo->pfnClearTile;
154 pContext->pfnUpdateSoWriteOffset = pCreateInfo->pfnUpdateSoWriteOffset;
155 pContext->pfnUpdateStats = pCreateInfo->pfnUpdateStats;
156 pContext->pfnUpdateStatsFE = pCreateInfo->pfnUpdateStatsFE;
166 StartThreadPool(pContext, &pContext->threadPool);
168 return (HANDLE)pContext;
177 void QueueWork(SWR_CONTEXT *pContext)
179 DRAW_CONTEXT* pDC = pContext->pCurDrawContext;
184 pDC->pTileMgr = &pContext->pMacroTileManagerArray[dcIndex];
192 pContext->pCurDrawContext->threadsDone = pContext->NumFEThreads + pContext->NumBEThreads;
196 InterlockedIncrement((volatile LONG*)&pContext->drawsOutstandingFE);
201 std::unique_lock<std::mutex> lock(pContext->WaitLock);
202 pContext->dcRing.Enqueue();
205 if (pContext->threadInfo.SINGLE_THREADED)
213 uint32_t curDraw[2] = { pContext->pCurDrawContext->drawId, pContext->pCurDrawContext->drawId };
214 WorkOnFifoFE(pContext, 0, curDraw[0]);
215 WorkOnFifoBE(pContext, 0, curDraw[1], pContext->singleThreadLockedTiles, 0, 0);
219 uint32_t curDispatch = pContext->pCurDrawContext->drawId;
220 WorkOnCompute(pContext, 0, curDispatch);
224 while (CompleteDrawContext(pContext, pContext->pCurDrawContext) > 0) {}
232 WakeAllThreads(pContext);
237 pContext->pPrevDrawContext = pContext->pCurDrawContext;
238 pContext->pCurDrawContext = nullptr;
241 INLINE void QueueDraw(SWR_CONTEXT* pContext)
243 QueueWork<true>(pContext);
246 INLINE void QueueDispatch(SWR_CONTEXT* pContext)
248 QueueWork<false>(pContext);
251 DRAW_CONTEXT* GetDrawContext(SWR_CONTEXT *pContext, bool isSplitDraw = false)
255 if (pContext->pCurDrawContext == nullptr)
258 while (pContext->dcRing.IsFull())
263 uint64_t curDraw = pContext->dcRing.GetHead();
266 if ((pContext->frameCount - pContext->lastFrameChecked) > 2 ||
267 (curDraw - pContext->lastDrawChecked) > 0x10000)
270 pContext->cachingArenaAllocator.FreeOldBlocks();
272 pContext->lastFrameChecked = pContext->frameCount;
273 pContext->lastDrawChecked = curDraw;
276 DRAW_CONTEXT* pCurDrawContext = &pContext->dcRing[dcIndex];
277 pContext->pCurDrawContext = pCurDrawContext;
280 uint32_t dsIndex = pContext->curStateId % KNOB_MAX_DRAWS_IN_FLIGHT;
281 pCurDrawContext->pState = &pContext->dsRing[dsIndex];
284 if (pContext->pPrevDrawContext)
286 DRAW_CONTEXT* pPrevDrawContext = pContext->pPrevDrawContext;
300 pContext->curStateId++; // Progress state ring index forward.
313 pContext->curStateId++; // Progress state ring index forward.
322 pCurDrawContext->pContext = pContext;
330 pCurDrawContext->dynState.Reset(pContext->NumWorkerThreads);
333 pCurDrawContext->drawId = pContext->dcRing.GetHead();
344 return pContext->pCurDrawContext;
347 API_STATE* GetDrawState(SWR_CONTEXT *pContext)
349 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
357 SWR_CONTEXT *pContext = GetContext(hContext);
358 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
364 QueueDraw(pContext);
366 DestroyThreadPool(pContext, &pContext->threadPool);
371 delete[] pContext->dcRing[i].dynState.pStats;
372 delete pContext->dcRing[i].pArena;
373 delete pContext->dsRing[i].pArena;
374 pContext->pMacroTileManagerArray[i].~MacroTileMgr();
375 pContext->pDispatchQueueArray[i].~DispatchQueue();
378 AlignedFree(pContext->pDispatchQueueArray);
379 AlignedFree(pContext->pMacroTileManagerArray);
382 for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
385 VirtualFree(pContext->ppScratch[i], 0, MEM_RELEASE);
387 AlignedFree(pContext->ppScratch[i]);
391 ArchRast::DestroyThreadContext(pContext->pArContext[i]);
395 delete[] pContext->ppScratch;
396 delete[] pContext->pStats;
398 delete(pContext->pHotTileMgr);
400 pContext->~SWR_CONTEXT();
409 SWR_CONTEXT *pContext = GetContext(hContext);
410 auto pSrc = GetDrawState(pContext);
421 SWR_CONTEXT *pContext = GetContext(hContext);
422 auto pDst = GetDrawState(pContext);
428 void SetupDefaultState(SWR_CONTEXT *pContext)
430 API_STATE* pState = GetDrawState(pContext);
444 SWR_CONTEXT *pContext = GetContext(hContext);
445 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
459 QueueDraw(pContext);
466 SWR_CONTEXT *pContext = GetContext(hContext);
470 while (!pContext->dcRing.IsEmpty())
480 SWR_CONTEXT *pContext = GetContext(hContext);
484 while (pContext->drawsOutstandingFE > 0)
698 SWR_CONTEXT *pContext = GetContext(hContext);
699 API_STATE* pState = GetDrawState(pContext);
713 SWR_CONTEXT *pContext = GetContext(hContext);
714 API_STATE* pState = GetDrawState(pContext);
791 SWR_CONTEXT* pContext = pDC->pContext;
1085 SWR_CONTEXT *pContext = GetContext(hContext);
1086 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1119 DRAW_CONTEXT* pDC = GetDrawContext(pContext, isSplitDraw);
1140 QueueDraw(pContext);
1147 pDC = GetDrawContext(pContext);
1212 SWR_CONTEXT *pContext = GetContext(hContext);
1213 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1261 pDC = GetDrawContext(pContext, isSplitDraw);
1285 QueueDraw(pContext);
1293 pDC = GetDrawContext(pContext);
1356 SWR_CONTEXT *pContext = GetContext(hContext);
1357 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1369 QueueDraw(pContext);
1388 SWR_CONTEXT *pContext = GetContext(hContext);
1389 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1402 QueueDraw(pContext);
1422 SWR_CONTEXT *pContext = GetContext(hContext);
1423 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1437 pDC->pDispatch = &pContext->pDispatchQueueArray[dcIndex];
1440 QueueDispatch(pContext);
1457 SWR_CONTEXT *pContext = GetContext(hContext);
1458 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1470 QueueDraw(pContext);
1498 SWR_CONTEXT *pContext = GetContext(hContext);
1499 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1517 QueueDraw(pContext);
1531 SWR_CONTEXT* pContext = GetContext(hContext);
1532 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1537 pState->pPrivateState = pState->pArena->AllocAligned(pContext->privateStateSize, KNOB_SIMD_WIDTH*sizeof(float));
1556 SWR_CONTEXT* pContext = GetContext(hContext);
1557 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1570 SWR_CONTEXT *pContext = GetContext(hContext);
1571 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1584 SWR_CONTEXT *pContext = GetContext(hContext);
1585 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1596 SWR_CONTEXT *pContext = GetContext(hContext);
1597 DRAW_CONTEXT* pDC = GetDrawContext(pContext);
1600 AR_API_EVENT(FrameEndEvent(pContext->frameCount, pDC->drawId));
1602 pContext->frameCount++;