@@ -106,7 +106,7 @@ void BufferInfo::copyDataToBuffer()
106106
107107void BufferInfo::copyDataToBuffer (uint32_t deviceID)
108108{
109- if (!buffer) return ;
109+ if (!buffer || !data ) return ;
110110
111111 DeviceMemory* dm = buffer->getDeviceMemory (deviceID);
112112 if (dm)
@@ -115,6 +115,12 @@ void BufferInfo::copyDataToBuffer(uint32_t deviceID)
115115 {
116116 if (auto transferTask = dm->getDevice ()->transferTask .ref_ptr ())
117117 {
118+ // if data->dirty() hasn't been called since the last copy, assume it should have been done in call dirty on the data to ensure TransferTask copies the data.
119+ if (!data->differentModifiedCount (copiedModifiedCounts[deviceID]))
120+ {
121+ data->dirty ();
122+ }
123+
118124 transferTask->assign (BufferInfoList{ref_ptr<BufferInfo>(this )});
119125 }
120126 else
@@ -179,8 +185,6 @@ ref_ptr<BufferInfo> vsg::copyDataToStagingBuffer(Context& context, const Data* d
179185//
180186bool vsg::createBufferAndTransferData (Context& context, const BufferInfoList& bufferInfoList, VkBufferUsageFlags usage, VkSharingMode sharingMode)
181187{
182- debug (" vsg::createBufferAndTransferData(.., )" );
183-
184188 if (bufferInfoList.empty ()) return false ;
185189
186190 Device* device = context.device ;
@@ -192,6 +196,9 @@ bool vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bu
192196 else if (usage == VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
193197 alignment = device->getPhysicalDevice ()->getProperties ().limits .minStorageBufferOffsetAlignment ;
194198
199+
200+ debug (" vsg::createBufferAndTransferData(Context& context, const BufferInfoList& bufferInfoList, VkBufferUsageFlags usage, VkSharingMode sharingMode) usage = " , usage, " , alignment = " , alignment);
201+
195202 // transferTask = nullptr;
196203
197204 ref_ptr<BufferInfo> deviceBufferInfo;
@@ -371,6 +378,8 @@ BufferInfoList vsg::createHostVisibleBuffer(Device* device, const DataList& data
371378 else if (usage == VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
372379 alignment = device->getPhysicalDevice ()->getProperties ().limits .minStorageBufferOffsetAlignment ;
373380
381+ debug (" vsg::createHostVisibleBuffer(Device* device, const DataList& dataList, VkBufferUsageFlags usage, VkSharingMode sharingMode) usage = " , usage, " , alignment = " , alignment);
382+
374383 VkDeviceSize totalSize = 0 ;
375384 VkDeviceSize offset = 0 ;
376385 bufferInfoList.reserve (dataList.size ());
0 commit comments