「主なグラフィックスAPIのメモリアライメント」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の8版が非表示) | |||
| 1行目: | 1行目: | ||
== Direct3D == | == Direct3D == | ||
[[Direct3D]] | [[Direct3D]]では16バイト区切りにする。[[構造体]]の[[メンバー変数]]は16バイトの境界線を跨ぐように配置しないこと。 | ||
NG | 以下に擬似コードを示す。 | ||
; NG | |||
<source lang="c"> | <source lang="c"> | ||
struct Buffer1 { | struct Buffer1 { | ||
float3 a ; 0 + 12 = 12 | |||
float2 b ; 12 + 8 = 20 NG | float2 b ; 12 + 8 = 20 # NG | ||
} | } | ||
</source> | </source> | ||
OK | ; OK | ||
<source lang="c"> | <source lang="c"> | ||
struct Buffer1 { | struct Buffer1 { | ||
| 21行目: | 22行目: | ||
== Vulkan == | == Vulkan == | ||
[[Vulkan]]は[[GPU]](の[[ドライバ]])ごとに[[仕様]]が異なる前代未聞のクソ仕様。 | [[Vulkan]]は[[GPU]](の[[ドライバ]])ごとに[[仕様]]が異なる前代未聞のクソ仕様。 | ||
そのクソ仕様は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:コンピューター・グラフィックス]] | ||