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