This patch allows the OpenGLES rendering library to use Unix
sockets instead of TCP ones when communicating with its clients.
On certain benchmarks (e.g. 0xBench teapot), this provides a
noticeable improvement (x1.05 fps) without any other changes.
On practice, Unix sockets are faster than TCP sockets, even
local ones. Also, this introduces a moderate amount of
abstraction that will allow us to use Win32 named pipes
on Windows (where TCP sockets are much slower than they
are on Unix).
Note that by default, TCP streams are still used.
The client (emulator) must call the new API 'setStreamMode'
to change it to STREAM_MODE_UNIX between 'initLibrary' and
'startOpenglRenderer' calls.
+ Adjust callers / user appropriately.
Change-Id: I4105bbf07541f3146b50a58d1a5b51e8cf044fab
It is possible to move the final installation path of a shared
library by using LOCAL_MODULE_PATH/LOCAL_UNSTRIPPED_PATH in its
module declaration.
We do this for example to put certain libraries under /system/lib/egl
or /system/lib/hw.
However, the Android build system has a small bug where you cannot
depend on these shared libraries because it will complain it doesn't
find them under /system/lib, the default install location.
More precisely, consider libfoo defined as:
include $(CLEAR_VARS)
LOCAL_MODULE := libfoo
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/egl
...
include $(BUILD_SHARED_LIBRARY)
Its final binary will be installed to /system/lib/egl/libfoo.so
Now, let's write a module that depends on it, as:
include $(CLEAR_VARS)
LOCAL_MODULE := libbar
LOCAL_SHARED_LIBRARIES += libfoo
...
include $(BUILD_SHARED_LIBRARY)
The build system will complain there is no rule to define the target
/system/lib/libfoo.so, but the target should be /system/lib/egl/libfoo.so.
A work-around is to define libbar as follows instead:
include $(CLEAR_VARS)
LOCAL_MODULE := libbar
LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_SHARED_LIBRARIES)/egl/libfoo.so
...
include $(BUILD_SHARED_LIBRARY)
This works if you don't need to link against the library when building your
shared library (which is fortunately the case for the GLES emulation
libraries).
That's essentially what this patch implements under common.mk. We update
emugl-set-shared-library-subpath to record that a module has been "moved",
and we avoid adding them to the LOCAL_SHARED_LIBRARIES variable of the
modules that export it.
+ Simplify three Android.mk files accordingly.
Change-Id: Id15bef5359b0daa8d82bfaa5abf9346f00190ab5
Do not redefine SDL_CONFIG to avoid conflicts with the emulator's
build system which depend on its definition. Note that this has
been fixed in another patch (https://review.source.android.com/25684)
but it is also cleaner to do this here.
Change-Id: I1a30d200e467ac7a91a1e6135fa1de34033e8df0
Now that we are not running the renderer as a seperate process
we need to have the XInitThreads call we put in the renderer process
inside emulator_test_renderer since the render server runs inside that
thread.
NOTE FOR INTEGRATION: this will need to be added to the emulator as
well.
Change-Id: I70592ad976d08c86e2c9e75b11b6ad57d6067606
Changes the render_api to support re-creating the display
sub-window and the ability to rotate the displayed framebuffer
image.
That currently works only when the renderer runs as a thread
and not as seperate process. Therefore we setup the library
to run the renderer as thread(s) inside the calling process
on *all* platforms for now.
Change-Id: Ifd009db903759042a7edcf89866d3c3fe076cae9
That fixes the event injection code to build correctly on
Windows.
Also renamed SDL_{CFLAGS,LDFLAGS} used in the Android.mk
to have a LOCAL_ prefix.
Change-Id: Ie82838ffb931880e700322116c3190fbb754d889
Added the ability to provide external vertex and fragment shader
files to the test application triangleV2. That makes easy to test
various shaders we see failing in applications.
Change-Id: Ifaae8490ac76c022aa712ae516355658922b47bd
This fixes the Windows build of the opengl emulation code.
The official is not broken because you still need to define
BUILD_EMULATOR_OPENGL=true in your environment to enable the
code to be built.
Change-Id: I527f305c8a09df2740a93736123935d480170ffb
This patch allows the emulator_test_renderer program to redirect
input events (mouse, keyboard) to the emulator's console program.
This in order to make testing easier, while we wait for integration
of the display into the emulator program.
For now, this is hard-coded to use localhost port 5554, and only
a few keys are properly translated (Dpad, HOME, BACK, MENU).
Change-Id: Ie6e37c85c291f53de49220a181cb8724f66519ea
This allows the "emulator_test_renderer" program to use
custom framebuffer sizes. You need to define ANDROID_WINDOW_SIZE
in your environment before launching the test program, e.g.:
export ANDROID_WINDOW_SIZE=640x480
Change-Id: I2559c6e75022762697ed4c4559d6c2ba3f400e8f
The following enables the renderer build on darwin.
Moved platform specific type declarations from render_api.h
to render_api_platform_types.h so it can be included from the
objective c code.
Fixed subwindow to use EmuGLView which overrides NSView to prevent
background drawing of the view.
This patch is a major rework of the build opengl-emulation
build scripts. See README for details.
In a nutshell, this introduces various functions that considerably
simplify the declaration of the 26+ modules in this implementation,
by handling auto-generation of sources and module imports/exports.
Change-Id: I827522d783c7b6cf5eafd37204a1025c235458cd
This is the first commit for the GLESv1 implementation.
It also includes needed fixes in emugen to support const types.
Also, changed glFinish definition in gl.in to match the
definition as in gl.h.
Change-Id: I90262a1db6035a90af8db17984acecef6499847a
This change turns GLcommon to be static instead of shared
library.
Removed the s_globalNameSpace static object from objectNameManager
and moved it to live inside the EglDisplay object which is shared
for all display space objects (GLESv1, GLESv2 and EGL).
Change-Id: I92fa71fb7cbac423c22b7188e8d9642a5fddf0d9
This is the GLESv2 on top of openGL implementation on the host
most of this change is moving code which is necessary by both
GLES 1.0 and GLES 2.0 implementations from GLES_CM folder into
GLcommon folder.
GLESv2Imp - includes GLES 2.0 entry points implementation
Change-Id: I934fb963478a7f596d824612f847a5aa77d2ed9d
This patch provides two useful changes to the ut_renderer
unit-test program:
1/ the ability to control the GL window dimensions with
two env. variables: ANDROID_WINDOW_WIDTH and ANDROID_WINDOW_HEIGHT
2/ the ability to save/restore the GL window position between
GL connections.
Both are useful to use ut_renderer in a demo setting, nothing more.
Change-Id: I19a8f911ee821ddc4eb6307de12d63600ff696b0
The previous changes replaced /system/lib/libGLES_emul.so with
several other libraries (lib{EGL, GLESv1_CM, GLESv2}_emul.so).
The clean step removes the old libGLES_emul.so from the build to
avoid any surprises.
Change-Id: I285b34c4d5f5a8bd3b37d9cb1b2da33fb155e62c
This patch modifies the guest libraries to use the new
fast qemu "opengles" pipe to communicate with the host
renderer process.
Note that the renderer is still listening on a TCP socket
on port 22468.
Change-Id: I6ab84f972a8024e1fdababa4615d0650c8d461bf
Conflicts:
tools/emulator/opengl/tests/gles_android_wrapper/Android.mk
tools/emulator/opengl/tests/gles_android_wrapper/ServerConnection.h
Ensure a server connection creation on make current, for cases where
the context and surface was created on a seperate thread.
In addition this commit publishes all the surface as ES2 capable
if queried.
Change-Id: Ie415b8ab3e370fa7fe97a526276e333aaa5e9e8b
Handle GLESv2 rendering in the emulator:
* load and initialize GLESv2 encoder library
* hide request for GLESv2 surfaces and contexts from the emulator
native implementation
* communicate the context/surface version configuration to the rendering
server
Change-Id: I9226275fc4a24983767735bdf19ddafbe9d07f34
Make the unit test renderer (ut_renderer) encode GLESv2 commands.
A rendering thread has both V1 & V2 decoder object, and tryies to decode
commands of the two protocols from the stream.
Context creating is taking into account the API version and creates context
accordingly.
Decoder data is shared between the V1 & V2 decoders and applied to both of
them on makeCurrent (regardless to the requested context version)
Change-Id: If78e84310e5dcd22108c19656051b138b22e3c9f
Use seperate EGL_emul, GLESv1_CM_emul and GLESv2_emul implementation
libraries. This replaces GLES_emul that was prviously included
EGL and GLESv1.
This change enables the wrapper to support GLESv2. However,
this current EGL implementation uses the native android emulator
EGL thus will not expose this GLESv2 capability.
Change-Id: Ib0a309d71cce1248efe9a08aa59434101d0ac607
This fix adds support for OpenGLES 1.1 extensions in the codec
layer. This fix also includes bug fixes in GLEncoder (client-state)
and gles android wrapper modules.
Change-Id: I512649724d43e4af9d3ce5d49ae66d9f4da0b823
This sample program simulates the use of the renderer api as it should
be used from the emulator program. It opens a SDL window, initialize the
renderer, process events on the window and terminate the renderer when the
window is closed.
Change-Id: If983b4ce6465dee71f548e8edaf2b56b6443f7b0
This change includes four changes:
1) moved IOStream.h into host/include/libOpenGLRender, this directory
will include the api interface into the libOpenGLRender which will be
used later by the emulator and we need this interface to use IOStream.h
2) Updated Andorid.mk files to include the new directory location of IOStream.h
in the LOCAL_C_INCLUDE.
3) Added new function "read" to IOStream which reads a message without a givven
size.
4) Updated TcpStream to use "cutils/sockets.h" instead of using directly the socket api for portability reasons. (It now compiles on windows as well).
Change-Id: I30eb40c8dcd5aacf0d993aff9cdb90b283b12dde
Moved 'isPointer' attribute from variable to type field.
The .types input file now includes new column specifying if a type is a pointer or not
previously emugen declared as pointer only types which included '*' character but did not
process well the case of 'char **' (pointer to pointer).
Fixed the gl.types and ut_rendercontrol.types accordingly.
Few other fixes to gl.attrib and gl.in.
Change-Id: Ifd3591119dfa504703c68556802a40e38fe4940e
Move system/OpenglCodecCommon into shared/OpenglCodecCommon so it's code
can be shared among more components of the project.
Move tests/ut_renderer/TimeUtils.* into a the common area
Annotate ErrLog.h and GLDecoderContextData.h with the project license statement
Change-Id: Ieea42e95edd5ad89fda4cfa40356a012304ee976
This patch ensures that the egl.cfg file specific to our
hardware OpenGL emulation is only copied to the system images
of emulator-specific build products.
This fixes a conflict for device-specific products (which provide
their own hw-specific egl.cfg).
Change-Id: I30cd64ba5915e5ffdc1091de8db20f6c3c671486
This is a temporary patch until we update the prebuilt/ tree accordingly
to include libxcb.so for Linux.
Change-Id: I76d9966bfb73bf3f5ca35cc30f6e12fb262dc2b2
This adds an EGL wrapper used by the test rendering to load an EGL
implementation that matches the OpenGL ES impelmentation that it uses.
The library is a simple wrapper that direct EGL calls through a dispatch
table that is dynamically loaded from an EGL shared library implementation
Change-Id: I6379d6b156c69f9e017da0039c96699290f0f84f
This adds 'ut_renderer' - a host side unit test renderer. ut_renderer is used to
take a command stream over a socket connection and render it into an opengl window.
The renderer uses the GLESv1_dec decoder library and the ut_rendercontrol api to parse
the command stream.
The ut_renderer uses an external (plug-in) opengl impelementation.
Change-Id: I77794044ca9ca8a75a66a95a248eac384710aafe
This adds opengl es implementation driver that selects whether to use
the native android emulator opengl impelementation or use a remote,
host side renderer. This driver is used to selectivley run applications using
the remote renderer. The selection is based on the application/process name and
is configured using /etc/gles_emul.cfg in the emulator side.
This change also installs /etc/egl.cfg that is used by the Android opengl wrapper
to select an opengl implementation
Change-Id: I66eda3d48938f8057bf45e6476b7faefaf1130fb
This adds minimal rendering control api codec that is used by opengl codec
unit tests. The api is used to pass messages regarding resource creation
(surfaces, opengl context) and swapbuffers notifications.
The actual encoder and decoder code is generated using 'emugen'
Change-Id: Ia9b74ae755d032a9b02fdc5f85575d4cd8ada326