From 23fcbb326500e43604f8bbf1d1326005659cab6a Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Wed, 20 Feb 2019 08:41:56 +0100 Subject: [PATCH] WriteMemory support in HardwareContextController Change-Id: Ie63b12fb8fb78a2d68b8ed84c1ebe9d634e9804b Signed-off-by: Dunajski, Bartosz --- runtime/helpers/hardware_context_controller.cpp | 6 ++++++ runtime/helpers/hardware_context_controller.h | 1 + .../aub_command_stream_receiver_1_tests.cpp | 11 +++++++++++ .../aub_command_stream_receiver_2_tests.cpp | 3 +++ 4 files changed, 21 insertions(+) diff --git a/runtime/helpers/hardware_context_controller.cpp b/runtime/helpers/hardware_context_controller.cpp index 6c568121fe..730b13efc5 100644 --- a/runtime/helpers/hardware_context_controller.cpp +++ b/runtime/helpers/hardware_context_controller.cpp @@ -50,6 +50,12 @@ void HardwareContextController::submit(uint64_t batchBufferGpuAddress, const voi } } +void HardwareContextController::writeMemory(uint64_t gfxAddress, const void *memory, size_t size, uint32_t memoryBanks, int hint, size_t pageSize) { + for (auto &hardwareContext : hardwareContexts) { + hardwareContext->writeMemory(gfxAddress, memory, size, memoryBanks, hint, pageSize); + } +} + void HardwareContextController::dumpBufferBIN(uint64_t gfxAddress, size_t size) { hardwareContexts[0]->dumpBufferBIN(gfxAddress, size); } diff --git a/runtime/helpers/hardware_context_controller.h b/runtime/helpers/hardware_context_controller.h index 8d7c53c0d9..e25440178e 100644 --- a/runtime/helpers/hardware_context_controller.h +++ b/runtime/helpers/hardware_context_controller.h @@ -25,6 +25,7 @@ class HardwareContextController { void pollForCompletion(); void expectMemory(uint64_t gfxAddress, const void *srcAddress, size_t length, uint32_t compareOperation); void submit(uint64_t batchBufferGpuAddress, const void *batchBuffer, size_t batchBufferSize, uint32_t memoryBank, uint64_t entryBits); + void writeMemory(uint64_t gfxAddress, const void *memory, size_t size, uint32_t memoryBanks, int hint, size_t pageSize); void dumpBufferBIN(uint64_t gfxAddress, size_t size); void readMemory(uint64_t gfxAddress, void *memory, size_t size, uint32_t memoryBanks, size_t pageSize); diff --git a/unit_tests/command_stream/aub_command_stream_receiver_1_tests.cpp b/unit_tests/command_stream/aub_command_stream_receiver_1_tests.cpp index 7ec98f6e21..4fc6691aae 100644 --- a/unit_tests/command_stream/aub_command_stream_receiver_1_tests.cpp +++ b/unit_tests/command_stream/aub_command_stream_receiver_1_tests.cpp @@ -699,7 +699,10 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenProcess HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenWriteMemoryIsCalledOnBufferAndImageTypeAllocationsThenAllocationsHaveAubWritableSetToFalse) { std::unique_ptr memoryManager(nullptr); + std::unique_ptr> aubCsr(new AUBCommandStreamReceiverHw(*platformDevices[0], "", true, *pDevice->executionEnvironment)); + aubCsr->setupContext(*pDevice->getDefaultEngine().osContext); + memoryManager.reset(aubCsr->createMemoryManager(false, false)); auto gfxAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); @@ -819,6 +822,8 @@ HWTEST_F(AubCommandStreamReceiverTests, givenOsContextWithMultipleDevicesSupport HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenGraphicsAllocationTypeIsntNonAubWritableThenWriteMemoryIsAllowed) { std::unique_ptr memoryManager(nullptr); std::unique_ptr> aubCsr(new AUBCommandStreamReceiverHw(*platformDevices[0], "", true, *pDevice->executionEnvironment)); + aubCsr->setupContext(*pDevice->getDefaultEngine().osContext); + memoryManager.reset(aubCsr->createMemoryManager(false, false)); auto gfxAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); @@ -850,6 +855,7 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenGraphic HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenAllocationDataIsPassedInAllocationViewThenWriteMemoryIsAllowed) { auto aubCsr = std::make_unique>(*platformDevices[0], "", true, *pDevice->executionEnvironment); + aubCsr->setupContext(*pDevice->getDefaultEngine().osContext); size_t size = 100; auto ptr = std::make_unique(size); auto addr = reinterpret_cast(ptr.get()); @@ -1153,11 +1159,14 @@ TEST_F(HardwareContextContainerTests, givenMultipleHwContextWhenSingleMethodIsCa EXPECT_FALSE(mockHwContext1->expectMemoryCalled); EXPECT_FALSE(mockHwContext0->submitCalled); EXPECT_FALSE(mockHwContext1->submitCalled); + EXPECT_FALSE(mockHwContext0->writeMemoryCalled); + EXPECT_FALSE(mockHwContext1->writeMemoryCalled); hwContextContainer.initialize(); hwContextContainer.pollForCompletion(); hwContextContainer.expectMemory(1, reinterpret_cast(0x123), 2, 0); hwContextContainer.submit(1, reinterpret_cast(0x123), 2, 0, 1); + hwContextContainer.writeMemory(1, reinterpret_cast(0x123), 2, 3, 4, 5); EXPECT_TRUE(mockHwContext0->initializeCalled); EXPECT_TRUE(mockHwContext1->initializeCalled); @@ -1167,6 +1176,8 @@ TEST_F(HardwareContextContainerTests, givenMultipleHwContextWhenSingleMethodIsCa EXPECT_TRUE(mockHwContext1->expectMemoryCalled); EXPECT_TRUE(mockHwContext0->submitCalled); EXPECT_TRUE(mockHwContext1->submitCalled); + EXPECT_TRUE(mockHwContext0->writeMemoryCalled); + EXPECT_TRUE(mockHwContext1->writeMemoryCalled); } TEST_F(HardwareContextContainerTests, givenMultipleHwContextWhenSingleMethodIsCalledThenUseFirstContext) { diff --git a/unit_tests/command_stream/aub_command_stream_receiver_2_tests.cpp b/unit_tests/command_stream/aub_command_stream_receiver_2_tests.cpp index ce63097972..d19e1167d7 100644 --- a/unit_tests/command_stream/aub_command_stream_receiver_2_tests.cpp +++ b/unit_tests/command_stream/aub_command_stream_receiver_2_tests.cpp @@ -476,8 +476,11 @@ HWTEST_F(AubCommandStreamReceiverNoHostPtrTests, givenAubCommandStreamReceiverWh ExecutionEnvironment executionEnvironment; auto memoryManager = new OsAgnosticMemoryManagerForImagesWithNoHostPtr(executionEnvironment); executionEnvironment.memoryManager.reset(memoryManager); + auto engineInstance = HwHelper::get(platformDevices[0]->pPlatform->eRenderCoreFamily).getGpgpuEngineInstances()[0]; + OsContext osContext(nullptr, 0, 1, engineInstance, PreemptionMode::Disabled); std::unique_ptr> aubCsr(new AUBCommandStreamReceiverHw(*platformDevices[0], "", true, executionEnvironment)); + aubCsr->setupContext(osContext); cl_image_desc imgDesc = {}; imgDesc.image_width = 512;