fix: update fence values when residency list passed to switch ring buffer
Signed-off-by: Maciej Plewka <maciej.plewka@intel.com>
This commit is contained in:
parent
8a85a96ed2
commit
1b7bf690d2
|
@ -128,9 +128,13 @@ void WddmDirectSubmission<GfxFamily, Dispatcher>::handleStopRingBuffer() {
|
||||||
template <typename GfxFamily, typename Dispatcher>
|
template <typename GfxFamily, typename Dispatcher>
|
||||||
void WddmDirectSubmission<GfxFamily, Dispatcher>::handleSwitchRingBuffers(ResidencyContainer *allocationsForResidency) {
|
void WddmDirectSubmission<GfxFamily, Dispatcher>::handleSwitchRingBuffers(ResidencyContainer *allocationsForResidency) {
|
||||||
if (this->disableMonitorFence) {
|
if (this->disableMonitorFence) {
|
||||||
|
if (allocationsForResidency) {
|
||||||
auto lock = osContextWin->getResidencyController().acquireLock();
|
auto lock = osContextWin->getResidencyController().acquireLock();
|
||||||
updateTagValueImpl(this->previousRingBuffer);
|
updateTagValueImpl(this->previousRingBuffer);
|
||||||
updateMonitorFenceValueForResidencyList(allocationsForResidency);
|
updateMonitorFenceValueForResidencyList(allocationsForResidency);
|
||||||
|
} else {
|
||||||
|
updateTagValueImpl(this->previousRingBuffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1131,11 +1131,20 @@ HWTEST_F(WddmDirectSubmissionTest, givenResidencyControllerWhenUpdatingResidency
|
||||||
EXPECT_EQ(mockGa.updateCompletionDataForAllocationAndFragmentsCalledtimes, 1u);
|
EXPECT_EQ(mockGa.updateCompletionDataForAllocationAndFragmentsCalledtimes, 1u);
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffersThenUpdateResidencyCalled) {
|
HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffersAndResidencyContainerIsNullThenUpdateResidencyNotCalled) {
|
||||||
using Dispatcher = RenderDispatcher<FamilyType>;
|
using Dispatcher = RenderDispatcher<FamilyType>;
|
||||||
|
|
||||||
MockWddmDirectSubmission<FamilyType, Dispatcher> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver);
|
MockWddmDirectSubmission<FamilyType, Dispatcher> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver);
|
||||||
wddmDirectSubmission.handleSwitchRingBuffers(nullptr);
|
wddmDirectSubmission.handleSwitchRingBuffers(nullptr);
|
||||||
|
EXPECT_EQ(wddmDirectSubmission.updateMonitorFenceValueForResidencyListCalled, 0u);
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffersThenUpdateResidencyCalled) {
|
||||||
|
using Dispatcher = RenderDispatcher<FamilyType>;
|
||||||
|
|
||||||
|
MockWddmDirectSubmission<FamilyType, Dispatcher> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver);
|
||||||
|
ResidencyContainer container;
|
||||||
|
wddmDirectSubmission.handleSwitchRingBuffers(&container);
|
||||||
EXPECT_EQ(wddmDirectSubmission.updateMonitorFenceValueForResidencyListCalled, 1u);
|
EXPECT_EQ(wddmDirectSubmission.updateMonitorFenceValueForResidencyListCalled, 1u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1157,7 +1166,8 @@ HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffers
|
||||||
|
|
||||||
MyMockWddmDirectSubmission<FamilyType, Dispatcher> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver);
|
MyMockWddmDirectSubmission<FamilyType, Dispatcher> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver);
|
||||||
std::thread th([&]() {
|
std::thread th([&]() {
|
||||||
wddmDirectSubmission.handleSwitchRingBuffers(nullptr);
|
ResidencyContainer container;
|
||||||
|
wddmDirectSubmission.handleSwitchRingBuffers(&container);
|
||||||
});
|
});
|
||||||
while (!wddmDirectSubmission.lockInTesting)
|
while (!wddmDirectSubmission.lockInTesting)
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in New Issue