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

編集の要約なし
 
(同じ利用者による、間の7版が非表示)
1行目: 1行目:
== Direct3D ==
== Direct3D ==
[[Direct3D]]では16バイト区切りにする。16バイトの境界線を跨ぐように[[変数]]を配置しないこと。
[[Direct3D]]では16バイト区切りにする。[[構造体]]の[[メンバー変数]]は16バイトの境界線を跨ぐように配置しないこと。


以下に擬似コードを示す。
; NG
; NG
<source lang="c">
<source lang="c">
struct Buffer1 {
struct Buffer1 {
     flaot3 a        ;  0 + 12 = 12
     float3 a        ;  0 + 12 = 12
     float2 b        ; 12 +  8 = 20 NG
     float2 b        ; 12 +  8 = 20 # NG
}
}
</source>
</source>
21行目: 22行目:
== Vulkan ==
== Vulkan ==
[[Vulkan]]は[[GPU]](の[[ドライバ]])ごとに[[仕様]]が異なる前代未聞のクソ仕様。
[[Vulkan]]は[[GPU]](の[[ドライバ]])ごとに[[仕様]]が異なる前代未聞のクソ仕様。
そのクソ仕様はVkMemoryRequirements構造体に格納されるのでalignmentメンバーの整数倍にする。
そのクソ仕様はvkGetBufferMemoryRequirements関数でVkMemoryRequirements構造体に格納されるのでそのalignmentメンバーの整数倍にする。
<source lang="c">
VkMemoryRequirements memReq;
vkGetBufferMemoryRequirements(device, buffer, &memReq);
</source>


[[AMD]]が作ってくれた[[Vulkan Memory Allocator]]を使いましょう。
こんなのやってられないので[[AMD]]が作ってくれた[[Vulkan Memory Allocator]]を使いましょう。


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


[[category:画像処理]]
[[category:コンピューター・グラフィックス]]