/* * Copyright (C) 2019 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "core/memory_manager/memory_constants.h" #include "core/utilities/stackvec.h" #include "runtime/helpers/csr_deps.h" #include "runtime/helpers/properties_helper.h" #include namespace NEO { struct BuiltinOpParams; class Context; class CommandStreamReceiver; class GraphicsAllocation; class LinearStream; struct TimestampPacketStorage; template struct TagNode; struct BlitProperties; struct TimestampPacketDependencies; using BlitPropertiesContainer = StackVec; struct BlitProperties { static BlitProperties constructPropertiesForReadWriteBuffer(BlitterConstants::BlitDirection blitDirection, CommandStreamReceiver &commandStreamReceiver, GraphicsAllocation *memObjAllocation, GraphicsAllocation *preallocatedHostAllocation, void *hostPtr, uint64_t memObjGpuVa, uint64_t hostAllocGpuVa, size_t hostPtrOffset, size_t copyOffset, uint64_t copySize); static BlitProperties constructProperties(BlitterConstants::BlitDirection blitDirection, CommandStreamReceiver &commandStreamReceiver, const BuiltinOpParams &builtinOpParams); static BlitProperties constructPropertiesForCopyBuffer(GraphicsAllocation *dstAllocation, GraphicsAllocation *srcAllocation, size_t dstOffset, size_t srcOffset, uint64_t copySize); static BlitProperties constructPropertiesForAuxTranslation(AuxTranslationDirection auxTranslationDirection, GraphicsAllocation *allocation); static void setupDependenciesForAuxTranslation(BlitPropertiesContainer &blitPropertiesContainer, TimestampPacketDependencies ×tampPacketDependencies, TimestampPacketContainer &kernelTimestamps, const EventsRequest &eventsRequest, CommandStreamReceiver &gpguCsr, CommandStreamReceiver &bcsCsr); static BlitterConstants::BlitDirection obtainBlitDirection(uint32_t commandType); TagNode *outputTimestampPacket = nullptr; BlitterConstants::BlitDirection blitDirection; CsrDependencies csrDependencies; AuxTranslationDirection auxTranslationDirection = AuxTranslationDirection::None; GraphicsAllocation *dstAllocation = nullptr; GraphicsAllocation *srcAllocation = nullptr; uint64_t dstGpuAddress = 0; uint64_t srcGpuAddress = 0; uint64_t copySize = 0; size_t dstOffset = 0; size_t srcOffset = 0; }; template struct BlitCommandsHelper { static size_t estimateBlitCommandsSize(uint64_t copySize, const CsrDependencies &csrDependencies, bool updateTimestampPacket); static size_t estimateBlitCommandsSize(const BlitPropertiesContainer &blitPropertiesContainer); static void dispatchBlitCommandsForBuffer(const BlitProperties &blitProperties, LinearStream &linearStream); static void appendBlitCommandsForBuffer(const BlitProperties &blitProperties, typename GfxFamily::XY_COPY_BLT &blitCmd); }; } // namespace NEO