2019-04-03 21:59:31 +08:00
|
|
|
/*
|
2024-02-29 16:43:12 +08:00
|
|
|
* Copyright (C) 2019-2024 Intel Corporation
|
2019-04-03 21:59:31 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
2022-12-16 00:01:37 +08:00
|
|
|
#include "shared/source/gmm_helper/gmm_lib.h"
|
2023-01-18 01:04:14 +08:00
|
|
|
#include "shared/source/helpers/blit_properties_container.h"
|
2020-02-25 16:55:13 +08:00
|
|
|
#include "shared/source/helpers/vec.h"
|
2019-06-26 17:37:46 +08:00
|
|
|
|
2019-04-03 21:59:31 +08:00
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
namespace NEO {
|
2023-01-18 23:52:24 +08:00
|
|
|
|
|
|
|
class CsrDependencies;
|
2019-04-03 21:59:31 +08:00
|
|
|
class GraphicsAllocation;
|
|
|
|
class LinearStream;
|
2021-03-25 02:21:13 +08:00
|
|
|
class TagNodeBase;
|
2023-01-18 23:52:24 +08:00
|
|
|
enum class DebugPauseState : uint32_t;
|
2020-02-11 01:14:52 +08:00
|
|
|
struct HardwareInfo;
|
2023-01-18 23:52:24 +08:00
|
|
|
struct RootDeviceEnvironment;
|
2023-01-26 03:28:09 +08:00
|
|
|
class ProductHelper;
|
2023-03-01 05:08:09 +08:00
|
|
|
struct EncodeDummyBlitWaArgs;
|
2020-07-10 23:04:42 +08:00
|
|
|
|
2019-04-03 21:59:31 +08:00
|
|
|
template <typename GfxFamily>
|
|
|
|
struct BlitCommandsHelper {
|
2020-04-28 16:24:22 +08:00
|
|
|
using COLOR_DEPTH = typename GfxFamily::XY_COLOR_BLT::COLOR_DEPTH;
|
2020-07-01 20:12:53 +08:00
|
|
|
static uint64_t getMaxBlitWidth(const RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static uint64_t getMaxBlitWidthOverride(const RootDeviceEnvironment &rootDeviceEnvironment);
|
2022-12-20 16:39:42 +08:00
|
|
|
static uint64_t getMaxBlitHeight(const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed);
|
|
|
|
static uint64_t getMaxBlitHeightOverride(const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed);
|
2023-03-06 20:42:09 +08:00
|
|
|
static void dispatchPreBlitCommand(LinearStream &linearStream, RootDeviceEnvironment &rootDeviceEnvironment);
|
2024-02-29 21:30:12 +08:00
|
|
|
static size_t estimatePreBlitCommandSize();
|
|
|
|
static void dispatchPostBlitCommand(LinearStream &linearStream, RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static size_t estimatePostBlitCommandSize();
|
2022-02-08 00:52:08 +08:00
|
|
|
static size_t estimateBlitCommandSize(const Vec3<size_t> ©Size, const CsrDependencies &csrDependencies, bool updateTimestampPacket,
|
2023-03-14 01:56:20 +08:00
|
|
|
bool profilingEnabled, bool isImage, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed, bool relaxedOrderingEnabled);
|
2020-07-01 20:12:53 +08:00
|
|
|
static size_t estimateBlitCommandsSize(const BlitPropertiesContainer &blitPropertiesContainer, bool profilingEnabled,
|
2023-03-14 01:56:20 +08:00
|
|
|
bool debugPauseEnabled, bool blitterDirectSubmission, bool relaxedOrderingEnabled, const RootDeviceEnvironment &rootDeviceEnvironment);
|
2022-12-20 16:39:42 +08:00
|
|
|
static size_t getNumberOfBlitsForCopyRegion(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed);
|
|
|
|
static size_t getNumberOfBlitsForCopyPerRow(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed);
|
2020-02-25 16:55:13 +08:00
|
|
|
static uint64_t calculateBlitCommandDestinationBaseAddress(const BlitProperties &blitProperties, uint64_t offset, uint64_t row, uint64_t slice);
|
|
|
|
static uint64_t calculateBlitCommandSourceBaseAddress(const BlitProperties &blitProperties, uint64_t offset, uint64_t row, uint64_t slice);
|
2020-08-25 21:24:09 +08:00
|
|
|
static uint64_t calculateBlitCommandDestinationBaseAddressCopyRegion(const BlitProperties &blitProperties, size_t slice);
|
|
|
|
static uint64_t calculateBlitCommandSourceBaseAddressCopyRegion(const BlitProperties &blitProperties, size_t slice);
|
2024-02-29 21:30:12 +08:00
|
|
|
static void dispatchBlitCommands(const BlitProperties &blitProperties, LinearStream &linearStream, RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void dispatchBlitCommandsForBufferRegion(const BlitProperties &blitProperties, LinearStream &linearStream, RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void dispatchBlitCommandsForBufferPerRow(const BlitProperties &blitProperties, LinearStream &linearStream, RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void dispatchBlitCommandsForImageRegion(const BlitProperties &blitProperties, LinearStream &linearStream, RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void dispatchBlitMemoryColorFill(NEO::GraphicsAllocation *dstAlloc, uint64_t offset, uint32_t *pattern, size_t patternSize, LinearStream &linearStream, size_t size, RootDeviceEnvironment &rootDeviceEnvironment);
|
2020-04-28 16:24:22 +08:00
|
|
|
template <size_t patternSize>
|
2024-02-29 21:30:12 +08:00
|
|
|
static void dispatchBlitMemoryFill(NEO::GraphicsAllocation *dstAlloc, uint64_t offset, uint32_t *pattern, LinearStream &linearStream, size_t size, RootDeviceEnvironment &rootDeviceEnvironment, COLOR_DEPTH depth);
|
2023-03-01 05:08:09 +08:00
|
|
|
static void dispatchDummyBlit(LinearStream &linearStream, EncodeDummyBlitWaArgs &waArgs);
|
|
|
|
static size_t getDummyBlitSize(const EncodeDummyBlitWaArgs &waArgs);
|
|
|
|
static bool isDummyBlitWaNeeded(const EncodeDummyBlitWaArgs &waArgs);
|
2022-01-14 09:12:12 +08:00
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
static void appendBlitCommandsForBuffer(const BlitProperties &blitProperties, T &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void appendBlitCommandsMemCopy(const BlitProperties &blitProperties, typename GfxFamily::XY_COPY_BLT &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void appendBlitCommandsBlockCopy(const BlitProperties &blitProperties, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static void appendBlitCommandsForImages(const BlitProperties &blitProperties, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment, uint32_t &srcSlicePitch, uint32_t &dstSlicePitch);
|
2023-03-31 21:55:59 +08:00
|
|
|
static void adjustControlSurfaceType(const BlitProperties &blitProperties, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd);
|
2022-01-14 09:12:12 +08:00
|
|
|
static void appendExtraMemoryProperties(typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
2020-11-26 00:09:44 +08:00
|
|
|
static void appendExtraMemoryProperties(typename GfxFamily::XY_COLOR_BLT &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
2022-01-14 09:12:12 +08:00
|
|
|
template <typename T = typename GfxFamily::XY_BLOCK_COPY_BLT>
|
|
|
|
static void appendColorDepth(const BlitProperties &blitProperties, T &blitCmd);
|
2020-04-28 16:24:22 +08:00
|
|
|
static void appendBlitCommandsForFillBuffer(NEO::GraphicsAllocation *dstAlloc, typename GfxFamily::XY_COLOR_BLT &blitCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
2022-01-14 09:12:12 +08:00
|
|
|
static void appendSurfaceType(const BlitProperties &blitProperties, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd);
|
2020-04-28 16:24:22 +08:00
|
|
|
static void appendTilingEnable(typename GfxFamily::XY_COLOR_BLT &blitCmd);
|
2022-01-14 09:12:12 +08:00
|
|
|
static void appendTilingType(const GMM_TILE_TYPE srcTilingType, const GMM_TILE_TYPE dstTilingType, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd);
|
|
|
|
static void appendSliceOffsets(const BlitProperties &blitProperties, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd, uint32_t sliceIndex, const RootDeviceEnvironment &rootDeviceEnvironment, uint32_t srcSlicePitch, uint32_t dstSlicePitch);
|
2022-04-21 20:05:17 +08:00
|
|
|
static void getBlitAllocationProperties(const GraphicsAllocation &allocation, uint32_t &pitch, uint32_t &qPitch, GMM_TILE_TYPE &tileType,
|
2023-03-31 21:55:59 +08:00
|
|
|
uint32_t &mipTailLod, uint32_t &compressionDetails,
|
2022-05-19 19:51:55 +08:00
|
|
|
const RootDeviceEnvironment &rootDeviceEnvironment, GMM_YUV_PLANE_ENUM plane);
|
2021-12-22 02:13:53 +08:00
|
|
|
static void dispatchDebugPauseCommands(LinearStream &commandStream, uint64_t debugPauseStateGPUAddress, DebugPauseState confirmationTrigger,
|
2023-03-06 20:42:09 +08:00
|
|
|
DebugPauseState waitCondition, RootDeviceEnvironment &rootDeviceEnvironment);
|
|
|
|
static size_t getSizeForDebugPauseCommands(const RootDeviceEnvironment &rootDeviceEnvironment);
|
2021-06-07 21:58:03 +08:00
|
|
|
static uint32_t getAvailableBytesPerPixel(size_t copySize, uint32_t srcOrigin, uint32_t dstOrigin, size_t srcSize, size_t dstSize);
|
2022-12-20 16:39:42 +08:00
|
|
|
static bool isCopyRegionPreferred(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed);
|
2020-10-16 21:58:47 +08:00
|
|
|
static void programGlobalSequencerFlush(LinearStream &commandStream);
|
|
|
|
static size_t getSizeForGlobalSequencerFlush();
|
2020-11-17 01:12:08 +08:00
|
|
|
static bool miArbCheckWaRequired();
|
2021-01-28 18:01:51 +08:00
|
|
|
static bool preBlitCommandWARequired();
|
2022-01-14 09:12:12 +08:00
|
|
|
static void appendClearColor(const BlitProperties &blitProperties, typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd);
|
2022-04-11 19:08:29 +08:00
|
|
|
static void printImageBlitBlockCopyCommand(const typename GfxFamily::XY_BLOCK_COPY_BLT &blitCmd, const uint32_t sliceIndex);
|
2021-04-01 19:54:16 +08:00
|
|
|
|
|
|
|
static void encodeProfilingStartMmios(LinearStream &cmdStream, const TagNodeBase ×tampPacketNode);
|
|
|
|
static void encodeProfilingEndMmios(LinearStream &cmdStream, const TagNodeBase ×tampPacketNode);
|
|
|
|
static size_t getProfilingMmioCmdsSize();
|
2022-07-01 19:10:43 +08:00
|
|
|
|
|
|
|
static void encodeWa(LinearStream &cmdStream, const BlitProperties &blitProperties, uint32_t &latestSentBcsWaValue);
|
|
|
|
static size_t getWaCmdsSize(const BlitPropertiesContainer &blitPropertiesContainer);
|
2019-04-03 21:59:31 +08:00
|
|
|
};
|
|
|
|
} // namespace NEO
|