fix: set staging buffer writeable for aub and tbx

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2024-12-23 10:43:42 +00:00
committed by Compute-Runtime-Automation
parent 54e62da553
commit 1135c1033e
5 changed files with 49 additions and 6 deletions

View File

@@ -29,7 +29,7 @@ class StagingBufferManagerFixture : public DeviceFixture {
debugManager.flags.EnableCopyWithStagingBuffers.set(1);
RootDeviceIndicesContainer rootDeviceIndices = {mockRootDeviceIndex};
std::map<uint32_t, DeviceBitfield> deviceBitfields{{mockRootDeviceIndex, mockDeviceBitfield}};
this->stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get(), rootDeviceIndices, deviceBitfields);
this->stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get(), rootDeviceIndices, deviceBitfields, false);
this->csr = pDevice->commandStreamReceivers[0].get();
}
@@ -211,6 +211,41 @@ TEST_F(StagingBufferManagerTest, givenStagingBufferEnabledWhenValidForImageWrite
svmAllocsManager->freeSVMAlloc(usmBuffer);
}
TEST_F(StagingBufferManagerTest, givenStagingBufferWhenPerformCopyOnHwThenDontSetWritable) {
constexpr size_t numOfChunkCopies = 8;
constexpr size_t remainder = 1024;
constexpr size_t totalCopySize = stagingBufferSize * numOfChunkCopies + remainder;
copyThroughStagingBuffers(totalCopySize, numOfChunkCopies + 1, 1, csr);
auto svmData = svmAllocsManager->svmAllocs.allocations[0].second.get();
auto alloc = svmData->gpuAllocations.getDefaultGraphicsAllocation();
alloc->setAubWritable(false, std::numeric_limits<uint32_t>::max());
alloc->setTbxWritable(false, std::numeric_limits<uint32_t>::max());
copyThroughStagingBuffers(totalCopySize, numOfChunkCopies + 1, 0, csr);
EXPECT_FALSE(alloc->isAubWritable(std::numeric_limits<uint32_t>::max()));
EXPECT_FALSE(alloc->isTbxWritable(std::numeric_limits<uint32_t>::max()));
}
TEST_F(StagingBufferManagerTest, givenStagingBufferWhenPerformCopyOnSimulationThenSetWritable) {
constexpr size_t numOfChunkCopies = 8;
constexpr size_t remainder = 1024;
constexpr size_t totalCopySize = stagingBufferSize * numOfChunkCopies + remainder;
RootDeviceIndicesContainer rootDeviceIndices = {mockRootDeviceIndex};
std::map<uint32_t, DeviceBitfield> deviceBitfields{{mockRootDeviceIndex, mockDeviceBitfield}};
stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get(), rootDeviceIndices, deviceBitfields, true);
copyThroughStagingBuffers(totalCopySize, numOfChunkCopies + 1, 1, csr);
auto svmData = svmAllocsManager->svmAllocs.allocations[0].second.get();
auto alloc = svmData->gpuAllocations.getDefaultGraphicsAllocation();
alloc->setAubWritable(false, std::numeric_limits<uint32_t>::max());
alloc->setTbxWritable(false, std::numeric_limits<uint32_t>::max());
copyThroughStagingBuffers(totalCopySize, numOfChunkCopies + 1, 0, csr);
EXPECT_TRUE(alloc->isAubWritable(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(alloc->isTbxWritable(std::numeric_limits<uint32_t>::max()));
}
TEST_F(StagingBufferManagerTest, givenStagingBufferWhenPerformCopyThenCopyData) {
constexpr size_t numOfChunkCopies = 8;
constexpr size_t remainder = 1024;
@@ -336,7 +371,7 @@ TEST_F(StagingBufferManagerTest, givenStagingBufferWhenChangedBufferSizeThenPerf
RootDeviceIndicesContainer rootDeviceIndices = {mockRootDeviceIndex};
std::map<uint32_t, DeviceBitfield> deviceBitfields{{mockRootDeviceIndex, mockDeviceBitfield}};
stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get(), rootDeviceIndices, deviceBitfields);
stagingBufferManager = std::make_unique<StagingBufferManager>(svmAllocsManager.get(), rootDeviceIndices, deviceBitfields, false);
copyThroughStagingBuffers(totalCopySize, numOfChunkCopies + 1, 1, csr);
}