Do not use blitter for clEnqueueCopyBuffer

Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
Maciej Dziuban
2021-02-10 17:41:08 +00:00
committed by Compute-Runtime-Automation
parent fcf6ecfad7
commit 2cd6809d1e
7 changed files with 70 additions and 2 deletions

View File

@@ -698,6 +698,13 @@ bool CommandQueue::blitEnqueueAllowed(cl_command_type cmdType) const {
}
}
bool CommandQueue::blitEnqueuePreferred(cl_command_type cmdType) const {
if (cmdType == CL_COMMAND_COPY_BUFFER) {
return DebugManager.flags.PreferCopyEngineForCopyBufferToBuffer.get() == 1;
}
return true;
}
bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *region) {
auto blitEnqueuImageAllowed = false;

View File

@@ -353,6 +353,7 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
void providePerformanceHint(TransferProperties &transferProperties);
bool queueDependenciesClearRequired() const;
bool blitEnqueueAllowed(cl_command_type cmdType) const;
bool blitEnqueuePreferred(cl_command_type cmdType) const;
MOCKABLE_VIRTUAL bool blitEnqueueImageAllowed(const size_t *origin, const size_t *region);
void aubCaptureHook(bool &blocking, bool &clearAllDependencies, const MultiDispatchInfo &multiDispatchInfo);
virtual bool obtainTimestampPacketForCacheFlush(bool isCacheFlushRequired) const = 0;

View File

@@ -1136,7 +1136,11 @@ void CommandQueueHw<GfxFamily>::enqueueBlit(const MultiDispatchInfo &multiDispat
template <typename GfxFamily>
template <uint32_t cmdType, size_t surfaceCount>
void CommandQueueHw<GfxFamily>::dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dispatchInfo, Surface *(&surfaces)[surfaceCount], EBuiltInOps::Type builtInOperation, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking, bool blitAllowed) {
if (blitAllowed) {
const bool blitPreferred = blitEnqueuePreferred(cmdType);
const bool blitRequired = isCopyOnly;
const bool blit = blitAllowed && (blitPreferred || blitRequired);
if (blit) {
enqueueBlit<cmdType>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blocking);
} else {
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(builtInOperation,