From 989651b3977ab7639de3d22bd7c5e20375402b0c Mon Sep 17 00:00:00 2001 From: Bartosz Dunajski Date: Fri, 8 May 2020 12:06:30 +0200 Subject: [PATCH] Bring back page size for PrivateDriverDataSize in wddm queue submit Change-Id: Iad7c623ceed1a6d432df544ceea462569f615c15 Signed-off-by: Bartosz Dunajski --- .../os_interface/windows/wddm23_tests.cpp | 17 ++++++++++++++++- opencl/test/unit_test/test_files/igdrcl.config | 1 + .../debug_settings/debug_variables_base.inl | 1 + .../windows/wddm/wddm_interface.cpp | 6 +++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp index 733d6fe20f..40fc237e29 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp @@ -130,7 +130,7 @@ TEST_F(Wddm23Tests, givenCmdBufferWhenSubmitCalledThenSetAllRequiredFiledsAndUpd EXPECT_EQ(hwQueue.handle, getSubmitCommandToHwQueueDataFcn()->hHwQueue); EXPECT_EQ(osContext->getResidencyController().getMonitoredFence().lastSubmittedFence, getSubmitCommandToHwQueueDataFcn()->HwQueueProgressFenceId); EXPECT_EQ(&cmdBufferHeader, getSubmitCommandToHwQueueDataFcn()->pPrivateDriverData); - EXPECT_EQ(static_cast(sizeof(COMMAND_BUFFER_HEADER)), getSubmitCommandToHwQueueDataFcn()->PrivateDriverDataSize); + EXPECT_EQ(static_cast(MemoryConstants::pageSize), getSubmitCommandToHwQueueDataFcn()->PrivateDriverDataSize); EXPECT_EQ(0u, cmdBufferHeader.MonitorFenceVA); EXPECT_EQ(0u, cmdBufferHeader.MonitorFenceValue); @@ -138,6 +138,21 @@ TEST_F(Wddm23Tests, givenCmdBufferWhenSubmitCalledThenSetAllRequiredFiledsAndUpd EXPECT_EQ(1u, osContext->getResidencyController().getMonitoredFence().lastSubmittedFence); } +TEST_F(Wddm23Tests, givenDebugVariableSetWhenSubmitCalledThenUseCmdBufferHeaderSizeForPrivateDriverDataSize) { + DebugManagerStateRestore restore; + DebugManager.flags.UseCommandBufferHeaderSizeForWddmQueueSubmission.set(true); + + COMMAND_BUFFER_HEADER cmdBufferHeader = {}; + + WddmSubmitArguments submitArgs = {}; + submitArgs.contextHandle = osContext->getWddmContextHandle(); + submitArgs.hwQueueHandle = osContext->getHwQueue().handle; + submitArgs.monitorFence = &osContext->getResidencyController().getMonitoredFence(); + wddm->submit(123, 456, &cmdBufferHeader, submitArgs); + + EXPECT_EQ(static_cast(sizeof(COMMAND_BUFFER_HEADER)), getSubmitCommandToHwQueueDataFcn()->PrivateDriverDataSize); +} + TEST_F(Wddm23Tests, whenMonitoredFenceIsCreatedThenSetupAllRequiredFields) { wddm->wddmInterface->createMonitoredFence(*osContext); auto hwQueue = osContext->getHwQueue(); diff --git a/opencl/test/unit_test/test_files/igdrcl.config b/opencl/test/unit_test/test_files/igdrcl.config index 84dba3e956..a4ea7cd77f 100644 --- a/opencl/test/unit_test/test_files/igdrcl.config +++ b/opencl/test/unit_test/test_files/igdrcl.config @@ -160,3 +160,4 @@ MinHwThreadsUnoccupied = 0 LimitBlitterMaxWidth = -1 LimitBlitterMaxHeight = -1 FlushAfterEachBlit = -1 +UseCommandBufferHeaderSizeForWddmQueueSubmission = 0 diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 07dcdb5a57..ea905d2bb4 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -180,3 +180,4 @@ DECLARE_DEBUG_VARIABLE(bool, UseMaxSimdSizeToDeduceMaxWorkgroupSize, false, "Wit DECLARE_DEBUG_VARIABLE(bool, ReturnRawGpuTimestamps, false, "Driver returns raw GPU tiemstamps instead of calculated ones.") DECLARE_DEBUG_VARIABLE(bool, ForcePerDssBackedBufferProgramming, false, "Always program per-DSS memory backed buffer in preamble") DECLARE_DEBUG_VARIABLE(bool, DisableAtomicForPostSyncs, false, "When enabled, post syncs are not tracked with atomics") +DECLARE_DEBUG_VARIABLE(bool, UseCommandBufferHeaderSizeForWddmQueueSubmission, false, "Default: Page size (4096). Use sizeof(COMMAND_BUFFER_HEADER) if true.") diff --git a/shared/source/os_interface/windows/wddm/wddm_interface.cpp b/shared/source/os_interface/windows/wddm/wddm_interface.cpp index 6eb3678c0b..fc678fe41b 100644 --- a/shared/source/os_interface/windows/wddm/wddm_interface.cpp +++ b/shared/source/os_interface/windows/wddm/wddm_interface.cpp @@ -139,7 +139,11 @@ bool WddmInterface23::submit(uint64_t commandBuffer, size_t size, void *commandH submitCommand.CommandLength = static_cast(size); submitCommand.pPrivateDriverData = commandHeader; - submitCommand.PrivateDriverDataSize = sizeof(COMMAND_BUFFER_HEADER); + submitCommand.PrivateDriverDataSize = MemoryConstants::pageSize; + + if (DebugManager.flags.UseCommandBufferHeaderSizeForWddmQueueSubmission.get()) { + submitCommand.PrivateDriverDataSize = sizeof(COMMAND_BUFFER_HEADER); + } auto status = wddm.getGdi()->submitCommandToHwQueue(&submitCommand); UNRECOVERABLE_IF(status != STATUS_SUCCESS);