Skip to content

Commit 7c56d80

Browse files
Merge pull request #1672 from vsg-dev/OptionalMemoryBufferPools
Optional MemoryBufferPools::reserve usage
2 parents b463712 + d48ae5f commit 7c56d80

File tree

5 files changed

+15
-3
lines changed

5 files changed

+15
-3
lines changed

include/vsg/vk/MemoryBufferPools.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ namespace vsg
4242
/// throw vsg::Exception when reserveMemory() fails to allocated memory on device.
4343
bool throwOutOfDeviceMemoryException = true;
4444

45+
/// hint whether the compile traversal should call MemoryBufferPools::reserve(requirements);
46+
bool compileTraversalUseReserve = true;
47+
4548
VkDeviceSize computeMemoryTotalAvailable() const;
4649
VkDeviceSize computeMemoryTotalReserved() const;
4750
VkDeviceSize computeBufferTotalAvailable() const;

src/vsg/state/BufferInfo.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,6 @@ ref_ptr<BufferInfo> vsg::copyDataToStagingBuffer(Context& context, const Data* d
185185
//
186186
bool vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bufferInfoList, VkBufferUsageFlags usage, VkSharingMode sharingMode)
187187
{
188-
debug("vsg::createBufferAndTransferData(.., )");
189-
190188
if (bufferInfoList.empty()) return false;
191189

192190
Device* device = context.device;
@@ -198,6 +196,9 @@ bool vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bu
198196
else if (usage == VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
199197
alignment = device->getPhysicalDevice()->getProperties().limits.minStorageBufferOffsetAlignment;
200198

199+
200+
debug("vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bufferInfoList, VkBufferUsageFlags usage, VkSharingMode sharingMode) usage = ", usage, ", alignment = ", alignment);
201+
201202
//transferTask = nullptr;
202203

203204
ref_ptr<BufferInfo> deviceBufferInfo;
@@ -377,6 +378,8 @@ BufferInfoList vsg::createHostVisibleBuffer(Device* device, const DataList& data
377378
else if (usage == VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
378379
alignment = device->getPhysicalDevice()->getProperties().limits.minStorageBufferOffsetAlignment;
379380

381+
debug("vsg::createHostVisibleBuffer(Device* device, const DataList& dataList, VkBufferUsageFlags usage, VkSharingMode sharingMode) usage = ", usage, ", alignment = ", alignment);
382+
380383
VkDeviceSize totalSize = 0;
381384
VkDeviceSize offset = 0;
382385
bufferInfoList.reserve(dataList.size());

src/vsg/state/DescriptorBuffer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ void DescriptorBuffer::compile(Context& context)
140140

141141
VkDeviceSize totalSize = 0;
142142

143+
debug("DescriptorBuffer::compile() bufferUsageFlags = ",bufferUsageFlags, ", alignment = ", alignment);
144+
143145
// compute the total size of BufferInfo that needs to be allocated.
144146
{
145147
VkDeviceSize offset = 0;

src/vsg/vk/Context.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,9 @@ VkResult Context::reserve(ResourceRequirements& requirements)
197197
{
198198
CPU_INSTRUMENTATION_L2_NC(instrumentation, "Context reserve", COLOR_COMPILE)
199199

200-
VkResult result = deviceMemoryBufferPools->reserve(requirements);
200+
VkResult result = VK_SUCCESS;
201+
202+
if (deviceMemoryBufferPools->compileTraversalUseReserve) result = deviceMemoryBufferPools->reserve(requirements);
201203

202204
resourceRequirements.maxSlots.merge(requirements.maxSlots);
203205

src/vsg/vk/MemoryBufferPools.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ VkResult MemoryBufferPools::reserve(ResourceRequirements& requirements)
265265
else if ((properties.usageFlags & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) != 0)
266266
alignment = limits.minStorageBufferOffsetAlignment;
267267

268+
debug("MemoryBufferPools::reserve(ResourceRequirements& requirements) properties.usageFlags = ", properties.usageFlags, ", alignment = ", alignment);
269+
268270
auto newBufferInfo = reserveBuffer(bufferInfo->data->dataSize(), alignment, properties.usageFlags, properties.sharingMode, memoryPropertiesFlags);
269271
if (newBufferInfo)
270272
{

0 commit comments

Comments
 (0)