- 作業環境
- 始まり
- 公式のドキュメントを漁る
- SupportsFastVRAMMemory関数の実装を覗く
- プラットフォーム側のSupportsFastVRAMMemory関数の実装を覗く
- ESRAMについて調べる
- おわり!!!
- 参考
作業環境
- Windows 10
- Visual Studio 2022
- Visual Studio Code
- Unreal Engine 5.3
始まり
これは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のモヤモヤは解消されましたが、生産終了した開発機向けの対応だったとは。。。
今後活用できるか分からない点は残念でしたが、知識欲は満たせたので満足です。
参考
- FRDGTextureDesc::Create2D | Unreal Engine 5.2 Documentation
- FGenericPlatformMemory::SupportsFastVRAMMemory | Unreal Engine 5.2 Documentation
- 【後藤弘茂のWeekly海外ニュース】「Xbox One」を汎用からゲーム路線へと変化させたMicrosoftの背景 - PC Watch
- Inside the next Xbox: Project Scorpio tech revealed | Eurogamer.net
- The race for 4K: how Project Scorpio targets ultra HD gaming | Eurogamer.net
- Static Random Access Memory - Wikipedia