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

提供: MonoBook
ナビゲーションに移動 検索に移動
28行目: 28行目:
 
[[Metal]]は深く考えなくても良いらしいが、とりあえず[[Direct3D]]に合わせとけ。
 
[[Metal]]は深く考えなくても良いらしいが、とりあえず[[Direct3D]]に合わせとけ。
  
[[category:画像処理]]
+
[[category:コンピューター・グラフィックス]]

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

Direct3D

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

NG
struct Buffer1 {
    flaot3 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に合わせとけ。