/** Documented at declaration */ int dxt_encoder_destroy(struct dxt_encoder* encoder) { #ifdef HAVE_GPUPERFAPI GPA_EndSession(); bool readyResult = FALSE; if ( encoder->sessionID != encoder->currentWaitSessionID ) { GPA_Status sessionStatus; sessionStatus = GPA_IsSessionReady( &readyResult, encoder->currentWaitSessionID ); while ( sessionStatus == GPA_STATUS_ERROR_SESSION_NOT_FOUND ) { // skipping a session which got overwritten encoder->currentWaitSessionID++; sessionStatus = GPA_IsSessionReady( &readyResult, encoder->currentWaitSessionID ); } } if ( readyResult ) { WriteSession( encoder->currentWaitSessionID, "GPUPerfAPI-RTDXT-Results.csv" ); encoder->currentWaitSessionID++; } #endif glDeleteShader(encoder->shader_fragment_compress); glDeleteShader(encoder->shader_vertex_compress); glDeleteProgram(encoder->program_compress); free(encoder); return 0; }
Profiler::Result Profiler::getResult(ID3D11Device* graphicsDevice, Game* game) { ID3D11DeviceContext* immediateContext; graphicsDevice->GetImmediateContext(&immediateContext); GPA_BeginSession(&sessionID); for (unsigned i = 0; i < numPasses; ++i) { GPA_BeginPass(); GPA_BeginSample(0); game->drawTerrain(graphicsDevice); GPA_EndSample(); GPA_EndPass(); } GPA_EndSession(); immediateContext->Release(); bool readyResult; do GPA_IsSessionReady(&readyResult, sessionID); while (!readyResult); do GPA_IsSampleReady(&readyResult, sessionID, 0); while (!readyResult); double primitivesIn; double pixelsPerTriangle; GPA_GetSampleFloat64(sessionID, 0, primitivesInCounterID, &primitivesIn); GPA_GetSampleFloat64(sessionID, 0, pixelsPerTriangleCounterID, &pixelsPerTriangle); Result result; result.primitiveCount = (unsigned)primitivesIn; result.pixelsPerTriangle = (float)pixelsPerTriangle; return result; }