sw_engine: flush all processing data when clear() is requested.

there was a missing point which occured corrupted data in multi-processing.

Change-Id: Ifb28ee82852e488d23d45b4b75f0a6c70bb428b2
This commit is contained in:
Hermet Park 2020-06-30 12:38:01 +09:00
parent 8bb8710815
commit 4bc0b584f3

View file

@ -47,16 +47,16 @@ static RenderInitializer renderInit;
SwRenderer::~SwRenderer() SwRenderer::~SwRenderer()
{ {
if (progress.valid()) progress.get(); flush();
} }
bool SwRenderer::clear() bool SwRenderer::clear()
{ {
if (progress.valid()) return false; return flush();
return true;
} }
bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h)
{ {
if (!buffer || stride == 0 || w == 0 || h == 0) return false; if (!buffer || stride == 0 || w == 0 || h == 0) return false;
@ -117,11 +117,15 @@ void SwRenderer::doRender()
bool SwRenderer::flush() bool SwRenderer::flush()
{ {
if (progress.valid()) { while (prepareTasks.size() > 0) {
progress.get(); auto task = prepareTasks.front();
return true; if (task->progress.valid()) task->progress.get();
prepareTasks.pop();
} }
return false;
if (progress.valid()) progress.get();
return true;
} }