@@ -2290,3 +2290,46 @@ TEST_F(WddmMemoryManagerSimpleTest, givenWddmMemoryManagerWhenGettingGlobalMemor
22902290 uint32_t rootDeviceIndex = 0u ;
22912291 EXPECT_EQ (memoryManager.getPercentOfGlobalMemoryAvailable (rootDeviceIndex), 0.8 );
22922292}
2293+
2294+ TEST_F (WddmMemoryManagerSimpleTest, whenAlignmentRequirementExceedsPageSizeThenAllocateGraphicsMemoryFromSystemPtr) {
2295+ struct MockWddmMemoryManagerAllocateWithAlignment : MockWddmMemoryManager {
2296+ using MockWddmMemoryManager::MockWddmMemoryManager;
2297+
2298+ GraphicsAllocation *allocateSystemMemoryAndCreateGraphicsAllocationFromIt (const AllocationData &allocationData) override {
2299+ ++callCount.allocateSystemMemoryAndCreateGraphicsAllocationFromIt ;
2300+ return nullptr ;
2301+ }
2302+ GraphicsAllocation *allocateGraphicsMemoryUsingKmdAndMapItToCpuVA (const AllocationData &allocationData, bool allowLargePages) override {
2303+ ++callCount.allocateGraphicsMemoryUsingKmdAndMapItToCpuVA ;
2304+ return nullptr ;
2305+ }
2306+
2307+ struct {
2308+ int allocateSystemMemoryAndCreateGraphicsAllocationFromIt = 0 ;
2309+ int allocateGraphicsMemoryUsingKmdAndMapItToCpuVA = 0 ;
2310+ } callCount;
2311+ };
2312+
2313+ MockWddmMemoryManagerAllocateWithAlignment memoryManager (true , true , *executionEnvironment);
2314+
2315+ AllocationData allocData = {};
2316+ allocData.size = 1024 ;
2317+ allocData.alignment = MemoryConstants::pageSize64k * 4 ;
2318+ memoryManager.allocateGraphicsMemoryWithAlignment (allocData);
2319+ EXPECT_EQ (1U , memoryManager.callCount .allocateSystemMemoryAndCreateGraphicsAllocationFromIt );
2320+ EXPECT_EQ (0U , memoryManager.callCount .allocateGraphicsMemoryUsingKmdAndMapItToCpuVA );
2321+
2322+ memoryManager.callCount .allocateSystemMemoryAndCreateGraphicsAllocationFromIt = 0 ;
2323+ memoryManager.callCount .allocateGraphicsMemoryUsingKmdAndMapItToCpuVA = 0 ;
2324+
2325+ allocData.size = 1024 ;
2326+ allocData.alignment = MemoryConstants::pageSize;
2327+ memoryManager.allocateGraphicsMemoryWithAlignment (allocData);
2328+ if (preferredAllocationMethod == GfxMemoryAllocationMethod::AllocateByKmd) {
2329+ EXPECT_EQ (0U , memoryManager.callCount .allocateSystemMemoryAndCreateGraphicsAllocationFromIt );
2330+ EXPECT_EQ (1U , memoryManager.callCount .allocateGraphicsMemoryUsingKmdAndMapItToCpuVA );
2331+ } else {
2332+ EXPECT_EQ (1U , memoryManager.callCount .allocateSystemMemoryAndCreateGraphicsAllocationFromIt );
2333+ EXPECT_EQ (0U , memoryManager.callCount .allocateGraphicsMemoryUsingKmdAndMapItToCpuVA );
2334+ }
2335+ }
0 commit comments