【UE5】Fast VRAM 調べてみた

始まり

これは2Dテクスチャを作成する関数 FRDGTextureDesc::Create2D です。

static FRDGTextureDesc Create2D
(
    FIntPoint Size,
    EPixelFormat Format,
    FClearValueBinding ClearValue,
    ETextureCreateFlags Flags,
    uint8 NumMips,
    uint8 NumSamples,
    uint32 ExtData
)


第4引数に指定するFlagsをいくつか紹介します。

フラグ名 説明
TexCreate_RenderTargetable レンダーターゲットにする場合に指定
TexCreate_ShaderResource シェーダーリソースとして使用する場合に指定
TexCreate_UAV Unordered Access Viewとして使用する場合に指定
GFastVRamConfig.GBufferA ???


今回の題材はフラグ名にもある Fast VRAM です。

GFastVRamConfig.GBufferA以外にも定義されています。

GFastVRamConfig.GBufferA以外のGFastVRamConfigを見る

VRAMが速いことはフラグ名から察せますが、速い理由が分かりません。

理由が気になりました。

公式のドキュメントを漁る

プラットフォームがFast VRAMをサポートしているか取得する関数が見つかりました。

肝心のFast VRAMの正体についての記載は見当たりませんね。

SupportsFastVRAMMemory関数の実装を覗く

SupportsFastVRAMMemory関数の実装を覗いてみます。

static FORCEINLINE bool SupportsFastVRAMMemory()
{
    return false;
}

なんの手が掛かりもないわ💥

プラットフォーム側のSupportsFastVRAMMemory関数の実装を覗く

淡い期待を抱いてプラットフォーム側に実装があるか確認します。


XB1PlatformMemory.cpp

bool FXB1PlatformMemory::SupportsFastVRAMMemory()
{
    // scorpio doesn't use ESRAM
    return FPlatformMisc::GetConsoleType() < EXboxOneConsoleType::Scorpio;
}


XSXPlatformMemory.cpp

bool FXSXPlatformMemory::SupportsFastVRAMMemory()
{
    // no ESRAM
    return false;
}


見つけました。

マルチプラットフォーム(コンシューマー)開発の恩恵を初めて実感したかもしれません。

XB1(XBoxOne)は条件次第でFast VRAMをサポート、XSX(Xbox Series X)は標準と同様に偽ですね。

この差分が答えなのでしょう。

ちなみにswitch、PS4、PS5も検索対象に入れましたが検出されませんでした。

Fast VRAMの概念がないのかな。

ESRAMについて調べる

XB1, XSXのコメントにあった eSRAM という単語、気になります。

 Xbox Oneの場合、メインメモリは低コストなDDR3を使っているが、DDR3のメモリ帯域が足りない分は、eSRAMで補っている。そのため、原則的にはeSRAMを積極的に使えば使うほど、帯域ボトルネックが低減されてグラフィックス品質を向上させる余裕が生まれることになる。レンダーターゲット、テクスチャ、ジオメトリ、GPUコンピュートの全てのリソースとタスクでeSRAMは使うことができる。ただし、このeSRAMを使うことは、簡単には行かない。


【後藤弘茂のWeekly海外ニュース】「Xbox One」を汎用からゲーム路線へと変化させたMicrosoftの背景 - PC Watch

Project Scorpio Xbox One PS4 Pro
Memory 12GB GDDR5 8GB DDR3/32MB ESRAM 8GB GDDR5
Memory Bandwidth 326GB/s DDR3: 68GB/s, ESRAM at max 204GB/s (Xbox One S: 219GB/s) 218GB/s


Inside the next Xbox: Project Scorpio tech revealed | Eurogamer.net


XB1にはESRAMという爆速なVRAMが搭載されているのですね。

SRAMと同じなのかな。
ハードまわりはまだまだ知見が浅いですね。

欠点として低容量、だから常駐リソースでも部分的にしかフラグが指定されていなかったのか。

LumenやTSRの実装でFast VRAMが未指定なことに違和感を感じていましたが、Fast VRAMが使用可能なXB1は、LumenやTSRがスペック不足で非対応、それでフラグの指定を省いていたのですね。

というかPS5のメモリ帯域幅 Max448GB/s もあるんですね。ESRAMの2倍を超えるじゃん。
ハードウェアのことはさっぱり分かりませんが、技術の進歩ってすごいですね。

おわり!!!

Fast VRAMのモヤモヤは解消されましたが、生産終了した開発機向けの対応だったとは。。。

今後活用できるか分からない点は残念でしたが、知識欲は満たせたので満足です。