「主なグラフィックスAPIのメモリアライメント」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (ページの作成:「== Direct3D == Direct3Dでは16バイト区切りにする。16バイトの境界線を跨ぐように変数を配置しないこと。 NG <source lang="c"> stru…」) |
Administrator (トーク | 投稿記録) |
||
2行目: | 2行目: | ||
[[Direct3D]]では16バイト区切りにする。16バイトの境界線を跨ぐように[[変数]]を配置しないこと。 | [[Direct3D]]では16バイト区切りにする。16バイトの境界線を跨ぐように[[変数]]を配置しないこと。 | ||
− | NG | + | ; NG |
<source lang="c"> | <source lang="c"> | ||
struct Buffer1 { | struct Buffer1 { | ||
10行目: | 10行目: | ||
</source> | </source> | ||
− | OK | + | ; OK |
<source lang="c"> | <source lang="c"> | ||
struct Buffer1 { | struct Buffer1 { | ||
28行目: | 28行目: | ||
[[Metal]]は深く考えなくても良いらしいが、とりあえず[[Direct3D]]に合わせとけ。 | [[Metal]]は深く考えなくても良いらしいが、とりあえず[[Direct3D]]に合わせとけ。 | ||
− | [[画像処理]] | + | [[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
VulkanはGPU(のドライバ)ごとに仕様が異なる前代未聞のクソ仕様。 そのクソ仕様はVkMemoryRequirements構造体に格納されるのでalignmentメンバーの整数倍にする。
AMDが作ってくれたVulkan Memory Allocatorを使いましょう。