-
Notifications
You must be signed in to change notification settings - Fork 247
/
Copy pathcsr_selection_args.h
70 lines (57 loc) · 2.2 KB
/
csr_selection_args.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
* Copyright (C) 2021-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/command_stream/transfer_direction.h"
#include "opencl/source/api/cl_types.h"
namespace NEO {
class MultiGraphicsAllocation;
class GraphicsAllocation;
class Image;
class Buffer;
struct CsrSelectionArgs {
struct Resource {
bool isLocal = false;
const GraphicsAllocation *allocation = nullptr;
const Image *image = nullptr;
const size_t *imageOrigin = nullptr;
};
Resource srcResource;
Resource dstResource;
const size_t *size = nullptr;
cl_command_type cmdType;
TransferDirection direction;
CsrSelectionArgs(cl_command_type cmdType, const size_t *size)
: size(size),
cmdType(cmdType),
direction(TransferDirection::hostToHost) {}
template <typename ResourceType>
CsrSelectionArgs(cl_command_type cmdType, ResourceType *src, ResourceType *dst, uint32_t rootDeviceIndex, const size_t *size)
: size(size),
cmdType(cmdType) {
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;
}
}
static void processResource(const Image &image, uint32_t rootDeviceIndex, Resource &outResource);
static void processResource(const Buffer &buffer, uint32_t rootDeviceIndex, Resource &outResource);
static void processResource(const MultiGraphicsAllocation &multiGfxAlloc, uint32_t rootDeviceIndex, Resource &outResource);
static void processResource(const GraphicsAllocation &gfxAlloc, uint32_t rootDeviceIndex, Resource &outResource);
};
} // namespace NEO