Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion IntelPresentMon/Interprocess/source/metadata/EnumFrameType.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
X_(FRAME_TYPE, APPLICATION, "Application", "", "Frame rendered by the target application") \
X_(FRAME_TYPE, REPEATED, "Application", "", "Frame rendered by the taget application") \
X_(FRAME_TYPE, INTEL_XEFG, "Intel XeSS-FG", "", "Frame generated by Intel XeSS-FG") \
X_(FRAME_TYPE, AMD_AFMF, "AMD AFMF", "", "Frame generated by AMD Fluid Motion Frames")
X_(FRAME_TYPE, AMD_AFMF, "AMD AFMF", "", "Frame generated by AMD Fluid Motion Frames") \
X_(FRAME_TYPE, AMD_FSR_FG, "AMD FSR FG", "", "Frame generated by AMD FSR FG")
3 changes: 2 additions & 1 deletion IntelPresentMon/PresentMonAPI2/PresentMonAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,8 @@ extern "C" {
PM_FRAME_TYPE_APPLICATION,
PM_FRAME_TYPE_REPEATED,
PM_FRAME_TYPE_INTEL_XEFG = 50,
PM_FRAME_TYPE_AMD_AFMF = 100,
PM_FRAME_TYPE_AMD_AFMF = 100,
PM_FRAME_TYPE_AMD_FSR_FG = 101,
};

enum PM_DEVICE_TYPE
Expand Down
5 changes: 5 additions & 0 deletions IntelPresentMon/PresentMonAPI2Tests/CsvHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,9 @@ void CharConvert<T>::Convert(const std::string data, T& convertedData, Header co
else if (data == "Intel XeSS-FG") {
convertedData = PM_FRAME_TYPE_INTEL_XEFG;
}
else if (data == "AMD_FSR_FG") {
convertedData = PM_FRAME_TYPE_AMD_FSR_FG;
}
else {
throw CsvConversionException(Header_FrameType, line, data);
}
Expand Down Expand Up @@ -629,6 +632,8 @@ std::string TranslateFrameType(PM_FRAME_TYPE frameType) {
return "AMD_AFMF";
case PM_FRAME_TYPE_INTEL_XEFG:
return "Intel XeSS-FG";
case PM_FRAME_TYPE_AMD_FSR_FG:
return "AMD_FSR_FG";
default:
return "<Unknown>";
}
Expand Down
2 changes: 2 additions & 0 deletions IntelPresentMon/SampleClient/PacedFramePlayback.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ namespace
return "AMD_AFMF";
case PM_FRAME_TYPE_INTEL_XEFG:
return "Intel XeSS-FG";
case PM_FRAME_TYPE_AMD_FSR_FG:
return "AMD_FSR_FG";
default:
return "Other";
}
Expand Down
27 changes: 27 additions & 0 deletions IntelPresentMon/UnitTests/MetricsCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -782,6 +782,33 @@ TEST_CLASS(ComputeMetricsForPresentTests)
Assert::AreEqual(uint64_t(1'500), swapChain.swapChain.lastDisplayedScreenTime,
L"Should remain unchanged.");
}

