Files
compute-runtime/shared/test/unit_test/helpers/addressing_mode_helper_tests.cpp
Fabian Zwoliński 59829aeb11 fix(ocl): Force rebuild if binary contains bindless kernel
Related-To: NEO-7063
Signed-off-by: Fabian Zwoliński <fabian.zwolinski@intel.com>
2024-05-20 14:15:17 +02:00

97 lines
4.0 KiB
C++

/*
* Copyright (C) 2023-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/helpers/addressing_mode_helper.h"
#include "shared/source/program/kernel_info.h"
#include "gtest/gtest.h"
using namespace NEO;
TEST(AddressingModeHelperTest, GivenArgIsNotPointerWhenCheckingForStatefulAccessThenReturnFalse) {
auto argDescriptor = ArgDescriptor(ArgDescriptor::argTValue);
KernelDescriptor kernelDescriptor;
kernelDescriptor.payloadMappings.explicitArgs.push_back(argDescriptor);
EXPECT_FALSE(AddressingModeHelper::containsStatefulAccess(kernelDescriptor, false));
}
TEST(AddressingModeHelperTest, GivenArgIsPointerWithInvalidStatefulOffsetWhenCheckingForStatefulAccessThenReturnFalse) {
auto argDescriptor = ArgDescriptor(ArgDescriptor::argTPointer);
argDescriptor.as<ArgDescPointer>().bindful = undefined<SurfaceStateHeapOffset>;
argDescriptor.as<ArgDescPointer>().bindless = undefined<CrossThreadDataOffset>;
KernelDescriptor kernelDescriptor;
kernelDescriptor.payloadMappings.explicitArgs.push_back(argDescriptor);
EXPECT_FALSE(AddressingModeHelper::containsStatefulAccess(kernelDescriptor, false));
}
TEST(AddressingModeHelperTest, GivenArgIsPointerWithValidBindfulOffsetWhenCheckingForStatefulAccessThenReturnTrue) {
auto argDescriptor = ArgDescriptor(ArgDescriptor::argTPointer);
argDescriptor.as<ArgDescPointer>().bindful = 0x40;
argDescriptor.as<ArgDescPointer>().bindless = undefined<CrossThreadDataOffset>;
KernelDescriptor kernelDescriptor;
kernelDescriptor.payloadMappings.explicitArgs.push_back(argDescriptor);
EXPECT_TRUE(AddressingModeHelper::containsStatefulAccess(kernelDescriptor, false));
}
TEST(AddressingModeHelperTest, GivenArgIsPointerWithValidBindlessOffsetWhenCheckingForStatefulAccessThenReturnTrue) {
auto argDescriptor = ArgDescriptor(ArgDescriptor::argTPointer);
argDescriptor.as<ArgDescPointer>().bindful = undefined<SurfaceStateHeapOffset>;
argDescriptor.as<ArgDescPointer>().bindless = 0x40;
KernelDescriptor kernelDescriptor;
kernelDescriptor.payloadMappings.explicitArgs.push_back(argDescriptor);
EXPECT_TRUE(AddressingModeHelper::containsStatefulAccess(kernelDescriptor, false));
}
TEST(AddressingModeHelperTest, GivenLastArgIsPointerWithValidBindlessOffsetWhenIgnoreLastArgAndCheckingForStatefulAccessThenReturnFalse) {
auto argDescriptor = ArgDescriptor(ArgDescriptor::argTPointer);
argDescriptor.as<ArgDescPointer>().bindful = undefined<SurfaceStateHeapOffset>;
argDescriptor.as<ArgDescPointer>().bindless = 0x40;
KernelDescriptor kernelDescriptor;
kernelDescriptor.payloadMappings.explicitArgs.push_back(argDescriptor);
EXPECT_FALSE(AddressingModeHelper::containsStatefulAccess(kernelDescriptor, true));
}
TEST(AddressingModeHelperTest, GivenKernelInfosWhenCheckingForBindlessKernelThenReturnCorrectValue) {
KernelInfo kernelInfo1{};
KernelInfo kernelInfo2{};
{
kernelInfo1.kernelDescriptor.kernelAttributes.bufferAddressingMode = KernelDescriptor::Bindless;
std::vector<KernelInfo *> kernelInfos{&kernelInfo1};
EXPECT_TRUE(AddressingModeHelper::containsBindlessKernel(kernelInfos));
}
{
kernelInfo1.kernelDescriptor.kernelAttributes.bufferAddressingMode = KernelDescriptor::Bindful;
std::vector<KernelInfo *> kernelInfos{&kernelInfo1};
EXPECT_FALSE(AddressingModeHelper::containsBindlessKernel(kernelInfos));
}
{
kernelInfo1.kernelDescriptor.kernelAttributes.bufferAddressingMode = KernelDescriptor::Bindful;
std::vector<KernelInfo *> kernelInfos{&kernelInfo1};
EXPECT_FALSE(AddressingModeHelper::containsBindlessKernel(kernelInfos));
}
{
kernelInfo1.kernelDescriptor.kernelAttributes.bufferAddressingMode = KernelDescriptor::Bindful;
kernelInfo2.kernelDescriptor.kernelAttributes.bufferAddressingMode = KernelDescriptor::Bindless;
std::vector<KernelInfo *> kernelInfos{&kernelInfo1, &kernelInfo2};
EXPECT_TRUE(AddressingModeHelper::containsBindlessKernel(kernelInfos));
}
}