mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Add notify parameter to direct submission post sync operations
Related-To: NEO-5845 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
732fbe5c7f
commit
b6da6471f2
@ -1375,7 +1375,7 @@ HWTEST_F(BcsTests, givenBlitterDirectSubmissionEnabledWhenProgrammingBlitterThen
|
||||
csr.blitterDirectSubmission = std::make_unique<DirectSubmission>(*pDevice, *csr.osContext);
|
||||
csr.recordFlusheBatchBuffer = true;
|
||||
DirectSubmission *directSubmission = reinterpret_cast<DirectSubmission *>(csr.blitterDirectSubmission.get());
|
||||
bool initRet = directSubmission->initialize(true);
|
||||
bool initRet = directSubmission->initialize(true, false);
|
||||
EXPECT_TRUE(initRet);
|
||||
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
@ -1418,7 +1418,7 @@ HWTEST_F(BcsTests, givenBlitterDirectSubmissionEnabledWhenFlushTagUpdateThenBatc
|
||||
csr.blitterDirectSubmission = std::make_unique<DirectSubmission>(*pDevice, *csr.osContext);
|
||||
csr.recordFlusheBatchBuffer = true;
|
||||
DirectSubmission *directSubmission = reinterpret_cast<DirectSubmission *>(csr.blitterDirectSubmission.get());
|
||||
bool initRet = directSubmission->initialize(true);
|
||||
bool initRet = directSubmission->initialize(true, false);
|
||||
EXPECT_TRUE(initRet);
|
||||
|
||||
csr.flushTagUpdate();
|
||||
|
@ -124,12 +124,12 @@ struct MockWddmCsr : public WddmCommandStreamReceiver<GfxFamily> {
|
||||
if (!initBlitterDirectSubmission) {
|
||||
directSubmission = std::make_unique<
|
||||
MockWddmDirectSubmission<GfxFamily, RenderDispatcher<GfxFamily>>>(device, osContext);
|
||||
ret = directSubmission->initialize(true);
|
||||
ret = directSubmission->initialize(true, false);
|
||||
this->dispatchMode = DispatchMode::ImmediateDispatch;
|
||||
} else {
|
||||
blitterDirectSubmission = std::make_unique<
|
||||
MockWddmDirectSubmission<GfxFamily, BlitterDispatcher<GfxFamily>>>(device, osContext);
|
||||
blitterDirectSubmission->initialize(true);
|
||||
blitterDirectSubmission->initialize(true, false);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
@ -1431,11 +1431,11 @@ inline bool CommandStreamReceiverHw<GfxFamily>::initDirectSubmission(Device &dev
|
||||
if (!this->isAnyDirectSubmissionEnabled()) {
|
||||
if (EngineHelpers::isBcs(osContext.getEngineType())) {
|
||||
blitterDirectSubmission = DirectSubmissionHw<GfxFamily, BlitterDispatcher<GfxFamily>>::create(device, osContext);
|
||||
ret = blitterDirectSubmission->initialize(submitOnInit);
|
||||
ret = blitterDirectSubmission->initialize(submitOnInit, this->isUsedNotifyEnableForPostSync());
|
||||
|
||||
} else {
|
||||
directSubmission = DirectSubmissionHw<GfxFamily, RenderDispatcher<GfxFamily>>::create(device, osContext);
|
||||
ret = directSubmission->initialize(submitOnInit);
|
||||
ret = directSubmission->initialize(submitOnInit, this->isUsedNotifyEnableForPostSync());
|
||||
}
|
||||
auto directSubmissionController = executionEnvironment.initializeDirectSubmissionController();
|
||||
if (directSubmissionController) {
|
||||
|
@ -59,7 +59,7 @@ class DirectSubmissionHw {
|
||||
|
||||
virtual ~DirectSubmissionHw();
|
||||
|
||||
bool initialize(bool submitOnInit);
|
||||
bool initialize(bool submitOnInit, bool useNotify);
|
||||
|
||||
MOCKABLE_VIRTUAL bool stopRingBuffer();
|
||||
|
||||
@ -160,5 +160,6 @@ class DirectSubmissionHw {
|
||||
bool disableMonitorFence = false;
|
||||
bool partitionedMode = false;
|
||||
bool partitionConfigSet = true;
|
||||
bool useNotifyForPostSync = false;
|
||||
};
|
||||
} // namespace NEO
|
||||
|
@ -154,7 +154,8 @@ inline void DirectSubmissionHw<GfxFamily, Dispatcher>::cpuCachelineFlush(void *p
|
||||
}
|
||||
|
||||
template <typename GfxFamily, typename Dispatcher>
|
||||
bool DirectSubmissionHw<GfxFamily, Dispatcher>::initialize(bool submitOnInit) {
|
||||
bool DirectSubmissionHw<GfxFamily, Dispatcher>::initialize(bool submitOnInit, bool useNotify) {
|
||||
useNotifyForPostSync = useNotify;
|
||||
bool ret = allocateResources();
|
||||
|
||||
initDiagnostic(submitOnInit);
|
||||
@ -222,7 +223,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::stopRingBuffer() {
|
||||
if (disableMonitorFence) {
|
||||
TagData currentTagData = {};
|
||||
getTagAddressValue(currentTagData);
|
||||
Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, *hwInfo, false, this->partitionedMode);
|
||||
Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, *hwInfo, this->useNotifyForPostSync, this->partitionedMode);
|
||||
}
|
||||
Dispatcher::dispatchStopCommandBuffer(ringCommandStream);
|
||||
|
||||
@ -277,7 +278,7 @@ inline void DirectSubmissionHw<GfxFamily, Dispatcher>::dispatchSwitchRingBufferS
|
||||
if (disableMonitorFence) {
|
||||
TagData currentTagData = {};
|
||||
getTagAddressValue(currentTagData);
|
||||
Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, *hwInfo, false, this->partitionedMode);
|
||||
Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, *hwInfo, this->useNotifyForPostSync, this->partitionedMode);
|
||||
}
|
||||
Dispatcher::dispatchStartCommandBuffer(ringCommandStream, nextBufferGpuAddress);
|
||||
}
|
||||
@ -375,7 +376,7 @@ void *DirectSubmissionHw<GfxFamily, Dispatcher>::dispatchWorkloadSection(BatchBu
|
||||
if (!disableMonitorFence) {
|
||||
TagData currentTagData = {};
|
||||
getTagAddressValue(currentTagData);
|
||||
Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, *hwInfo, false, this->partitionedMode);
|
||||
Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, *hwInfo, this->useNotifyForPostSync, this->partitionedMode);
|
||||
}
|
||||
|
||||
dispatchSemaphoreSection(currentQueueWorkCount + 1);
|
||||
|
@ -35,6 +35,7 @@ inline void RenderDispatcher<GfxFamily>::dispatchMonitorFence(LinearStream &cmdB
|
||||
PipeControlArgs args;
|
||||
args.dcFlushEnable = MemorySynchronizationCommands<GfxFamily>::isDcFlushAllowed(true, hwInfo);
|
||||
args.workloadPartitionOffset = partitionedWorkload;
|
||||
args.notifyEnable = useNotifyEnable;
|
||||
MemorySynchronizationCommands<GfxFamily>::addPipeControlAndProgramPostSyncOperation(
|
||||
cmdBuffer,
|
||||
POST_SYNC_OPERATION::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA,
|
||||
|
@ -63,6 +63,7 @@ struct MockDirectSubmissionHw : public DirectSubmissionHw<GfxFamily, Dispatcher>
|
||||
using BaseClass::startRingBuffer;
|
||||
using BaseClass::stopRingBuffer;
|
||||
using BaseClass::switchRingBuffersAllocations;
|
||||
using BaseClass::useNotifyForPostSync;
|
||||
using BaseClass::workloadMode;
|
||||
using BaseClass::workloadModeOneExpectedValue;
|
||||
using BaseClass::workloadModeOneStoreAddress;
|
||||
|
@ -35,6 +35,7 @@ struct MockWddmDirectSubmission : public WddmDirectSubmission<GfxFamily, Dispatc
|
||||
using BaseClass::submit;
|
||||
using BaseClass::switchRingBuffers;
|
||||
using BaseClass::updateTagValue;
|
||||
using BaseClass::useNotifyForPostSync;
|
||||
using BaseClass::wddm;
|
||||
using BaseClass::WddmDirectSubmission;
|
||||
using typename BaseClass::RingBufferUse;
|
||||
|
@ -67,7 +67,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenStopThenRingIsNotStarted
|
||||
auto &csr = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
csr.directSubmission.reset(&directSubmission);
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.ringStart);
|
||||
|
||||
@ -87,7 +87,7 @@ HWTEST_F(DirectSubmissionTest, givenBlitterDirectSubmissionWhenStopThenRingIsNot
|
||||
csr.blitterDirectSubmission.reset(&directSubmission);
|
||||
csr.setupContext(*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.ringStart);
|
||||
|
||||
@ -114,7 +114,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenMakingResourcesResidentT
|
||||
csr.directSubmission.reset(&directSubmission);
|
||||
csr.setupContext(*osContext2.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_NE(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
GraphicsAllocation *alloc = directSubmission.ringCommandStream.getGraphicsAllocation();
|
||||
@ -137,7 +137,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionInitializedWhenRingIsStarted
|
||||
*osContext.get());
|
||||
EXPECT_TRUE(directSubmission.disableCpuCacheFlush);
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.ringStart);
|
||||
|
||||
@ -152,7 +152,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionInitializedWhenRingIsNotStar
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_FALSE(directSubmission.ringStart);
|
||||
|
||||
@ -168,7 +168,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionSwitchBuffersWhenCurrentIsPr
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_EQ(RingBufferUse::FirstBuffer, directSubmission.currentRingBuffer);
|
||||
|
||||
@ -182,7 +182,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionSwitchBuffersWhenCurrentIsSe
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_EQ(RingBufferUse::FirstBuffer, directSubmission.currentRingBuffer);
|
||||
|
||||
@ -200,7 +200,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionAllocateFailWhenRingIsStarte
|
||||
EXPECT_TRUE(directSubmission.disableCpuCacheFlush);
|
||||
|
||||
directSubmission.allocateOsResourcesReturn = false;
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_FALSE(ret);
|
||||
EXPECT_FALSE(directSubmission.ringStart);
|
||||
|
||||
@ -212,7 +212,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionSubmitFailWhenRingIsStartedT
|
||||
*osContext.get());
|
||||
|
||||
directSubmission.submitReturn = false;
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_FALSE(ret);
|
||||
EXPECT_FALSE(directSubmission.ringStart);
|
||||
|
||||
@ -223,7 +223,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionStartWhenRingIsStartedThenEx
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
size_t usedSize = directSubmission.ringCommandStream.getUsed();
|
||||
|
||||
@ -236,7 +236,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionStartWhenRingIsNotStartedThe
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
size_t usedSize = directSubmission.ringCommandStream.getUsed();
|
||||
|
||||
@ -250,7 +250,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionStartWhenRingIsNotStartedSub
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
size_t usedSize = directSubmission.ringCommandStream.getUsed();
|
||||
|
||||
@ -265,7 +265,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionStartWhenRingIsNotStartedAnd
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
auto expectedRingBuffer = directSubmission.currentRingBuffer;
|
||||
GraphicsAllocation *oldRingBuffer = directSubmission.ringCommandStream.getGraphicsAllocation();
|
||||
@ -287,7 +287,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionStopWhenStopRingIsCalledThen
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
size_t alreadyDispatchedSize = directSubmission.ringCommandStream.getUsed();
|
||||
uint32_t oldQueueCount = directSubmission.semaphoreData->QueueWorkCount;
|
||||
@ -355,7 +355,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchSemaphoreThenExp
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
directSubmission.dispatchSemaphoreSection(1u);
|
||||
@ -366,7 +366,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchStartSectionThen
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
directSubmission.dispatchStartSection(1ull);
|
||||
@ -376,7 +376,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchStartSectionThen
|
||||
HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchSwitchRingBufferSectionThenExpectCorrectSizeUsed) {
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice, *osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
directSubmission.dispatchSwitchRingBufferSection(1ull);
|
||||
@ -388,7 +388,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchFlushSectionThen
|
||||
MockDirectSubmissionHw<FamilyType, Dispatcher> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
Dispatcher::dispatchCacheFlush(directSubmission.ringCommandStream, *directSubmission.hwInfo, 0ull);
|
||||
@ -400,7 +400,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchTagUpdateSection
|
||||
MockDirectSubmissionHw<FamilyType, Dispatcher>
|
||||
directSubmission(*pDevice, *osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
Dispatcher::dispatchMonitorFence(directSubmission.ringCommandStream, 0ull, 0ull, *directSubmission.hwInfo, false, false);
|
||||
EXPECT_NE(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
@ -412,7 +412,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenDispatchEndingSectionThe
|
||||
MockDirectSubmissionHw<FamilyType, Dispatcher> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
Dispatcher::dispatchStopCommandBuffer(directSubmission.ringCommandStream);
|
||||
@ -517,7 +517,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenSettingAddressInReturnCo
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
uint64_t returnAddress = 0x1A2BF000;
|
||||
@ -533,7 +533,7 @@ HWTEST_F(DirectSubmissionTest, whenDirectSubmissionInitializedThenExpectCreatedA
|
||||
std::unique_ptr<MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>>> directSubmission =
|
||||
std::make_unique<MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>>>(*pDevice,
|
||||
*osContext.get());
|
||||
bool ret = directSubmission->initialize(false);
|
||||
bool ret = directSubmission->initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
GraphicsAllocation *nulledAllocation = directSubmission->ringBuffer;
|
||||
@ -544,7 +544,7 @@ HWTEST_F(DirectSubmissionTest, whenDirectSubmissionInitializedThenExpectCreatedA
|
||||
directSubmission = std::make_unique<
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>>>(*pDevice,
|
||||
*osContext.get());
|
||||
ret = directSubmission->initialize(false);
|
||||
ret = directSubmission->initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
nulledAllocation = directSubmission->ringBuffer2;
|
||||
@ -555,7 +555,7 @@ HWTEST_F(DirectSubmissionTest, whenDirectSubmissionInitializedThenExpectCreatedA
|
||||
directSubmission = std::make_unique<
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>>>(*pDevice,
|
||||
*osContext.get());
|
||||
ret = directSubmission->initialize(false);
|
||||
ret = directSubmission->initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
nulledAllocation = directSubmission->semaphores;
|
||||
directSubmission->semaphores = nullptr;
|
||||
@ -642,7 +642,7 @@ HWTEST_F(DirectSubmissionTest,
|
||||
EXPECT_FALSE(directSubmission.disableMonitorFence);
|
||||
EXPECT_EQ(0u, directSubmission.workloadMode);
|
||||
EXPECT_EQ(nullptr, directSubmission.diagnostic.get());
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_FALSE(directSubmission.ringStart);
|
||||
EXPECT_EQ(0u, directSubmission.disabledDiagnosticCalled);
|
||||
@ -677,7 +677,7 @@ HWTEST_F(DirectSubmissionTest,
|
||||
EXPECT_FALSE(directSubmission.disableMonitorFence);
|
||||
EXPECT_EQ(0u, directSubmission.workloadMode);
|
||||
EXPECT_EQ(nullptr, directSubmission.diagnostic.get());
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.ringStart);
|
||||
EXPECT_EQ(1u, directSubmission.disabledDiagnosticCalled);
|
||||
@ -712,7 +712,7 @@ HWTEST_F(DirectSubmissionTest,
|
||||
EXPECT_FALSE(directSubmission.disableMonitorFence);
|
||||
EXPECT_EQ(0u, directSubmission.workloadMode);
|
||||
EXPECT_EQ(nullptr, directSubmission.diagnostic.get());
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_FALSE(directSubmission.ringStart);
|
||||
EXPECT_EQ(0u, directSubmission.disabledDiagnosticCalled);
|
||||
@ -761,7 +761,7 @@ HWTEST_F(DirectSubmissionTest,
|
||||
directSubmission.getDiagnosticModeSection();
|
||||
expectedSize += expectedExecCount * directSubmission.getSizeDispatch();
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.ringStart);
|
||||
EXPECT_EQ(0u, directSubmission.disabledDiagnosticCalled);
|
||||
@ -849,7 +849,7 @@ HWTEST_F(DirectSubmissionTest,
|
||||
EXPECT_EQ(expectedDispatch, directSubmission.getSizeDispatch());
|
||||
expectedSize += expectedExecCount * expectedDispatch;
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.ringStart);
|
||||
EXPECT_EQ(0u, directSubmission.disabledDiagnosticCalled);
|
||||
@ -944,7 +944,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, DirectSubmissionTest,
|
||||
MockDirectSubmissionHw<FamilyType, Dispatcher> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
size_t usedSize = directSubmission.ringCommandStream.getUsed();
|
||||
|
||||
|
@ -51,7 +51,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest,
|
||||
directSubmission.partitionedMode = true;
|
||||
directSubmission.workPartitionAllocation = ultCsr->getWorkPartitionAllocation();
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.partitionConfigSet);
|
||||
EXPECT_NE(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
@ -303,7 +303,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest,
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_NE(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
GraphicsAllocation *oldRingAllocation = directSubmission.ringCommandStream.getGraphicsAllocation();
|
||||
@ -342,7 +342,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest,
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_EQ(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
GraphicsAllocation *oldRingAllocation = directSubmission.ringCommandStream.getGraphicsAllocation();
|
||||
@ -374,7 +374,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest,
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_NE(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
GraphicsAllocation *oldRingAllocation = directSubmission.ringCommandStream.getGraphicsAllocation();
|
||||
@ -410,7 +410,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest,
|
||||
MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_EQ(0u, directSubmission.semaphoreData->QueueWorkCount);
|
||||
EXPECT_EQ(1u, directSubmission.currentQueueWorkCount);
|
||||
@ -445,7 +445,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, givenDirectSubmissionPrintBuffersWh
|
||||
|
||||
testing::internal::CaptureStdout();
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
ret = directSubmission.dispatchCommandBuffer(batchBuffer, flushStamp);
|
||||
EXPECT_TRUE(ret);
|
||||
@ -482,7 +482,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest,
|
||||
directSubmission.partitionConfigSet = false;
|
||||
directSubmission.workPartitionAllocation = ultCsr->getWorkPartitionAllocation();
|
||||
|
||||
bool ret = directSubmission.initialize(true);
|
||||
bool ret = directSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.partitionConfigSet);
|
||||
EXPECT_NE(0x0u, directSubmission.ringCommandStream.getUsed());
|
||||
@ -543,7 +543,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest,
|
||||
directSubmission.partitionConfigSet = false;
|
||||
directSubmission.workPartitionAllocation = ultCsr->getWorkPartitionAllocation();
|
||||
|
||||
bool ret = directSubmission.initialize(false);
|
||||
bool ret = directSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_FALSE(directSubmission.partitionConfigSet);
|
||||
EXPECT_FALSE(directSubmission.ringStart);
|
||||
@ -578,3 +578,76 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest,
|
||||
uint64_t gpuAddress = ultCsr->getWorkPartitionAllocation()->getGpuAddress();
|
||||
EXPECT_EQ(gpuAddress, loadRegisterMem->getMemoryAddress());
|
||||
}
|
||||
|
||||
HWTEST_F(DirectSubmissionDispatchBufferTest,
|
||||
givenRenderDirectSubmissionUsingNotifyEnabledWhenDispatchWorkloadCalledWithMonitorFenceThenExpectPostSyncOperationWithNotifyFlag) {
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
using POST_SYNC_OPERATION = typename PIPE_CONTROL::POST_SYNC_OPERATION;
|
||||
using Dispatcher = RenderDispatcher<FamilyType>;
|
||||
|
||||
FlushStampTracker flushStamp(true);
|
||||
|
||||
MockDirectSubmissionHw<FamilyType, Dispatcher> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
directSubmission.disableMonitorFence = false;
|
||||
|
||||
bool ret = directSubmission.initialize(true, true);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.useNotifyForPostSync);
|
||||
|
||||
size_t sizeUsedBefore = directSubmission.ringCommandStream.getUsed();
|
||||
ret = directSubmission.dispatchCommandBuffer(batchBuffer, flushStamp);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
HardwareParse hwParse;
|
||||
hwParse.parsePipeControl = true;
|
||||
hwParse.parseCommands<FamilyType>(directSubmission.ringCommandStream, sizeUsedBefore);
|
||||
hwParse.findHardwareCommands<FamilyType>();
|
||||
|
||||
bool foundFenceUpdate = false;
|
||||
for (auto it = hwParse.pipeControlList.begin(); it != hwParse.pipeControlList.end(); it++) {
|
||||
auto pipeControl = genCmdCast<PIPE_CONTROL *>(*it);
|
||||
if (pipeControl->getPostSyncOperation() == POST_SYNC_OPERATION::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA) {
|
||||
foundFenceUpdate = true;
|
||||
EXPECT_TRUE(pipeControl->getNotifyEnable());
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(foundFenceUpdate);
|
||||
}
|
||||
|
||||
HWTEST_F(DirectSubmissionDispatchBufferTest,
|
||||
givenBlitterDirectSubmissionUsingNotifyEnabledWhenDispatchWorkloadCalledWithMonitorFenceThenExpectPostSyncOperationWithNotifyFlag) {
|
||||
using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW;
|
||||
using Dispatcher = BlitterDispatcher<FamilyType>;
|
||||
|
||||
FlushStampTracker flushStamp(true);
|
||||
|
||||
MockDirectSubmissionHw<FamilyType, Dispatcher> directSubmission(*pDevice,
|
||||
*osContext.get());
|
||||
directSubmission.disableMonitorFence = false;
|
||||
|
||||
bool ret = directSubmission.initialize(true, true);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(directSubmission.useNotifyForPostSync);
|
||||
|
||||
size_t sizeUsedBefore = directSubmission.ringCommandStream.getUsed();
|
||||
ret = directSubmission.dispatchCommandBuffer(batchBuffer, flushStamp);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
HardwareParse hwParse;
|
||||
hwParse.parseCommands<FamilyType>(directSubmission.ringCommandStream, sizeUsedBefore);
|
||||
hwParse.findHardwareCommands<FamilyType>();
|
||||
auto miFlushList = hwParse.getCommandsList<MI_FLUSH_DW>();
|
||||
|
||||
bool foundFenceUpdate = false;
|
||||
for (auto it = miFlushList.begin(); it != miFlushList.end(); it++) {
|
||||
auto miFlush = genCmdCast<MI_FLUSH_DW *>(*it);
|
||||
if (miFlush->getPostSyncOperation() == MI_FLUSH_DW::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA_QWORD) {
|
||||
foundFenceUpdate = true;
|
||||
EXPECT_TRUE(miFlush->getNotifyEnable());
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(foundFenceUpdate);
|
||||
}
|
||||
|
@ -148,3 +148,32 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, RenderDispatcherTest,
|
||||
HWTEST_F(RenderDispatcherTest, givenRenderWhenCheckingForMultiTileSynchronizationSupportThenExpectTrue) {
|
||||
EXPECT_TRUE(RenderDispatcher<FamilyType>::isMultiTileSynchronizationSupported());
|
||||
}
|
||||
|
||||
HWCMDTEST_F(IGFX_XE_HP_CORE, RenderDispatcherTest,
|
||||
givenRenderDispatcherNotifyFlagTrueWhenAddingMonitorFenceCmdThenExpectPipeControlWithProperAddressAndValueAndNotifyParameter) {
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
using POST_SYNC_OPERATION = typename FamilyType::PIPE_CONTROL::POST_SYNC_OPERATION;
|
||||
|
||||
uint64_t gpuAddress = 0xADD35500ull;
|
||||
uint64_t value = 0x102030;
|
||||
|
||||
RenderDispatcher<FamilyType>::dispatchMonitorFence(cmdBuffer, gpuAddress, value, hardwareInfo, true, false);
|
||||
|
||||
HardwareParse hwParse;
|
||||
hwParse.parsePipeControl = true;
|
||||
hwParse.parseCommands<FamilyType>(cmdBuffer);
|
||||
hwParse.findHardwareCommands<FamilyType>();
|
||||
|
||||
bool foundMonitorFence = false;
|
||||
for (auto &it : hwParse.pipeControlList) {
|
||||
PIPE_CONTROL *pipeControl = reinterpret_cast<PIPE_CONTROL *>(it);
|
||||
if (pipeControl->getPostSyncOperation() == POST_SYNC_OPERATION::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA) {
|
||||
foundMonitorFence = true;
|
||||
EXPECT_EQ(gpuAddress, NEO::UnitTestHelper<FamilyType>::getPipeControlPostSyncAddress(*pipeControl));
|
||||
EXPECT_EQ(value, pipeControl->getImmediateData());
|
||||
EXPECT_TRUE(pipeControl->getNotifyEnable());
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(foundMonitorFence);
|
||||
}
|
||||
|
@ -74,6 +74,7 @@ struct MockDrmDirectSubmission : public DrmDirectSubmission<GfxFamily, Dispatche
|
||||
using BaseClass::switchRingBuffers;
|
||||
using BaseClass::tagAddress;
|
||||
using BaseClass::updateTagValue;
|
||||
using BaseClass::useNotifyForPostSync;
|
||||
using BaseClass::wait;
|
||||
using BaseClass::workPartitionAllocation;
|
||||
|
||||
@ -116,7 +117,7 @@ HWTEST_F(DrmDirectSubmissionTest, whenCreateDirectSubmissionThenValidObjectIsRet
|
||||
*osContext.get());
|
||||
EXPECT_NE(directSubmission.get(), nullptr);
|
||||
|
||||
bool ret = directSubmission->initialize(false);
|
||||
bool ret = directSubmission->initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenDirectIsInitializedAndStartedThe
|
||||
|
||||
EXPECT_EQ(1u, wddmDirectSubmission->commandBufferHeader->NeedsMidBatchPreEmptionSupport);
|
||||
|
||||
bool ret = wddmDirectSubmission->initialize(true);
|
||||
bool ret = wddmDirectSubmission->initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_TRUE(wddmDirectSubmission->ringStart);
|
||||
EXPECT_NE(nullptr, wddmDirectSubmission->ringBuffer);
|
||||
@ -87,7 +87,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenDirectIsInitializedAndNotStarted
|
||||
|
||||
EXPECT_EQ(0u, wddmDirectSubmission->commandBufferHeader->NeedsMidBatchPreEmptionSupport);
|
||||
|
||||
bool ret = wddmDirectSubmission->initialize(false);
|
||||
bool ret = wddmDirectSubmission->initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
EXPECT_FALSE(wddmDirectSubmission->ringStart);
|
||||
EXPECT_NE(nullptr, wddmDirectSubmission->ringBuffer);
|
||||
@ -112,7 +112,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenSubmitingCmdBufferThenExpectPass
|
||||
MockWddmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> wddmDirectSubmission(*device.get(),
|
||||
*osContext.get());
|
||||
|
||||
bool ret = wddmDirectSubmission.initialize(false);
|
||||
bool ret = wddmDirectSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
uint64_t gpuAddress = 0xFF00FF000;
|
||||
@ -231,7 +231,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenSwitchingRingBufferStartedThenEx
|
||||
MockWddmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> wddmDirectSubmission(*device.get(),
|
||||
*osContext.get());
|
||||
|
||||
bool ret = wddmDirectSubmission.initialize(true);
|
||||
bool ret = wddmDirectSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
size_t usedSpace = wddmDirectSubmission.ringCommandStream.getUsed();
|
||||
uint64_t expectedGpuVa = wddmDirectSubmission.ringBuffer->getGpuAddress() + usedSpace;
|
||||
@ -257,7 +257,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenSwitchingRingBufferNotStartedThe
|
||||
MockWddmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> wddmDirectSubmission(*device.get(),
|
||||
*osContext.get());
|
||||
|
||||
bool ret = wddmDirectSubmission.initialize(false);
|
||||
bool ret = wddmDirectSubmission.initialize(false, false);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
size_t usedSpace = wddmDirectSubmission.ringCommandStream.getUsed();
|
||||
@ -284,7 +284,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenSwitchingRingBufferStartedAndWai
|
||||
MockWddmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> wddmDirectSubmission(*device.get(),
|
||||
*osContext.get());
|
||||
|
||||
bool ret = wddmDirectSubmission.initialize(true);
|
||||
bool ret = wddmDirectSubmission.initialize(true, false);
|
||||
EXPECT_TRUE(ret);
|
||||
uint64_t expectedWaitFence = 0x10ull;
|
||||
wddmDirectSubmission.completionRingBuffers[RingBufferUse::SecondBuffer] = expectedWaitFence;
|
||||
|
Reference in New Issue
Block a user