FSR2を有効にするとアサートに引っかかる

お世話になっております。

少し前に起きたことなので今手元に再現できる環境はないのですが、FSR2を有効にしたときにアサートに引っかかるケースがありました。

場所は

Engine\Source\Runtime\Renderer\Private\PostProcess\PostProcessing.cpp

> check(ThirdPartyOutputs.NewHistory->GetDebugName() == UpscalerToUse->GetDebugName());

になります。

文字列をポインタで比較してしまっているのでstrcmpを使用する必要があると思います。

> check(FCString::Strcmp(ThirdPartyOutputs.NewHistory->GetDebugName(), UpscalerToUse->GetDebugName()) == 0);

UE5.6でもコードは変わっていなかったので同様に起きると思うのですが、もし再現プロジェクト等必要な場合はご連絡ください。

よろしくお願いいたします。

ITemporalUpscalerクラスの定義内には

/** Debug name of the history. Must exactly point to the same const TCHAR* as ITemporalUpscaler::IHistory::GetDebugName(). */ virtual const TCHAR* GetDebugName() const = 0;とあり、checkの検証で呼び出されているGetDebugNameは同一のメモリを指すポインタを返す必要があります。

FSR2はAMD社のWebページからダウンロードできるプラグインだと思いますが、そのプラグインの実装に問題がある可能性があります。

再現プロジェクトまたは再現手順があればコード上の問題点を指摘することはできますので必要あらばコメントいただけますでしょうか。

情報ありがとうございます。

ThirdPartyOutputsNewHistory.Reference.Upscaler

UpscalerToUse.TemporalUpscaler

この2つは同じメモリアドレスを指していないとおかしいということですね、コード内容見て勘違いしておりました。

手元のUE5.3にFSR2-UE-2-2-1cを入れてみましたが、確かにアサートは発生しなかったので、当時の環境に何かしら原因がありそうです。

ちょっと過去の環境なので再現し直せるかわからないのですが、サルベージして再現できましたらご連絡させていただきます。

このスレッド自体は閉じていただいて構いません、お手数おかけしました。