「Vulkan Memory Allocator」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
'''Vulkan Memory Allocator'''(通称:VMA)とは、[[GPUOpen]]が[[オープンソース]]のもとで[[開発]]している「[[Vulkan]]は[[GPU]]ごと(どころか[[デバイスドライバ]]ごと)に[[メモリアライメント]]の[[仕様]]がバラバラ」という絶望的な問題を解決してくれる[[ライブラリ]]です。 | '''Vulkan Memory Allocator'''(通称:VMA)とは、[[GPUOpen]]が[[オープンソース]]のもとで[[開発]]している「[[Vulkan]]は[[GPU]]ごと(どころか[[デバイスドライバ]]ごと)に[[メモリアライメント]]の[[仕様]]がバラバラ」という絶望的な問題を解決してくれる[[ライブラリ]]です。 | ||
+ | |||
+ | == 使い方 == | ||
+ | この[[ライブラリ]]の基本的な使い方はとてもシンプルだ。グローバルなVmaAllocatorオブジェクトを作成した後、バッファを作成するために必要な完全なコードは次のようになります。 | ||
+ | <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 のハンドルやオフセットなどのパラメータを問い合わせることができます。 | ||
== 外部リンク == | == 外部リンク == |
2024年4月18日 (木) 01:18時点における版
Vulkan Memory Allocator(通称:VMA)とは、GPUOpenがオープンソースのもとで開発している「VulkanはGPUごと(どころかデバイスドライバごと)にメモリアライメントの仕様がバラバラ」という絶望的な問題を解決してくれるライブラリです。
使い方
このライブラリの基本的な使い方はとてもシンプルだ。グローバルなVmaAllocatorオブジェクトを作成した後、バッファを作成するために必要な完全なコードは次のようになります。
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);
この1回の関数呼び出しで
- VkBuffer が作成されます。
- 必要に応じて VkDeviceMemory ブロックが割り当てられます。
- メモリブロックの未使用領域がこのバッファにバインドされます。
VmaAllocation は、このバッファに割り当てられたメモリを表すオブジェクトです。VkDeviceMemory のハンドルやオフセットなどのパラメータを問い合わせることができます。