Skip to content

Commit 7ada168

Browse files
Merge pull request #1275 from rms7326/release-buffer-after-transfer
Implemented release of static data after transfer to the GPU
2 parents b64dbb2 + 3f0c109 commit 7ada168

3 files changed

Lines changed: 14 additions & 10 deletions

File tree

src/vsg/app/TransferTask.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,14 @@ void TransferTask::_transferBufferInfos(VkCommandBuffer vk_commandBuffer, Frame&
151151
offset = (/*alignment == 1 ||*/ (endOfEntry % alignment) == 0) ? endOfEntry : ((endOfEntry / alignment) + 1) * alignment;
152152
}
153153

154-
if (bufferInfo->data->properties.dataVariance == STATIC_DATA)
154+
if (bufferInfo->data->dynamic())
155155
{
156-
log(level, " removing copied static data: ", bufferInfo, ", ", bufferInfo->data);
157-
bufferInfo_itr = bufferInfos.erase(bufferInfo_itr);
156+
++bufferInfo_itr;
158157
}
159158
else
160159
{
161-
++bufferInfo_itr;
160+
log(level, " removing copied static data: ", bufferInfo, ", ", bufferInfo->data);
161+
bufferInfo_itr = bufferInfos.erase(bufferInfo_itr);
162162
}
163163
}
164164
}
@@ -240,14 +240,14 @@ void TransferTask::_transferImageInfos(VkCommandBuffer vk_commandBuffer, Frame&
240240
_transferImageInfo(vk_commandBuffer, frame, offset, *imageInfo);
241241
}
242242

243-
if (imageInfo->imageView->image->data->properties.dataVariance == STATIC_DATA)
243+
if (imageInfo->imageView->image->data->dynamic())
244244
{
245-
log(level, " removing copied static image data: ", imageInfo, ", ", imageInfo->imageView->image->data);
246-
imageInfo_itr = _dynamicImageInfoSet.erase(imageInfo_itr);
245+
++imageInfo_itr;
247246
}
248247
else
249248
{
250-
++imageInfo_itr;
249+
log(level, " removing copied static image data: ", imageInfo, ", ", imageInfo->imageView->image->data);
250+
imageInfo_itr = _dynamicImageInfoSet.erase(imageInfo_itr);
251251
}
252252
}
253253
}

src/vsg/state/BufferInfo.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ int BufferInfo::compare(const Object& rhs_object) const
6262

6363
if (data != rhs.data && data && rhs.data)
6464
{
65-
if (data->properties.dataVariance != STATIC_DATA || rhs.data->properties.dataVariance != STATIC_DATA)
65+
if (data->dynamic() || rhs.data->dynamic())
6666
{
6767
if (data < rhs.data) return -1;
6868
return 1; // from checks above it must be that data > rhs.data
@@ -300,6 +300,10 @@ bool vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bu
300300
if (data)
301301
{
302302
std::memcpy(ptr + bufferInfo->offset - deviceBufferInfo->offset, data->dataPointer(), data->dataSize());
303+
if (data->properties.dataVariance == STATIC_DATA_UNREF_AFTER_TRANSFER)
304+
{
305+
bufferInfo->data.reset();
306+
}
303307
}
304308
bufferInfo->parent = deviceBufferInfo;
305309
}

src/vsg/utils/FindDynamicObjects.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void FindDynamicObjects::apply(const Object& object)
3939

4040
void FindDynamicObjects::apply(const Data& data)
4141
{
42-
if (data.properties.dataVariance != STATIC_DATA) tag(&data);
42+
if (data.dynamic()) tag(&data);
4343
}
4444

4545
void FindDynamicObjects::apply(const AnimationGroup& ag)

0 commit comments

Comments
 (0)