From d18d58d4f71b8765a559d365ce378db37db597ee Mon Sep 17 00:00:00 2001 From: Kamil Kopryk Date: Wed, 11 Sep 2024 22:50:14 +0000 Subject: [PATCH] test: correct expectations in ults if heapless enabled Related-To: NEO-10681 Signed-off-by: Kamil Kopryk --- .../enqueue_read_buffer_tests.cpp | 12 ++++++- .../test/unit_test/linux/main_linux_dll.cpp | 34 ++++++++++++++++--- .../linux/drm_memory_manager_fixture.cpp | 14 +++++++- .../direct_submission_tests_1.cpp | 17 +++++++--- .../direct_submission_tests_2.cpp | 16 +++++---- .../fixtures/direct_submission_fixture.h | 8 ++++- ...rm_command_stream_xehp_and_later_tests.cpp | 14 +++++--- .../windows/device_command_stream_tests.cpp | 6 +++- 8 files changed, 99 insertions(+), 22 deletions(-) diff --git a/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp index 25d8418a99..65a7d40bcc 100644 --- a/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp @@ -174,8 +174,18 @@ HWTEST_F(EnqueueReadBufferTypeTest, WhenReadingBufferThenIndirectDataIsAdded) { auto kernel = multiDispatchInfo.begin()->getKernel(); auto kernelDescriptor = &kernel->getKernelInfo().kernelDescriptor; + auto crossThreadDatSize = kernel->getCrossThreadDataSize(); + auto inlineDataSize = UnitTestHelper::getInlineDataSize(pCmdQ->getHeaplessModeEnabled()); + bool crossThreadDataFitsInInlineData = (crossThreadDatSize <= inlineDataSize); + EXPECT_TRUE(UnitTestHelper::evaluateDshUsage(dshBefore, pDSH->getUsed(), kernelDescriptor, rootDeviceIndex)); - EXPECT_NE(iohBefore, pIOH->getUsed()); + + if (crossThreadDataFitsInInlineData) { + EXPECT_EQ(iohBefore, pIOH->getUsed()); + } else { + EXPECT_NE(iohBefore, pIOH->getUsed()); + } + if (kernel->usesBindfulAddressingForBuffers()) { EXPECT_NE(sshBefore, pSSH->getUsed()); } diff --git a/opencl/test/unit_test/linux/main_linux_dll.cpp b/opencl/test/unit_test/linux/main_linux_dll.cpp index a27cddf19d..17d4936e76 100644 --- a/opencl/test/unit_test/linux/main_linux_dll.cpp +++ b/opencl/test/unit_test/linux/main_linux_dll.cpp @@ -694,21 +694,40 @@ TEST_F(DrmTests, whenDrmIsCreatedWithMultipleSubDevicesThenCreateMultipleVirtual TEST_F(DrmTests, givenDebuggingEnabledWhenDrmIsCreatedThenPerContextVMIsTrueGetVirtualMemoryAddressSpaceReturnsZeroAndVMsAreNotCreated) { DebugManagerStateRestore restore; + debugManager.flags.CreateMultipleSubDevices.set(2); debugManager.flags.UseVmBind.set(1); mockExecutionEnvironment.setDebuggingMode(NEO::DebuggingMode::online); auto drm = DrmWrap::createDrm(*mockRootDeviceEnvironment); + auto &compilerProductHelper = drm->getRootDeviceEnvironment().getHelper(); + + bool heapless = compilerProductHelper.isHeaplessModeEnabled(); + ASSERT_NE(drm, nullptr); if (drm->isVmBindAvailable()) { - EXPECT_TRUE(drm->isPerContextVMRequired()); + if (heapless) { + EXPECT_FALSE(drm->isPerContextVMRequired()); + } else { + EXPECT_TRUE(drm->isPerContextVMRequired()); + } auto numSubDevices = GfxCoreHelper::getSubDevicesCount(mockRootDeviceEnvironment->getHardwareInfo()); for (auto id = 0u; id < numSubDevices; id++) { - EXPECT_EQ(0u, drm->getVirtualMemoryAddressSpace(id)); + if (heapless) { + EXPECT_EQ(id + 1, drm->getVirtualMemoryAddressSpace(id)); + + } else { + EXPECT_EQ(0u, drm->getVirtualMemoryAddressSpace(id)); + } + } + if (heapless) { + EXPECT_EQ(2u, static_cast(drm.get())->virtualMemoryIds.size()); + + } else { + EXPECT_EQ(0u, static_cast(drm.get())->virtualMemoryIds.size()); } - EXPECT_EQ(0u, static_cast(drm.get())->virtualMemoryIds.size()); } } @@ -743,7 +762,14 @@ TEST_F(DrmTests, givenEnabledDebuggingAndVmBindNotAvailableWhenDrmIsCreatedThenP ::testing::internal::GetCapturedStdout(); std::string errStr = ::testing::internal::GetCapturedStderr(); - EXPECT_TRUE(hasSubstr(errStr, std::string("WARNING: Debugging not supported\n"))); + auto &compilerProductHelper = drm->getRootDeviceEnvironment().getHelper(); + bool heapless = compilerProductHelper.isHeaplessModeEnabled(); + if (heapless) { + EXPECT_FALSE(hasSubstr(errStr, std::string("WARNING: Debugging not supported\n"))); + + } else { + EXPECT_TRUE(hasSubstr(errStr, std::string("WARNING: Debugging not supported\n"))); + } } TEST_F(DrmTests, givenEnabledDebuggingAndHeaplessModeWhenDrmIsCreatedThenPerContextVMIsFalse) { diff --git a/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp b/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp index 50d01081b8..8861da73be 100644 --- a/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp +++ b/shared/test/common/os_interface/linux/drm_memory_manager_fixture.cpp @@ -10,6 +10,7 @@ #include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/os_interface/linux/drm_memory_operations_handler.h" #include "shared/source/os_interface/linux/i915.h" +#include "shared/test/common/helpers/unit_test_helper.h" #include "shared/test/common/mocks/linux/mock_drm_command_stream_receiver.h" #include "shared/test/common/mocks/linux/mock_drm_memory_manager.h" #include "shared/test/common/mocks/mock_builtins.h" @@ -25,11 +26,15 @@ void DrmMemoryManagerBasic::SetUp() { for (auto i = 0u; i < numRootDevices; i++) { executionEnvironment.rootDeviceEnvironments[i]->setHwInfoAndInitHelpers(defaultHwInfo.get()); executionEnvironment.rootDeviceEnvironments[i]->osInterface = std::make_unique(); + UnitTestSetter::setCcsExposure(*executionEnvironment.rootDeviceEnvironments[i]); + UnitTestSetter::setRcsExposure(*executionEnvironment.rootDeviceEnvironments[i]); + auto drm = Drm::create(nullptr, *executionEnvironment.rootDeviceEnvironments[i]); executionEnvironment.rootDeviceEnvironments[i]->osInterface->setDriverModel(std::unique_ptr(drm)); executionEnvironment.rootDeviceEnvironments[i]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*drm, i, false); executionEnvironment.rootDeviceEnvironments[i]->initGmm(); } + executionEnvironment.calculateMaxOsContextCount(); } void DrmMemoryManagerFixture::setUp() { @@ -51,6 +56,9 @@ void DrmMemoryManagerFixture::setUp(DrmMockCustom *mock, bool localMemoryEnabled for (auto i = 0u; i < numRootDevices; i++) { auto rootDeviceEnvironment = executionEnvironment->rootDeviceEnvironments[i].get(); rootDeviceEnvironment->setHwInfoAndInitHelpers(defaultHwInfo.get()); + UnitTestSetter::setCcsExposure(*executionEnvironment->rootDeviceEnvironments[i]); + UnitTestSetter::setRcsExposure(*executionEnvironment->rootDeviceEnvironments[i]); + rootDeviceEnvironment->osInterface = std::make_unique(); rootDeviceEnvironment->osInterface->setDriverModel(DrmMockCustom::create(*rootDeviceEnvironment)); rootDeviceEnvironment->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*rootDeviceEnvironment->osInterface->getDriverModel()->as(), i, false); @@ -58,6 +66,7 @@ void DrmMemoryManagerFixture::setUp(DrmMockCustom *mock, bool localMemoryEnabled rootDeviceEnvironment->initGmm(); } + executionEnvironment->calculateMaxOsContextCount(); rootDeviceEnvironment = executionEnvironment->rootDeviceEnvironments[rootDeviceIndex].get(); rootDeviceEnvironment->osInterface->setDriverModel(std::unique_ptr(mock)); @@ -118,10 +127,13 @@ void DrmMemoryManagerFixture::tearDown() { void DrmMemoryManagerWithLocalMemoryFixture::setUp() { backup = std::make_unique>(&ultHwConfig); - ultHwConfig.csrBaseCallCreatePreemption = false; + ultHwConfig.csrBaseCallCreatePreemption = true; MemoryManagementFixture::setUp(); + executionEnvironment = MockDevice::prepareExecutionEnvironment(defaultHwInfo.get(), numRootDevices - 1); + + executionEnvironment->calculateMaxOsContextCount(); auto drmMock = DrmMockCustom::create(*executionEnvironment->rootDeviceEnvironments[1]).release(); drmMock->memoryInfo.reset(new MockMemoryInfo{*drmMock}); DrmMemoryManagerFixture::setUp(drmMock, true); diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp index 208d9476c6..cc1906af3a 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp @@ -10,6 +10,7 @@ #include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/direct_submission/dispatchers/render_dispatcher.h" #include "shared/source/direct_submission/relaxed_ordering_helper.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/flush_stamp.h" #include "shared/source/helpers/gfx_core_helper.h" #include "shared/source/utilities/cpu_info.h" @@ -848,6 +849,8 @@ HWTEST_F(DirectSubmissionTest, if (NEO::directSubmissionDiagnosticAvailable) { GTEST_SKIP(); } + auto &compilerProductHelper = pDevice->getCompilerProductHelper(); + auto heaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled()); DebugManagerStateRestore restore; debugManager.flags.DirectSubmissionEnableDebugBuffer.set(1); @@ -874,7 +877,7 @@ HWTEST_F(DirectSubmissionTest, EXPECT_EQ(0u, NEO::IoFunctions::mockFcloseCalled); size_t expectedSize = Dispatcher::getSizePreemption() + directSubmission.getSizeSemaphoreSection(false); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { expectedSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -927,6 +930,9 @@ HWTEST_F(DirectSubmissionTest, GTEST_SKIP(); } + auto &compilerProductHelper = pDevice->getCompilerProductHelper(); + auto heaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled()); + uint32_t execCount = 5u; DebugManagerStateRestore restore; debugManager.flags.DirectSubmissionEnableDebugBuffer.set(1); @@ -953,7 +959,7 @@ HWTEST_F(DirectSubmissionTest, directSubmission.getDiagnosticModeSection(); expectedSize += expectedExecCount * (directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler()); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { expectedSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -996,7 +1002,7 @@ HWTEST_F(DirectSubmissionTest, } size_t cmdOffset = 0; - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { cmdOffset = directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -1033,6 +1039,9 @@ HWTEST_F(DirectSubmissionTest, GTEST_SKIP(); } + auto &compilerProductHelper = pDevice->getCompilerProductHelper(); + auto heaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled()); + DebugManagerStateRestore restore; debugManager.flags.DirectSubmissionEnableDebugBuffer.set(2); debugManager.flags.DirectSubmissionDisableCacheFlush.set(true); @@ -1059,7 +1068,7 @@ HWTEST_F(DirectSubmissionTest, EXPECT_EQ(expectedDispatch, directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler()); expectedSize += expectedExecCount * expectedDispatch; - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { expectedSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp index 79bd62728b..42ac528096 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp @@ -199,6 +199,10 @@ HWTEST_F(DirectSubmissionDispatchMiMemFenceTest, givenDebugFlagSetToTrueWhenCrea DebugManagerStateRestore restorer; debugManager.flags.DirectSubmissionInsertExtraMiMemFenceCommands.set(1); + if (heaplessStateInit) { + GTEST_SKIP(); + } + MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); EXPECT_TRUE(directSubmission.miMemFenceRequired); @@ -246,7 +250,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest, directSubmission.getSizeSemaphoreSection(false) + sizeof(MI_LOAD_REGISTER_IMM) + sizeof(MI_LOAD_REGISTER_MEM); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { submitSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -629,7 +633,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.submitCount); size_t submitSize = RenderDispatcher::getSizePreemption() + directSubmission.getSizeSemaphoreSection(false); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { submitSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -683,7 +687,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.handleResidencyCount); size_t submitSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { submitSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -709,7 +713,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.submitCount); size_t submitSize = RenderDispatcher::getSizePreemption() + directSubmission.getSizeSemaphoreSection(false); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { submitSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -760,7 +764,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.handleResidencyCount); size_t submitSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { submitSize += directSubmission.getSizeSystemMemoryFenceAddress(); } if (directSubmission.isRelaxedOrderingEnabled()) { @@ -853,7 +857,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest, directSubmission.getSizeSemaphoreSection(false) + sizeof(MI_LOAD_REGISTER_IMM) + sizeof(MI_LOAD_REGISTER_MEM); - if (directSubmission.miMemFenceRequired) { + if (directSubmission.miMemFenceRequired && !heaplessStateInit) { submitSize += directSubmission.getSizeSystemMemoryFenceAddress(); } diff --git a/shared/test/unit_test/fixtures/direct_submission_fixture.h b/shared/test/unit_test/fixtures/direct_submission_fixture.h index be6a233c5b..f20070b980 100644 --- a/shared/test/unit_test/fixtures/direct_submission_fixture.h +++ b/shared/test/unit_test/fixtures/direct_submission_fixture.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2023 Intel Corporation + * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -8,6 +8,7 @@ #pragma once #include "shared/source/command_stream/submissions_aggregator.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/memory_manager/allocation_properties.h" #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/device_factory.h" @@ -52,6 +53,9 @@ struct DirectSubmissionDispatchBufferFixture : public DirectSubmissionFixture { batchBuffer.usedSize = 0x40; batchBuffer.taskStartAddress = 0x881112340000; batchBuffer.stream = stream.get(); + + auto &compilerProductHelper = pDevice->getCompilerProductHelper(); + heaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled()); } void tearDown() { @@ -66,4 +70,6 @@ struct DirectSubmissionDispatchBufferFixture : public DirectSubmissionFixture { GraphicsAllocation *commandBuffer; DebugManagerStateRestore restorer; std::unique_ptr stream; + + bool heaplessStateInit = false; }; diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp index 4261e4789c..2fe315b449 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_tests.cpp @@ -8,6 +8,7 @@ #include "shared/source/command_container/command_encoder.h" #include "shared/source/command_stream/tag_allocation_layout.h" #include "shared/source/execution_environment/root_device_environment.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/os_interface/linux/drm_command_stream.h" #include "shared/source/os_interface/linux/drm_memory_manager.h" #include "shared/source/os_interface/linux/drm_memory_operations_handler.h" @@ -129,21 +130,26 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DrmCommandStreamMultiTileMemExecTest, GivenDrmSuppo mock->isVmBindAvailableCall.callParent = false; mock->isVmBindAvailableCall.returnValue = true; + auto &compilerProductHelper = device->getCompilerProductHelper(); + auto heapless = compilerProductHelper.isHeaplessModeEnabled(); + auto heaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(heapless); + auto allocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{0, 1024, AllocationType::commandBuffer}); - allocation->updateTaskCount(2, defaultEngine.osContext->getContextId()); + allocation->updateTaskCount(heaplessStateInit ? 3 : 2, defaultEngine.osContext->getContextId()); volatile TagAddressType *completionAddress = defaultEngine.commandStreamReceiver->getTagAddress(); completionAddress += (TagAllocationLayout::completionFenceOffset / sizeof(TagAddressType)); - *completionAddress = 1; + *completionAddress = heaplessStateInit ? 2 : 1; + completionAddress += (postSyncOffset / sizeof(TagAddressType)); - *completionAddress = 1; + *completionAddress = heaplessStateInit ? 2 : 1; memoryManager->handleFenceCompletion(allocation); uint64_t expectedAddress = castToUint64(const_cast(defaultEngine.commandStreamReceiver->getTagAddress())) + TagAllocationLayout::completionFenceOffset + postSyncOffset; - constexpr uint64_t expectedValue = 2; + uint64_t expectedValue = heaplessStateInit ? 3 : 2; EXPECT_EQ(2u, mock->waitUserFenceCall.called); EXPECT_EQ(expectedAddress, mock->waitUserFenceCall.address); diff --git a/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp b/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp index 9f5fa91c78..1e8e7e7d23 100644 --- a/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp @@ -9,6 +9,7 @@ #include "shared/source/command_stream/preemption.h" #include "shared/source/direct_submission/direct_submission_controller.h" #include "shared/source/direct_submission/relaxed_ordering_helper.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/gfx_core_helper.h" #include "shared/source/helpers/windows/gmm_callbacks.h" #include "shared/source/indirect_heap/indirect_heap.h" @@ -1329,7 +1330,10 @@ HWTEST_TEMPLATED_F(WddmCommandStreamMockGdiTest, givenDirectSubmissionEnabledOnB Dispatcher::getSizePreemption() + directSubmission->getSizeDispatch(false, false, directSubmission->dispatchMonitorFenceRequired(false)); - if (directSubmission->miMemFenceRequired) { + auto &compilerProductHelper = device->getCompilerProductHelper(); + auto heaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled()); + + if (directSubmission->miMemFenceRequired && !heaplessStateInit) { expectedSize += directSubmission->getSizeSystemMemoryFenceAddress(); } if (directSubmission->isRelaxedOrderingEnabled()) {