Skip to content

Commit 8587270

Browse files
Add selectCsrForBuiltinOperation method to OpenCL CommandQueue
Signed-off-by: Maciej Dziuban <[email protected]> Related-To: NEO-6057
1 parent 03ee6bc commit 8587270

22 files changed

+551
-196
lines changed

opencl/source/command_queue/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ set(RUNTIME_SRCS_COMMAND_QUEUE
1212
${CMAKE_CURRENT_SOURCE_DIR}/command_queue_hw_base.inl
1313
${CMAKE_CURRENT_SOURCE_DIR}/command_queue_hw_bdw_and_later.inl
1414
${CMAKE_CURRENT_SOURCE_DIR}/cpu_data_transfer_handler.cpp
15+
${CMAKE_CURRENT_SOURCE_DIR}/csr_selection_args.h
1516
${CMAKE_CURRENT_SOURCE_DIR}/enqueue_barrier.h
1617
${CMAKE_CURRENT_SOURCE_DIR}/enqueue_common.h
1718
${CMAKE_CURRENT_SOURCE_DIR}/enqueue_copy_buffer.h

opencl/source/command_queue/command_queue.cpp

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,19 @@ CommandStreamReceiver &CommandQueue::getCommandStreamReceiver(bool blitAllowed)
153153
return getGpgpuCommandStreamReceiver();
154154
}
155155

156+
CommandStreamReceiver &CommandQueue::selectCsrForBuiltinOperation(const CsrSelectionArgs &args) const {
157+
const bool blitAllowed = blitEnqueueAllowed(args);
158+
const bool blitPreferred = blitEnqueuePreferred(args);
159+
const bool blitRequired = isCopyOnly;
160+
const bool blit = blitAllowed && (blitPreferred || blitRequired);
161+
162+
if (blit) {
163+
return *bcsEngine->commandStreamReceiver;
164+
} else {
165+
return getGpgpuCommandStreamReceiver();
166+
}
167+
}
168+
156169
Device &CommandQueue::getDevice() const noexcept {
157170
return device->getDevice();
158171
}
@@ -725,46 +738,46 @@ bool CommandQueue::queueDependenciesClearRequired() const {
725738
return isOOQEnabled() || DebugManager.flags.OmitTimestampPacketDependencies.get();
726739
}
727740

