mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 09:14:47 +08:00
Limit blit height on PVC
Resolves: NEO-7540 Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
e38cbd9671
commit
7d0ef38a83
@@ -29,11 +29,11 @@ uint64_t BlitCommandsHelper<GfxFamily>::getMaxBlitWidth(const RootDeviceEnvironm
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint64_t BlitCommandsHelper<GfxFamily>::getMaxBlitHeight(const RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
uint64_t BlitCommandsHelper<GfxFamily>::getMaxBlitHeight(const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed) {
|
||||
if (DebugManager.flags.LimitBlitterMaxHeight.get() != -1) {
|
||||
return static_cast<uint64_t>(DebugManager.flags.LimitBlitterMaxHeight.get());
|
||||
}
|
||||
auto maxBlitHeightOverride = getMaxBlitHeightOverride(rootDeviceEnvironment);
|
||||
auto maxBlitHeightOverride = getMaxBlitHeightOverride(rootDeviceEnvironment, isSystemMemoryPoolUsed);
|
||||
if (maxBlitHeightOverride > 0) {
|
||||
return maxBlitHeightOverride;
|
||||
}
|
||||
@@ -102,7 +102,7 @@ size_t BlitCommandsHelper<GfxFamily>::estimatePostBlitCommandSize() {
|
||||
|
||||
template <typename GfxFamily>
|
||||
size_t BlitCommandsHelper<GfxFamily>::estimateBlitCommandSize(const Vec3<size_t> ©Size, const CsrDependencies &csrDependencies,
|
||||
bool updateTimestampPacket, bool profilingEnabled, bool isImage, const RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
bool updateTimestampPacket, bool profilingEnabled, bool isImage, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed) {
|
||||
size_t timestampCmdSize = 0;
|
||||
if (updateTimestampPacket) {
|
||||
timestampCmdSize += EncodeMiFlushDW<GfxFamily>::getMiFlushDwCmdSizeForDataWrite();
|
||||
@@ -115,11 +115,11 @@ size_t BlitCommandsHelper<GfxFamily>::estimateBlitCommandSize(const Vec3<size_t>
|
||||
size_t sizePerBlit = 0u;
|
||||
|
||||
if (isImage) {
|
||||
nBlits = getNumberOfBlitsForCopyRegion(copySize, rootDeviceEnvironment);
|
||||
nBlits = getNumberOfBlitsForCopyRegion(copySize, rootDeviceEnvironment, isSystemMemoryPoolUsed);
|
||||
sizePerBlit = sizeof(typename GfxFamily::XY_BLOCK_COPY_BLT);
|
||||
} else {
|
||||
nBlits = std::min(getNumberOfBlitsForCopyRegion(copySize, rootDeviceEnvironment),
|
||||
getNumberOfBlitsForCopyPerRow(copySize, rootDeviceEnvironment));
|
||||
nBlits = std::min(getNumberOfBlitsForCopyRegion(copySize, rootDeviceEnvironment, isSystemMemoryPoolUsed),
|
||||
getNumberOfBlitsForCopyPerRow(copySize, rootDeviceEnvironment, isSystemMemoryPoolUsed));
|
||||
sizePerBlit = sizeof(typename GfxFamily::XY_COPY_BLT);
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ size_t BlitCommandsHelper<GfxFamily>::estimateBlitCommandsSize(const BlitPropert
|
||||
auto updateTimestampPacket = blitProperties.outputTimestampPacket != nullptr;
|
||||
auto isImage = blitProperties.isImageOperation();
|
||||
size += BlitCommandsHelper<GfxFamily>::estimateBlitCommandSize(blitProperties.copySize, blitProperties.csrDependencies, updateTimestampPacket,
|
||||
profilingEnabled, isImage, rootDeviceEnvironment);
|
||||
profilingEnabled, isImage, rootDeviceEnvironment, blitProperties.isSystemMemoryPoolUsed);
|
||||
}
|
||||
size += BlitCommandsHelper<GfxFamily>::getWaCmdsSize(blitPropertiesContainer);
|
||||
size += 2 * MemorySynchronizationCommands<GfxFamily>::getSizeForAdditonalSynchronization(*rootDeviceEnvironment.getHardwareInfo());
|
||||
@@ -195,7 +195,7 @@ void BlitCommandsHelper<GfxFamily>::dispatchBlitCommandsForBufferPerRow(const Bl
|
||||
if (sizeToBlit > getMaxBlitWidth(rootDeviceEnvironment)) {
|
||||
// dispatch 2D blit: maxBlitWidth x (1 .. maxBlitHeight)
|
||||
width = getMaxBlitWidth(rootDeviceEnvironment);
|
||||
height = std::min((sizeToBlit / width), getMaxBlitHeight(rootDeviceEnvironment));
|
||||
height = std::min((sizeToBlit / width), getMaxBlitHeight(rootDeviceEnvironment, blitProperties.isSystemMemoryPoolUsed));
|
||||
} else {
|
||||
// dispatch 1D blt: (1 .. maxBlitWidth) x 1
|
||||
width = sizeToBlit;
|
||||
@@ -251,7 +251,7 @@ void BlitCommandsHelper<GfxFamily>::dispatchBlitMemoryFill(NEO::GraphicsAllocati
|
||||
height = 1;
|
||||
} else {
|
||||
width = getMaxBlitWidth(rootDeviceEnvironment);
|
||||
height = std::min((sizeToFill / width), getMaxBlitHeight(rootDeviceEnvironment));
|
||||
height = std::min((sizeToFill / width), getMaxBlitHeight(rootDeviceEnvironment, true));
|
||||
if (height > 1) {
|
||||
appendTilingEnable(tmpCmd);
|
||||
}
|
||||
@@ -346,7 +346,7 @@ void BlitCommandsHelper<GfxFamily>::dispatchBlitCommands(const BlitProperties &b
|
||||
if (blitProperties.isImageOperation()) {
|
||||
dispatchBlitCommandsForImageRegion(blitProperties, linearStream, rootDeviceEnvironment);
|
||||
} else {
|
||||
bool preferCopyBufferRegion = isCopyRegionPreferred(blitProperties.copySize, rootDeviceEnvironment);
|
||||
bool preferCopyBufferRegion = isCopyRegionPreferred(blitProperties.copySize, rootDeviceEnvironment, blitProperties.isSystemMemoryPoolUsed);
|
||||
preferCopyBufferRegion ? dispatchBlitCommandsForBufferRegion(blitProperties, linearStream, rootDeviceEnvironment)
|
||||
: dispatchBlitCommandsForBufferPerRow(blitProperties, linearStream, rootDeviceEnvironment);
|
||||
}
|
||||
@@ -380,7 +380,7 @@ void BlitCommandsHelper<GfxFamily>::appendBlitCommandsMemCopy(const BlitProperti
|
||||
template <typename GfxFamily>
|
||||
void BlitCommandsHelper<GfxFamily>::dispatchBlitCommandsForBufferRegion(const BlitProperties &blitProperties, LinearStream &linearStream, const RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
const auto maxWidthToCopy = getMaxBlitWidth(rootDeviceEnvironment);
|
||||
const auto maxHeightToCopy = getMaxBlitHeight(rootDeviceEnvironment);
|
||||
const auto maxHeightToCopy = getMaxBlitHeight(rootDeviceEnvironment, blitProperties.isSystemMemoryPoolUsed);
|
||||
|
||||
const auto &hwInfo = *rootDeviceEnvironment.getHardwareInfo();
|
||||
dispatchPreBlitCommand(linearStream, hwInfo);
|
||||
@@ -428,15 +428,15 @@ void BlitCommandsHelper<GfxFamily>::dispatchBlitCommandsForBufferRegion(const Bl
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
bool BlitCommandsHelper<GfxFamily>::isCopyRegionPreferred(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
bool preferCopyRegion = getNumberOfBlitsForCopyRegion(copySize, rootDeviceEnvironment) < getNumberOfBlitsForCopyPerRow(copySize, rootDeviceEnvironment);
|
||||
bool BlitCommandsHelper<GfxFamily>::isCopyRegionPreferred(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed) {
|
||||
bool preferCopyRegion = getNumberOfBlitsForCopyRegion(copySize, rootDeviceEnvironment, isSystemMemoryPoolUsed) < getNumberOfBlitsForCopyPerRow(copySize, rootDeviceEnvironment, isSystemMemoryPoolUsed);
|
||||
return preferCopyRegion;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
size_t BlitCommandsHelper<GfxFamily>::getNumberOfBlitsForCopyRegion(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
size_t BlitCommandsHelper<GfxFamily>::getNumberOfBlitsForCopyRegion(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed) {
|
||||
auto maxWidthToCopy = getMaxBlitWidth(rootDeviceEnvironment);
|
||||
auto maxHeightToCopy = getMaxBlitHeight(rootDeviceEnvironment);
|
||||
auto maxHeightToCopy = getMaxBlitHeight(rootDeviceEnvironment, isSystemMemoryPoolUsed);
|
||||
auto xBlits = static_cast<size_t>(std::ceil(copySize.x / static_cast<double>(maxWidthToCopy)));
|
||||
auto yBlits = static_cast<size_t>(std::ceil(copySize.y / static_cast<double>(maxHeightToCopy)));
|
||||
auto zBlits = static_cast<size_t>(copySize.z);
|
||||
@@ -446,7 +446,7 @@ size_t BlitCommandsHelper<GfxFamily>::getNumberOfBlitsForCopyRegion(const Vec3<s
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
size_t BlitCommandsHelper<GfxFamily>::getNumberOfBlitsForCopyPerRow(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment) {
|
||||
size_t BlitCommandsHelper<GfxFamily>::getNumberOfBlitsForCopyPerRow(const Vec3<size_t> ©Size, const RootDeviceEnvironment &rootDeviceEnvironment, bool isSystemMemoryPoolUsed) {
|
||||
size_t xBlits = 0u;
|
||||
uint64_t width = 1;
|
||||
uint64_t height = 1;
|
||||
@@ -456,7 +456,7 @@ size_t BlitCommandsHelper<GfxFamily>::getNumberOfBlitsForCopyPerRow(const Vec3<s
|
||||
if (sizeToBlit > getMaxBlitWidth(rootDeviceEnvironment)) {
|
||||
// dispatch 2D blit: maxBlitWidth x (1 .. maxBlitHeight)
|
||||
width = getMaxBlitWidth(rootDeviceEnvironment);
|
||||
height = std::min((sizeToBlit / width), getMaxBlitHeight(rootDeviceEnvironment));
|
||||
height = std::min((sizeToBlit / width), getMaxBlitHeight(rootDeviceEnvironment, isSystemMemoryPoolUsed));
|
||||
|
||||
} else {
|
||||
// dispatch 1D blt: (1 .. maxBlitWidth) x 1
|
||||
|
||||
Reference in New Issue
Block a user