Fix resource destruction scheme on device closure.

- Call waitForTaskCountAndCleanAllocationList with latest flushed task count
to reflect what was actually sent to HW.

- refactor cleanAllocationList to waitForTaskCountAndCleanAllocationList

Change-Id: I5301185c5fce212e39eb017b952b43c279559cf4
This commit is contained in:
Mrozek, Michal
2018-01-12 16:41:45 +01:00
committed by sys_ocldev
parent 42798fcae0
commit af77720f9c
12 changed files with 68 additions and 24 deletions

View File

@@ -98,7 +98,7 @@ GraphicsAllocation *CommandStreamReceiver::createAllocationAndHandleResidency(co
return graphicsAllocation;
}
void CommandStreamReceiver::cleanAllocationList(uint32_t requiredTaskCount, uint32_t allocationType) {
void CommandStreamReceiver::waitForTaskCountAndCleanAllocationList(uint32_t requiredTaskCount, uint32_t allocationType) {
auto address = getTagAddress();
if (address && requiredTaskCount != (unsigned int)-1) {
@@ -153,6 +153,9 @@ void CommandStreamReceiver::cleanupResources() {
if (!memoryManager)
return;
waitForTaskCountAndCleanAllocationList(this->latestFlushedTaskCount, TEMPORARY_ALLOCATION);
waitForTaskCountAndCleanAllocationList(this->latestFlushedTaskCount, REUSABLE_ALLOCATION);
if (scratchAllocation) {
memoryManager->freeGraphicsMemory(scratchAllocation);
scratchAllocation = nullptr;
@@ -162,9 +165,6 @@ void CommandStreamReceiver::cleanupResources() {
memoryManager->freeGraphicsMemory(preemptionCsrAllocation);
}
cleanAllocationList(-1, TEMPORARY_ALLOCATION);
cleanAllocationList(-1, REUSABLE_ALLOCATION);
if (commandStream.getBase()) {
memoryManager->freeGraphicsMemory(commandStream.getGraphicsAllocation());
commandStream.replaceGraphicsAllocation(nullptr);
@@ -196,7 +196,7 @@ bool CommandStreamReceiver::waitForCompletionWithTimeout(bool enableTimeout, int
void CommandStreamReceiver::setTagAllocation(GraphicsAllocation *allocation) {
this->tagAllocation = allocation;
this->tagAddress = reinterpret_cast<uint32_t *>(allocation->getUnderlyingBuffer());
this->tagAddress = allocation ? reinterpret_cast<uint32_t *>(allocation->getUnderlyingBuffer()) : nullptr;
}
void CommandStreamReceiver::setRequiredScratchSize(uint32_t newRequiredScratchSize) {