mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-30 09:58:55 +08:00
fix: add support for bindless implicit args
Support for: global_base and const_base in bindless addressing mode. Related-To: NEO-9855 Signed-off-by: Fabian Zwolinski <fabian.zwolinski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
2bda9f0b58
commit
903e581b5f
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Intel Corporation
|
||||
* Copyright (C) 2023-2024 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -959,6 +959,10 @@ DecodeError decodeZeInfoKernelPayloadArguments(KernelDescriptor &dst, Yaml::Yaml
|
||||
return decodeErr;
|
||||
}
|
||||
|
||||
if (arg.argIndex == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (arg.addrmode == Types::Kernel::PayloadArgument::memoryAddressingModeBindless) {
|
||||
if (dst.payloadMappings.explicitArgs[arg.argIndex].is<NEO::ArgDescriptor::argTPointer>()) {
|
||||
bindlessBufferAccess = true;
|
||||
@@ -974,6 +978,14 @@ DecodeError decodeZeInfoKernelPayloadArguments(KernelDescriptor &dst, Yaml::Yaml
|
||||
}
|
||||
}
|
||||
|
||||
const auto implicitArgsVec = dst.getImplicitArgBindlessCandidatesVec();
|
||||
for (const auto implicitArg : implicitArgsVec) {
|
||||
if (isValidOffset(implicitArg->bindless)) {
|
||||
bindlessBufferAccess = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((bindlessBufferAccess && bindfulBufferAccess) ||
|
||||
(bindlessImageAccess && bindfulImageAccess)) {
|
||||
outErrReason.append("DeviceBinaryFormat::zebin::.ze_info : bindless and bindful addressing modes must not be mixed.\n");
|
||||
@@ -1274,17 +1286,27 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern
|
||||
return populateArgPointerStateless(dst.payloadMappings.implicitArgs.rtDispatchGlobals);
|
||||
|
||||
case Types::Kernel::argTypeDataConstBuffer:
|
||||
if (src.offset != Types::Kernel::PayloadArgument::Defaults::offset) {
|
||||
populateArgPointerStateless(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress);
|
||||
if (src.addrmode == Types::Kernel::PayloadArgument::memoryAddressingModeBindless) {
|
||||
dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindless = src.offset;
|
||||
dst.kernelAttributes.numArgsStateful++;
|
||||
} else {
|
||||
if (src.offset != Types::Kernel::PayloadArgument::Defaults::offset) {
|
||||
populateArgPointerStateless(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress);
|
||||
}
|
||||
setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindful, src.btiValue, dst.payloadMappings.bindingTable.numEntries);
|
||||
}
|
||||
setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindful, src.btiValue, dst.payloadMappings.bindingTable.numEntries);
|
||||
return DecodeError::success;
|
||||
|
||||
case Types::Kernel::argTypeDataGlobalBuffer:
|
||||
if (src.offset != Types::Kernel::PayloadArgument::Defaults::offset) {
|
||||
populateArgPointerStateless(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress);
|
||||
if (src.addrmode == Types::Kernel::PayloadArgument::memoryAddressingModeBindless) {
|
||||
dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindless = src.offset;
|
||||
dst.kernelAttributes.numArgsStateful++;
|
||||
} else {
|
||||
if (src.offset != Types::Kernel::PayloadArgument::Defaults::offset) {
|
||||
populateArgPointerStateless(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress);
|
||||
}
|
||||
setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindful, src.btiValue, dst.payloadMappings.bindingTable.numEntries);
|
||||
}
|
||||
setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindful, src.btiValue, dst.payloadMappings.bindingTable.numEntries);
|
||||
return DecodeError::success;
|
||||
|
||||
case Types::Kernel::argTypeImageHeight:
|
||||
|
||||
Reference in New Issue
Block a user