diff --git a/runtime/command_queue/command_queue.cpp b/runtime/command_queue/command_queue.cpp index bfb0abbdd4..5ef97986c4 100644 --- a/runtime/command_queue/command_queue.cpp +++ b/runtime/command_queue/command_queue.cpp @@ -578,8 +578,11 @@ bool CommandQueue::queueDependenciesClearRequired() const { } bool CommandQueue::blitEnqueueAllowed(bool queueBlocked, cl_command_type cmdType) { - bool blitAllowed = device->getExecutionEnvironment()->getHardwareInfo()->capabilityTable.blitterOperationsSupported && - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.get(); + bool blitAllowed = device->getExecutionEnvironment()->getHardwareInfo()->capabilityTable.blitterOperationsSupported; + + if (DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.get() != -1) { + blitAllowed &= !!DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.get(); + } bool commandAllowed = (CL_COMMAND_READ_BUFFER == cmdType) || (CL_COMMAND_WRITE_BUFFER == cmdType); diff --git a/runtime/os_interface/debug_variables_base.inl b/runtime/os_interface/debug_variables_base.inl index 0735288b11..3ee2472140 100644 --- a/runtime/os_interface/debug_variables_base.inl +++ b/runtime/os_interface/debug_variables_base.inl @@ -102,8 +102,8 @@ DECLARE_DEBUG_VARIABLE(bool, AddClGlSharing, false, "Add cl-gl extension") DECLARE_DEBUG_VARIABLE(bool, EnablePassInlineData, false, "Enable passing of inline data") DECLARE_DEBUG_VARIABLE(bool, EnableFormatQuery, false, "Enable sharing format querying") DECLARE_DEBUG_VARIABLE(bool, AllowOpenFdOperations, false, "When enabled driver is allowed to call DRM_IOCTL_PRIME_HANDLE_TO_FD.") -DECLARE_DEBUG_VARIABLE(bool, EnableBlitterOperationsForReadWriteBuffers, false, "Use Blitter engine for Read/Write Buffers operations") DECLARE_DEBUG_VARIABLE(bool, EnableFreeMemory, false, "Enable freeMemory in memory manager") +DECLARE_DEBUG_VARIABLE(int32_t, EnableBlitterOperationsForReadWriteBuffers, -1, "Use Blitter engine for Read/Write Buffers operations. -1: default, 0: disabled, 1: enabled") DECLARE_DEBUG_VARIABLE(int32_t, EnableCacheFlushAfterWalker, -1, "-1: platform behavior, 0: disabled, 1: enabled. Adds dedicated cache flush command after WALKER command when surfaces used by kernel require to flush the cache") DECLARE_DEBUG_VARIABLE(int32_t, EnableLocalMemory, -1, "-1: default behavior, 0: disabled, 1: enabled, Allows allocating graphics memory in Local Memory") DECLARE_DEBUG_VARIABLE(int32_t, EnableStatelessToStatefulBufferOffsetOpt, -1, "-1: dont override, 0: disable, 1: enable, Enables buffer-offset improvement of the stateless to stateful optimization") diff --git a/unit_tests/mem_obj/buffer_tests.cpp b/unit_tests/mem_obj/buffer_tests.cpp index 48da1eaf03..1860037e62 100644 --- a/unit_tests/mem_obj/buffer_tests.cpp +++ b/unit_tests/mem_obj/buffer_tests.cpp @@ -665,7 +665,7 @@ struct BcsBufferTests : public ::testing::Test { GTEST_SKIP(); } DebugManager.flags.EnableTimestampPacket.set(1); - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(true); + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(1); device.reset(MockDevice::createWithNewExecutionEnvironment(nullptr)); auto &capabilityTable = device->getExecutionEnvironment()->getMutableHardwareInfo()->capabilityTable; bool createBcsEngine = !capabilityTable.blitterOperationsSupported; @@ -699,31 +699,31 @@ HWTEST_F(BcsBufferTests, givenBufferWithInitializationDataAndBcsCsrWhenCreatingT } HWTEST_F(BcsBufferTests, givenBcsSupportedWhenEnqueueReadWriteBufferIsCalledThenUseBcsCsr) { - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(false); + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(0); auto bcsCsr = static_cast *>(commandQueue->getBcsCommandStreamReceiver()); auto bufferForBlt = clUniquePtr(Buffer::create(bcsMockContext.get(), CL_MEM_READ_WRITE, 1, nullptr, retVal)); bufferForBlt->forceDisallowCPUCopy = true; auto *hwInfo = device->getExecutionEnvironment()->getMutableHardwareInfo(); - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(false); + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(0); hwInfo->capabilityTable.blitterOperationsSupported = false; commandQueue->enqueueWriteBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); commandQueue->enqueueReadBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(true); + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(1); hwInfo->capabilityTable.blitterOperationsSupported = false; commandQueue->enqueueWriteBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); commandQueue->enqueueReadBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(false); + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(0); hwInfo->capabilityTable.blitterOperationsSupported = true; commandQueue->enqueueWriteBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); commandQueue->enqueueReadBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); EXPECT_EQ(0u, bcsCsr->blitBufferCalled); - DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(true); + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(1); hwInfo->capabilityTable.blitterOperationsSupported = true; commandQueue->enqueueWriteBuffer(bufferForBlt.get(), CL_TRUE, 0, 1, &hostPtr, nullptr, 0, nullptr, nullptr); EXPECT_EQ(1u, bcsCsr->blitBufferCalled); diff --git a/unit_tests/scenarios/windows/enqueue_read_write_buffer_scenarios_windows_tests.cpp b/unit_tests/scenarios/windows/enqueue_read_write_buffer_scenarios_windows_tests.cpp index 7441c8e276..b845f84aba 100644 --- a/unit_tests/scenarios/windows/enqueue_read_write_buffer_scenarios_windows_tests.cpp +++ b/unit_tests/scenarios/windows/enqueue_read_write_buffer_scenarios_windows_tests.cpp @@ -5,6 +5,7 @@ * */ +#include "core/unit_tests/helpers/debug_manager_state_restore.h" #include "runtime/memory_manager/internal_allocation_storage.h" #include "runtime/os_interface/windows/os_interface.h" #include "runtime/os_interface/windows/wddm_device_command_stream.h" @@ -25,6 +26,7 @@ struct EnqueueBufferWindowsTest : public HardwareParse, } void SetUp() override { + DebugManager.flags.EnableBlitterOperationsForReadWriteBuffers.set(0); executionEnvironment = getExecutionEnvironmentImpl(hwInfo); } @@ -61,6 +63,7 @@ struct EnqueueBufferWindowsTest : public HardwareParse, } protected: + DebugManagerStateRestore restore; HardwareInfo hardwareInfo; HardwareInfo *hwInfo = nullptr; ExecutionEnvironment *executionEnvironment; diff --git a/unit_tests/test_files/igdrcl.config b/unit_tests/test_files/igdrcl.config index dec7ae70da..232d5db4e8 100644 --- a/unit_tests/test_files/igdrcl.config +++ b/unit_tests/test_files/igdrcl.config @@ -111,7 +111,7 @@ DisableDcFlushInEpilogue = 0 OverrideInvalidEngineWithDefault = 0 EnableFormatQuery = 0 AllowOpenFdOperations = 0 -EnableBlitterOperationsForReadWriteBuffers = 0 +EnableBlitterOperationsForReadWriteBuffers = -1 DisableAuxTranslation = 0 EnableFreeMemory = 0 AllocateSharedAllocationsWithCpuAndGpuStorage = 0