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
@@ -224,13 +224,14 @@ static void rcDestroyColorBuffer(uint32_t colorbuffer)
|
||||
fb->DestroyColorBuffer( colorbuffer );
|
||||
}
|
||||
|
||||
static void rcFlushWindowColorBuffer(uint32_t windowSurface)
|
||||
static int rcFlushWindowColorBuffer(uint32_t windowSurface)
|
||||
{
|
||||
FrameBuffer *fb = FrameBuffer::getFB();
|
||||
if (!fb) {
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
fb->flushWindowSurfaceColorBuffer(windowSurface);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rcSetWindowColorBuffer(uint32_t windowSurface,
|
||||
@@ -296,17 +297,18 @@ static void rcReadColorBuffer(uint32_t colorBuffer,
|
||||
// XXX: TBD - should be implemented
|
||||
}
|
||||
|
||||
static void rcUpdateColorBuffer(uint32_t colorBuffer,
|
||||
static int rcUpdateColorBuffer(uint32_t colorBuffer,
|
||||
GLint x, GLint y,
|
||||
GLint width, GLint height,
|
||||
GLenum format, GLenum type, void* pixels)
|
||||
{
|
||||
FrameBuffer *fb = FrameBuffer::getFB();
|
||||
if (!fb) {
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fb->updateColorBuffer(colorBuffer, x, y, width, height, format, type, pixels);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void initRenderControlContext(renderControl_decoder_context_t *dec)
|
||||
|
||||
Reference in New Issue
Block a user