mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 17:40:39 +00:00
Add some better handling and messages for errors in intel D3D11 counters
This commit is contained in:
@@ -220,16 +220,26 @@ uint32_t IntelCounters::BeginSession()
|
||||
TMetricsDeviceParams_1_2 *deviceParams = m_metricsDevice->GetParams();
|
||||
if(deviceParams->Version.MajorNumber < 1 ||
|
||||
(deviceParams->Version.MajorNumber == 1 && deviceParams->Version.MinorNumber < 2))
|
||||
{
|
||||
RDCERR("Bad metrics device API version %u.%u", deviceParams->Version.MajorNumber,
|
||||
deviceParams->Version.MinorNumber);
|
||||
return 0;
|
||||
}
|
||||
|
||||
IOverride_1_2 *frequencyOverride = m_metricsDevice->GetOverrideByName("FrequencyOverride");
|
||||
if(!frequencyOverride)
|
||||
{
|
||||
RDCERR("Couldn't fetch Frequency Override");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TTypedValue_1_0 *maxFreqSymbol =
|
||||
m_metricsDevice->GetGlobalSymbolValueByName("GpuMaxFrequencyMHz");
|
||||
if(!maxFreqSymbol)
|
||||
{
|
||||
RDCERR("Couldn't get global symbol GpuMaxFrequencyMHz");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TSetFrequencyOverrideParams_1_2 params;
|
||||
params.Enable = true;
|
||||
@@ -309,22 +319,32 @@ void IntelCounters::BeginSample()
|
||||
(D3D11_COUNTER)m_subscribedMetricSets[m_passIndex]->GetParams()->ApiSpecificId.D3D1XDevDependentId;
|
||||
|
||||
if(counter_desc.Counter == 0)
|
||||
{
|
||||
RDCERR("Invalid D3D11 counter for sample in pass %u", m_passIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
TCompletionCode res = m_subscribedMetricSets[m_passIndex]->Activate();
|
||||
if(res != TCompletionCode::CC_OK)
|
||||
{
|
||||
RDCERR("Couldn't activate subscribed metric set in pass %u", m_passIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
HRESULT hr = m_device->CreateCounter(&counter_desc, &m_counter);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
RDCERR("Couldn't create D3D11 counter %u in pass %u", counter_desc.Counter, m_passIndex);
|
||||
m_subscribedMetricSets[m_passIndex]->Deactivate();
|
||||
return;
|
||||
}
|
||||
|
||||
res = m_subscribedMetricSets[m_passIndex]->Deactivate();
|
||||
if(res != TCompletionCode::CC_OK)
|
||||
{
|
||||
RDCERR("Couldn't deactivate subscribed metric set in pass %u", m_passIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
m_deviceContext->Begin(m_counter);
|
||||
}
|
||||
@@ -334,6 +354,9 @@ void IntelCounters::EndSample()
|
||||
if(!m_metricsDevice)
|
||||
return;
|
||||
|
||||
if(!m_counter)
|
||||
return;
|
||||
|
||||
m_deviceContext->End(m_counter);
|
||||
HRESULT hr = S_OK;
|
||||
uint32_t iteration = 0;
|
||||
@@ -349,7 +372,10 @@ void IntelCounters::EndSample()
|
||||
m_counter->Release();
|
||||
|
||||
if(hr != S_OK)
|
||||
{
|
||||
RDCERR("Couldn't get counter data after %u attempts: %s", max_attempts, ToStr(hr).c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
IMetricSet_1_1 *metricSet = m_subscribedMetricSets[m_passIndex];
|
||||
TMetricSetParams_1_0 *metricSetParams = metricSet->GetParams();
|
||||
@@ -360,7 +386,10 @@ void IntelCounters::EndSample()
|
||||
(uint32_t)m_queryResult.size() * sizeof(TTypedValue_1_0), &calculatedReportCount, false);
|
||||
|
||||
if(res != TCompletionCode::CC_OK)
|
||||
{
|
||||
RDCERR("Couldn't calculate metric set for sample in pass %u", m_passIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < m_subscribedMetricsByCounterSet[m_passIndex].size(); i++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user