mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
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:
committed by
Compute-Runtime-Automation
parent
215051c48f
commit
ef71915c71
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user