From 744ff08454d192af9f1a15e23dcd2c7f31f46ff6 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Tue, 1 Apr 2025 09:15:15 +0000 Subject: [PATCH] test: correct verifying programmed GPU addresses use memcmp instead of comparing dereferenced pointer when address is programmed within Walker's inline data the memory location address is 4B aligned and is not 8B aligned Signed-off-by: Mateusz Jablonski --- .../command_queue/enqueue_copy_buffer_tests.cpp | 5 +++-- .../command_queue/enqueue_fill_buffer_tests.cpp | 10 ++++++++-- shared/test/common/helpers/gtest_helpers.h | 8 +++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_buffer_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_copy_buffer_tests.cpp index 994831e656..dcadd5a249 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_buffer_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_copy_buffer_tests.cpp @@ -11,6 +11,7 @@ #include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/ptr_math.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" +#include "shared/test/common/helpers/gtest_helpers.h" #include "shared/test/common/helpers/unit_test_helper.h" #include "shared/test/common/libult/ult_command_stream_receiver.h" #include "shared/test/common/test_macros/test.h" @@ -419,7 +420,7 @@ HWTEST_F(EnqueueCopyBufferTest, WhenCopyingBufferThenArgumentZeroMatchesSourceAd // Determine where the argument is auto pArgument = (void **)getStatelessArgumentPointer(kernel->getKernelInfo(), 0u, pCmdQ->getIndirectHeap(IndirectHeap::Type::indirectObject, 0), rootDeviceIndex); if (pArgument) { - EXPECT_EQ(addrToPtr(ptrOffset(srcBuffer->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), srcBuffer->getOffset())), *pArgument); + EXPECT_TRUE(memoryEqualsPointer(pArgument, static_cast(ptrOffset(srcBuffer->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), srcBuffer->getOffset())))); } } @@ -449,7 +450,7 @@ HWTEST_F(EnqueueCopyBufferTest, WhenCopyingBufferThenArgumentOneMatchesDestinati // Determine where the argument is auto pArgument = (void **)getStatelessArgumentPointer(kernel->getKernelInfo(), 1u, pCmdQ->getIndirectHeap(IndirectHeap::Type::indirectObject, 0), rootDeviceIndex); if (pArgument) { - EXPECT_EQ(addrToPtr(ptrOffset(dstBuffer->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), dstBuffer->getOffset())), *pArgument); + EXPECT_TRUE(memoryEqualsPointer(pArgument, static_cast(ptrOffset(dstBuffer->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), dstBuffer->getOffset())))); } } diff --git a/opencl/test/unit_test/command_queue/enqueue_fill_buffer_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_fill_buffer_tests.cpp index 9d3e64b966..075af7bf04 100644 --- a/opencl/test/unit_test/command_queue/enqueue_fill_buffer_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_fill_buffer_tests.cpp @@ -14,6 +14,7 @@ #include "shared/source/memory_manager/internal_allocation_storage.h" #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/os_context.h" +#include "shared/test/common/helpers/gtest_helpers.h" #include "shared/test/common/helpers/unit_test_helper.h" #include "shared/test/common/libult/ult_command_stream_receiver.h" #include "shared/test/common/mocks/mock_allocation_properties.h" @@ -319,7 +320,9 @@ HWTEST_F(EnqueueFillBufferCmdTests, WhenFillingBufferThenArgumentZeroShouldMatch // Determine where the argument is auto pArgument = (void **)getStatelessArgumentPointer(kernel->getKernelInfo(), 0u, pCmdQ->getIndirectHeap(IndirectHeap::Type::indirectObject, 0), rootDeviceIndex); - EXPECT_EQ(addrToPtr(ptrOffset(buffer->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), buffer->getOffset())), *pArgument); + if (pArgument) { + EXPECT_TRUE(memoryEqualsPointer(pArgument, static_cast(ptrOffset(buffer->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), buffer->getOffset())))); + } context.getMemoryManager()->freeGraphicsMemory(patternAllocation); } @@ -351,7 +354,10 @@ HWTEST_F(EnqueueFillBufferCmdTests, WhenFillingBufferThenArgumentTwoShouldMatchP // Determine where the argument is auto pArgument = (void **)getStatelessArgumentPointer(kernel->getKernelInfo(), 2u, pCmdQ->getIndirectHeap(IndirectHeap::Type::indirectObject, 0), rootDeviceIndex); - EXPECT_NE(nullptr, *pArgument); + + if (pArgument) { + EXPECT_FALSE(memoryZeroed(pArgument, sizeof(void *))); + } context.getMemoryManager()->freeGraphicsMemory(patternAllocation); } diff --git a/shared/test/common/helpers/gtest_helpers.h b/shared/test/common/helpers/gtest_helpers.h index 815d6d921e..bde06c534d 100644 --- a/shared/test/common/helpers/gtest_helpers.h +++ b/shared/test/common/helpers/gtest_helpers.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -52,6 +53,11 @@ inline bool memoryZeroed(const void *mem, const size_t size) { return memoryZeroed; } +inline bool memoryEqualsPointer(const void *mem, const uintptr_t expectedPointer) { + auto ptrToExpectedPointer = &expectedPointer; + return 0 == memcmp(mem, ptrToExpectedPointer, sizeof(uintptr_t)); +} + inline bool hasSubstr(const std::string &str, const std::string &subStr) { return std::string::npos != str.find(subStr); }