MCPcopy Create free account
hub / github.com/Inori/GPCS4 / alloc

Method alloc

GPCS4/Graphics/Violet/VltStaging.cpp:16–50  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14 }
15
16 VltBufferSlice VltStagingDataAlloc::alloc(VkDeviceSize size, VkDeviceSize align)
17 {
18 if (size > MaxBufferSize)
19 return VltBufferSlice(createBuffer(size));
20
21 if (m_buffer == nullptr)
22 m_buffer = createBuffer(MaxBufferSize);
23
24 if (!m_buffer->isInUse())
25 m_offset = 0;
26
27 m_offset = util::align(m_offset, align);
28
29 if (m_offset + size > MaxBufferSize)
30 {
31 m_offset = 0;
32
33 if (m_buffers.size() < MaxBufferCount)
34 m_buffers.push(std::move(m_buffer));
35
36 if (!m_buffers.front()->isInUse())
37 {
38 m_buffer = std::move(m_buffers.front());
39 m_buffers.pop();
40 }
41 else
42 {
43 m_buffer = createBuffer(MaxBufferSize);
44 }
45 }
46
47 VltBufferSlice slice(m_buffer, m_offset, size);
48 m_offset = util::align(m_offset + size, align);
49 return slice;
50 }
51
52 void VltStagingDataAlloc::trim()
53 {

Callers

nothing calls this directly

Calls 8

VltBufferSliceClass · 0.85
alignFunction · 0.85
moveFunction · 0.85
isInUseMethod · 0.80
frontMethod · 0.80
sizeMethod · 0.45
pushMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected