zebin: remove bti check for global base args
Remove validation of bti for "const_base", "global_base" arguments. Signed-off-by: Krystian Chmielewski <krystian.chmielewski@intel.com>
This commit is contained in:
parent
1fd8b26499
commit
525c535ba4
|
@ -759,14 +759,13 @@ bool setVecArgIndicesBasedOnSize(CrossThreadDataOffset (&vec)[Len], size_t vecSi
|
|||
return true;
|
||||
}
|
||||
|
||||
bool setSSHOffsetBasedOnBti(SurfaceStateHeapOffset &offset, Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::BtiValueT bti, Elf::ZebinKernelMetadata::Types::Kernel::BindingTableEntry::BindingTableEntryBaseT &outMaxBindingTableIndex) {
|
||||
if (bti < 0) {
|
||||
return false;
|
||||
void setSSHOffsetBasedOnBti(SurfaceStateHeapOffset &offset, Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::BtiValueT bti, Elf::ZebinKernelMetadata::Types::Kernel::BindingTableEntry::BindingTableEntryBaseT &outMaxBindingTableIndex) {
|
||||
if (bti == -1) {
|
||||
return;
|
||||
}
|
||||
outMaxBindingTableIndex.btiValue = std::max<int32_t>(outMaxBindingTableIndex.btiValue, bti);
|
||||
constexpr auto surfaceStateSize = 64U;
|
||||
offset = surfaceStateSize * bti;
|
||||
return true;
|
||||
}
|
||||
|
||||
NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Types::Kernel::PerThreadPayloadArgument::PerThreadPayloadArgumentBaseT &src, NEO::KernelDescriptor &dst, uint32_t grfSize,
|
||||
|
@ -1165,10 +1164,7 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
|
|||
dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.stateless = src.offset;
|
||||
dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.pointerSize = src.size;
|
||||
}
|
||||
if (false == setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindful, src.btiValue, maximumBindingTableEntry)) {
|
||||
outErrReason.append("DeviceBinaryFormat::Zebin : Invalid bti for argument of type " + NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::ArgType::dataConstBuffer.str() + " in context of : " + dst.kernelMetadata.kernelName + "\n");
|
||||
return DecodeError::InvalidBinary;
|
||||
}
|
||||
setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindful, src.btiValue, maximumBindingTableEntry);
|
||||
} break;
|
||||
|
||||
case NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeDataGlobalBuffer: {
|
||||
|
@ -1176,10 +1172,7 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
|
|||
dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.stateless = src.offset;
|
||||
dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.pointerSize = src.size;
|
||||
}
|
||||
if (false == setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindful, src.btiValue, maximumBindingTableEntry)) {
|
||||
outErrReason.append("DeviceBinaryFormat::Zebin : Invalid bti for argument of type " + NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::ArgType::dataGlobalBuffer.str() + " in context of : " + dst.kernelMetadata.kernelName + "\n");
|
||||
return DecodeError::InvalidBinary;
|
||||
}
|
||||
setSSHOffsetBasedOnBti(dst.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindful, src.btiValue, maximumBindingTableEntry);
|
||||
} break;
|
||||
}
|
||||
|
||||
|
|
|
@ -5742,22 +5742,6 @@ TEST(PopulateArgDescriptor, GivenValidConstDataBufferArgThenItIsPopulatedCorrect
|
|||
EXPECT_EQ(1, maximumBindingTableEntry.btiValue);
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptor, GivenInvalidConstDataBufferArgThenErrorIsReturned) {
|
||||
NEO::KernelDescriptor kernelDescriptor;
|
||||
kernelDescriptor.kernelMetadata.kernelName = "kernel";
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::PayloadArgumentBaseT dataConstBuffer;
|
||||
dataConstBuffer.argType = NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeDataConstBuffer;
|
||||
dataConstBuffer.btiValue = -1;
|
||||
|
||||
uint32_t crossThreadDataSize = 0U;
|
||||
ZeInfoBindingTableIndices::value_type maximumBindingTableEntry;
|
||||
std::string errors, warnings;
|
||||
auto err = NEO::populateArgDescriptor(dataConstBuffer, kernelDescriptor, crossThreadDataSize, maximumBindingTableEntry, errors, warnings);
|
||||
EXPECT_EQ(NEO::DecodeError::InvalidBinary, err);
|
||||
EXPECT_TRUE(warnings.empty());
|
||||
EXPECT_STREQ("DeviceBinaryFormat::Zebin : Invalid bti for argument of type const_base in context of : kernel\n", errors.c_str());
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptor, GivenValidGlobalDataBufferArgThenItIsPopulatedCorrectly) {
|
||||
NEO::KernelDescriptor kernelDescriptor;
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::PayloadArgumentBaseT dataGlobalBuffer;
|
||||
|
@ -5780,20 +5764,44 @@ TEST(PopulateArgDescriptor, GivenValidGlobalDataBufferArgThenItIsPopulatedCorrec
|
|||
EXPECT_EQ(1, maximumBindingTableEntry.btiValue);
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptor, GivenInvalidGlobalDataBufferArgThenErrorIsReturned) {
|
||||
TEST(PopulateArgDescriptor, GivenGlobalDataBufferArgWithoutBTIThenItIsPopulatedCorrectly) {
|
||||
NEO::KernelDescriptor kernelDescriptor;
|
||||
kernelDescriptor.kernelMetadata.kernelName = "kernel";
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::PayloadArgumentBaseT dataGlobalBuffer;
|
||||
dataGlobalBuffer.argType = NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeDataGlobalBuffer;
|
||||
dataGlobalBuffer.btiValue = -1;
|
||||
dataGlobalBuffer.size = 8;
|
||||
dataGlobalBuffer.offset = 32;
|
||||
|
||||
uint32_t crossThreadDataSize = 0U;
|
||||
ZeInfoBindingTableIndices::value_type maximumBindingTableEntry;
|
||||
std::string errors, warnings;
|
||||
auto err = NEO::populateArgDescriptor(dataGlobalBuffer, kernelDescriptor, crossThreadDataSize, maximumBindingTableEntry, errors, warnings);
|
||||
EXPECT_EQ(NEO::DecodeError::InvalidBinary, err);
|
||||
EXPECT_EQ(NEO::DecodeError::Success, err);
|
||||
EXPECT_TRUE(warnings.empty());
|
||||
EXPECT_STREQ("DeviceBinaryFormat::Zebin : Invalid bti for argument of type global_base in context of : kernel\n", errors.c_str());
|
||||
EXPECT_TRUE(errors.empty());
|
||||
EXPECT_EQ(8U, kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.pointerSize);
|
||||
EXPECT_EQ(32U, kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.stateless);
|
||||
EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.globalVariablesSurfaceAddress.bindful));
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptor, GivenConstDataBufferArgWithoutBTIThenItIsPopulatedCorrectly) {
|
||||
NEO::KernelDescriptor kernelDescriptor;
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::PayloadArgument::PayloadArgumentBaseT dataGlobalBuffer;
|
||||
dataGlobalBuffer.argType = NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeDataConstBuffer;
|
||||
dataGlobalBuffer.btiValue = -1;
|
||||
dataGlobalBuffer.size = 8;
|
||||
dataGlobalBuffer.offset = 32;
|
||||
|
||||
uint32_t crossThreadDataSize = 0U;
|
||||
ZeInfoBindingTableIndices::value_type maximumBindingTableEntry;
|
||||
std::string errors, warnings;
|
||||
auto err = NEO::populateArgDescriptor(dataGlobalBuffer, kernelDescriptor, crossThreadDataSize, maximumBindingTableEntry, errors, warnings);
|
||||
EXPECT_EQ(NEO::DecodeError::Success, err);
|
||||
EXPECT_TRUE(warnings.empty());
|
||||
EXPECT_TRUE(errors.empty());
|
||||
EXPECT_EQ(8U, kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.pointerSize);
|
||||
EXPECT_EQ(32U, kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.stateless);
|
||||
EXPECT_TRUE(NEO::isUndefinedOffset(kernelDescriptor.payloadMappings.implicitArgs.globalConstantsSurfaceAddress.bindful));
|
||||
}
|
||||
|
||||
TEST(PopulateArgDescriptorCrossthreadPayload, GivenArgTypePrintfBufferWhenOffsetAndSizeIsValidThenPopulatesKernelDescriptor) {
|
||||
|
|
Loading…
Reference in New Issue