diff --git a/src/vsg/app/TransferTask.cpp b/src/vsg/app/TransferTask.cpp index 381517c1f4..35ba002a13 100644 --- a/src/vsg/app/TransferTask.cpp +++ b/src/vsg/app/TransferTask.cpp @@ -151,14 +151,14 @@ void TransferTask::_transferBufferInfos(VkCommandBuffer vk_commandBuffer, Frame& offset = (/*alignment == 1 ||*/ (endOfEntry % alignment) == 0) ? endOfEntry : ((endOfEntry / alignment) + 1) * alignment; } - if (bufferInfo->data->properties.dataVariance == STATIC_DATA) + if (bufferInfo->data->dynamic()) { - log(level, " removing copied static data: ", bufferInfo, ", ", bufferInfo->data); - bufferInfo_itr = bufferInfos.erase(bufferInfo_itr); + ++bufferInfo_itr; } else { - ++bufferInfo_itr; + log(level, " removing copied static data: ", bufferInfo, ", ", bufferInfo->data); + bufferInfo_itr = bufferInfos.erase(bufferInfo_itr); } } } @@ -240,14 +240,14 @@ void TransferTask::_transferImageInfos(VkCommandBuffer vk_commandBuffer, Frame& _transferImageInfo(vk_commandBuffer, frame, offset, *imageInfo); } - if (imageInfo->imageView->image->data->properties.dataVariance == STATIC_DATA) + if (imageInfo->imageView->image->data->dynamic()) { - log(level, " removing copied static image data: ", imageInfo, ", ", imageInfo->imageView->image->data); - imageInfo_itr = _dynamicImageInfoSet.erase(imageInfo_itr); + ++imageInfo_itr; } else { - ++imageInfo_itr; + log(level, " removing copied static image data: ", imageInfo, ", ", imageInfo->imageView->image->data); + imageInfo_itr = _dynamicImageInfoSet.erase(imageInfo_itr); } } } diff --git a/src/vsg/state/BufferInfo.cpp b/src/vsg/state/BufferInfo.cpp index c40da0c609..19aed77099 100644 --- a/src/vsg/state/BufferInfo.cpp +++ b/src/vsg/state/BufferInfo.cpp @@ -62,7 +62,7 @@ int BufferInfo::compare(const Object& rhs_object) const if (data != rhs.data && data && rhs.data) { - if (data->properties.dataVariance != STATIC_DATA || rhs.data->properties.dataVariance != STATIC_DATA) + if (data->dynamic() || rhs.data->dynamic()) { if (data < rhs.data) return -1; return 1; // from checks above it must be that data > rhs.data @@ -300,6 +300,10 @@ bool vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bu if (data) { std::memcpy(ptr + bufferInfo->offset - deviceBufferInfo->offset, data->dataPointer(), data->dataSize()); + if (data->properties.dataVariance == STATIC_DATA_UNREF_AFTER_TRANSFER) + { + bufferInfo->data.reset(); + } } bufferInfo->parent = deviceBufferInfo; } diff --git a/src/vsg/utils/FindDynamicObjects.cpp b/src/vsg/utils/FindDynamicObjects.cpp index 2d0ccf8bc0..19a7b43e49 100644 --- a/src/vsg/utils/FindDynamicObjects.cpp +++ b/src/vsg/utils/FindDynamicObjects.cpp @@ -39,7 +39,7 @@ void FindDynamicObjects::apply(const Object& object) void FindDynamicObjects::apply(const Data& data) { - if (data.properties.dataVariance != STATIC_DATA) tag(&data); + if (data.dynamic()) tag(&data); } void FindDynamicObjects::apply(const AnimationGroup& ag)