/* * Copyright (C) 2018-2023 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/memory_manager/allocations_list.h" #include namespace NEO { class InternalAllocationStorage { public: MOCKABLE_VIRTUAL ~InternalAllocationStorage() = default; InternalAllocationStorage(CommandStreamReceiver &commandStreamReceiver); MOCKABLE_VIRTUAL void cleanAllocationList(TaskCountType waitTaskCount, uint32_t allocationUsage); void storeAllocation(std::unique_ptr &&gfxAllocation, uint32_t allocationUsage); void storeAllocationWithTaskCount(std::unique_ptr &&gfxAllocation, uint32_t allocationUsage, TaskCountType taskCount); std::unique_ptr obtainReusableAllocation(size_t requiredSize, AllocationType allocationType); std::unique_ptr obtainTemporaryAllocationWithPtr(size_t requiredSize, const void *requiredPtr, AllocationType allocationType); AllocationsList &getTemporaryAllocations() { return allocationLists[TEMPORARY_ALLOCATION]; } AllocationsList &getAllocationsForReuse() { return allocationLists[REUSABLE_ALLOCATION]; } AllocationsList &getDeferredAllocations() { return allocationLists[DEFERRED_DEALLOCATION]; } DeviceBitfield getDeviceBitfield() const; protected: void freeAllocationsList(TaskCountType waitTaskCount, AllocationsList &allocationsList); CommandStreamReceiver &commandStreamReceiver; std::array allocationLists = {AllocationsList(TEMPORARY_ALLOCATION), AllocationsList(REUSABLE_ALLOCATION), AllocationsList(DEFERRED_DEALLOCATION)}; }; } // namespace NEO