MCPcopy Create free account
hub / github.com/carbonengine/trinity / HandleRenderTick

Method HandleRenderTick

trinity/TriDevice12.cpp:187–360  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

185}
186
187void TriDevice::HandleRenderTick( Be::Time realTime, Be::Time simTime )
188{
189#if BLUE_WITH_PYTHON
190 AutoTasklet _at( PyOS->GetTaskletTimer(), "TriDevice::HandleRenderTick" );
191#endif
192
193 auto TearDownDevice = [&]() {
194 ReleaseDeviceResources( TRISTORAGE_ALL );
195
196 mDeviceLost = true;
197 Tr2RenderContext::DestroyMainThreadRenderContext();
198
199 LogAllLiveResources();
200 };
201
202 auto HandleDREDDebugging = [&]() {
203 // Example sourced from https://github.com/NANAnoo/Adria/blob/f25306f66fab1bba35fc0622880ff876d230a8c8/Adria/Graphics/GfxDevice.cpp
204
205 CComPtr<ID3D12DeviceRemovedExtendedData1> pDred;
206 if( SUCCEEDED( Tr2RenderContext_GetMainThreadRenderContext().m_device->QueryInterface( IID_PPV_ARGS( &pDred ) ) ) )
207 {
208 D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 dredAutoBreadcrumbsOutput;
209 D3D12_DRED_PAGE_FAULT_OUTPUT1 dredPageFaultOutput;
210 if( SUCCEEDED( pDred->GetAutoBreadcrumbsOutput1( &dredAutoBreadcrumbsOutput ) ) )
211 {
212
213 CCP_LOGERR( "[DRED] Last tracked GPU operations:" );
214 std::map<UINT, std::wstring> contextStrings;
215 D3D12_AUTO_BREADCRUMB_NODE1 const* pNode = dredAutoBreadcrumbsOutput.pHeadAutoBreadcrumbNode;
216 while( pNode && pNode->pLastBreadcrumbValue )
217 {
218 UINT lastCompletedOp = *pNode->pLastBreadcrumbValue;
219 if( lastCompletedOp != (int)pNode->BreadcrumbCount && lastCompletedOp != 0 )
220 {
221 CCP_LOGERR( "[DRED] Commandlist completed %d of %d commands", lastCompletedOp, pNode->BreadcrumbCount );
222
223 UINT firstOp = std::max<UINT>( lastCompletedOp - 100, 0 );
224 UINT lastOp = std::min<UINT>( lastCompletedOp + 20, UINT( pNode->BreadcrumbCount ) - 1 );
225
226 contextStrings.clear();
227 for( UINT breadcrumbContext = firstOp; breadcrumbContext < pNode->BreadcrumbContextsCount; ++breadcrumbContext )
228 {
229 const D3D12_DRED_BREADCRUMB_CONTEXT& context = pNode->pBreadcrumbContexts[breadcrumbContext];
230 contextStrings[context.BreadcrumbIndex] = context.pContextString;
231 }
232
233 for( UINT op = firstOp; op <= lastOp; ++op )
234 {
235 D3D12_AUTO_BREADCRUMB_OP breadcrumbOp = pNode->pCommandHistory[op];
236
237 std::wstring contextString;
238 auto it = contextStrings.find( op );
239 if( it != contextStrings.end() )
240 {
241 contextString = it->second;
242 }
243
244 char const* opName = DredBreadcrumbOpName( breadcrumbOp );

Callers

nothing calls this directly

Calls 8

DredBreadcrumbOpNameFunction · 0.85
NotifyDeviceRemovedFunction · 0.85
QueryInterfaceMethod · 0.80
RunUpdateMethod · 0.80
endMethod · 0.45
MarkFrameEventMethod · 0.45
UpdateMethod · 0.45
PresentMethod · 0.45

Tested by

no test coverage detected