diff --git a/runtime/os_interface/windows/deferrable_deletion_win.cpp b/runtime/os_interface/windows/deferrable_deletion_win.cpp index bf312be6fe..4f617c7789 100644 --- a/runtime/os_interface/windows/deferrable_deletion_win.cpp +++ b/runtime/os_interface/windows/deferrable_deletion_win.cpp @@ -21,7 +21,6 @@ */ #include "runtime/os_interface/windows/wddm.h" -#include "runtime/helpers/aligned_memory.h" #include "runtime/os_interface/windows/deferrable_deletion_win.h" namespace OCLRT { @@ -31,10 +30,10 @@ DeferrableDeletion *DeferrableDeletion::create(Args... args) { return new DeferrableDeletionImpl(std::forward(args)...); } template DeferrableDeletion *DeferrableDeletion::create(Wddm *wddm, D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, - D3DKMT_HANDLE resourceHandle, void *cpuPtr, void *gpuPtr); + D3DKMT_HANDLE resourceHandle); DeferrableDeletionImpl::DeferrableDeletionImpl(Wddm *wddm, D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, - D3DKMT_HANDLE resourceHandle, void *cpuPtr, void *gpuPtr) { + D3DKMT_HANDLE resourceHandle) { this->wddm = wddm; if (handles) { this->handles = new D3DKMT_HANDLE[allocationCount]; @@ -45,16 +44,10 @@ DeferrableDeletionImpl::DeferrableDeletionImpl(Wddm *wddm, D3DKMT_HANDLE *handle this->allocationCount = allocationCount; this->lastFenceValue = lastFenceValue; this->resourceHandle = resourceHandle; - this->cpuPtr = cpuPtr; - this->gpuPtr = gpuPtr; } void DeferrableDeletionImpl::apply() { bool destroyStatus = wddm->destroyAllocations(handles, allocationCount, lastFenceValue, resourceHandle); DEBUG_BREAK_IF(!destroyStatus); - ::alignedFree(cpuPtr); - cpuPtr = nullptr; - wddm->releaseGpuPtr(gpuPtr); - gpuPtr = nullptr; } DeferrableDeletionImpl::~DeferrableDeletionImpl() { if (handles) { diff --git a/runtime/os_interface/windows/deferrable_deletion_win.h b/runtime/os_interface/windows/deferrable_deletion_win.h index 49b3c85e4a..d50096e90c 100644 --- a/runtime/os_interface/windows/deferrable_deletion_win.h +++ b/runtime/os_interface/windows/deferrable_deletion_win.h @@ -30,7 +30,7 @@ class Wddm; class DeferrableDeletionImpl : public DeferrableDeletion { public: DeferrableDeletionImpl(Wddm *wddm, D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, - D3DKMT_HANDLE resourceHandle, void *cpuPtr, void *gpuPtr); + D3DKMT_HANDLE resourceHandle); void apply() override; ~DeferrableDeletionImpl(); @@ -40,7 +40,5 @@ class DeferrableDeletionImpl : public DeferrableDeletion { uint32_t allocationCount; uint64_t lastFenceValue; D3DKMT_HANDLE resourceHandle; - void *cpuPtr; - void *gpuPtr; }; } // namespace OCLRT diff --git a/runtime/os_interface/windows/wddm_memory_manager.cpp b/runtime/os_interface/windows/wddm_memory_manager.cpp index c289da3307..1925980f0b 100644 --- a/runtime/os_interface/windows/wddm_memory_manager.cpp +++ b/runtime/os_interface/windows/wddm_memory_manager.cpp @@ -301,20 +301,20 @@ void WddmMemoryManager::freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation unlockResource(input); input->setLocked(false); } - status = tryDeferDeletions(allocationHandles, allocationCount, input->getResidencyData().lastFence, resourceHandle, cpuPtr, gpuPtr); + status = tryDeferDeletions(allocationHandles, allocationCount, input->getResidencyData().lastFence, resourceHandle); DEBUG_BREAK_IF(!status); + ::alignedFree(cpuPtr); + wddm->releaseGpuPtr(gpuPtr); } delete gfxAllocation; } -bool WddmMemoryManager::tryDeferDeletions(D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, D3DKMT_HANDLE resourceHandle, void *cpuPtr, void *gpuPtr) { +bool WddmMemoryManager::tryDeferDeletions(D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, D3DKMT_HANDLE resourceHandle) { bool status = true; if (deferredDeleter) { - deferredDeleter->deferDeletion(DeferrableDeletion::create(wddm, handles, allocationCount, lastFenceValue, resourceHandle, cpuPtr, gpuPtr)); + deferredDeleter->deferDeletion(DeferrableDeletion::create(wddm, handles, allocationCount, lastFenceValue, resourceHandle)); } else { status = wddm->destroyAllocations(handles, allocationCount, lastFenceValue, resourceHandle); - ::alignedFree(cpuPtr); - wddm->releaseGpuPtr(gpuPtr); } return status; } @@ -359,7 +359,7 @@ void WddmMemoryManager::cleanOsHandles(OsHandleStorage &handleStorage) { } } - bool success = tryDeferDeletions(handles, allocationCount, lastFenceValue, 0, nullptr, nullptr); + bool success = tryDeferDeletions(handles, allocationCount, lastFenceValue, 0); for (unsigned int i = 0; i < max_fragments_count; i++) { if (handleStorage.fragmentStorageData[i].freeTheFragment) { diff --git a/runtime/os_interface/windows/wddm_memory_manager.h b/runtime/os_interface/windows/wddm_memory_manager.h index 82a99e4213..0bd50e255a 100644 --- a/runtime/os_interface/windows/wddm_memory_manager.h +++ b/runtime/os_interface/windows/wddm_memory_manager.h @@ -79,7 +79,7 @@ class WddmMemoryManager : public MemoryManager { residencyLock = false; } - bool tryDeferDeletions(D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, D3DKMT_HANDLE resourceHandle, void *cpuPtr, void *gpuPtr); + bool tryDeferDeletions(D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, D3DKMT_HANDLE resourceHandle); bool isMemoryBudgetExhausted() const override { return memoryBudgetExhausted; } diff --git a/unit_tests/os_interface/windows/deferrable_deletion_win_tests.cpp b/unit_tests/os_interface/windows/deferrable_deletion_win_tests.cpp index 856e10865c..89a7ad5cae 100644 --- a/unit_tests/os_interface/windows/deferrable_deletion_win_tests.cpp +++ b/unit_tests/os_interface/windows/deferrable_deletion_win_tests.cpp @@ -28,14 +28,12 @@ using namespace OCLRT; class MockDeferrableDeletion : public DeferrableDeletionImpl { public: MockDeferrableDeletion(Wddm *wddm, D3DKMT_HANDLE *handles, uint32_t allocationCount, uint64_t lastFenceValue, - D3DKMT_HANDLE resourceHandle, void *cpuPtr, void *gpuPtr) : DeferrableDeletionImpl(wddm, handles, allocationCount, lastFenceValue, resourceHandle, cpuPtr, gpuPtr){}; + D3DKMT_HANDLE resourceHandle) : DeferrableDeletionImpl(wddm, handles, allocationCount, lastFenceValue, resourceHandle){}; Wddm *getWddm() { return wddm; } D3DKMT_HANDLE *getHandles() { return handles; } uint32_t getAllocationCount() { return allocationCount; } uint64_t getLastFenceValue() { return lastFenceValue; } D3DKMT_HANDLE getResourceHandle() { return resourceHandle; } - void *getCpuPtr() { return cpuPtr; } - void *getGpuPtr() { return gpuPtr; } }; class DeferrableDeletionTest : public ::testing::Test { @@ -45,12 +43,10 @@ class DeferrableDeletionTest : public ::testing::Test { uint32_t allocationCount = 1; uint64_t lastFenceValue = 0; D3DKMT_HANDLE resourceHandle = 0; - char cpuPtr; - char gpuPtr; }; TEST_F(DeferrableDeletionTest, givenDeferrableDeletionWhenIsCreatedThenObjectMembersAreSetProperly) { - MockDeferrableDeletion deletion(&wddm, &handle, allocationCount, lastFenceValue, resourceHandle, (void *)&cpuPtr, (void *)&gpuPtr); + MockDeferrableDeletion deletion(&wddm, &handle, allocationCount, lastFenceValue, resourceHandle); EXPECT_EQ(&wddm, deletion.getWddm()); EXPECT_NE(nullptr, deletion.getHandles()); EXPECT_EQ(handle, *deletion.getHandles()); @@ -58,13 +54,11 @@ TEST_F(DeferrableDeletionTest, givenDeferrableDeletionWhenIsCreatedThenObjectMem EXPECT_EQ(allocationCount, deletion.getAllocationCount()); EXPECT_EQ(lastFenceValue, deletion.getLastFenceValue()); EXPECT_EQ(resourceHandle, deletion.getResourceHandle()); - EXPECT_EQ((void *)&cpuPtr, deletion.getCpuPtr()); - EXPECT_EQ((void *)&gpuPtr, deletion.getGpuPtr()); } TEST_F(DeferrableDeletionTest, givenDeferrableDeletionWhenApplyIsCalledThenDeletionIsApplied) { wddm.callBaseDestroyAllocations = false; - std::unique_ptr deletion(DeferrableDeletion::create((Wddm *)&wddm, &handle, allocationCount, lastFenceValue, resourceHandle, (void *)nullptr, (void *)nullptr)); + std::unique_ptr deletion(DeferrableDeletion::create((Wddm *)&wddm, &handle, allocationCount, lastFenceValue, resourceHandle)); EXPECT_EQ(0, wddm.destroyAllocationResult.called); deletion->apply(); EXPECT_EQ(1, wddm.destroyAllocationResult.called); diff --git a/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp b/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp index 21476b3ad0..d2dcd540cf 100644 --- a/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp +++ b/unit_tests/os_interface/windows/wddm_memory_manager_tests.cpp @@ -1459,10 +1459,9 @@ TEST(WddmMemoryManagerWithAsyncDeleterTest, givenWddmWhenAsyncDeleterIsEnabledTh MockWddmMemoryManager memoryManager(wddm); memoryManager.setDeferredDeleter(deleter); EXPECT_EQ(0, deleter->deferDeletionCalled); - memoryManager.tryDeferDeletions(nullptr, 0, 0, 0, nullptr, nullptr); + memoryManager.tryDeferDeletions(nullptr, 0, 0, 0); EXPECT_EQ(1, deleter->deferDeletionCalled); EXPECT_EQ(1u, wddm->destroyAllocationResult.called); - EXPECT_EQ(1u, wddm->releaseGpuPtrResult.called); } TEST(WddmMemoryManagerWithAsyncDeleterTest, givenWddmWhenAsyncDeleterIsDisabledThenCannotDeferDeletions) { @@ -1470,9 +1469,8 @@ TEST(WddmMemoryManagerWithAsyncDeleterTest, givenWddmWhenAsyncDeleterIsDisabledT wddm->callBaseDestroyAllocations = false; MockWddmMemoryManager memoryManager(wddm); memoryManager.setDeferredDeleter(nullptr); - memoryManager.tryDeferDeletions(nullptr, 0, 0, 0, nullptr, nullptr); + memoryManager.tryDeferDeletions(nullptr, 0, 0, 0); EXPECT_EQ(1u, wddm->destroyAllocationResult.called); - EXPECT_EQ(1u, wddm->releaseGpuPtrResult.called); } TEST(WddmMemoryManagerWithAsyncDeleterTest, givenMemoryManagerWithAsyncDeleterWhenCannotAllocateMemoryForTiledImageThenDrainIsCalledAndCreateAllocationIsCalledTwice) {