最新版 |
編集中の文章 |
1行目: |
1行目: |
− | '''Vulkan Memory Allocator'''(通称:VMA)とは、[[GPUOpen]](実質[[AMD]])が[[オープンソース]]のもとで[[開発]]している「[[Vulkan]]は[[GPU]]ごと(どころか[[デバイスドライバ]]ごと)に[[メモリアライメント]]の[[仕様]]がバラバラ」という絶望的な問題を全自動で解決してくれる[[ライブラリ]]です。 | + | '''Vulkan Memory Allocator'''(通称:VMA)とは、[[GPUOpen]]が[[オープンソース]]のもとで[[開発]]している「[[Vulkan]]は[[GPU]]ごと(どころか[[デバイスドライバ]]ごと)に[[メモリアライメント]]の[[仕様]]がバラバラ」という絶望的な問題を解決してくれる[[ライブラリ]]です。 |
− | | |
− | [[PC]]は実質[[NVIDIA]]、[[AMD]]、[[Intel]]の3社しかなく、[[Windows]]は[[マイクロソフト]]が音頭を取り、[[Linux]]は[[Steam]]の[[中の人]]が音頭を取り、[[デバイスドライバ]]のアップデートを半ば強制しているので割とマシです。
| |
− | | |
− | 問題は[[スマホ]]。[[Android]]向けのクソ仕様の[[デバイスドライバ]]が量産され続けており、かつほとんどの[[スマホ]]はデバイスドライバが更新されずに(そもそも[[OS]]が更新されずに)放置されています。そのためほぼ同じ[[GPU]]でもスマホごとにデバイスドライバのバージョンが異なり、メモリアライメントの仕様も異なるというふざけた状況に陥っています。
| |
− | | |
− | そんなこともあり本プロジェクトの[[ソースコード]]は今なお勢いよく更新され続けています。
| |
− | | |
− | == 使い方 ==
| |
− | この[[ライブラリ]]の基本的な使い方はとてもシンプルだ。グローバルなVmaAllocatorオブジェクトを作成した後、バッファを作成するために必要な完全なコードは次のようになります。
| |
− | | |
− | ; Vulkan Memory Allocatorを使ってVkBufferを確保する例
| |
− | <source lang="c">
| |
− | VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
| |
− | bufferInfo.size = 65536;
| |
− | bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
| |
− | | |
− | VmaAllocationCreateInfo allocInfo = {};
| |
− | allocInfo.usage = VMA_MEMORY_USAGE_AUTO;
| |
− | | |
− | VkBuffer buffer;
| |
− | VmaAllocation allocation;
| |
− | vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
| |
− | </source>
| |
− | | |
− | この1回の関数呼び出しで
| |
− | # VkBuffer が作成されます。
| |
− | # 必要に応じて VkDeviceMemory ブロックが割り当てられます。
| |
− | # メモリブロックの未使用領域がこのバッファにバインドされます。
| |
− | | |
− | VmaAllocation は、このバッファに割り当てられたメモリを表すオブジェクトです。VkDeviceMemory のハンドルやオフセットなどのパラメータを問い合わせることができます。
| |
− | | |
− | == 関連項目 ==
| |
− | * [[主なグラフィックスAPIのメモリアライメント]]
| |
− | * [[GPUOpen]]
| |
| | | |
| == 外部リンク == | | == 外部リンク == |