mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-07 12:42:54 +08:00
Create single point for selecting engine for builtin ops
- selectCsrForBuiltinOperation selects proper CSR - selected CSR is passed to dispatchBcsOrGpgpuEnqueue - Notifications such as notifyEnqueueReadBuffer are now made on correct engine - Temporary allocs for hostptrs are now created on gpgpuCsr Related-To: NEO-6057 Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
e96f1afa6f
commit
a03b5f8a95
@@ -87,6 +87,7 @@ struct BlitEnqueueTests : public ::testing::Test {
|
||||
auto &capabilityTable = device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable;
|
||||
bool createBcsEngine = !capabilityTable.blitterOperationsSupported;
|
||||
capabilityTable.blitterOperationsSupported = true;
|
||||
REQUIRE_BLITTER_OR_SKIP(&device->getHardwareInfo());
|
||||
|
||||
if (createBcsEngine) {
|
||||
auto &engine = device->getEngine(getChosenEngineType(device->getHardwareInfo()), EngineUsage::LowPriority);
|
||||
|
||||
@@ -197,7 +197,7 @@ HWTEST_F(CommandQueueHwTest, GivenCommandQueueWhenProcessDispatchForMarkerCalled
|
||||
MockCommandStreamReceiverWithFailingFlushBatchedSubmission csr(*pDevice->getExecutionEnvironment(), 0, pDevice->getDeviceBitfield());
|
||||
auto myCmdQ = std::make_unique<MockCommandQueueHwWithOverwrittenCsr<FamilyType>>(pCmdQ->getContextPtr(), pClDevice, nullptr, false);
|
||||
myCmdQ->csr = &csr;
|
||||
csr.osContext = &pCmdQ->getCommandStreamReceiver(false).getOsContext();
|
||||
csr.osContext = &pCmdQ->getGpgpuCommandStreamReceiver().getOsContext();
|
||||
std::unique_ptr<Event> event(new Event(myCmdQ.get(), CL_COMMAND_COPY_BUFFER, 0, 0));
|
||||
ASSERT_NE(nullptr, event);
|
||||
|
||||
|
||||
@@ -228,7 +228,46 @@ TEST(CommandQueue, givenDeviceWhenCreatingCommandQueueThenPickCsrFromDefaultEngi
|
||||
EXPECT_EQ(defaultCsr, &cmdQ.getGpgpuCommandStreamReceiver());
|
||||
}
|
||||
|
||||
struct CommandQueueWithBlitOperationsTests : public ::testing::TestWithParam<uint32_t> {};
|
||||
struct BuiltinOpParamsFixture {
|
||||
BuiltinOpParams createParams(cl_command_type cmdType) {
|
||||
BuiltinOpParams params{};
|
||||
switch (cmdType) {
|
||||
case CL_COMMAND_READ_IMAGE:
|
||||
params.srcMemObj = &correctImage;
|
||||
params.srcOffset = correctOrigin;
|
||||
params.size = correctRegion;
|
||||
break;
|
||||
case CL_COMMAND_WRITE_IMAGE:
|
||||
params.dstMemObj = &correctImage;
|
||||
params.dstOffset = correctOrigin;
|
||||
params.size = correctRegion;
|
||||
break;
|
||||
case CL_COMMAND_COPY_IMAGE:
|
||||
params.srcMemObj = &correctImage;
|
||||
params.dstMemObj = &correctImage;
|
||||
params.srcOffset = correctOrigin;
|
||||
params.dstOffset = correctOrigin;
|
||||
params.size = correctRegion;
|
||||
break;
|
||||
case CL_COMMAND_COPY_BUFFER:
|
||||
params.srcMemObj = &correctBuffer;
|
||||
params.dstMemObj = &correctBuffer;
|
||||
break;
|
||||
case CL_COMMAND_SVM_MEMCPY:
|
||||
params.srcSvmAlloc = correctBuffer.getGraphicsAllocation(0);
|
||||
params.dstSvmAlloc = correctBuffer.getGraphicsAllocation(0);
|
||||
break;
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
size_t correctRegion[3] = {10u, 10u, 0};
|
||||
size_t correctOrigin[3] = {1u, 1u, 0};
|
||||
MockImageBase correctImage = {};
|
||||
MockBuffer correctBuffer = {};
|
||||
};
|
||||
|
||||
struct CommandQueueWithBlitOperationsTests : public ::testing::TestWithParam<uint32_t>, BuiltinOpParamsFixture {};
|
||||
|
||||
TEST_P(CommandQueueWithBlitOperationsTests, givenDeviceNotSupportingBlitOperationsWhenQueueIsCreatedThenDontRegisterBcsCsr) {
|
||||
HardwareInfo hwInfo = *defaultHwInfo;
|
||||
@@ -242,8 +281,9 @@ TEST_P(CommandQueueWithBlitOperationsTests, givenDeviceNotSupportingBlitOperatio
|
||||
auto defaultCsr = mockDevice->getDefaultEngine().commandStreamReceiver;
|
||||
EXPECT_EQ(defaultCsr, &cmdQ.getGpgpuCommandStreamReceiver());
|
||||
|
||||
auto blitAllowed = cmdQ.blitEnqueueAllowed(cmdType);
|
||||
EXPECT_EQ(defaultCsr, &cmdQ.getCommandStreamReceiver(blitAllowed));
|
||||
BuiltinOpParams params = createParams(cmdType);
|
||||
MultiDispatchInfo dispatchInfo{params};
|
||||
EXPECT_EQ(defaultCsr, &cmdQ.selectCsrForBuiltinOperation(cmdType, dispatchInfo));
|
||||
}
|
||||
|
||||
HWTEST_P(CommandQueueWithBlitOperationsTests, givenDeviceWithSubDevicesSupportingBlitOperationsWhenQueueIsCreatedThenBcsIsTakenFromFirstSubDevice) {
|
||||
@@ -264,12 +304,13 @@ HWTEST_P(CommandQueueWithBlitOperationsTests, givenDeviceWithSubDevicesSupportin
|
||||
|
||||
MockCommandQueue cmdQ(nullptr, device.get(), 0, false);
|
||||
auto cmdType = GetParam();
|
||||
auto blitAllowed = cmdQ.blitEnqueueAllowed(cmdType);
|
||||
BuiltinOpParams params = createParams(cmdType);
|
||||
MultiDispatchInfo dispatchInfo{params};
|
||||
|
||||
EXPECT_NE(nullptr, cmdQ.getBcsCommandStreamReceiver());
|
||||
EXPECT_EQ(bcsEngine.commandStreamReceiver, cmdQ.getBcsCommandStreamReceiver());
|
||||
EXPECT_EQ(bcsEngine.commandStreamReceiver, &cmdQ.getCommandStreamReceiver(blitAllowed));
|
||||
EXPECT_EQ(bcsEngine.osContext, &cmdQ.getCommandStreamReceiver(blitAllowed).getOsContext());
|
||||
EXPECT_EQ(bcsEngine.commandStreamReceiver, &cmdQ.selectCsrForBuiltinOperation(cmdType, dispatchInfo));
|
||||
EXPECT_EQ(bcsEngine.osContext, &cmdQ.selectCsrForBuiltinOperation(cmdType, dispatchInfo).getOsContext());
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(uint32_t,
|
||||
@@ -1165,13 +1206,18 @@ TEST(CommandQueue, givenCopyOnlyQueueWhenCallingBlitEnqueueAllowedThenReturnTrue
|
||||
|
||||
queue.isCopyOnly = false;
|
||||
EXPECT_EQ(queue.getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled(),
|
||||
queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER));
|
||||
queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER, {}));
|
||||
|
||||
queue.isCopyOnly = true;
|
||||
EXPECT_TRUE(queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER));
|
||||
EXPECT_TRUE(queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER, {}));
|
||||
}
|
||||
|
||||
TEST(CommandQueue, givenClCommandWhenCallingBlitEnqueueAllowedThenReturnCorrectValue) {
|
||||
struct CommandQueueBuiltinTest : BuiltinOpParamsFixture, ::testing::Test {};
|
||||
|
||||
TEST_F(CommandQueueBuiltinTest, givenClCommandWhenCallingBlitEnqueueAllowedThenReturnCorrectValue) {
|
||||
DebugManagerStateRestore restore{};
|
||||
DebugManager.flags.EnableBlitterForEnqueueImageOperations.set(1);
|
||||
|
||||
MockContext context{};
|
||||
|
||||
MockCommandQueue queue(&context, context.getDevice(0), 0, false);
|
||||
@@ -1181,17 +1227,44 @@ TEST(CommandQueue, givenClCommandWhenCallingBlitEnqueueAllowedThenReturnCorrectV
|
||||
|
||||
bool supported = queue.getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled();
|
||||
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_WRITE_BUFFER));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER_RECT));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_WRITE_BUFFER_RECT));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER_RECT));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_SVM_MEMCPY));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_READ_IMAGE));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_WRITE_IMAGE));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE));
|
||||
EXPECT_FALSE(queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE_TO_BUFFER));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_WRITE_BUFFER, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_READ_BUFFER_RECT, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_WRITE_BUFFER_RECT, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER_RECT, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_SVM_MEMCPY, {}));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_READ_IMAGE, createParams(CL_COMMAND_READ_IMAGE)));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_WRITE_IMAGE, createParams(CL_COMMAND_WRITE_IMAGE)));
|
||||
EXPECT_EQ(supported, queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE, createParams(CL_COMMAND_COPY_IMAGE)));
|
||||
EXPECT_FALSE(queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE_TO_BUFFER, {}));
|
||||
}
|
||||
|
||||
TEST_F(CommandQueueBuiltinTest, givenCopyImageCommandWhenCallingBlitEnqueueAllowedThenReturnCorrectValue) {
|
||||
DebugManagerStateRestore restore{};
|
||||
DebugManager.flags.EnableBlitterForEnqueueImageOperations.set(1);
|
||||
|
||||
MockContext context{};
|
||||
|
||||
MockCommandQueue queue(&context, context.getDevice(0), 0, false);
|
||||
if (!queue.bcsEngine) {
|
||||
queue.bcsEngine = &context.getDevice(0)->getDefaultEngine();
|
||||
}
|
||||
if (!queue.getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled()) {
|
||||
GTEST_SKIP();
|
||||
}
|
||||
|
||||
auto builtinOpParams = createParams(CL_COMMAND_COPY_IMAGE);
|
||||
EXPECT_TRUE(queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE, builtinOpParams));
|
||||
|
||||
builtinOpParams.srcOffset[0] = 0x9999;
|
||||
EXPECT_FALSE(queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE, builtinOpParams));
|
||||
|
||||
builtinOpParams.dstOffset[0] = 0x9999;
|
||||
EXPECT_FALSE(queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE, builtinOpParams));
|
||||
|
||||
builtinOpParams.srcOffset = correctOrigin;
|
||||
EXPECT_FALSE(queue.blitEnqueueAllowed(CL_COMMAND_COPY_IMAGE, builtinOpParams));
|
||||
}
|
||||
|
||||
TEST(CommandQueue, givenRegularClCommandWhenCallingBlitEnqueuePreferredThenReturnCorrectValue) {
|
||||
|
||||
@@ -210,13 +210,15 @@ HWTEST_F(EnqueueCopyImageTest, WhenCopyingImageThenNumberOfPipelineSelectsIsOne)
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueCopyImageTest, givenDeviceWithBlitterSupportWhenEnqueueCopyImageThenBlitEnqueueImageAllowedReturnsCorrectResult) {
|
||||
auto hwInfo = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily);
|
||||
REQUIRE_BLITTER_OR_SKIP(hwInfo);
|
||||
|
||||
DebugManagerStateRestore restorer;
|
||||
DebugManager.flags.OverrideInvalidEngineWithDefault.set(1);
|
||||
DebugManager.flags.EnableBlitterForEnqueueOperations.set(1);
|
||||
DebugManager.flags.EnableBlitterForEnqueueImageOperations.set(1);
|
||||
|
||||
auto hwInfo = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily);
|
||||
hwInfo->capabilityTable.blitterOperationsSupported = true;
|
||||
size_t srcOrigin[] = {0, 0, 0};
|
||||
size_t dstOrigin[] = {0, 0, 0};
|
||||
|
||||
@@ -761,14 +761,16 @@ HWTEST_F(EnqueueReadImageTest, GivenImage1DThatIsZeroCopyWhenReadImageWithTheSam
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueReadImageTest, givenDeviceWithBlitterSupportWhenEnqueueReadImageThenBlitEnqueueImageAllowedReturnsCorrectResult) {
|
||||
auto hwInfo = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.blitterOperationsSupported = true;
|
||||
REQUIRE_BLITTER_OR_SKIP(hwInfo);
|
||||
|
||||
DebugManagerStateRestore restorer;
|
||||
DebugManager.flags.OverrideInvalidEngineWithDefault.set(1);
|
||||
DebugManager.flags.EnableBlitterForEnqueueOperations.set(1);
|
||||
DebugManager.flags.EnableBlitterForEnqueueImageOperations.set(1);
|
||||
|
||||
auto hwInfo = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily);
|
||||
hwInfo->capabilityTable.blitterOperationsSupported = true;
|
||||
size_t origin[] = {0, 0, 0};
|
||||
auto mockCmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context, pClDevice, nullptr);
|
||||
std::unique_ptr<Image> image(Image2dHelper<>::create(context));
|
||||
|
||||
@@ -353,11 +353,6 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenCommandQueueWhenEnqueueSVMMemcpyIsCalledThe
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_TRUE(mockCmdQ->notifyEnqueueSVMMemcpyCalled);
|
||||
|
||||
auto blitAllowed = mockCmdQ->blitEnqueueAllowed(CL_COMMAND_SVM_MEMCPY);
|
||||
|
||||
auto &csr = mockCmdQ->getCommandStreamReceiver(blitAllowed);
|
||||
EXPECT_EQ(EngineHelpers::isBcs(csr.getOsContext().getEngineType()), mockCmdQ->useBcsCsrOnNotifyEnabled);
|
||||
|
||||
alignedFree(dstHostPtr);
|
||||
}
|
||||
|
||||
|
||||
@@ -209,14 +209,16 @@ HWCMDTEST_F(IGFX_GEN8_CORE, EnqueueWriteImageTest, WhenWritingImageThenMediaVfeS
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueWriteImageTest, givenDeviceWithBlitterSupportWhenEnqueueWriteImageThenBlitEnqueueImageAllowedReturnsCorrectResult) {
|
||||
auto hwInfo = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.blitterOperationsSupported = true;
|
||||
REQUIRE_BLITTER_OR_SKIP(hwInfo);
|
||||
|
||||
DebugManagerStateRestore restorer;
|
||||
DebugManager.flags.OverrideInvalidEngineWithDefault.set(1);
|
||||
DebugManager.flags.EnableBlitterForEnqueueOperations.set(1);
|
||||
DebugManager.flags.EnableBlitterForEnqueueImageOperations.set(1);
|
||||
|
||||
auto hwInfo = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily);
|
||||
hwInfo->capabilityTable.blitterOperationsSupported = true;
|
||||
size_t origin[] = {0, 0, 0};
|
||||
auto mockCmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context, pClDevice, nullptr);
|
||||
std::unique_ptr<Image> image(Image2dHelper<>::create(context));
|
||||
|
||||
Reference in New Issue
Block a user