compute-runtime/opencl/source/helpers/enqueue_properties.h

71 lines
2.0 KiB
C++

/*
* Copyright (C) 2019-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/blit_properties_container.h"
namespace NEO {
struct EnqueueProperties {
enum class Operation {
none,
blit,
explicitCacheFlush,
enqueueWithoutSubmission,
dependencyResolveOnGpu,
gpuKernel,
profilingOnly
};
EnqueueProperties() = delete;
EnqueueProperties(bool blitEnqueue, bool hasKernels, bool isCacheFlushCmd, bool flushDependenciesOnly, bool isFlushWithEvent, bool hasStallingCmds,
const BlitPropertiesContainer *blitPropertiesContainer) : hasStallingCmds(hasStallingCmds) {
if (blitEnqueue) {
operation = Operation::blit;
this->blitPropertiesContainer = blitPropertiesContainer;
return;
}
if (hasKernels) {
operation = Operation::gpuKernel;
this->blitPropertiesContainer = blitPropertiesContainer;
return;
}
if (isCacheFlushCmd) {
operation = Operation::explicitCacheFlush;
return;
}
if (flushDependenciesOnly) {
operation = Operation::dependencyResolveOnGpu;
return;
}
if (isFlushWithEvent) {
operation = Operation::profilingOnly;
return;
}
operation = Operation::enqueueWithoutSubmission;
}
bool isFlushWithoutKernelRequired() const {
return (operation == Operation::blit) || (operation == Operation::explicitCacheFlush) ||
(operation == Operation::dependencyResolveOnGpu) || (operation == EnqueueProperties::Operation::profilingOnly);
}
bool isStartTimestampOnCpuRequired() const {
return (operation != Operation::blit && operation != Operation::gpuKernel);
}
const BlitPropertiesContainer *blitPropertiesContainer = nullptr;
Operation operation = Operation::enqueueWithoutSubmission;
const bool hasStallingCmds;
};
} // namespace NEO