Remove KernelArgInfo and use KernelDescriptor's args instead

Related-To: NEO-4729
Signed-off-by: Krystian Chmielewski <krystian.chmielewski@intel.com>
This commit is contained in:
Krystian Chmielewski
2021-04-08 11:05:45 +02:00
committed by Compute-Runtime-Automation
parent 215051c48f
commit ef71915c71
111 changed files with 1882 additions and 3729 deletions

View File

@@ -29,7 +29,7 @@ TEST_F(KernelImageArgTest, GivenKernelWithImageArgsWhenCheckingDifferentScenario
size_t imageWidth = image->getImageDesc().image_width;
size_t imageHeight = image->getImageDesc().image_height;
size_t imageDepth = image->getImageDesc().image_depth;
uint32_t objectId = pKernelInfo->kernelArgInfo[4].offsetHeap;
uint32_t objectId = pKernelInfo->argAsImg(4).bindful;
cl_mem memObj = image.get();
@@ -66,16 +66,17 @@ TEST_F(KernelImageArgTest, givenKernelWithFlatImageTokensWhenArgIsSetThenPatchAl
auto crossThreadData = reinterpret_cast<uint32_t *>(pKernel->getCrossThreadData());
auto pixelSize = image->getSurfaceFormatInfo().surfaceFormat.ImageElementSizeInBytes;
auto offsetFlatBaseOffset = ptrOffset(crossThreadData, pKernel->getKernelInfo().kernelArgInfo[0].offsetFlatBaseOffset);
const auto &metadata = pKernel->getKernelInfo().getArgDescriptorAt(0).as<ArgDescImage>().metadataPayload;
auto offsetFlatBaseOffset = ptrOffset(crossThreadData, metadata.flatBaseOffset);
EXPECT_EQ(imageBaseAddress, *reinterpret_cast<uint64_t *>(offsetFlatBaseOffset));
auto offsetFlatWidth = ptrOffset(crossThreadData, pKernel->getKernelInfo().kernelArgInfo[0].offsetFlatWidth);
auto offsetFlatWidth = ptrOffset(crossThreadData, metadata.flatWidth);
EXPECT_EQ(static_cast<uint32_t>((imageWidth * pixelSize) - 1), *offsetFlatWidth);
auto offsetFlatHeight = ptrOffset(crossThreadData, pKernel->getKernelInfo().kernelArgInfo[0].offsetFlatHeight);
auto offsetFlatHeight = ptrOffset(crossThreadData, metadata.flatHeight);
EXPECT_EQ(static_cast<uint32_t>((imageHeight * pixelSize) - 1), *offsetFlatHeight);
auto offsetFlatPitch = ptrOffset(crossThreadData, pKernel->getKernelInfo().kernelArgInfo[0].offsetFlatPitch);
auto offsetFlatPitch = ptrOffset(crossThreadData, metadata.flatPitch);
EXPECT_EQ(imageRowPitch - 1, *offsetFlatPitch);
}
@@ -126,7 +127,7 @@ TEST_F(KernelImageArgTest, givenImageWithWriteOnlyAccessAndReadOnlyArgWhenCheckC
std::unique_ptr<Image> img(
Image::create(context.get(), MemoryPropertiesHelper::createMemoryProperties(flags, 0, 0, &context->getDevice(0)->getDevice()),
flags, 0, surfaceFormat, &imgDesc, nullptr, retVal));
pKernelInfo->kernelArgInfo[0].metadata.accessQualifier = NEO::KernelArgMetadata::AccessReadOnly;
pKernelInfo->setAccessQualifier(0, KernelArgMetadata::AccessReadOnly);
cl_mem memObj = img.get();
retVal = pKernel->checkCorrectImageAccessQualifier(0, sizeof(memObj), &memObj);
@@ -168,7 +169,7 @@ TEST_F(KernelImageArgTest, givenImageWithReadOnlyAccessAndWriteOnlyArgWhenCheckC
std::unique_ptr<Image> img(
Image::create(context.get(), MemoryPropertiesHelper::createMemoryProperties(flags, 0, 0, &context->getDevice(0)->getDevice()),
flags, 0, surfaceFormat, &imgDesc, nullptr, retVal));
pKernelInfo->kernelArgInfo[0].metadata.accessQualifier = NEO::KernelArgMetadata::AccessWriteOnly;
pKernelInfo->setAccessQualifier(0, NEO::KernelArgMetadata::AccessWriteOnly);
cl_mem memObj = img.get();
retVal = pKernel->checkCorrectImageAccessQualifier(0, sizeof(memObj), &memObj);
@@ -191,7 +192,7 @@ TEST_F(KernelImageArgTest, givenImageWithReadOnlyAccessAndReadOnlyArgWhenCheckCo
std::unique_ptr<Image> img(
Image::create(context.get(), MemoryPropertiesHelper::createMemoryProperties(flags, 0, 0, &context->getDevice(0)->getDevice()),
flags, 0, surfaceFormat, &imgDesc, nullptr, retVal));
pKernelInfo->kernelArgInfo[0].metadata.accessQualifier = NEO::KernelArgMetadata::AccessReadOnly;
pKernelInfo->setAccessQualifier(0, NEO::KernelArgMetadata::AccessReadOnly);
cl_mem memObj = img.get();
retVal = pKernel->checkCorrectImageAccessQualifier(0, sizeof(memObj), &memObj);
@@ -210,7 +211,7 @@ TEST_F(KernelImageArgTest, givenImageWithWriteOnlyAccessAndWriteOnlyArgWhenCheck
std::unique_ptr<Image> img(
Image::create(context.get(), MemoryPropertiesHelper::createMemoryProperties(flags, 0, 0, &context->getDevice(0)->getDevice()),
flags, 0, surfaceFormat, &imgDesc, nullptr, retVal));
pKernelInfo->kernelArgInfo[0].metadata.accessQualifier = NEO::KernelArgMetadata::AccessWriteOnly;
pKernelInfo->setAccessQualifier(0, NEO::KernelArgMetadata::AccessWriteOnly);
cl_mem memObj = img.get();
retVal = pKernel->checkCorrectImageAccessQualifier(0, sizeof(memObj), &memObj);
@@ -362,30 +363,41 @@ class KernelImageArgTestBindless : public KernelImageArgTest {
HWTEST_F(KernelImageArgTestBindless, givenUsedBindlessImagesWhenPatchingSurfaceStateOffsetsThenCorrectOffsetIsPatchedInCrossThreadData) {
using DataPortBindlessSurfaceExtendedMessageDescriptor = typename FamilyType::DataPortBindlessSurfaceExtendedMessageDescriptor;
pKernelInfo->usesSsh = true;
for (uint32_t i = 0; i < pKernelInfo->getExplicitArgs().size(); i++) {
if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTImage>()) {
auto &argAsImg = pKernelInfo->argAsImg(i);
argAsImg.bindless = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = argAsImg.bindless;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
for (size_t i = 0; i < pKernelInfo->kernelArgInfo.size(); i++) {
pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
} else if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTValue>()) {
auto &argAsVal = pKernelInfo->argAsVal(i);
argAsVal.elements[0].offset = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = argAsVal.elements[0].offset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
}
}
pKernelInfo->kernelArgInfo[pKernelInfo->kernelArgInfo.size() - 1].isImage = false;
uint32_t sshOffset = 0x4000;
pKernel->patchBindlessSurfaceStateOffsets(*pDevice, sshOffset);
for (size_t i = 0; i < pKernelInfo->kernelArgInfo.size(); i++) {
auto crossThreadDataOffset = pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
for (uint32_t i = 0; i < pKernelInfo->getExplicitArgs().size(); i++) {
if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTImage>()) {
auto argAsImg = pKernelInfo->argAsImg(i);
auto crossThreadDataOffset = argAsImg.bindless;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
if (pKernelInfo->kernelArgInfo[i].isImage) {
DataPortBindlessSurfaceExtendedMessageDescriptor extMessageDesc;
extMessageDesc.setBindlessSurfaceOffset(sshOffset + pKernelInfo->kernelArgInfo[i].offsetHeap);
extMessageDesc.setBindlessSurfaceOffset(sshOffset + argAsImg.bindful);
auto expectedOffset = extMessageDesc.getBindlessSurfaceOffsetToPatch();
EXPECT_EQ(expectedOffset, *patchLocation);
} else {
ASSERT_TRUE(pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTValue>());
auto argAsVal = pKernelInfo->argAsVal(i);
auto crossThreadDataOffset = argAsVal.elements[0].offset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
EXPECT_EQ(0xdeadu, *patchLocation);
}
}
@@ -395,22 +407,29 @@ TEST_F(KernelImageArgTest, givenUsedBindlessImagesAndNonImageArgWhenPatchingSurf
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessMode.set(1);
pKernelInfo->usesSsh = true;
for (uint32_t i = 0; i < pKernelInfo->getExplicitArgs().size(); i++) {
if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTImage>()) {
auto &argAsImg = pKernelInfo->argAsImg(i);
argAsImg.bindless = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = argAsImg.bindless;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
for (size_t i = 0; i < pKernelInfo->kernelArgInfo.size(); i++) {
pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
} else if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTValue>()) {
auto &argAsVal = pKernelInfo->argAsVal(i);
argAsVal.elements[0].offset = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = argAsVal.elements[0].offset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
}
}
int nonImageIndex = 1;
pKernelInfo->kernelArgInfo[nonImageIndex].isImage = false;
int nonImageIndex = 2;
uint32_t sshOffset = 0x4000;
pKernel->patchBindlessSurfaceStateOffsets(*pDevice, sshOffset);
auto crossThreadDataOffset = pKernelInfo->kernelArgInfo[nonImageIndex].kernelArgPatchInfoVector[0].crossthreadOffset;
auto crossThreadDataOffset = pKernelInfo->argAsVal(nonImageIndex).elements[0].offset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
EXPECT_EQ(0xdeadu, *patchLocation);
@@ -420,22 +439,28 @@ TEST_F(KernelImageArgTest, givenNotUsedBindlessImagesAndImageArgWhenPatchingSurf
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessMode.set(0);
pKernelInfo->usesSsh = true;
for (size_t i = 0; i < pKernelInfo->kernelArgInfo.size(); i++) {
pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = pKernelInfo->kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
for (uint32_t i = 0; i < pKernelInfo->getExplicitArgs().size(); i++) {
if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTImage>()) {
auto &argAsImg = pKernelInfo->argAsImg(i);
argAsImg.bindless = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = argAsImg.bindless;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
} else if (pKernelInfo->getArgDescriptorAt(i).is<ArgDescriptor::ArgTValue>()) {
auto &argAsVal = pKernelInfo->argAsVal(i);
argAsVal.elements[0].offset = 0x20 + static_cast<uint32_t>(0x20 * i);
auto crossThreadDataOffset = argAsVal.elements[0].offset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
*patchLocation = 0xdead;
}
}
int nonImageIndex = 1;
pKernelInfo->kernelArgInfo[nonImageIndex].isImage = true;
int nonImageIndex = 2;
uint32_t sshOffset = 0x4000;
pKernel->patchBindlessSurfaceStateOffsets(*pDevice, sshOffset);
auto crossThreadDataOffset = pKernelInfo->kernelArgInfo[nonImageIndex].kernelArgPatchInfoVector[0].crossthreadOffset;
auto crossThreadDataOffset = pKernelInfo->argAsVal(nonImageIndex).elements[0].offset;
auto patchLocation = reinterpret_cast<uint32_t *>(ptrOffset(pKernel->getCrossThreadData(), crossThreadDataOffset));
EXPECT_EQ(0xdeadu, *patchLocation);