mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-30 09:58:55 +08:00
Skip transfer when CL_MAP_INVALIDATE_REGION is specified
Resolves: NEO-5490 Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
44112f8d94
commit
75b7adbe95
@@ -433,21 +433,25 @@ void *CommandQueue::enqueueReadMemObjForMap(TransferProperties &transferProperti
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (transferProperties.memObj->peekClMemObjType() == CL_MEM_OBJECT_BUFFER) {
|
||||
auto buffer = castToObject<Buffer>(transferProperties.memObj);
|
||||
errcodeRet = enqueueReadBuffer(buffer, transferProperties.blocking, transferProperties.offset[0], transferProperties.size[0],
|
||||
returnPtr, transferProperties.memObj->getMapAllocation(getDevice().getRootDeviceIndex()), eventsRequest.numEventsInWaitList,
|
||||
eventsRequest.eventWaitList, eventsRequest.outEvent);
|
||||
if (transferProperties.mapFlags == CL_MAP_WRITE_INVALIDATE_REGION) {
|
||||
errcodeRet = enqueueMarkerWithWaitList(eventsRequest.numEventsInWaitList, eventsRequest.eventWaitList, eventsRequest.outEvent);
|
||||
} else {
|
||||
auto image = castToObjectOrAbort<Image>(transferProperties.memObj);
|
||||
size_t readOrigin[4] = {transferProperties.offset[0], transferProperties.offset[1], transferProperties.offset[2], 0};
|
||||
auto mipIdx = getMipLevelOriginIdx(image->peekClMemObjType());
|
||||
UNRECOVERABLE_IF(mipIdx >= 4);
|
||||
readOrigin[mipIdx] = transferProperties.mipLevel;
|
||||
errcodeRet = enqueueReadImage(image, transferProperties.blocking, readOrigin, &transferProperties.size[0],
|
||||
image->getHostPtrRowPitch(), image->getHostPtrSlicePitch(),
|
||||
returnPtr, transferProperties.memObj->getMapAllocation(getDevice().getRootDeviceIndex()), eventsRequest.numEventsInWaitList,
|
||||
eventsRequest.eventWaitList, eventsRequest.outEvent);
|
||||
if (transferProperties.memObj->peekClMemObjType() == CL_MEM_OBJECT_BUFFER) {
|
||||
auto buffer = castToObject<Buffer>(transferProperties.memObj);
|
||||
errcodeRet = enqueueReadBuffer(buffer, transferProperties.blocking, transferProperties.offset[0], transferProperties.size[0],
|
||||
returnPtr, transferProperties.memObj->getMapAllocation(getDevice().getRootDeviceIndex()), eventsRequest.numEventsInWaitList,
|
||||
eventsRequest.eventWaitList, eventsRequest.outEvent);
|
||||
} else {
|
||||
auto image = castToObjectOrAbort<Image>(transferProperties.memObj);
|
||||
size_t readOrigin[4] = {transferProperties.offset[0], transferProperties.offset[1], transferProperties.offset[2], 0};
|
||||
auto mipIdx = getMipLevelOriginIdx(image->peekClMemObjType());
|
||||
UNRECOVERABLE_IF(mipIdx >= 4);
|
||||
readOrigin[mipIdx] = transferProperties.mipLevel;
|
||||
errcodeRet = enqueueReadImage(image, transferProperties.blocking, readOrigin, &transferProperties.size[0],
|
||||
image->getHostPtrRowPitch(), image->getHostPtrSlicePitch(),
|
||||
returnPtr, transferProperties.memObj->getMapAllocation(getDevice().getRootDeviceIndex()), eventsRequest.numEventsInWaitList,
|
||||
eventsRequest.eventWaitList, eventsRequest.outEvent);
|
||||
}
|
||||
}
|
||||
|
||||
if (errcodeRet != CL_SUCCESS) {
|
||||
|
||||
@@ -107,13 +107,17 @@ void *CommandQueue::cpuDataTransferHandler(TransferProperties &transferPropertie
|
||||
switch (transferProperties.cmdType) {
|
||||
case CL_COMMAND_MAP_BUFFER:
|
||||
if (!transferProperties.memObj->isMemObjZeroCopy()) {
|
||||
transferProperties.memObj->transferDataToHostPtr(transferProperties.size, transferProperties.offset);
|
||||
if (transferProperties.mapFlags != CL_MAP_WRITE_INVALIDATE_REGION) {
|
||||
transferProperties.memObj->transferDataToHostPtr(transferProperties.size, transferProperties.offset);
|
||||
}
|
||||
eventCompleted = true;
|
||||
}
|
||||
break;
|
||||
case CL_COMMAND_MAP_IMAGE:
|
||||
if (!transferProperties.memObj->isMemObjZeroCopy()) {
|
||||
transferProperties.memObj->transferDataToHostPtr(transferProperties.size, transferProperties.offset);
|
||||
if (transferProperties.mapFlags != CL_MAP_WRITE_INVALIDATE_REGION) {
|
||||
transferProperties.memObj->transferDataToHostPtr(transferProperties.size, transferProperties.offset);
|
||||
}
|
||||
eventCompleted = true;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user