TEST_METHOD(DisplayIndexing_AmdFsrFg_Multi_WithNext_AppIndexProcessed)
{
// 3x AMD_FSR_FG then a single Application
FrameData present = MakeFrame(
PresentResult::Presented,
20'000, 600, 30'000,
{
{ FrameType::AMD_FSR_FG, 21'000 },
{ FrameType::AMD_FSR_FG, 21'500 },
{ FrameType::AMD_FSR_FG, 22'000 },
{ FrameType::Application, 22'500 },
});

FrameData nextDisplayed = MakeFrame(
PresentResult::Presented,
23'000, 400, 30'500,
{ { FrameType::Application, 24'000 } });

auto idx = DisplayIndexing::Calculate(present, &nextDisplayed);

// With nextDisplayed: process postponed last only => [N-1, N) => [3, 4)
Assert::AreEqual(size_t(3), idx.startIndex);
Assert::AreEqual(size_t(4), idx.endIndex);
Assert::AreEqual(size_t(3), idx.appIndex);
Assert::IsTrue(idx.hasNextDisplayed);
}
};

TEST_CLASS(UpdateAfterBootstrapPresentV2Tests)
Expand Down
2 changes: 2 additions & 0 deletions PresentData/Debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ wchar_t const* PMPFrameTypeToString(Intel_PresentMon::FrameType type)
case Intel_PresentMon::FrameType::Repeated: return L"Repeated";
case Intel_PresentMon::FrameType::Intel_XEFG: return L"Intel XeSS-FG";
case Intel_PresentMon::FrameType::AMD_AFMF: return L"AMD AFMF";
case Intel_PresentMon::FrameType::AMD_FSR_FG: return L"AMD FSR FG";
}

assert(false);
Expand All @@ -196,6 +197,7 @@ void PrintFrameType(FrameType type)
case FrameType::Repeated: wprintf(L"Repeated"); break;
case FrameType::Intel_XEFG: wprintf(L"Intel XeSS-FG"); break;
case FrameType::AMD_AFMF: wprintf(L"AMD AFMF"); break;
case FrameType::AMD_FSR_FG: wprintf(L"AMD FSR FG"); break;
default: wprintf(L"Unknown (%u)", type); assert(false); break;
}
}
Expand Down
1 change: 1 addition & 0 deletions PresentData/ETW/Intel_PresentMon.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ enum class FrameType : uint8_t {
Repeated = 2,
Intel_XEFG = 50,
AMD_AFMF = 100,
AMD_FSR_FG = 101,
};

enum class InputType : uint32_t {
Expand Down
1 change: 1 addition & 0 deletions PresentData/PresentEventEnums.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,5 @@ enum class FrameType {
Repeated = 3,
Intel_XEFG = 50,
AMD_AFMF = 100,
AMD_FSR_FG = 101,
};
8 changes: 6 additions & 2 deletions PresentData/PresentMonTraceConsumer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ static inline FrameType ConvertPMPFrameTypeToFrameType(Intel_PresentMon::FrameTy
case Intel_PresentMon::FrameType::Repeated: return FrameType::Repeated;
case Intel_PresentMon::FrameType::Intel_XEFG: return FrameType::Intel_XEFG;
case Intel_PresentMon::FrameType::AMD_AFMF: return FrameType::AMD_AFMF;
case Intel_PresentMon::FrameType::AMD_FSR_FG: return FrameType::AMD_FSR_FG;
}

DebugAssert(false);
Expand Down Expand Up @@ -70,7 +71,8 @@ static inline bool ShouldAppendApplicationAfterGeneratedDisplay(std::shared_ptr<
{
bool hasGeneratedFrame =
HasDisplayedFrameType(p, FrameType::Intel_XEFG) ||
HasDisplayedFrameType(p, FrameType::AMD_AFMF);
HasDisplayedFrameType(p, FrameType::AMD_AFMF) ||
HasDisplayedFrameType(p, FrameType::AMD_FSR_FG);

bool hasApplicationFrame =
HasDisplayedFrameType(p, FrameType::Application);
Expand Down Expand Up @@ -3900,7 +3902,9 @@ bool PMTraceConsumer::IsApplicationPresent(std::shared_ptr<PresentEvent> const&
}

auto frameType = present->Displayed[0];
return ((frameType.first != FrameType::Intel_XEFG) && (frameType.first != FrameType::AMD_AFMF));
return ((frameType.first != FrameType::Intel_XEFG) &&
(frameType.first != FrameType::AMD_AFMF) &&
(frameType.first != FrameType::AMD_FSR_FG));
}

void PMTraceConsumer::SetAppTimingDataAsComplete(uint32_t processId, uint32_t appFrameId) {
Expand Down
1 change: 1 addition & 0 deletions PresentMon/CsvOutput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ const char* FrameTypeToString(FrameType ft)
case FrameType::Application: return "Application";
case FrameType::Intel_XEFG: return "Intel XeSS-FG";
case FrameType::AMD_AFMF: return "AMD AFMF";
case FrameType::AMD_FSR_FG: return "AMD FSR FG";
}

return "Unknown";
Expand Down
Binary file modified Provider/Intel-PresentMon.man
Binary file not shown.
1 change: 1 addition & 0 deletions Provider/PresentMonProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ bool IsValid(
frameType == PresentMonProvider_FrameType_Repeated ||
frameType == PresentMonProvider_FrameType_Intel_XEFG ||
frameType == PresentMonProvider_FrameType_AMD_AFMF ||
frameType == PresentMonProvider_FrameType_AMD_FSR_FG ||
frameType == PresentMonProvider_FrameType_NVIDIA_DLSS;
}

Expand Down
1 change: 1 addition & 0 deletions Provider/PresentMonProvider.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ enum PresentMonProvider_FrameType {
PresentMonProvider_FrameType_Repeated, // The frame rendered by the application is being repeated.
PresentMonProvider_FrameType_Intel_XEFG = 50, // Frame generated by Intel Xe Frame Generation.
PresentMonProvider_FrameType_AMD_AFMF = 100, // Frame generated by AMD Fluid Motion Frames.
PresentMonProvider_FrameType_AMD_FSR_FG = 101, // Frame generated by AMD FSR Frame Generation.
PresentMonProvider_FrameType_NVIDIA_DLSS = 150, // Frame generated by NVIDIA DLSS.
};

Expand Down