From 4122554b71ff2eb35976828cac633823c0517cf6 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Tue, 20 Oct 2020 15:41:32 +0200 Subject: [PATCH] Fix max root device index in Program's ctor Related-To: NEO-5001 Change-Id: If3b86a51df478222f47a30c9254466dea0710ec4 Signed-off-by: Mateusz Jablonski --- opencl/source/program/program.cpp | 8 ++++++- .../test/unit_test/program/program_tests.cpp | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/opencl/source/program/program.cpp b/opencl/source/program/program.cpp index 6f29c9c319..17c0d03b57 100644 --- a/opencl/source/program/program.cpp +++ b/opencl/source/program/program.cpp @@ -48,7 +48,13 @@ Program::Program(Context *context, bool isBuiltIn, const ClDeviceVector &clDevic numDevices = static_cast(clDevicesIn.size()); bool force32BitAddressess = false; - uint32_t maxRootDeviceIndex = pDevice->getRootDeviceIndex(); + uint32_t maxRootDeviceIndex = 0; + + for (const auto &device : clDevicesIn) { + if (device->getRootDeviceIndex() > maxRootDeviceIndex) { + maxRootDeviceIndex = device->getRootDeviceIndex(); + } + } buildInfos.resize(maxRootDeviceIndex + 1); diff --git a/opencl/test/unit_test/program/program_tests.cpp b/opencl/test/unit_test/program/program_tests.cpp index c4abfb84c7..31a6c2b6d5 100644 --- a/opencl/test/unit_test/program/program_tests.cpp +++ b/opencl/test/unit_test/program/program_tests.cpp @@ -3053,6 +3053,29 @@ TEST_F(ProgramMultiRootDeviceTests, WhenPrivateSurfaceIsCreatedThenItHasCorrectR EXPECT_EQ(expectedRootDeviceIndex, privateSurface->getRootDeviceIndex()); } +TEST_F(ProgramMultiRootDeviceTests, WhenProgramIsCreatedThenBuildInfosVectorIsProperlyResized) { + { + ClDeviceVector deviceVector; + deviceVector.push_back(device.get()); + deviceVector.push_back(device2.get()); + + EXPECT_EQ(1u, deviceVector[0]->getRootDeviceIndex()); + auto program = std::make_unique(context.get(), false, deviceVector); + + EXPECT_EQ(3u, program->buildInfos.size()); + } + { + ClDeviceVector deviceVector; + deviceVector.push_back(device2.get()); + deviceVector.push_back(device.get()); + + EXPECT_EQ(2u, deviceVector[0]->getRootDeviceIndex()); + auto program = std::make_unique(context.get(), false, deviceVector); + + EXPECT_EQ(3u, program->buildInfos.size()); + } +} + class MockCompilerInterfaceWithGtpinParam : public CompilerInterface { public: TranslationOutput::ErrorCode link(