728-
bool CommandQueue::blitEnqueueAllowed(cl_command_type cmdType) const {
729-
auto blitterSupported = bcsEngine != nullptr;
741+
bool CommandQueue::blitEnqueueAllowed(const CsrSelectionArgs &args) const {
742+
if (bcsEngine == nullptr) {
743+
return false;
744+
}
730745

731746
bool blitEnqueueAllowed = getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled() || this->isCopyOnly;
732747
if (DebugManager.flags.EnableBlitterForEnqueueOperations.get() != -1) {
733748
blitEnqueueAllowed = DebugManager.flags.EnableBlitterForEnqueueOperations.get();
734749
}
750+
if (!blitEnqueueAllowed) {
751+
return false;
752+
}
735753

736-
switch (cmdType) {
754+
switch (args.cmdType) {
737755
case CL_COMMAND_READ_BUFFER:
738756
case CL_COMMAND_WRITE_BUFFER:
739757
case CL_COMMAND_COPY_BUFFER:
740758
case CL_COMMAND_READ_BUFFER_RECT:
741759
case CL_COMMAND_WRITE_BUFFER_RECT:
742760
case CL_COMMAND_COPY_BUFFER_RECT:
743761
case CL_COMMAND_SVM_MEMCPY:
762+
case CL_COMMAND_SVM_MAP:
763+
case CL_COMMAND_SVM_UNMAP:
764+
return true;
744765
case CL_COMMAND_READ_IMAGE:
766+
return blitEnqueueImageAllowed(args.srcResource.imageOrigin, args.size, *args.srcResource.image);
745767
case CL_COMMAND_WRITE_IMAGE:
768+
return blitEnqueueImageAllowed(args.dstResource.imageOrigin, args.size, *args.dstResource.image);
769+
746770
case CL_COMMAND_COPY_IMAGE:
747-
return blitterSupported && blitEnqueueAllowed;
771+
return blitEnqueueImageAllowed(args.srcResource.imageOrigin, args.size, *args.srcResource.image) &&
772+
blitEnqueueImageAllowed(args.dstResource.imageOrigin, args.size, *args.dstResource.image);
773+
748774
default:
749775
return false;
750776
}
751777
}
752778

753-
bool CommandQueue::blitEnqueuePreferred(cl_command_type cmdType, const BuiltinOpParams &builtinOpParams) const {
754-
bool isLocalToLocal = false;
755-
756-
if (cmdType == CL_COMMAND_COPY_BUFFER &&
757-
builtinOpParams.srcMemObj->getGraphicsAllocation(device->getRootDeviceIndex())->isAllocatedInLocalMemoryPool() &&
758-
builtinOpParams.dstMemObj->getGraphicsAllocation(device->getRootDeviceIndex())->isAllocatedInLocalMemoryPool()) {
759-
isLocalToLocal = true;
760-
}
761-
if (cmdType == CL_COMMAND_SVM_MEMCPY &&
762-
builtinOpParams.srcSvmAlloc->isAllocatedInLocalMemoryPool() &&
763-
builtinOpParams.dstSvmAlloc->isAllocatedInLocalMemoryPool()) {
764-
isLocalToLocal = true;
765-
}
766-
767-
if (isLocalToLocal) {
779+
bool CommandQueue::blitEnqueuePreferred(const CsrSelectionArgs &args) const {
780+
if (args.direction == TransferDirection::LocalToLocal) {
768781
if (DebugManager.flags.PreferCopyEngineForCopyBufferToBuffer.get() != -1) {
769782
return static_cast<bool>(DebugManager.flags.PreferCopyEngineForCopyBufferToBuffer.get());
770783
}
@@ -775,7 +788,7 @@ bool CommandQueue::blitEnqueuePreferred(cl_command_type cmdType, const BuiltinOp
775788
return true;
776789
}
777790

778-
bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *region, const Image &image) {
791+
bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *region, const Image &image) const {
779792
const auto &hwInfo = device->getHardwareInfo();
780793
const auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily);
781794
auto blitEnqueueImageAllowed = hwHelper.isBlitterForImagesSupported(hwInfo);

opencl/source/command_queue/command_queue.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#pragma once
99
#include "shared/source/helpers/engine_control.h"
1010

11+
#include "opencl/source/command_queue/csr_selection_args.h"
1112
#include "opencl/source/event/event.h"
1213
#include "opencl/source/helpers/base_object.h"
1314
#include "opencl/source/helpers/dispatch_info.h"
@@ -225,6 +226,7 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
225226
CommandStreamReceiver *getBcsCommandStreamReceiver() const;
226227
CommandStreamReceiver *getBcsForAuxTranslation() const;
227228
MOCKABLE_VIRTUAL CommandStreamReceiver &getCommandStreamReceiver(bool blitAllowed) const;
229+
MOCKABLE_VIRTUAL CommandStreamReceiver &selectCsrForBuiltinOperation(const CsrSelectionArgs &args) const;
228230
Device &getDevice() const noexcept;
229231
ClDevice &getClDevice() const { return *device; }
230232
Context &getContext() const { return *context; }
@@ -353,9 +355,9 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
353355
cl_uint numEventsInWaitList, const cl_event *eventWaitList);
354356
void providePerformanceHint(TransferProperties &transferProperties);
355357
bool queueDependenciesClearRequired() const;
356-
bool blitEnqueueAllowed(cl_command_type cmdType) const;
357-
bool blitEnqueuePreferred(cl_command_type cmdType, const BuiltinOpParams &builtinOpParams) const;
358-
MOCKABLE_VIRTUAL bool blitEnqueueImageAllowed(const size_t *origin, const size_t *region, const Image &image);
358+
bool blitEnqueueAllowed(const CsrSelectionArgs &args) const;
359+
bool blitEnqueuePreferred(const CsrSelectionArgs &args) const;
360+
MOCKABLE_VIRTUAL bool blitEnqueueImageAllowed(const size_t *origin, const size_t *region, const Image &image) const;
359361
void aubCaptureHook(bool &blocking, bool &clearAllDependencies, const MultiDispatchInfo &multiDispatchInfo);
360362
virtual bool obtainTimestampPacketForCacheFlush(bool isCacheFlushRequired) const = 0;
361363
void waitForLatestTaskCount();

opencl/source/command_queue/command_queue_hw.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,10 +365,10 @@ class CommandQueueHw : public CommandQueue {
365365
cl_event *event);
366366

367367
template <uint32_t cmdType, size_t surfaceCount>
368-
void dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dispatchInfo, Surface *(&surfaces)[surfaceCount], EBuiltInOps::Type builtInOperation, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking, bool blitAllowed);
368+
void dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dispatchInfo, Surface *(&surfaces)[surfaceCount], EBuiltInOps::Type builtInOperation, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking, CommandStreamReceiver &csr);
369369

370370
template <uint32_t cmdType>
371-
void enqueueBlit(const MultiDispatchInfo &multiDispatchInfo, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking);
371+
void enqueueBlit(const MultiDispatchInfo &multiDispatchInfo, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking, CommandStreamReceiver &bcsCsr);
372372

373373
template <uint32_t commandType>
374374
CompletionStamp enqueueNonBlocked(Surface **surfacesForResidency,
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/*
2+
* Copyright (C) 2021 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#pragma once
9+
10+
#include "shared/source/memory_manager/multi_graphics_allocation.h"
11+
12+
#include "opencl/source/mem_obj/buffer.h"
13+
#include "opencl/source/mem_obj/image.h"
14+
#include "opencl/source/mem_obj/mem_obj.h"
15+
16+
namespace NEO {
17+
enum class TransferDirection {
18+
HostToHost,
19+
HostToLocal,
20+
LocalToHost,
21+
LocalToLocal,
22+
};
23+
24+
struct CsrSelectionArgs {
25+
struct Resource {
26+
bool isLocal = false;
27+
const GraphicsAllocation *allocation = nullptr;
28+
const Image *image = nullptr;
29+
const size_t *imageOrigin = nullptr;
30+
};
31+
32+
cl_command_type cmdType;
33+
const size_t *size = nullptr;
34+
Resource srcResource;
35+
Resource dstResource;
36+
TransferDirection direction;
37+
38+
CsrSelectionArgs(cl_command_type cmdType, const size_t *size)
39+
: cmdType(cmdType),
40+
size(size),
41+
direction(TransferDirection::HostToHost) {}
42+
43+
template <typename ResourceType>
44+
CsrSelectionArgs(cl_command_type cmdType, ResourceType *src, ResourceType *dst, uint32_t rootDeviceIndex, const size_t *size)
45+
: cmdType(cmdType),
46+
size(size) {
47+
if (src) {
48+
processResource(*src, rootDeviceIndex, this->srcResource);
49+
}
50+
if (dst) {
51+
processResource(*dst, rootDeviceIndex, this->dstResource);
52+
}
53+
this->direction = createTransferDirection(srcResource.isLocal, dstResource.isLocal);
54+
}
55+
56+
CsrSelectionArgs(cl_command_type cmdType, Image *src, Image *dst, uint32_t rootDeviceIndex, const size_t *size, const size_t *srcOrigin, const size_t *dstOrigin)
57+
: CsrSelectionArgs(cmdType, src, dst, rootDeviceIndex, size) {
58+
if (src) {
59+
srcResource.imageOrigin = srcOrigin;
60+
}
61+
if (dst) {
62+
dstResource.imageOrigin = dstOrigin;
63+
}
64+
}
65+
66+
static void processResource(const Image &image, uint32_t rootDeviceIndex, Resource &outResource) {
67+
processResource(image.getMultiGraphicsAllocation(), rootDeviceIndex, outResource);
68+
outResource.image = &image;
69+
}
70+
71+
static void processResource(const Buffer &buffer, uint32_t rootDeviceIndex, Resource &outResource) {
72+
processResource(buffer.getMultiGraphicsAllocation(), rootDeviceIndex, outResource);
73+
}
74+
75+
static void processResource(const MultiGraphicsAllocation &multiGfxAlloc, uint32_t rootDeviceIndex, Resource &outResource) {
76+
outResource.allocation = multiGfxAlloc.getGraphicsAllocation(rootDeviceIndex);
77+
outResource.isLocal = outResource.allocation->isAllocatedInLocalMemoryPool();
78+
}
79+
80+
static inline TransferDirection createTransferDirection(bool srcLocal, bool dstLocal) {
81+
if (srcLocal) {
82+
if (dstLocal) {
83+
return TransferDirection::LocalToLocal;
84+
} else {
85+
return TransferDirection::LocalToHost;
86+
}
87+
} else {
88+
if (dstLocal) {
89+
return TransferDirection::HostToLocal;
90+
} else {
91+
return TransferDirection::HostToHost;
92+
}
93+
}
94+
}
95+
};
96+
97+
} // namespace NEO

opencl/source/command_queue/enqueue_common.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,9 +1162,8 @@ size_t CommandQueueHw<GfxFamily>::calculateHostPtrSizeForImage(const size_t *reg
11621162

11631163
template <typename GfxFamily>
11641164
template <uint32_t cmdType>
1165-
void CommandQueueHw<GfxFamily>::enqueueBlit(const MultiDispatchInfo &multiDispatchInfo, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking) {
1165+
void CommandQueueHw<GfxFamily>::enqueueBlit(const MultiDispatchInfo &multiDispatchInfo, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking, CommandStreamReceiver &bcsCsr) {
11661166
auto commandStreamRecieverOwnership = getGpgpuCommandStreamReceiver().obtainUniqueOwnership();
1167-
auto &bcsCsr = *getBcsCommandStreamReceiver();
11681167

11691168
EventsRequest eventsRequest(numEventsInWaitList, eventWaitList, event);
11701169
EventBuilder eventBuilder;
@@ -1251,13 +1250,11 @@ void CommandQueueHw<GfxFamily>::enqueueBlit(const MultiDispatchInfo &multiDispat
12511250

12521251
template <typename GfxFamily>
12531252
template <uint32_t cmdType, size_t surfaceCount>
1254-
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) {
1255-
const bool blitPreferred = blitEnqueuePreferred(cmdType, dispatchInfo.peekBuiltinOpParams());
1256-
const bool blitRequired = isCopyOnly;
1257-
const bool blit = blitAllowed && (blitPreferred || blitRequired);
1253+
void CommandQueueHw<GfxFamily>::dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dispatchInfo, Surface *(&surfaces)[surfaceCount], EBuiltInOps::Type builtInOperation, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking, CommandStreamReceiver &csr) {
1254+
const bool blit = EngineHelpers::isBcs(csr.getOsContext().getEngineType());
12581255

12591256
if (blit) {
1260-
enqueueBlit<cmdType>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blocking);
1257+
enqueueBlit<cmdType>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blocking, csr);
12611258
} else {
12621259
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(builtInOperation,
12631260
this->getClDevice());

opencl/source/command_queue/enqueue_copy_buffer.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBuffer(
3030
const cl_event *eventWaitList,
3131
cl_event *event) {
3232
auto eBuiltInOpsType = EBuiltInOps::CopyBufferToBuffer;
33+
constexpr cl_command_type cmdType = CL_COMMAND_COPY_BUFFER;
34+
35+
CsrSelectionArgs csrSelectionArgs{cmdType, srcBuffer, dstBuffer, device->getRootDeviceIndex(), &size};
36+
CommandStreamReceiver &csr = selectCsrForBuiltinOperation(csrSelectionArgs);
3337

3438
if (forceStateless(std::max(srcBuffer->getSize(), dstBuffer->getSize()))) {
3539
eBuiltInOpsType = EBuiltInOps::CopyBufferToBufferStateless;
@@ -47,8 +51,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBuffer(
4751
MemObjSurface s1(srcBuffer);
4852
MemObjSurface s2(dstBuffer);
4953
Surface *surfaces[] = {&s1, &s2};
50-
auto blitAllowed = blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER);
51-
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_BUFFER>(dispatchInfo, surfaces, eBuiltInOpsType, numEventsInWaitList, eventWaitList, event, false, blitAllowed);
54+
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_BUFFER>(dispatchInfo, surfaces, eBuiltInOpsType, numEventsInWaitList, eventWaitList, event, false, csr);
5255

5356
return CL_SUCCESS;
5457
}

opencl/source/command_queue/enqueue_copy_buffer_rect.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBufferRect(
3333
const cl_event *eventWaitList,
3434
cl_event *event) {
3535
auto eBuiltInOps = EBuiltInOps::CopyBufferRect;
36+
constexpr cl_command_type cmdType = CL_COMMAND_COPY_BUFFER_RECT;
37+
38+
CsrSelectionArgs csrSelectionArgs{cmdType, srcBuffer, dstBuffer, device->getRootDeviceIndex(), region};
39+
CommandStreamReceiver &csr = selectCsrForBuiltinOperation(csrSelectionArgs);
3640

3741
if (forceStateless(std::max(srcBuffer->getSize(), dstBuffer->getSize()))) {
3842
eBuiltInOps = EBuiltInOps::CopyBufferRectStateless;
@@ -54,8 +58,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBufferRect(
5458
dc.dstSlicePitch = dstSlicePitch;
5559

5660
MultiDispatchInfo dispatchInfo(dc);
57-
auto blitAllowed = blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER_RECT);
58-
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_BUFFER_RECT>(dispatchInfo, surfaces, eBuiltInOps, numEventsInWaitList, eventWaitList, event, false, blitAllowed);
61+
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_BUFFER_RECT>(dispatchInfo, surfaces, eBuiltInOps, numEventsInWaitList, eventWaitList, event, false, csr);
5962

6063
return CL_SUCCESS;
6164
}

opencl/source/command_queue/enqueue_copy_image.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyImage(
3131
cl_uint numEventsInWaitList,
3232
const cl_event *eventWaitList,
3333
cl_event *event) {
34+
constexpr cl_command_type cmdType = CL_COMMAND_COPY_IMAGE;
35+
36+
CsrSelectionArgs csrSelectionArgs{cmdType, srcImage, dstImage, device->getRootDeviceIndex(), region, srcOrigin, dstOrigin};
37+
CommandStreamReceiver &csr = selectCsrForBuiltinOperation(csrSelectionArgs);
3438

3539
MemObjSurface srcImgSurf(srcImage);
3640
MemObjSurface dstImgSurf(dstImage);
@@ -50,10 +54,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyImage(
5054
}
5155

5256
MultiDispatchInfo dispatchInfo(dc);
53-
cl_command_type cmdType = CL_COMMAND_COPY_IMAGE;
54-
auto blitAllowed = blitEnqueueAllowed(cmdType) && blitEnqueueImageAllowed(srcOrigin, region, *srcImage) && blitEnqueueImageAllowed(dstOrigin, region, *dstImage);
5557

56-
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_IMAGE>(dispatchInfo, surfaces, EBuiltInOps::CopyImageToImage3d, numEventsInWaitList, eventWaitList, event, false, blitAllowed);
58+
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_IMAGE>(dispatchInfo, surfaces, EBuiltInOps::CopyImageToImage3d, numEventsInWaitList, eventWaitList, event, false, csr);
5759

5860
return CL_SUCCESS;
5961
}

opencl/source/command_queue/enqueue_read_buffer.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ cl_int CommandQueueHw<GfxFamily>::enqueueReadBuffer(
3636
cl_event *event) {
3737

3838
const cl_command_type cmdType = CL_COMMAND_READ_BUFFER;
39-
auto blitAllowed = blitEnqueueAllowed(cmdType);
40-
auto &csr = getCommandStreamReceiver(blitAllowed);
39+
40+
CsrSelectionArgs csrSelectionArgs{cmdType, buffer, {}, device->getRootDeviceIndex(), &size};
41+
CommandStreamReceiver &csr = selectCsrForBuiltinOperation(csrSelectionArgs);
4142

4243
if (nullptr == mapAllocation) {
4344
notifyEnqueueReadBuffer(buffer, !!blockingRead, EngineHelpers::isBcs(csr.getOsContext().getEngineType()));
@@ -128,7 +129,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueReadBuffer(
128129
context->providePerformanceHint(CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL, CL_ENQUEUE_READ_BUFFER_DOESNT_MEET_ALIGNMENT_RESTRICTIONS, ptr, size, MemoryConstants::pageSize, MemoryConstants::pageSize);
129130
}
130131
}
131-
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER>(dispatchInfo, surfaces, eBuiltInOps, numEventsInWaitList, eventWaitList, event, blockingRead, blitAllowed);
132+
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER>(dispatchInfo, surfaces, eBuiltInOps, numEventsInWaitList, eventWaitList, event, blockingRead, csr);
132133

133134
return CL_SUCCESS;
134135
}

0 commit comments

Comments
 (0)