mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-11 08:07:19 +08:00
feat(zebin): support isPtr for struct elems
Add support in zeInfo for "is_ptr" payload argument describing if field of structure (argument passed by value) is a pointer. Signed-off-by: Krystian Chmielewski <krystian.chmielewski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
914939c377
commit
ad6237478f
@@ -199,6 +199,7 @@ constexpr ConstStringRef addrMode("sampler_desc_addrmode");
|
||||
constexpr ConstStringRef filterMode("sampler_desc_filtermode");
|
||||
constexpr ConstStringRef normalized("sampler_desc_normalized");
|
||||
constexpr ConstStringRef isPipe("is_pipe");
|
||||
constexpr ConstStringRef isPtr("is_ptr");
|
||||
|
||||
namespace ArgType {
|
||||
constexpr ConstStringRef localSize("local_size");
|
||||
@@ -692,6 +693,7 @@ struct PayloadArgumentBaseT {
|
||||
bool imageTransformable = false;
|
||||
SamplerType samplerType = SamplerTypeUnknown;
|
||||
bool isPipe = false;
|
||||
bool isPtr = false;
|
||||
};
|
||||
|
||||
} // namespace PayloadArgument
|
||||
|
||||
@@ -589,6 +589,8 @@ DecodeError readZeInfoPayloadArguments(const NEO::Yaml::YamlParser &parser, cons
|
||||
validPayload &= readZeInfoEnumChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.samplerType, context, outErrReason);
|
||||
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::isPipe == key) {
|
||||
validPayload &= readZeInfoValueChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.isPipe, context, outErrReason);
|
||||
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::isPtr == key) {
|
||||
validPayload &= readZeInfoValueChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.isPtr, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::Zebin::" + NEO::Elf::SectionsNamesZebin::zeInfo.str() + " : Unknown entry \"" + key.str() + "\" for payload argument in context of " + context.str() + "\n");
|
||||
}
|
||||
@@ -918,6 +920,7 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
|
||||
auto &argAsValue = dst.payloadMappings.explicitArgs[src.argIndex].as<ArgDescValue>(true);
|
||||
ArgDescValue::Element valueElement;
|
||||
valueElement.sourceOffset = 0;
|
||||
valueElement.isPtr = src.isPtr;
|
||||
if (src.sourceOffset != -1) {
|
||||
valueElement.sourceOffset = src.sourceOffset;
|
||||
} else if (argAsValue.elements.empty() == false) {
|
||||
|
||||
@@ -84,6 +84,7 @@ struct ArgDescValue final {
|
||||
CrossThreadDataOffset offset = undefined<CrossThreadDataOffset>;
|
||||
uint16_t size = 0U;
|
||||
uint16_t sourceOffset = 0U;
|
||||
bool isPtr = false;
|
||||
};
|
||||
StackVec<Element, 1> elements;
|
||||
};
|
||||
|
||||
@@ -2176,6 +2176,7 @@ kernels:
|
||||
offset : 24
|
||||
size : 4
|
||||
arg_index : 2
|
||||
is_ptr : true
|
||||
...
|
||||
)===";
|
||||
|
||||
@@ -2208,6 +2209,7 @@ kernels:
|
||||
EXPECT_EQ(NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeArgByvalue, args[1].argType);
|
||||
EXPECT_EQ(24, args[1].offset);
|
||||
EXPECT_EQ(4, args[1].size);
|
||||
EXPECT_TRUE(args[1].isPtr);
|
||||
}
|
||||
|
||||
TEST(ReadZeInfoPayloadArguments, GivenUnknownEntryThenEmmitsWarning) {
|
||||
@@ -5511,6 +5513,25 @@ TEST(PopulateArgDescriptorCrossthreadPayload, GivenArgTypeBufferOffsetWhenSizeIs
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptor, GivenValueArgWithPointerMemberThenItIsProperlyPopulated) {
|
||||
NEO::KernelDescriptor kernelDescriptor;
|
||||
kernelDescriptor.payloadMappings.explicitArgs.resize(1);
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::PayloadArgumentBaseT valueArg;
|
||||
valueArg.argType = NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeArgByvalue;
|
||||
valueArg.argIndex = 0;
|
||||
valueArg.offset = 8;
|
||||
valueArg.size = 8;
|
||||
valueArg.isPtr = true;
|
||||
|
||||
std::string errors, warnings;
|
||||
uint32_t crossThreadDataSize = 0U;
|
||||
auto retVal = NEO::populateArgDescriptor(valueArg, kernelDescriptor, crossThreadDataSize, errors, warnings);
|
||||
EXPECT_EQ(NEO::DecodeError::Success, retVal);
|
||||
EXPECT_TRUE(warnings.empty());
|
||||
EXPECT_TRUE(errors.empty());
|
||||
EXPECT_TRUE(kernelDescriptor.payloadMappings.explicitArgs[0].as<ArgDescValue>().elements[0].isPtr);
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptorCrossthreadPayload, GivenArgTypeWorkDimensionsWhenSizeIsValidThenPopulatesKernelDescriptor) {
|
||||
NEO::ConstStringRef zeinfo = R"===(
|
||||
kernels:
|
||||
|
||||
Reference in New Issue
Block a user