Skip to content

Commit 8d60fb2

Browse files
Refactor tag update for stop ring buffer
Signed-off-by: Lukasz Jobczyk <[email protected]>
1 parent 42524b6 commit 8d60fb2

File tree

6 files changed

+23
-7
lines changed

6 files changed

+23
-7
lines changed

shared/source/direct_submission/direct_submission_hw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class DirectSubmissionHw {
7878
virtual bool handleResidency() = 0;
7979
virtual void handleNewResourcesSubmission();
8080
virtual size_t getSizeNewResourceHandler();
81+
virtual void handleStopRingBuffer(){};
8182
virtual uint64_t switchRingBuffers();
8283
virtual void handleSwitchRingBuffers() = 0;
8384
GraphicsAllocation *switchRingBuffersAllocations();

shared/source/direct_submission/direct_submission_hw.inl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::startRingBuffer() {
157157
if (ringStart) {
158158
return true;
159159
}
160+
160161
size_t startSize = getSizeSemaphoreSection();
161162
size_t requiredSize = startSize + getSizeDispatch() + getSizeEnd();
162163
if (ringCommandStream.getAvailableSpace() < requiredSize) {
@@ -174,6 +175,10 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::startRingBuffer() {
174175

175176
template <typename GfxFamily, typename Dispatcher>
176177
bool DirectSubmissionHw<GfxFamily, Dispatcher>::stopRingBuffer() {
178+
if (!ringStart) {
179+
return true;
180+
}
181+
177182
void *flushPtr = ringCommandStream.getSpace(0);
178183
Dispatcher::dispatchCacheFlush(ringCommandStream, *hwInfo, gpuVaForMiFlush);
179184
if (disableMonitorFence) {
@@ -192,6 +197,7 @@ bool DirectSubmissionHw<GfxFamily, Dispatcher>::stopRingBuffer() {
192197
semaphoreData->QueueWorkCount = currentQueueWorkCount;
193198
cpuCachelineFlush(semaphorePtr, MemoryConstants::cacheLineSize);
194199

200+
this->handleStopRingBuffer();
195201
this->ringStart = false;
196202

197203
return true;

shared/source/direct_submission/linux/drm_direct_submission.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class DrmDirectSubmission : public DirectSubmissionHw<GfxFamily, Dispatcher> {
2929
bool isNewResourceHandleNeeded();
3030
void handleNewResourcesSubmission() override;
3131
size_t getSizeNewResourceHandler() override;
32+
void handleStopRingBuffer() override;
3233
void handleSwitchRingBuffers() override;
3334
uint64_t updateTagValue() override;
3435
void getTagAddressValue(TagData &tagData) override;

shared/source/direct_submission/linux/drm_direct_submission.inl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,8 @@ DrmDirectSubmission<GfxFamily, Dispatcher>::DrmDirectSubmission(Device &device,
3434

3535
template <typename GfxFamily, typename Dispatcher>
3636
inline DrmDirectSubmission<GfxFamily, Dispatcher>::~DrmDirectSubmission() {
37-
if (this->ringStart) {
38-
this->stopRingBuffer();
39-
if (this->disableMonitorFence) {
40-
this->currentTagData.tagValue++;
41-
}
42-
this->wait(static_cast<uint32_t>(this->currentTagData.tagValue));
43-
}
37+
this->stopRingBuffer();
38+
this->wait(static_cast<uint32_t>(this->currentTagData.tagValue));
4439
this->deallocateResources();
4540
}
4641

@@ -130,6 +125,13 @@ size_t DrmDirectSubmission<GfxFamily, Dispatcher>::getSizeNewResourceHandler() {
130125
return size;
131126
}
132127

128+
template <typename GfxFamily, typename Dispatcher>
129+
void DrmDirectSubmission<GfxFamily, Dispatcher>::handleStopRingBuffer() {
130+
if (this->disableMonitorFence) {
131+
this->currentTagData.tagValue++;
132+
}
133+
}
134+
133135
template <typename GfxFamily, typename Dispatcher>
134136
void DrmDirectSubmission<GfxFamily, Dispatcher>::handleSwitchRingBuffers() {
135137
if (this->disableMonitorFence) {

shared/test/unit_test/direct_submission/direct_submission_tests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ HWTEST_F(DirectSubmissionTest,
277277

278278
bool ret = directSubmission.allocateResources();
279279
directSubmission.disableMonitorFence = true;
280+
directSubmission.ringStart = true;
280281

281282
EXPECT_TRUE(ret);
282283

shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,17 @@ HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenCallingLinuxImplem
9494
drmDirectSubmission.getTagAddressValue(tagData);
9595
EXPECT_EQ(drmDirectSubmission.currentTagData.tagAddress, tagData.tagAddress);
9696
EXPECT_EQ(drmDirectSubmission.currentTagData.tagValue + 1, tagData.tagValue);
97+
98+
*drmDirectSubmission.tagAddress = 1u;
9799
}
98100

99101
HWTEST_F(DrmDirectSubmissionTest, whenCreateDirectSubmissionThenValidObjectIsReturned) {
100102
auto directSubmission = DirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>>::create(*device.get(),
101103
*osContext.get());
102104
EXPECT_NE(directSubmission.get(), nullptr);
105+
106+
bool ret = directSubmission->initialize(false);
107+
EXPECT_TRUE(ret);
103108
}
104109

105110
HWTEST_F(DrmDirectSubmissionTest, givenDisabledMonitorFenceWhenDispatchSwitchRingBufferThenDispatchPipeControl) {

0 commit comments

Comments
 (0)