@@ -29,7 +29,7 @@ class StagingBufferManagerFixture : public DeviceFixture {
2929 debugManager.flags .EnableCopyWithStagingBuffers .set (1 );
3030 RootDeviceIndicesContainer rootDeviceIndices = {mockRootDeviceIndex};
3131 std::map<uint32_t , DeviceBitfield> deviceBitfields{{mockRootDeviceIndex, mockDeviceBitfield}};
32- this ->stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get (), rootDeviceIndices, deviceBitfields);
32+ this ->stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get (), rootDeviceIndices, deviceBitfields, false );
3333 this ->csr = pDevice->commandStreamReceivers [0 ].get ();
3434 }
3535
@@ -211,6 +211,41 @@ TEST_F(StagingBufferManagerTest, givenStagingBufferEnabledWhenValidForImageWrite
211211 svmAllocsManager->freeSVMAlloc (usmBuffer);
212212}
213213
214+ TEST_F (StagingBufferManagerTest, givenStagingBufferWhenPerformCopyOnHwThenDontSetWritable) {
215+ constexpr size_t numOfChunkCopies = 8 ;
216+ constexpr size_t remainder = 1024 ;
217+ constexpr size_t totalCopySize = stagingBufferSize * numOfChunkCopies + remainder;
218+ copyThroughStagingBuffers (totalCopySize, numOfChunkCopies + 1 , 1 , csr);
219+ auto svmData = svmAllocsManager->svmAllocs .allocations [0 ].second .get ();
220+ auto alloc = svmData->gpuAllocations .getDefaultGraphicsAllocation ();
221+ alloc->setAubWritable (false , std::numeric_limits<uint32_t >::max ());
222+ alloc->setTbxWritable (false , std::numeric_limits<uint32_t >::max ());
223+ copyThroughStagingBuffers (totalCopySize, numOfChunkCopies + 1 , 0 , csr);
224+
225+ EXPECT_FALSE (alloc->isAubWritable (std::numeric_limits<uint32_t >::max ()));
226+ EXPECT_FALSE (alloc->isTbxWritable (std::numeric_limits<uint32_t >::max ()));
227+ }
228+
229+ TEST_F (StagingBufferManagerTest, givenStagingBufferWhenPerformCopyOnSimulationThenSetWritable) {
230+ constexpr size_t numOfChunkCopies = 8 ;
231+ constexpr size_t remainder = 1024 ;
232+ constexpr size_t totalCopySize = stagingBufferSize * numOfChunkCopies + remainder;
233+
234+ RootDeviceIndicesContainer rootDeviceIndices = {mockRootDeviceIndex};
235+ std::map<uint32_t , DeviceBitfield> deviceBitfields{{mockRootDeviceIndex, mockDeviceBitfield}};
236+ stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get (), rootDeviceIndices, deviceBitfields, true );
237+
238+ copyThroughStagingBuffers (totalCopySize, numOfChunkCopies + 1 , 1 , csr);
239+ auto svmData = svmAllocsManager->svmAllocs .allocations [0 ].second .get ();
240+ auto alloc = svmData->gpuAllocations .getDefaultGraphicsAllocation ();
241+ alloc->setAubWritable (false , std::numeric_limits<uint32_t >::max ());
242+ alloc->setTbxWritable (false , std::numeric_limits<uint32_t >::max ());
243+ copyThroughStagingBuffers (totalCopySize, numOfChunkCopies + 1 , 0 , csr);
244+
245+ EXPECT_TRUE (alloc->isAubWritable (std::numeric_limits<uint32_t >::max ()));
246+ EXPECT_TRUE (alloc->isTbxWritable (std::numeric_limits<uint32_t >::max ()));
247+ }
248+
214249TEST_F (StagingBufferManagerTest, givenStagingBufferWhenPerformCopyThenCopyData) {
215250 constexpr size_t numOfChunkCopies = 8 ;
216251 constexpr size_t remainder = 1024 ;
@@ -336,7 +371,7 @@ TEST_F(StagingBufferManagerTest, givenStagingBufferWhenChangedBufferSizeThenPerf
336371
337372 RootDeviceIndicesContainer rootDeviceIndices = {mockRootDeviceIndex};
338373 std::map<uint32_t , DeviceBitfield> deviceBitfields{{mockRootDeviceIndex, mockDeviceBitfield}};
339- stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get (), rootDeviceIndices, deviceBitfields);
374+ stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get (), rootDeviceIndices, deviceBitfields, false );
340375 copyThroughStagingBuffers (totalCopySize, numOfChunkCopies + 1 , 1 , csr);
341376}
342377
0 commit comments