/* * Copyright (C) 2019-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/helpers/constants.h" #include "shared/source/helpers/non_copyable_or_moveable.h" #include namespace NEO { class CommandStreamReceiver; class Device; class GraphicsAllocation; class MemoryManager; class SyncBufferHandler : NonCopyableOrMovableClass { public: ~SyncBufferHandler(); SyncBufferHandler(Device &device); template void prepareForEnqueue(size_t workGroupsCount, KernelT &kernel); void makeResident(CommandStreamReceiver &csr); std::pair obtainAllocationAndOffset(size_t requiredSize); protected: void allocateNewBuffer(); Device &device; MemoryManager &memoryManager; GraphicsAllocation *graphicsAllocation; const size_t bufferSize = 64 * MemoryConstants::kiloByte; size_t usedBufferSize = 0; std::mutex mutex; }; } // namespace NEO