@@ -75,6 +75,7 @@ class VKRSynchronizedRingAllocator
75
75
{
76
76
STAGING, // staging upload buffer
77
77
INDEX, // buffer for index data
78
+ STRIDE, // buffer for stride-adjusted vertex data
78
79
};
79
80
80
81
VKRSynchronizedRingAllocator (class VulkanRenderer * vkRenderer, class VKRMemoryManager * vkMemoryManager, BUFFER_TYPE bufferType, uint32 minimumBufferAllocSize) : m_vkr(vkRenderer), m_vkrMemMgr(vkMemoryManager), m_bufferType(bufferType), m_minimumBufferAllocSize(minimumBufferAllocSize) {};
@@ -138,7 +139,10 @@ class VKRMemoryManager
138
139
{
139
140
friend class VKRSynchronizedRingAllocator ;
140
141
public:
141
- VKRMemoryManager (class VulkanRenderer * renderer) : m_stagingBuffer(renderer, this , VKRSynchronizedRingAllocator::BUFFER_TYPE::STAGING, 32u * 1024 * 1024 ), m_indexBuffer(renderer, this , VKRSynchronizedRingAllocator::BUFFER_TYPE::INDEX, 4u * 1024 * 1024 )
142
+ VKRMemoryManager (class VulkanRenderer * renderer) :
143
+ m_stagingBuffer (renderer, this , VKRSynchronizedRingAllocator::BUFFER_TYPE::STAGING, 32u * 1024 * 1024 ),
144
+ m_indexBuffer (renderer, this , VKRSynchronizedRingAllocator::BUFFER_TYPE::INDEX, 4u * 1024 * 1024 ),
145
+ m_vertexStrideMetalBuffer (renderer, this , VKRSynchronizedRingAllocator::BUFFER_TYPE::STRIDE, 4u * 1024 * 1024 )
142
146
{
143
147
m_vkr = renderer;
144
148
}
@@ -164,12 +168,14 @@ class VKRMemoryManager
164
168
165
169
VKRSynchronizedRingAllocator& getStagingAllocator () { return m_stagingBuffer; }; // allocator for texture/attribute/uniform uploads
166
170
VKRSynchronizedRingAllocator& getIndexAllocator () { return m_indexBuffer; }; // allocator for index data
171
+ VKRSynchronizedRingAllocator& getMetalStrideWorkaroundAllocator () { return m_vertexStrideMetalBuffer; }; // allocator for stride-adjusted vertex data
167
172
168
173
void cleanupBuffers (uint64 latestFinishedCommandBufferId)
169
174
{
170
175
LatteIndices_invalidateAll ();
171
176
m_stagingBuffer.CleanupBuffer (latestFinishedCommandBufferId);
172
177
m_indexBuffer.CleanupBuffer (latestFinishedCommandBufferId);
178
+ m_vertexStrideMetalBuffer.CleanupBuffer (latestFinishedCommandBufferId);
173
179
}
174
180
175
181
// memory helpers
@@ -197,4 +203,5 @@ class VKRMemoryManager
197
203
class VulkanRenderer * m_vkr;
198
204
VKRSynchronizedRingAllocator m_stagingBuffer;
199
205
VKRSynchronizedRingAllocator m_indexBuffer;
206
+ VKRSynchronizedRingAllocator m_vertexStrideMetalBuffer;
200
207
};
0 commit comments