GLESv2 support will come in a followup change but will take advantage
of the GLClientState changes.
Change-Id: Ib6cbb4dafbd071e3b59b1e5d808b3e23656ada92
When remapping a GLES texture to a different GL texture in
glEGLImageTargetTexture2DOES(), the GLES texture's previous GL texture was
deleted unconditionally. This is bad when it came from an EGLImage and is
therefore owned by (and will continue to be used by) some other object.
The code now skips deleting the old GL texture if it came from an EGLImage.
This mirrors the logic in glDeleteTextures().
Change-Id: I5b650334a7019d824517c2915b1f23961fbbd809
The EGL->GL translator implementation of glEGLImageTargetTexture2DOES was
properly replacing uses of the target texture object with the texture object
associated with the EGLImage in the host GL library, but wasn't updating its
own info about the texture (dimensions, etc.). This broke places where the
translator relied on knowing this, e.g. when implementing the GLES glDrawTexi
call on top of GL glDrawArrays.
Change-Id: Ia4aefd89852a2609221c56da76bfac927464c0b2
This patch allows an auto-generated GLES encoder function to write
'isLarge' buffers with a custom writer, instead of calling stream->readFully()
directly.
This is intended to allow writing pixel or vertex data that is stored
with a specific stride.
Another patch will introduce the corresponding changes to the .attrib files
Change-Id: I6ca86b968cd3f4db91676bc485ee1e84419e50e0
This patch modifies the guest encoding libraries to avoid
un-necessary copies when sending large buffers (e.g. pixels)
to the host. Instead, the data is sent directly through a
new IOStream method (writeFully()).
On my machine, this improves the NenaMark2 benchmark
(from 50.8 to 57.1 fps). More importantly, this speeds up
the display of non-GL surfaces too, which are sent through
the special rcUpdateColorBuffer() function in gralloc_goldfish.
This is noticeable in many parts of the UI (e.g. when scrolling
through lists).
To tag a given parameter, use the new 'isLarge' variable flag
in the protocol .attrib file.
Implemented for the following encoding functions:
rcUpdateColorBuffer
glTexSubImage2D
glTexImage2Di
glBufferData
glBufferSubData
glCompressedTexImage2D
glCompressedTexSubImage2D
glTexImage3DOES
glTexSubImage3DOES
glCompressedTexImage3DOES
glCompressedTexSubImage3DOES
+ Optimize the auto-generated encoder functions to avoid
repeated function calls (for size computations).
Change-Id: I13a02607b606c40cd05984cd2051b1f3424bc2d0
The modules here are only built when BUILD_EMULATOR_OPENGL is defined to true
in your environment or your BoardConfig.mk (see tools/emulator/opengl/Android.mk)
Change-Id: I5f32c35b4452fb5a7b4d5f9fc5870ec1da6032e6
This patch adds support for Win32 named pipes for the communication
channel between the Opengl renderer library and its clients.
Named pipes should be much faster than local TCP sockets on this
platform. Note that by default, TCP sockets are still used. The
emulator needs to call setStreamMode(STREAM_MODE_PIPE) to be able
to use these.
Change-Id: I86d36624cf2b7fdd50f41e1e43c908348dca4657
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
This re-enables the build of the gralloc GLES emulation library.
This is only for experimentation / debugging purpose. GLES emulation
is still disabled by default in the emulator. Even if you force-enable
it by using the '-gpu on' flag, this module will not properly yet
and nothing will be displayed.
Change-Id: I8f0ca8805ed99037b011365d08507ca08bff5e75
This fixes the definition of the emulator-specific egl.cfg file
used to indicate to our EGL system library which support modules
are available in the emulator.
We need to list two modules here:
'emulation' corresponding to GPU emulation
'android' corresponding to the software renderer
The indices before each name correspond to the 'display' and 'impl'
numbers that are expected by frameworks/base/opengl/libs/EGL/Loader.cpp
In a nutshell, 'display' should always be 0, and 'impl' should be 0
for the software renderer, and 1 for a hardware-based one. See the code
under framewors/base/opengl/libs/EGL/egl.cpp for mode details.
Change-Id: I52c898759200c2dfba9049ed00b31b18e8c37f69
The gralloc.goldfish module cannot build in master because
the gralloc interface evolved considerably since gingerbread
(which the current code is based on).
For now, disable it completely, this will make it impossible
to test GPU emulation in the internal master tree for now.
We'll have to port this module to the new world-order to solve
this.
Change-Id: I864217f9c41fd1234f0df497005499800af879e5
This adds an initLibrary() function to libOpenglRender.
It will be used by the emulator to fallback on software rendering
if the library cannot be initialized properly, e.g. if it is not
possible to load the host EGL/GLES libraries.
Change-Id: I41e8ad73a315166e4a15cbee1db72c2552370f46
This patch changes the filter used to scale the GL window
in the rendering library. Instead of nearest-neighbour, use
bi-linear, which will provide for much more pleasant results
when scaling the emulator UI window, or toggling to full-screen
mode.
Change-Id: If2d9e1300fa4878c25e1221eaedb565b9150431a
This patch modifies the gralloc.goldfish module to check
that the emulator does, indeed, support GPU emulation.
If this is not the case, it loads the framebuffer-based fallback
module (gralloc.default) explicitely and uses it instead.
This is necessary because sometimes the emulator will be started
in headless mode in restricted environment, i.e. without access
to the display subsystem or GL libraries, which make GPU emulation
impossible.
We check for ro.kernel.qemu.gles which will be either undefined
or set to 0 if the emulator doesn't support GPU emulation, or 1
otherwise.
Change-Id: Ib6b143e6dcdfb44ff2c5b889138d0fb4118bb461
This patch modifies GLDispatch.cpp in the translator libraries
to open the Darwin GL library as a framework. Using a hard-coded
system path prevents the requirement to modify LD_LIBRARY_PATH
or DYLD_LIBRARY_PATH to point to the directory that contains the
library.
In this specific case, this is equivalent to
/System/Frameworks/OpenGL.framework/Libraries/libGL.dylib
But is the "kosher" way to open it the library.
Change-Id: Iccd6568d36fc97200617c268f05d7b4ea85f918e
You can still re-enable them by uncommenting one line in
development/tools/emulator/opengl/Android.mk
Change-Id: Ie0a640b6f3359b437aba40b124da0892defb00ef
These libraries are only used by libOpenglRender, so make them
static so that their code is included in this shared library
instead. This reduces the shared library dependencies that
will be required from the emulator.
Change-Id: I24438932f0d6b40852b515140ea6950c04124fdd
This patch forces the default definition of BUILD_EMULATOR_OPENGL_DRIVER
to true by default, which is the common case where we will build the
goldfish-specific gralloc hardware module to allow SurfaceFlinger to
use GLES emulation exclusively.
The only reason to define thi to 'false' today is to debug specific
apps, but this requires displaying the GL output in a different window
than the emulator to be usable.
Change-Id: Iaf03a9c780449bb6b991928d324a088021a73203
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