From 01ce7faf7553a4443b62e88d55712bb9855466f8 Mon Sep 17 00:00:00 2001 From: Aaron Greig Date: Wed, 20 Sep 2023 17:34:51 +0100 Subject: [PATCH 1/3] CTS fixes for ProgramLink and ProgramCreateWithBinary We now no longer attempt to link two programs with duplicate definitions together (the SPIR-V dpc++ generates for us always contains a wrapper function with the same name and function signature) We also now correctly query program binaries --- .../program/urProgramCreateWithBinary.cpp | 9 +++-- test/conformance/program/urProgramLink.cpp | 40 ++++++------------- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/test/conformance/program/urProgramCreateWithBinary.cpp b/test/conformance/program/urProgramCreateWithBinary.cpp index b0857e6007..fb6c8b128c 100644 --- a/test/conformance/program/urProgramCreateWithBinary.cpp +++ b/test/conformance/program/urProgramCreateWithBinary.cpp @@ -10,11 +10,14 @@ struct urProgramCreateWithBinaryTest : uur::urProgramTest { UUR_RETURN_ON_FATAL_FAILURE(urProgramTest::SetUp()); ASSERT_SUCCESS(urProgramBuild(context, program, nullptr)); size_t binary_size = 0; - ASSERT_SUCCESS(urProgramGetInfo(program, UR_PROGRAM_INFO_BINARIES, 0, - nullptr, &binary_size)); + ASSERT_SUCCESS(urProgramGetInfo(program, UR_PROGRAM_INFO_BINARY_SIZES, + sizeof(binary_size), &binary_size, + nullptr)); binary.resize(binary_size); + uint8_t *binary_ptr = binary.data(); ASSERT_SUCCESS(urProgramGetInfo(program, UR_PROGRAM_INFO_BINARIES, - binary_size, binary.data(), nullptr)); + sizeof(binary_ptr), &binary_ptr, + nullptr)); } void TearDown() override { diff --git a/test/conformance/program/urProgramLink.cpp b/test/conformance/program/urProgramLink.cpp index 14bb9ef864..72e2678df1 100644 --- a/test/conformance/program/urProgramLink.cpp +++ b/test/conformance/program/urProgramLink.cpp @@ -9,62 +9,48 @@ struct urProgramLinkTest : uur::urProgramTest { void SetUp() override { UUR_RETURN_ON_FATAL_FAILURE(urProgramTest::SetUp()); ASSERT_SUCCESS(urProgramCompile(context, program, nullptr)); - programs.push_back(program); - - uur::KernelsEnvironment::instance->LoadSource("bar", 0, bar_binary); - ASSERT_SUCCESS(urProgramCreateWithIL(context, bar_binary->data(), - bar_binary->size(), nullptr, - &bar_program)); - ASSERT_SUCCESS(urProgramCompile(context, bar_program, nullptr)); - programs.push_back(bar_program); } void TearDown() override { - if (bar_program) { - EXPECT_SUCCESS(urProgramRelease(bar_program)); - } if (linked_program) { EXPECT_SUCCESS(urProgramRelease(linked_program)); } UUR_RETURN_ON_FATAL_FAILURE(urProgramTest::TearDown()); } - ur_program_handle_t bar_program = nullptr; ur_program_handle_t linked_program = nullptr; - std::shared_ptr> bar_binary; - std::vector programs; }; UUR_INSTANTIATE_KERNEL_TEST_SUITE_P(urProgramLinkTest); TEST_P(urProgramLinkTest, Success) { - ASSERT_SUCCESS(urProgramLink(context, programs.size(), programs.data(), - nullptr, &linked_program)); + ASSERT_SUCCESS( + urProgramLink(context, 1, &program, nullptr, &linked_program)); ur_program_binary_type_t binary_type = UR_PROGRAM_BINARY_TYPE_NONE; ASSERT_SUCCESS(urProgramGetBuildInfo( - program, device, UR_PROGRAM_BUILD_INFO_BINARY_TYPE, sizeof(binary_type), - &binary_type, nullptr)); + linked_program, device, UR_PROGRAM_BUILD_INFO_BINARY_TYPE, + sizeof(binary_type), &binary_type, nullptr)); + ASSERT_EQ(binary_type, UR_PROGRAM_BINARY_TYPE_EXECUTABLE); } TEST_P(urProgramLinkTest, InvalidNullHandleContext) { - ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_NULL_HANDLE, - urProgramLink(nullptr, programs.size(), programs.data(), - nullptr, &linked_program)); + ASSERT_EQ_RESULT( + UR_RESULT_ERROR_INVALID_NULL_HANDLE, + urProgramLink(nullptr, 1, &program, nullptr, &linked_program)); } TEST_P(urProgramLinkTest, InvalidNullPointerProgram) { ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_NULL_POINTER, - urProgramLink(context, programs.size(), programs.data(), - nullptr, nullptr)); + urProgramLink(context, 1, &program, nullptr, nullptr)); } TEST_P(urProgramLinkTest, InvalidNullPointerInputPrograms) { - ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_NULL_POINTER, - urProgramLink(context, programs.size(), nullptr, nullptr, - &linked_program)); + ASSERT_EQ_RESULT( + UR_RESULT_ERROR_INVALID_NULL_POINTER, + urProgramLink(context, 1, nullptr, nullptr, &linked_program)); } TEST_P(urProgramLinkTest, InvalidSizeCount) { ASSERT_EQ_RESULT( UR_RESULT_ERROR_INVALID_SIZE, - urProgramLink(context, 0, programs.data(), nullptr, &linked_program)); + urProgramLink(context, 0, &program, nullptr, &linked_program)); } From 36492ad01acca2cbbef64438f18566d5dd63bf2d Mon Sep 17 00:00:00 2001 From: Aaron Greig Date: Fri, 15 Dec 2023 14:47:23 +0000 Subject: [PATCH 2/3] Update level zero match file --- test/conformance/program/program_adapter_level_zero.match | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/conformance/program/program_adapter_level_zero.match b/test/conformance/program/program_adapter_level_zero.match index 7a1c0d5b8e..5bbdfd554c 100644 --- a/test/conformance/program/program_adapter_level_zero.match +++ b/test/conformance/program/program_adapter_level_zero.match @@ -1 +1,6 @@ -Segmentation fault +urProgramCreateWithNativeHandleTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_ +urProgramCreateWithNativeHandleTest.InvalidNullHandleContext/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_ +urProgramCreateWithNativeHandleTest.InvalidNullPointerProgram/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_ +urProgramGetBuildInfoTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_UR_PROGRAM_BUILD_INFO_STATUS +urProgramGetFunctionPointerTest.InvalidFunctionName/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_ +Aborted From d0d40de3aa6d4c952142fa6313810ae100a1bf02 Mon Sep 17 00:00:00 2001 From: Aaron Greig Date: Fri, 15 Dec 2023 16:55:08 +0000 Subject: [PATCH 3/3] PR feedback and update CL match file. --- test/conformance/program/program_adapter_opencl.match | 7 ------- test/conformance/program/urProgramCreateWithBinary.cpp | 5 +++++ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/test/conformance/program/program_adapter_opencl.match b/test/conformance/program/program_adapter_opencl.match index 716bf27d9d..0d429016ee 100644 --- a/test/conformance/program/program_adapter_opencl.match +++ b/test/conformance/program/program_adapter_opencl.match @@ -1,10 +1,3 @@ -urProgramCreateWithBinaryTest.Success/Intel_R__OpenCL___{{.*}}_ -urProgramCreateWithBinaryTest.InvalidNullHandleContext/Intel_R__OpenCL___{{.*}}_ -urProgramCreateWithBinaryTest.InvalidNullHandleDevice/Intel_R__OpenCL___{{.*}}_ -urProgramCreateWithBinaryTest.InvalidNullPointerBinary/Intel_R__OpenCL___{{.*}}_ -urProgramCreateWithBinaryTest.InvalidNullPointerProgram/Intel_R__OpenCL___{{.*}}_ -urProgramCreateWithBinaryTest.InvalidNullPointerMetadata/Intel_R__OpenCL___{{.*}}_ -urProgramCreateWithBinaryTest.InvalidSizePropertyCount/Intel_R__OpenCL___{{.*}}_ urProgramGetFunctionPointerTest.InvalidFunctionName/Intel_R__OpenCL___{{.*}}_ urProgramGetInfoTest.Success/Intel_R__OpenCL___{{.*}}___UR_PROGRAM_INFO_SOURCE urProgramGetInfoTest.Success/Intel_R__OpenCL___{{.*}}___UR_PROGRAM_INFO_BINARIES diff --git a/test/conformance/program/urProgramCreateWithBinary.cpp b/test/conformance/program/urProgramCreateWithBinary.cpp index fb6c8b128c..3fb6e3a268 100644 --- a/test/conformance/program/urProgramCreateWithBinary.cpp +++ b/test/conformance/program/urProgramCreateWithBinary.cpp @@ -9,6 +9,11 @@ struct urProgramCreateWithBinaryTest : uur::urProgramTest { void SetUp() override { UUR_RETURN_ON_FATAL_FAILURE(urProgramTest::SetUp()); ASSERT_SUCCESS(urProgramBuild(context, program, nullptr)); + size_t binary_sizes_len = 0; + ASSERT_SUCCESS(urProgramGetInfo(program, UR_PROGRAM_INFO_BINARY_SIZES, + 0, nullptr, &binary_sizes_len)); + // We're expecting one binary + ASSERT_EQ(binary_sizes_len / sizeof(size_t), 1); size_t binary_size = 0; ASSERT_SUCCESS(urProgramGetInfo(program, UR_PROGRAM_INFO_BINARY_SIZES, sizeof(binary_size), &binary_size,