MCPcopy Create free account
hub / github.com/NVIDIA-RTX/NVRHI / createBuffer

Method createBuffer

src/vulkan/vulkan-buffer.cpp:31–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29{
30
31 BufferHandle Device::createBuffer(const BufferDesc& desc)
32 {
33 // Check some basic constraints first - the validation layer is expected to handle them too
34
35 if (desc.isVolatile && desc.maxVersions == 0)
36 return nullptr;
37
38 if (desc.isVolatile && !desc.isConstantBuffer)
39 return nullptr;
40
41 if (desc.byteSize == 0)
42 return nullptr;
43
44
45 Buffer *buffer = new Buffer(m_Context, m_Allocator);
46 buffer->desc = desc;
47
48 vk::BufferUsageFlags usageFlags = vk::BufferUsageFlagBits::eTransferSrc |
49 vk::BufferUsageFlagBits::eTransferDst;
50
51 if (desc.isVertexBuffer)
52 usageFlags |= vk::BufferUsageFlagBits::eVertexBuffer;
53
54 if (desc.isIndexBuffer)
55 usageFlags |= vk::BufferUsageFlagBits::eIndexBuffer;
56
57 if (desc.isDrawIndirectArgs)
58 usageFlags |= vk::BufferUsageFlagBits::eIndirectBuffer;
59
60 if (desc.isConstantBuffer)
61 usageFlags |= vk::BufferUsageFlagBits::eUniformBuffer;
62
63 if (desc.structStride != 0 || desc.canHaveUAVs || desc.canHaveRawViews)
64 usageFlags |= vk::BufferUsageFlagBits::eStorageBuffer;
65
66 if (desc.canHaveTypedViews)
67 usageFlags |= vk::BufferUsageFlagBits::eUniformTexelBuffer;
68
69 if (desc.canHaveTypedViews && desc.canHaveUAVs)
70 usageFlags |= vk::BufferUsageFlagBits::eStorageTexelBuffer;
71
72 if (desc.isAccelStructBuildInput)
73 usageFlags |= vk::BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR;
74
75 if (desc.isAccelStructStorage)
76 usageFlags |= vk::BufferUsageFlagBits::eAccelerationStructureStorageKHR;
77
78 if (desc.isShaderBindingTable)
79 usageFlags |= vk::BufferUsageFlagBits::eShaderBindingTableKHR;
80
81 if (m_Context.extensions.buffer_device_address)
82 usageFlags |= vk::BufferUsageFlagBits::eShaderDeviceAddress;
83
84 uint64_t size = desc.byteSize;
85
86 if (desc.isVolatile)
87 {
88 assert(!desc.isVirtual);

Callers 2

CreateChunkMethod · 0.45
createShaderTableMethod · 0.45

Calls 6

resizeMethod · 0.80
endMethod · 0.80
nameVKObjectMethod · 0.80
allocateBufferMemoryMethod · 0.80
getGpuVirtualAddressMethod · 0.45
infoMethod · 0.45

Tested by

no test coverage detected