mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-01 04:23:00 +08:00
54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
/*
|
|
* Copyright (C) 2021 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "shared/source/memory_manager/graphics_allocation.h"
|
|
|
|
namespace NEO {
|
|
enum class TransferDirection {
|
|
HostToHost,
|
|
HostToLocal,
|
|
LocalToHost,
|
|
LocalToLocal,
|
|
};
|
|
|
|
struct TransferDirectionHelper {
|
|
static inline TransferDirection fromGfxAllocToHost(const GraphicsAllocation &src) {
|
|
const bool srcLocal = src.isAllocatedInLocalMemoryPool();
|
|
return create(srcLocal, false);
|
|
}
|
|
|
|
static inline TransferDirection fromHostToGfxAlloc(const GraphicsAllocation &dst) {
|
|
const bool dstLocal = dst.isAllocatedInLocalMemoryPool();
|
|
return create(false, dstLocal);
|
|
}
|
|
|
|
static inline TransferDirection fromGfxAllocToGfxAlloc(const GraphicsAllocation &src, const GraphicsAllocation &dst) {
|
|
const bool srcLocal = src.isAllocatedInLocalMemoryPool();
|
|
const bool dstLocal = dst.isAllocatedInLocalMemoryPool();
|
|
return create(srcLocal, dstLocal);
|
|
}
|
|
|
|
static inline TransferDirection create(bool srcLocal, bool dstLocal) {
|
|
if (srcLocal) {
|
|
if (dstLocal) {
|
|
return TransferDirection::LocalToLocal;
|
|
} else {
|
|
return TransferDirection::LocalToHost;
|
|
}
|
|
} else {
|
|
if (dstLocal) {
|
|
return TransferDirection::HostToLocal;
|
|
} else {
|
|
return TransferDirection::HostToHost;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
} // namespace NEO
|