「主なグラフィックスAPIのメモリアライメント」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
1行目: 1行目:
 
== Direct3D ==
 
== Direct3D ==
[[Direct3D]]では16バイト区切りにする。16バイトの境界線を跨ぐように[[変数]]を配置しないこと。
+
[[Direct3D]]では16バイト区切りにする。[[構造体]]の[[メンバー変数]]は16バイトの境界線を跨ぐように配置しないこと。
  
 
以下に擬似コードを示す。
 
以下に擬似コードを示す。

2024年4月18日 (木) 01:10時点における版

Direct3D

Direct3Dでは16バイト区切りにする。構造体メンバー変数は16バイトの境界線を跨ぐように配置しないこと。

以下に擬似コードを示す。

NG
struct Buffer1 {
    float3 a        ;  0 + 12 = 12
    float2 b        ; 12 +  8 = 20 # NG
}
OK
struct Buffer1 {
    float3 a        ;  0 + 12 = 12
    float1 _dummy1  ; 12 +  4 = 16 # OK
    float2 b        ;  0 +  8 =  8 # 16ごとに0にリセット
}

Vulkan

VulkanGPU(のドライバ)ごとに仕様が異なる前代未聞のクソ仕様。 そのクソ仕様はVkMemoryRequirements構造体に格納されるのでalignmentメンバーの整数倍にする。

AMDが作ってくれたVulkan Memory Allocatorを使いましょう。

Metal

Metalは深く考えなくても良いらしいが、とりあえずDirect3Dに合わせとけ。