/* * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include #include namespace NEO { class CommandStreamReceiver; class GraphicsAllocation; class LinearStream; class MemoryManager; class ExperimentalCommandBuffer { public: virtual ~ExperimentalCommandBuffer(); ExperimentalCommandBuffer(CommandStreamReceiver *csr, double profilingTimerResolution); template void injectBufferStart(LinearStream &parentStream, size_t cmdBufferOffset); template size_t getRequiredInjectionSize() noexcept; template size_t programExperimentalCommandBuffer(); void makeResidentAllocations(); protected: template size_t getTotalExperimentalSize() noexcept; void getCS(size_t minRequiredSize); template void addTimeStampPipeControl(); template size_t getTimeStampPipeControlSize() noexcept; template void addExperimentalCommands(); template size_t getExperimentalCommandsSize() noexcept; CommandStreamReceiver *commandStreamReceiver; std::unique_ptr currentStream; GraphicsAllocation *timestamps; uint32_t timestampsOffset = 0; GraphicsAllocation *experimentalAllocation; uint32_t experimentalAllocationOffset = 0; bool defaultPrint = true; double timerResolution; }; } // namespace NEO