2021-09-07 01:04:14 +08:00
|
|
|
/*
|
2023-01-11 01:16:08 +08:00
|
|
|
* Copyright (C) 2021-2023 Intel Corporation
|
2021-09-07 01:04:14 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
2023-02-13 14:19:28 +08:00
|
|
|
#include "shared/source/command_stream/transfer_direction.h"
|
|
|
|
|
2023-01-11 01:16:08 +08:00
|
|
|
#include "opencl/source/api/cl_types.h"
|
2021-09-07 01:04:14 +08:00
|
|
|
|
|
|
|
namespace NEO {
|
2023-01-11 01:16:08 +08:00
|
|
|
class MultiGraphicsAllocation;
|
|
|
|
class GraphicsAllocation;
|
|
|
|
class Image;
|
|
|
|
class Buffer;
|
|
|
|
|
2021-09-07 01:04:14 +08:00
|
|
|
struct CsrSelectionArgs {
|
|
|
|
struct Resource {
|
|
|
|
bool isLocal = false;
|
|
|
|
const GraphicsAllocation *allocation = nullptr;
|
|
|
|
const Image *image = nullptr;
|
|
|
|
const size_t *imageOrigin = nullptr;
|
|
|
|
};
|
|
|
|
|
|
|
|
cl_command_type cmdType;
|
|
|
|
const size_t *size = nullptr;
|
|
|
|
Resource srcResource;
|
|
|
|
Resource dstResource;
|
|
|
|
TransferDirection direction;
|
|
|
|
|
|
|
|
CsrSelectionArgs(cl_command_type cmdType, const size_t *size)
|
|
|
|
: cmdType(cmdType),
|
|
|
|
size(size),
|
|
|
|
direction(TransferDirection::HostToHost) {}
|
|
|
|
|
|
|
|
template <typename ResourceType>
|
|
|
|
CsrSelectionArgs(cl_command_type cmdType, ResourceType *src, ResourceType *dst, uint32_t rootDeviceIndex, const size_t *size)
|
|
|
|
: cmdType(cmdType),
|
|
|
|
size(size) {
|
|
|
|
if (src) {
|
|
|
|
processResource(*src, rootDeviceIndex, this->srcResource);
|
|
|
|
}
|
|
|
|
if (dst) {
|
|
|
|
processResource(*dst, rootDeviceIndex, this->dstResource);
|
|
|
|
}
|
|
|
|
this->direction = createTransferDirection(srcResource.isLocal, dstResource.isLocal);
|
|
|
|
}
|
|
|
|
|
|
|
|
CsrSelectionArgs(cl_command_type cmdType, Image *src, Image *dst, uint32_t rootDeviceIndex, const size_t *size, const size_t *srcOrigin, const size_t *dstOrigin)
|
|
|
|
: CsrSelectionArgs(cmdType, src, dst, rootDeviceIndex, size) {
|
|
|
|
if (src) {
|
|
|
|
srcResource.imageOrigin = srcOrigin;
|
|
|
|
}
|
|
|
|
if (dst) {
|
|
|
|
dstResource.imageOrigin = dstOrigin;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-11 01:16:08 +08:00
|
|
|
static void processResource(const Image &image, uint32_t rootDeviceIndex, Resource &outResource);
|
2021-09-07 01:04:14 +08:00
|
|
|
|
2023-01-11 01:16:08 +08:00
|
|
|
static void processResource(const Buffer &buffer, uint32_t rootDeviceIndex, Resource &outResource);
|
2021-09-07 01:04:14 +08:00
|
|
|
|
2023-01-11 01:16:08 +08:00
|
|
|
static void processResource(const MultiGraphicsAllocation &multiGfxAlloc, uint32_t rootDeviceIndex, Resource &outResource);
|
2021-11-08 20:06:22 +08:00
|
|
|
|
2023-01-11 01:16:08 +08:00
|
|
|
static void processResource(const GraphicsAllocation &gfxAlloc, uint32_t rootDeviceIndex, Resource &outResource);
|
2021-09-07 01:04:14 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace NEO
|