Resolve the extra vk::BufferUsageFlags a BufferUsageHint requires, on top of whatever base usage the caller already applies.
21{
22 switch (hint) {
23 case BufferUsageHint::INDIRECT:
24 return vk::BufferUsageFlagBits::eIndirectBuffer;
25 case BufferUsageHint::COMPUTE_STORAGE:
26 return vk::BufferUsageFlagBits::eStorageBuffer;
27 default:
28 break;
29 }
30
31 vk::BufferUsageFlags flags = vk::BufferUsageFlagBits::eTransferSrc | vk::BufferUsageFlagBits::eTransferDst;
32
33 switch (hint) {
34 case BufferUsageHint::STAGING:
35 break;
36 case BufferUsageHint::DEVICE:
37 case BufferUsageHint::COMPUTE:
38 flags |= vk::BufferUsageFlagBits::eStorageBuffer;
39 break;
40 case BufferUsageHint::VERTEX:
41 flags |= vk::BufferUsageFlagBits::eVertexBuffer | vk::BufferUsageFlagBits::eStorageBuffer;
42 break;
43 case BufferUsageHint::INDEX:
44 flags |= vk::BufferUsageFlagBits::eIndexBuffer;
45 break;
46 case BufferUsageHint::UNIFORM:
47 flags |= vk::BufferUsageFlagBits::eUniformBuffer;
48 break;
49 case BufferUsageHint::UNIFORM_BDA:
50 flags |= vk::BufferUsageFlagBits::eUniformBuffer
51 | vk::BufferUsageFlagBits::eShaderDeviceAddress;
52 break;
53 case BufferUsageHint::STORAGE_BDA:
54 flags |= vk::BufferUsageFlagBits::eStorageBuffer
55 | vk::BufferUsageFlagBits::eShaderDeviceAddress;
56 break;
57 case BufferUsageHint::HOST_STORAGE:
58 flags |= vk::BufferUsageFlagBits::eStorageBuffer;
59 break;
60 default:
61 break;
62 }
63
64 return flags;
65}