emulator opengl: guest/host rendering syncronization.
Added a return value for rcFlushWindowColorBuffer and rcUpdateColorBuffer in order to make those calls to block with a round-trip to the host. This is to make sure that the color buffer is up-to-date before the flinger use it for rendering. Also added a call to the native windows's lock function after EGL is attached and bound to render on the window. This call was missed before. This syncronization can be optimized by removing the round-trip and insert sync primitive to the stream at every draw command that reads from a color buffer to make the sync happen on the host before rendering the color buffer and remove the need for the guest to wait for that update. Change-Id: I1c2d8bc407b69663e992a68d5aa755f19bbe0ec3
This commit is contained in:
committed by
Guy Zadickario
parent
4ef1f3474e
commit
0536060b40
@@ -325,8 +325,12 @@ EGLBoolean egl_window_surface_t::connect()
|
||||
if (nativeWindow->dequeueBuffer(nativeWindow, &buffer) != NO_ERROR) {
|
||||
setErrorReturn(EGL_BAD_ALLOC, EGL_FALSE);
|
||||
}
|
||||
|
||||
buffer->common.incRef(&buffer->common);
|
||||
|
||||
// lock the buffer
|
||||
nativeWindow->lockBuffer(nativeWindow, buffer);
|
||||
|
||||
DEFINE_AND_VALIDATE_HOST_CONNECTION(EGL_FALSE);
|
||||
rcEnc->rcSetWindowColorBuffer(rcEnc, rcSurface, ((cb_handle_t *)(buffer->handle))->hostHandle);
|
||||
|
||||
@@ -360,6 +364,9 @@ EGLBoolean egl_window_surface_t::swapBuffers()
|
||||
setErrorReturn(EGL_BAD_ALLOC, EGL_FALSE);
|
||||
}
|
||||
|
||||
// lock the buffer
|
||||
nativeWindow->lockBuffer(nativeWindow, buffer);
|
||||
|
||||
rcEnc->rcSetWindowColorBuffer(rcEnc, rcSurface, ((cb_handle_t *)(buffer->handle))->hostHandle);
|
||||
|
||||
return EGL_TRUE;
|
||||
|
||||
Reference in New Issue
Block a user