Files
compute-runtime/level_zero/experimental/source/mutable_cmdlist/label.cpp
Zbigniew Zdanowicz 442c11b5ba feature: add mutable command list implementation
Related-To: NEO-10492

Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
2025-06-25 16:32:08 +02:00

70 lines
2.3 KiB
C++

/*
* Copyright (C) 2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/experimental/source/mutable_cmdlist/label.h"
#include "shared/source/command_container/command_encoder.h"
#include "shared/source/command_stream/linear_stream.h"
#include "shared/source/helpers/aligned_memory.h"
#include "shared/source/helpers/ptr_math.h"
#include "shared/source/memory_manager/graphics_allocation.h"
#include "level_zero/core/source/cmdlist/cmdlist.h"
#include "level_zero/core/source/mutable_cmdlist/mutable_cmdlist.h"
namespace L0 {
namespace MCL {
Label::Label(ze_command_list_handle_t hCmdList, const InterfaceLabelDescriptor *desc) {
this->hCmdList = hCmdList;
this->name = desc->name == nullptr ? "" : std::string(desc->name);
this->alignment = desc->alignment;
this->gpuAddress = undefined<GpuAddress>;
}
Label *Label::create(ze_command_list_handle_t hCmdList, const InterfaceLabelDescriptor *desc) {
return new Label(hCmdList, desc);
}
ze_result_t Label::setLabel(ze_command_list_handle_t hCmdList) {
if (this->hCmdList != hCmdList)
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
if (isSet())
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
auto cmdList = MutableCommandList::fromHandle(hCmdList);
auto cs = cmdList->getBase()->getCmdContainer().getCommandStream();
GpuAddress labelAddress = cs->getGraphicsAllocation()->getGpuAddress() + cs->getUsed();
if (this->alignment) {
const GpuAddress alignedAddress = alignUp<GpuAddress>(labelAddress, this->alignment);
if (auto padding = alignedAddress - labelAddress) {
if (padding % 4 != 0U) {
return ZE_RESULT_ERROR_UNSUPPORTED_ALIGNMENT;
}
auto numNoops = padding >> 2;
for (size_t i = 0; i < numNoops; i++) {
cmdList->getBase()->appendMINoop();
}
}
labelAddress = alignedAddress;
}
this->gpuAddress = labelAddress;
cmdList->appendSetPredicate(NEO::MiPredicateType::disable);
auto csCpuBase = cs->getCpuBase();
for (const auto offset : getUsages()) {
memcpy_s(ptrOffset(csCpuBase, offset), sizeof(GpuAddress), &labelAddress, sizeof(GpuAddress));
}
return ZE_RESULT_SUCCESS;
}
} // namespace MCL
} // namespace L0