Buffer
Buffers are unstructured regions of contiguous memory. Buffers are created from Memory
objects:
1
2
3
4
5
6
7
8
9
10
11
| import lluvia as ll
session = ll.createSession()
hostMemory = session.createMemory([ll.MemoryPropertyFlagBits.DeviceLocal,
ll.MemoryPropertyFlagBits.HostVisible,
ll.MemoryPropertyFlagBits.HostCoherent])
aBuffer = hostMemory.createBuffer(1024, usageFlags=[ll.BufferUsageFlagBits.TransferDst,
ll.BufferUsageFlagBits.TransferSrc,
ll.BufferUsageFlagBits.StorageBuffer])
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <iostream>
#include <vulkan/vulkan.hpp>
#include "lluvia/core.h"
#include <vulkan/vulkan.hpp>
int main() {
ll::SessionDescriptor desc = ll::SessionDescriptor().enableDebug(true);
std::shared_ptr<ll::Session> session = ll::Session::create(desc);
hostMemory = session.createMemory([ll.MemoryPropertyFlagBits.DeviceLocal,
ll.MemoryPropertyFlagBits.HostVisible,
ll.MemoryPropertyFlagBits.HostCoherent])
const auto usageFlags = vk::BufferUsageFlags { vk::BufferUsageFlagBits::eStorageBuffer
| vk::BufferUsageFlagBits::eTransferSrc
| vk::BufferUsageFlagBits::eTransferDst};
auto aBuffer = hostMemory->createBuffer(1024, usageFlags);
}
|
The first parameter is the requested size in bytes. The usageFlags
indicated the intended usage of this buffer; the values are taken directly from the Vulkan BufferUsageFlagBits. The most used values are:
Flag | Description |
---|
StorageBuffer | Indicates that the buffer is going to be used for general storage. |
TransferDst | Indicates that the buffer can be used as destination for transfer commands. |
TransferSrc | Indicates that the buffer can be used as source for transfer commands. |