Skip to content

Commit 9974792

Browse files
committed
Added use of TransferTask to BufferInfo:copyDataToBuffer
1 parent dffa828 commit 9974792

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

include/vsg/vk/Device.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ namespace vsg
2525
class WindowTraits;
2626
class MemoryBufferPools;
2727
class DescriptorPools;
28+
class TransferTask;
2829

2930
struct QueueSetting
3031
{
@@ -87,10 +88,11 @@ namespace vsg
8788
/// return the amount of memory available in deviceMemoryBufferPools and allocatable on device
8889
VkDeviceSize availableMemory(bool includeMemoryPools = true) const;
8990

90-
// provide observer_ptr to memory buffer and descriptor pools so that these can be accessed when required
91+
// provide observer_ptr to memory buffer, descriptor pools and transferTask so that these can be accessed when required
9192
observer_ptr<MemoryBufferPools> deviceMemoryBufferPools;
9293
observer_ptr<MemoryBufferPools> stagingMemoryBufferPools;
9394
observer_ptr<DescriptorPools> descriptorPools;
95+
observer_ptr<TransferTask> transferTask;
9496

9597
protected:
9698
virtual ~Device();

src/vsg/app/RecordAndSubmitTask.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ RecordAndSubmitTask::RecordAndSubmitTask(Device* in_device, uint32_t numBuffers)
3939

4040
earlyTransferConsumerCompletedSemaphore = Semaphore::create(in_device);
4141
lateTransferConsumerCompletedSemaphore = Semaphore::create(in_device);
42+
43+
if (!device->transferTask) device->transferTask = transferTask;
4244
}
4345

4446
void RecordAndSubmitTask::advance()

src/vsg/state/BufferInfo.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,19 @@ void BufferInfo::copyDataToBuffer(uint32_t deviceID)
113113
{
114114
if ((dm->getMemoryPropertyFlags() & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
115115
{
116-
warn("BufferInfo::copyDataToBuffer() cannot copy data. DeviceMemory does not support direct memory mapping.");
116+
if (auto transferTask = dm->getDevice()->transferTask.ref_ptr())
117+
{
118+
transferTask->assign(BufferInfoList{ref_ptr<BufferInfo>(this)});
119+
}
120+
else
121+
{
122+
warn("BufferInfo::copyDataToBuffer() cannot copy data. DeviceMemory does not support direct memory mapping.");
117123

118-
// you can use dynamic data updates provided by vsg::TransferTask or alternatively, you can implement the following steps:
119-
// 1. allocate staging buffer
120-
// 2. copy to staging buffer
121-
// 3. transfer from staging buffer to device local buffer - use CopyAndReleaseBuffer
124+
// you can use dynamic data updates provided by vsg::TransferTask or alternatively, you can implement the following steps:
125+
// 1. allocate staging buffer
126+
// 2. copy to staging buffer
127+
// 3. transfer from staging buffer to device local buffer - use CopyAndReleaseBuffer
128+
}
122129
return;
123130
}
124131

0 commit comments

Comments
 (0)