OSDN Git Service
Lingfeng Yang [Fri, 23 Sep 2016 20:49:09 +0000 (13:49 -0700)]
Fix dEQP-EGL.functional.resize.pixel_density.*
bug:
31703045
These tests attempt to calculate native DPI by creating
very small buffers, rendering them to a high resolution screen,
and then re-deriving the native DPI by scaling buffer size
against the window resolution in screen pixels.
Previously, they failed because EGL_HORIZONTAL_RESOLUTION
actually means to get the effective DPI of an EGL texture,
which is different from native DPI.
For example, if the screen is 2 pixels across and 4 meters wide,
the native dot pitch is 0.5 pixels per meter, but if
there is a 1x1 pixel texture filling the entire screen,
EGL_HORIZONTAL_RESOLUTION should return 0.25 pixels
per meter (1 texture pixel, 4 meters -> 0.25 ppm).
This CL queries the native window resolution and attempts
to calculate effective DPI from that.
Change-Id: I7f12d7964529bc95b5f89640dea00e9e16c66799
TreeHugger Robot [Fri, 23 Sep 2016 19:37:54 +0000 (19:37 +0000)]
Merge "Return error code in eglCreatePixmapSurface"
Lingfeng Yang [Fri, 23 Sep 2016 19:06:37 +0000 (19:06 +0000)]
Merge "Fix dEQP-EGL.functional.negative_api.choose_config"
Yahan Zhou [Fri, 23 Sep 2016 18:31:05 +0000 (18:31 +0000)]
Merge "Refactor pre-process GL resource management (guest)"
Yahan Zhou [Fri, 23 Sep 2016 17:57:23 +0000 (10:57 -0700)]
Return error code in eglCreatePixmapSurface
We do not support this function, but we still need to return the
expected error code to pass N-CTS tests:
dEQP-EGL.functional.negative_api#create_pixmap_surface
Change-Id: Ic2fc7aba4f494257773fb71b798f5bba0f8ad08d
Lingfeng Yang [Fri, 23 Sep 2016 16:42:32 +0000 (09:42 -0700)]
Fix dEQP-EGL.functional.negative_api.choose_config
bug:
31703518
This CL fixes the above test and:
- Raises EGL_BAD_PARAMETER if the |num_config| pointer is null.
- Receives EGL errors from host-side config choosing.
Change-Id: I34599ab4a8648a442aafc0e8e97b45932a4bbf32
Yahan Zhou [Fri, 23 Sep 2016 01:26:49 +0000 (18:26 -0700)]
Fix dEQP-EGL.functional.negative_api
Fix those 2 failures:
create_pbuffer_surface
surface_attrib
We need to return the right error code for them.
Change-Id: Ie8a3ed83ed36ee7619e769546869bb12f3c2ef4e
Yahan Zhou [Thu, 22 Sep 2016 19:33:50 +0000 (12:33 -0700)]
Refactor pre-process GL resource management (guest)
Previously we bind a process unique id (puid) to the GL encoder / decoder
commands when managing process owned GL resources.
This patch simplify it by telling each rendering thread its puid at the
beginning, and using that puid for resource management. It will make our
life easier when we need to change other resources from owned-by-thread
to owned-by-process (e.g. EglContext).
This CL must work with host CL:
https://android-review.googlesource.com/#/c/277778
Change-Id: I94a8cb55e8619c2f0da1a5669827e89fe42660d2
Yahan Zhou [Wed, 21 Sep 2016 00:18:34 +0000 (17:18 -0700)]
[NYC CTS] eglQuerySurface fix
NYC CTS DEQP EGL tries to query almost every attribute in
eglQuerySurface. This patch tries to add support for them.
It fixes the following tests:
dEQP-EGL.functional.query_surface.simple.pbuffer#rgb565_depth_stencil
dEQP-EGL.functional.query_surface.simple.pbuffer#rgb888_depth_stencil
dEQP-EGL.functional.query_surface.simple.pbuffer#rgba8888_depth_stencil
dEQP-EGL.functional.query_surface.simple.window#rgb565_depth_stencil
dEQP-EGL.functional.query_surface.simple.window#rgb888_depth_stencil
dEQP-EGL.functional.query_surface.simple.window#rgba8888_depth_stencil
Note that a large amount of tests are marked as not supported in
dEQP-EGL.functional.query_surface.simple. This should be a bug and we
should fix it.
Change-Id: I23f6a241326951f41716d6116bf363709263bd8d
Lingfeng Yang [Fri, 16 Sep 2016 15:54:03 +0000 (08:54 -0700)]
[AMD] Fix segfault in glCopyTexImage + cube map luminance
bug:
31523568
In particular, the test
dEQP.functional.texture.specification.basic_copyteximage2d.cube_luminance
segfaults the emulator on some AMD GPUs.
When we define cube maps using glCopyTexImage2D
and are using the GL_LUMINANCE internal format, if the negative
components of the cube map are defined first, the host AMD driver may
segfault (tested in Mobility Radeon and RX 480).
The workaround is to detect this particular API call, cube map target,
and internal format, and define the positive component first
using the same arguments, if the positive component has not been defined
already.
Change-Id: I26ed25bf3b7358ed7121a52f89d541c325beb6e4
TreeHugger Robot [Thu, 8 Sep 2016 21:35:13 +0000 (21:35 +0000)]
Merge "[CTS][deqp] avoid rebinding textures in glTex(Sub)Image2D"
Lingfeng Yang [Wed, 7 Sep 2016 21:40:03 +0000 (14:40 -0700)]
[CTS][deqp] avoid rebinding textures in glTex(Sub)Image2D
bug:
31307568
If we stop rebinding the same texture every call,
we can fix 4 CTS dEQP failures on Quadro K2200 / K600's:
dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_3
dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_7
dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_8
dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_9
These random (as in seeded only once, same "random" config everytime)
texture tests attempt to construct mipmaps in random order using
repeated calls to glTexImage2D.
Four of these tests fail because they construct the texture mipmaps
in just the wrong order to expose what seems like a NVIDIA driver bug:
if we attempt to glBindTexture the "same" texture before
each glTexImage2D AND do not start with mipmap level 0, we get a
corrupted texture for what seems like all mipmap levels that were
specified before mipmap level 0 was specified.
This CL avoids calling glBindTexture when we didn't need to overrride
the GL_TEXTURE_2D texture on the host. The previous behavior seems
unresonable, in fact: it is also not a high quality thing to do if
we always issue glBindTexture on host when "restoring" a texture target
that has NOT been overriden.
No regression has been detected in CTS dEQP GLES2, EGL / CTS camera.
It should also be a slight performance increase for apps that
heavily thrash glTexImage2D.
Change-Id: I6910d93733cb682737f49aff448097e263cd675b
Lingfeng Yang [Sat, 3 Sep 2016 20:13:50 +0000 (20:13 +0000)]
Merge "+rcDestroySyncKHR, don't leak on swapBuffers"
Lingfeng Yang [Wed, 31 Aug 2016 21:46:11 +0000 (14:46 -0700)]
+rcDestroySyncKHR, don't leak on swapBuffers
This CL is part of this host CL to clean up EGL sync objects:
https://android-review.googlesource.com/#/c/267892/
It does the following:
- adds rcDestroySyncKHR
- avoids creating an actual EGL sync object when in swapBuffers(),
because it will be cumbersome to delete it from the guest.
Instead, it specifically calls rcCreateSyncKHR and tells the host
to clean up the object when it has become signaled.
- refactors rcCreateSyncKHR / goldfish_sync_queue_work to
a common function.
- bumps the GLAsyncSwap version string to "ANDROID_EMU_native_sync_v2",
so that the emulator can work with all combinations of
old/new emulator/system-image.
Change-Id: Iff9a5e226b4026b955893c6f4d6ff3266009da6b
Yahan Zhou [Fri, 2 Sep 2016 18:29:50 +0000 (11:29 -0700)]
Clean up gralloc buildscript
The current script creates gralloc.ranchu module multiple times.
Change-Id: If8ed4010d19d622a4afe6e516cb5e29d953a08e6
TreeHugger Robot [Sat, 20 Aug 2016 00:03:23 +0000 (00:03 +0000)]
Merge "Per-process EGLImage resource release"
Yahan Zhou [Thu, 28 Jul 2016 23:31:59 +0000 (16:31 -0700)]
Per-process EGLImage resource release
https://buganizer.corp.google.com/issues/
29457657
This CL marks each EGLImage with its process unique ID when
communicating with the host, so that the host can properly clean up
EGLImages when the guest process is killed.
It is doing similar thing as in
https://googleplex-android-review.git.corp.google.com/#/c/
1207896/
The implementation reuses gralloc pipe. Because now the gralloc pipe
is also used outside of gralloc, this patch moves the gralloc pipe
implemenation ProcessPipe.cpp and also renames gralloc pipe.
Change-Id: I90c6d1d842ba2741d371f02a519e0fa904bc0f08
Dmitriy Filchenko [Thu, 18 Aug 2016 01:27:09 +0000 (18:27 -0700)]
Remove unused header.
BUG:
29824203
Change-Id: Ib764899053dffabae325b8e4e7488afa3892ee85
Dmitriy Filchenko [Tue, 16 Aug 2016 16:56:25 +0000 (09:56 -0700)]
Update the get_process_name call.
BUG:
29824203
Change-Id: I47efa5872619dcfe36579a33162214545daa9907
Bo Hu [Sat, 13 Aug 2016 03:08:48 +0000 (03:08 +0000)]
Merge "Emulator: allows usage mismatch in gralloc_lock"
bohu [Thu, 11 Aug 2016 00:19:50 +0000 (17:19 -0700)]
Emulator: allows usage mismatch in gralloc_lock
For emulater with gpu host, there is no need to require that the
gralloc_lock usage has to match gralloc_alloc usage type.
If any buffer is allocated, it can be used for both read and write.
Bug:
30784436
Change-Id: I4014a3338e64cb1e8cdaa5ff50eecae0d44de318
Yahan Zhou [Wed, 10 Aug 2016 21:15:55 +0000 (21:15 +0000)]
Merge "Revert "glGetProgramiv validation on the guest""
Yahan Zhou [Wed, 10 Aug 2016 21:15:45 +0000 (21:15 +0000)]
Revert "glGetProgramiv validation on the guest"
This reverts commit
b2856fc5983846339c3b9147b9ac4e36dd5408d5.
Let's leave the check to the host, as the check here cannot handle the situation when a program is marked for delete but not yet deleted.
CTS regression:
dEQP-GLES2.functional.lifetime.delete_used -- program
Change-Id: Ib6dcf0c11407da06fd1b91e3cdb89ee711af481b
Bo Hu [Tue, 9 Aug 2016 01:09:15 +0000 (01:09 +0000)]
Merge "Revert "Revert "Emulator: create host color buffer for Vedio encoder"""
Bo Hu [Tue, 9 Aug 2016 01:09:06 +0000 (01:09 +0000)]
Revert "Revert "Emulator: create host color buffer for Vedio encoder""
This reverts commit
1a80c227edbc86ae585276a0b7c45e28458813f1.
Change-Id: I484c2092e30d23038f3a6ffbdf646960747b54b4
Bo Hu [Sun, 7 Aug 2016 05:10:31 +0000 (05:10 +0000)]
Merge "Revert "Emulator: create host color buffer for Vedio encoder""
Bo Hu [Sun, 7 Aug 2016 05:10:11 +0000 (05:10 +0000)]
Revert "Emulator: create host color buffer for Vedio encoder"
temp revert to track down CTS regression starting with build 107
where massive cases were not executed
This reverts commit
1454b715016822c276b8bcaaeabca2d8f5b4857c.
Change-Id: I88b37b6087dcb6677c7afb863022063db6ee5893
Lingfeng Yang [Sat, 6 Aug 2016 00:10:30 +0000 (17:10 -0700)]
YUV_428_888 <-> RGB888 conversion
This time, I think I have it right---my assumptions:
No align
ystride == image width
cstride = ystride / 2
Change-Id: I645c98e3f2cc4271ba7be807102cc2809479cd48
Joshua Lang [Fri, 5 Aug 2016 21:18:52 +0000 (14:18 -0700)]
Change yv12 conversion from rgb565 to 888
Media codec tests that caused back to back yv12 - rgb565 conversions were
failing color threshold assertions. Changed the conversion to rgb888
instead to keep more precision during conversions.
Bug:
28750939
Change-Id: I75001261db82b9ecfa943d9a791a737a811cb168
Lingfeng Yang [Fri, 5 Aug 2016 21:17:33 +0000 (21:17 +0000)]
Revert "Make YUV_420_888 color correct"
This reverts commit
627769df70a80f638ded32984118a62196afaafc.
Change-Id: I25112dd7735446359c2493108635205eca31a662
Lingfeng Yang [Fri, 5 Aug 2016 19:17:23 +0000 (12:17 -0700)]
Fix comments and style in YUV_420_888 handling
Change-Id: Ia64e2396427c944f5eedef30c4bc098303fefd88
Lingfeng Yang [Fri, 5 Aug 2016 18:31:25 +0000 (11:31 -0700)]
Make YUV_420_888 color correct
This CL uses the existing YV12 / RGB converter to
do YUV_420_888 color conversion, by switching
the U and V start addresses in cases where the
format is YUV_420_888.
Change-Id: I5effe6e4ecad02b9110095521082682b785a2390
Lingfeng Yang [Fri, 5 Aug 2016 18:38:57 +0000 (11:38 -0700)]
Fix build on older APIs
Change-Id: I3c38c5a7f686630bb0e3fa02e840d5eade75b58a
Lingfeng Yang [Fri, 5 Aug 2016 18:13:59 +0000 (18:13 +0000)]
Merge "Allow YUV_420_888 through gralloc"
Lingfeng Yang [Thu, 28 Jul 2016 21:29:50 +0000 (14:29 -0700)]
Allow YUV_420_888 through gralloc
This is currently only used to help pass tests that
involve the direct use of the YUV_420_888 format.
An attempt is made at format conversion using the same
code for converting YV12. This would keep memory structures
intact, but result in the wrong colors.
The test:
android.hardware.camera2.cts.AllocationTest#testAllocationFromCameraFlexibleYuv
has a much higher probability of passing with this change,
provided the emulated camera is used,
and the other CLs:
Guest:
https://googleplex-android-review.git.corp.google.com/#/c/
1282093/
https://googleplex-android-review.git.corp.google.com/#/c/
1291418/
Host:
https://android-review.googlesource.com/#/c/253893/
Change-Id: I70f86402ace6debae731a7f5b98833be3096fdd6
Yahan Zhou [Thu, 4 Aug 2016 23:14:20 +0000 (16:14 -0700)]
Do not set up anything if glUseProgram gets an invalid program name
It should set the appropriate error code and do not do anything.
Change-Id: Ie81a4ba3a1907607e03d82d62416c4699cf6bb1b
Yahan Zhou [Thu, 4 Aug 2016 22:31:47 +0000 (15:31 -0700)]
glGetProgramiv validation on the guest
This is to respect GLES2 spec, which says
"If an error is generated, no change is made to the contents of params."
https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetProgramiv.xml
Our encoder almost aways change the contents of params no matter what.
So we need to have the check before encoding.
Change-Id: I754a51ee43c1e83aebd2fd89d595475960cc2301
bohu [Thu, 4 Aug 2016 19:19:22 +0000 (12:19 -0700)]
Emulator: create host color buffer for Vedio encoder
MediaCodec has GRALLOC_USAGE_HW_VIDEO_ENCODER usage flag
when it creates colorbuffer and renders to it.
We need to create corresponding colorbuffer on the
host to support such usage type.
Bug:
30088791
Change-Id: I911b1ecfb563eab5634abb2249657c1caa668a73
Bo Hu [Fri, 29 Jul 2016 19:10:31 +0000 (19:10 +0000)]
Merge "Emulator: Support YV12 format in gralloc"
bohu [Mon, 18 Jul 2016 23:05:38 +0000 (16:05 -0700)]
Emulator: Support YV12 format in gralloc
The YV12 format is used by codec when it generates output.
Need to support it to pass android.media.cts.ImageReaderDecoderTest
Note:
This YV12 format and other yuv formats are only meant to be used
as software read/write buffer; they are not supported by the
host GL's colorbuffer. so when we want to render it to the host
screen, we have to convert to RGB565 format or other RGB format.
Bug:
30112142
Change-Id: I874e8f2e040fd15ad02ce48c0d65bed1cd08a791
Lingfeng Yang [Thu, 28 Jul 2016 18:21:04 +0000 (11:21 -0700)]
Fix build
Change-Id: I22cc97d7931bfe87e86a0c5203e7e36dac9d327b
Lingfeng Yang [Thu, 28 Jul 2016 18:00:10 +0000 (18:00 +0000)]
Merge changes from topic 'emu-glsync-guest-v2'
* changes:
More efficient swapBuffers
Implement EGL_KHR_fence_sync/EGL_ANDROID_native_fence_sync for emulator
Add backing implementation of EGLSyncKHR objects
Add DEBUG_EGL / DPRINT macros for debug logging EGL.
Goldfish sync driver user-space interface
Add encoder entries for EGL_KHR_fence_sync
ANDROID_EMU_ASYNC_SWAP extension searching + setting
Lingfeng Yang [Fri, 22 Jul 2016 22:21:58 +0000 (15:21 -0700)]
More efficient swapBuffers
Previously, we were using glFinish() in the host to make sure
that a buffer that we are presenting has been completely written to.
That is bad for performance, because it usually means to block the CPU
until the GPU's command queue is completely empty and all operations
have completed.
This CL uses eglCreateSyncKHR with a native fence FD to guarantee
the draw buffer is finished before presenting. The idea is that
after rcFlushWindowColorBufferAsync has queued up GPU commands to
finish up the draw buffer, eglCreateSyncKHR follows that up with a fence
command.
The fence command in turn is represented by a FD (by providing
EGL_SYNC_NATIVE_FENCE_ANDROID as the sync object type). Giving that FD
to queueBuffer tells SurfaceFlinger/BufferQueue not to do anything
that depends on the contents of that buffer until the fence command
has completed.
Theoretically, we are supposed to wait on the FD coming from dequeueBuffer
as well, to make sure no one else is using it, but in practice,
it matters much less; we will just overwrite the contents anyway, and it
has not proved to be any problem in terms of visual artifacts.
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535
https://googleplex-android-review.git.corp.google.com/
1219536
https://googleplex-android-review.git.corp.google.com/
1219537
https://googleplex-android-review.git.corp.google.com/
1219538
https://googleplex-android-review.git.corp.google.com/
1219539
https://googleplex-android-review.git.corp.google.com/
1219570 <- needed
https://googleplex-android-review.git.corp.google.com/
1219571 <- this CL
Change-Id: I3dd1b69c77665ac0143bd5a302e6a5a04736c9ea
Lingfeng Yang [Thu, 14 Jul 2016 00:44:03 +0000 (17:44 -0700)]
Implement EGL_KHR_fence_sync/EGL_ANDROID_native_fence_sync for emulator
The core purpose of these two extensions is to provide a way for one thread
to know when an EGL command has finished processing in another thread,
so that it is safe to do work that touches common memory regions,
such as frame buffers in a concurrent draw/present setup.
eglCreateSyncKHR inserts a fence command into the current context's
command queue, and returns a handle to that command. eglClientWaitSyncKHR
takes such a handle as input and blocks the CPU until that fence command
is completed.
For the emulator, we implement these commands by wrapping underlying
host implementations. That is enough for EGL_KHR_fence_sync, but we also
include an interface to the Goldfish Sync driver in order to have
EGL_ANDROID_native_fence_sync. Goldfish Sync driver adds the ability for
these fence commands and their completed/not completed state
to be represented as FDs, which the rest of the Android platform
uses for doing graphics asynchronously.
Related specs:
https://www.khronos.org/registry/vg/extensions/KHR/EGL_KHR_fence_sync.txt
https://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535
https://googleplex-android-review.git.corp.google.com/
1219536
https://googleplex-android-review.git.corp.google.com/
1219537
https://googleplex-android-review.git.corp.google.com/
1219538
https://googleplex-android-review.git.corp.google.com/
1219539
https://googleplex-android-review.git.corp.google.com/
1219570 <- uses this
All changes above, including host-side, are needed for this to work.
The following CL uses the functionality in this one:
https://googleplex-android-review.git.corp.google.com/
1219571
Change-Id: I9bf0ba0994b2e8689a6bed9c5eeee206a5e21f45
Lingfeng Yang [Thu, 14 Jul 2016 00:24:59 +0000 (17:24 -0700)]
Add backing implementation of EGLSyncKHR objects
For EGL_KHR_fence_sync and related extensions in the emulator,
we'll need an object that can track host-side sync objects
along with any Android sync framework fence fd's that
may be produced, and be able to maintain the type and status
of sync objects (generally, EGL fence vs. EGL fence + fence fd,
and signaled vs. unsignaled).
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535
https://googleplex-android-review.git.corp.google.com/
1219536
https://googleplex-android-review.git.corp.google.com/
1219537
https://googleplex-android-review.git.corp.google.com/
1219538
https://googleplex-android-review.git.corp.google.com/
1219539 <- this CL
https://googleplex-android-review.git.corp.google.com/
1219570 <- uses this
https://googleplex-android-review.git.corp.google.com/
1219571
Change-Id: Ic20d11500f3a6e7164c1a5919937b26a885b1987
Lingfeng Yang [Thu, 14 Jul 2016 00:11:47 +0000 (17:11 -0700)]
Add DEBUG_EGL / DPRINT macros for debug logging EGL.
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535
https://googleplex-android-review.git.corp.google.com/
1219536
https://googleplex-android-review.git.corp.google.com/
1219537
https://googleplex-android-review.git.corp.google.com/
1219538 <- this CL
https://googleplex-android-review.git.corp.google.com/
1219539
https://googleplex-android-review.git.corp.google.com/
1219570 <- uses this
https://googleplex-android-review.git.corp.google.com/
1219571
Change-Id: I3041732beffb3bbc92196a082dc73d3dd74a0c4e
Lingfeng Yang [Thu, 14 Jul 2016 00:05:09 +0000 (17:05 -0700)]
Goldfish sync driver user-space interface
goldfish_sync.h implements the ioctls that interface
with the goldfish sync driver and the goldfish sync
virtual device on the host.
goldfish_sync_open() tells the kernel driver that
there is a new context in which sync work
may be required. This is represented by a user-space
FD. Note that this is not a timeline FD
as with SW_SYNC_USER.
The intention is to associate each EGL context
with a sync context, reflected in getGoldfishSyncFd()
in the EGLContext_t class.
The IOC_QUEUE_WORK ioctl may return a valid fence FD
that can be used by the system to do work while
waiting for that fence FD to be signaled.
In order to avoid bad behavior, timelines and sync fence objects
are still completely maintained and signaled by the
kernel driver and underlying host system.
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
In particular, the ioctl() implementation is listed in
https://android-review.googlesource.com/238399
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535
https://googleplex-android-review.git.corp.google.com/
1219536
https://googleplex-android-review.git.corp.google.com/
1219537 <- this CL
https://googleplex-android-review.git.corp.google.com/
1219538
https://googleplex-android-review.git.corp.google.com/
1219539
https://googleplex-android-review.git.corp.google.com/
1219570 <- uses this
https://googleplex-android-review.git.corp.google.com/
1219571
Change-Id: I74b92415acd95b4bf2ec8aa3a6ff5392d86cf0b3
Lingfeng Yang [Wed, 13 Jul 2016 23:27:43 +0000 (16:27 -0700)]
Add encoder entries for EGL_KHR_fence_sync
- also update encoder templates to latest version
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535
https://googleplex-android-review.git.corp.google.com/
1219536 <- this CL
https://googleplex-android-review.git.corp.google.com/
1219537
https://googleplex-android-review.git.corp.google.com/
1219538
https://googleplex-android-review.git.corp.google.com/
1219539
https://googleplex-android-review.git.corp.google.com/
1219570 <- uses this
https://googleplex-android-review.git.corp.google.com/
1219571
Change-Id: Ief436ccf8947d35c4b7719dc9ef6def4488cb3f0
Lingfeng Yang [Wed, 13 Jul 2016 23:26:10 +0000 (16:26 -0700)]
ANDROID_EMU_ASYNC_SWAP extension searching + setting
In order for the async frame swapping feature to work
with all combinations of new/old emulators and system images,
one way to do it is to introduce an emulator-specific GL
extension. This is the same way the checksum calculation
support works.
This is a port to device/generic/goldfish-opengl, based on
https://googleplex-android-review.git.corp.google.com/#/c/
1065345/
This is part of a sequential, multi-CL change. There is also
a corresponding multi-CL change on the host side:
https://android-review.googlesource.com/#/q/topic:emu-glsync-host
The changes in the system image are as follows:
platform/build:
https://googleplex-android-review.git.corp.google.com/
1024926
device/generic/goldfish:
https://googleplex-android-review.git.corp.google.com/
1230942
device/generic/goldfish-opengl:
https://googleplex-android-review.git.corp.google.com/
1219535 <- this CL
https://googleplex-android-review.git.corp.google.com/
1219536
https://googleplex-android-review.git.corp.google.com/
1219537
https://googleplex-android-review.git.corp.google.com/
1219538
https://googleplex-android-review.git.corp.google.com/
1219539
https://googleplex-android-review.git.corp.google.com/
1219570
https://googleplex-android-review.git.corp.google.com/
1219571
Change-Id: Id07a72e5cb3397ff9d0b55788b8ad763c15050f3
bohu [Mon, 25 Jul 2016 19:25:18 +0000 (12:25 -0700)]
Emulator: allow swread of GRALLOC_USAGE_HW_VIDEO_ENCODER buffer
Because either hardware or software encoder can be used, a buffer
created with GRALLOC_USAGE_HW_VIDEO_ENCODER should allow both to
read the buffer.
Bug:
30088791
Change-Id: I3cb6c1449628fcd0f676858f52c6dce01577fa95
Yahan Zhou [Fri, 22 Jul 2016 20:51:14 +0000 (13:51 -0700)]
Fix gralloc pipe and add flush to rcCloseColorBufferPuid
There is a typo in gralloc pipe. Also rcCloseColorBufferPuid needs to be
flushed to function correctly.
Change-Id: Ic006578f560dede0bdc073d6ab862e588b71e452
Colin Cross [Thu, 21 Jul 2016 04:47:57 +0000 (04:47 +0000)]
Merge "Fix master build"
Christopher Ferris [Thu, 21 Jul 2016 02:09:47 +0000 (02:09 +0000)]
Merge "Revert "Use the new <system/qemu_pipe.h>.""
Christopher Ferris [Thu, 21 Jul 2016 02:08:53 +0000 (02:08 +0000)]
Revert "Use the new <system/qemu_pipe.h>."
This reverts commit
a4b8bbbcc63dd03305bcdb6acf4d916da2889206.
Change-Id: I3bd5b8b88c9462f7af744c6ec626ff7fe0432dc2
Christopher Ferris [Thu, 21 Jul 2016 01:45:04 +0000 (01:45 +0000)]
Merge "Use the new <system/qemu_pipe.h>."
Christopher Ferris [Thu, 21 Jul 2016 01:42:55 +0000 (18:42 -0700)]
Use the new <system/qemu_pipe.h>.
The old qemu_pipe.h was moved so change to use the new location of the
header.
Change-Id: I032a9444a430f3426ec430fff27f6b117443b5ca
Yahan Zhou [Thu, 21 Jul 2016 00:15:15 +0000 (17:15 -0700)]
Fix master build
Change-Id: Ib81144748f520a9812c98c3cd23f114ba490d297
Yahan Zhou [Wed, 20 Jul 2016 23:26:20 +0000 (23:26 +0000)]
Merge "Fix jb build"
Yahan Zhou [Wed, 20 Jul 2016 23:12:02 +0000 (16:12 -0700)]
Fix jb build
Change-Id: I31b9e3e44523819f54da362e688b2c5098ec27bd
Bo Hu [Wed, 20 Jul 2016 21:37:20 +0000 (21:37 +0000)]
Merge "Fix jb arm boot"
Yahan Zhou [Wed, 20 Jul 2016 21:31:33 +0000 (14:31 -0700)]
Fix jb arm boot
Change-Id: Ibf124424f703cc30ee7b5db7c3589b69728a4c32
Yahan Zhou [Tue, 19 Jul 2016 23:27:32 +0000 (23:27 +0000)]
Merge "Misc fix in gralloc pipe"
Yahan Zhou [Mon, 18 Jul 2016 23:14:21 +0000 (16:14 -0700)]
Misc fix in gralloc pipe
Fix size and have a confirmation message in gralloc pipe. Also fix the
naming of puid.
Change-Id: I0b87b9e6bcf88172792705ac9643e150b227be96
Yahan Zhou [Mon, 18 Jul 2016 23:03:25 +0000 (23:03 +0000)]
Merge "Create pre-process gralloc pipe on the guest"
Yahan Zhou [Mon, 18 Jul 2016 23:03:08 +0000 (23:03 +0000)]
Merge "Make goldfish-opengl compatible with master"
Yahan Zhou [Mon, 11 Jul 2016 18:51:43 +0000 (11:51 -0700)]
Create pre-process gralloc pipe on the guest
https://buganizer.corp.google.com/issues/
29457657
This patch create a pre-process pipe in gralloc. It tells the host which
process holds which color buffer, so that on process exit the host can
correctly reduce the reference counters of all gralloc color buffers.
Each process will get a 64bit identifier from the host, to help the host
identifying it.
It works with host patch:
https://android-review.googlesource.com/#/c/246823/
Change-Id: I8d9a512a1f151f4f29a3b318ccf17d62d8f46512
Yahan Zhou [Mon, 18 Jul 2016 19:20:04 +0000 (12:20 -0700)]
Make goldfish-opengl compatible with master
Change-Id: I103424ff9e2bfdad8181850a216b7a0ee0290267
Chih-Hung Hsieh [Thu, 9 Jun 2016 21:02:30 +0000 (14:02 -0700)]
[cherry-pick] Fix misc-macro-parentheses warnings in goldfish/opengl.
Add parentheses around macro arguments used beside operators.
Use NOLINT to suppress warning or clang-tidy can put parentheses at
wrong places.
Bug:
28705665
cherry-pick from https://android-review.googlesource.com/#/c/237790/
Change-Id: I40653d3e617f84c07b308bb9c2869219f6563706
Test: build with clang-tidy
Tina Zhang [Mon, 7 Sep 2015 02:47:07 +0000 (10:47 +0800)]
[cherry-pick] Delete some useless files
Currently, some files are not used by the guest part of
GL emulation any more.
cherry-pick from https://android-review.googlesource.com/#/c/169695/
Change-Id: I1fb87614aaba19be6863d6fb85e80937d0778384
Signed-off-by: Tina Zhang <tina.zhang@intel.com>
Christopher Wiley [Fri, 12 Feb 2016 20:37:09 +0000 (12:37 -0800)]
[cp] Build camera related goldfish HALs as brilloemulator for Brillo
Brillo runs a reduced subset of the graphics stack and a different
system configuration from goldfish. However, many of these HALs still
make sense for Brillo. Build the HALs with a board name that will allow
the camera and graphics subsystems to pick them up.
Bug:
26936651
Test: brilloemulator is able to pick up and use these HALs to take
fake pictures.
cherry-pick from:
https://android-review.googlesource.com/#/c/202700/
Change-Id: I79265ada33a5a97c6f670b79f9c239606465c9fc
Christopher Wiley [Fri, 12 Feb 2016 20:32:07 +0000 (12:32 -0800)]
[cherry-pick] Refactor gralloc HAL to not repeat defintions
Bug:
26936651
cherry-pick from:
https://android-review.googlesource.com/#/c/202619/
Change-Id: If11a2af0496cdaf86e3bc87ded37fc8d93b7fa16
Miroslav Tisma [Wed, 23 Sep 2015 10:54:56 +0000 (12:54 +0200)]
[cherry-pick] GPU: Build gralloc.ranchu.so
cherry-pick from:
https://android-review.googlesource.com/#/c/172935/
Change-Id: Ie449043b06b6fefa52bdbd68c243a1165ec95ee1
Yahan Zhou [Fri, 1 Jul 2016 22:47:21 +0000 (15:47 -0700)]
Make it compatible with ics-mr1
Change-Id: I8661fa4cc93111dfdb5fe9fa73f8a47b2820f615
Yahan Zhou [Thu, 30 Jun 2016 21:16:16 +0000 (21:16 +0000)]
Merge "Make opengl compatible with gingerbread"
Yahan Zhou [Thu, 30 Jun 2016 21:09:10 +0000 (21:09 +0000)]
Merge "Revert "Workaround: disable checksum for a problem in glTexSubImage2D""
Yahan Zhou [Thu, 23 Jun 2016 20:58:09 +0000 (13:58 -0700)]
Make opengl compatible with gingerbread
This patch makes mnc opengl compatible with gingerbread. With this
patch, you can copy-paste the opengl folder to gingerbread and it will
just build.
Notice that in gingerbread, the GL folder is in
development/tools/emulator
Change-Id: I99f060edd517a7afd425fd2103cbceaa61f0fc82
Yahan Zhou [Fri, 3 Jun 2016 00:24:03 +0000 (00:24 +0000)]
Revert "Workaround: disable checksum for a problem in glTexSubImage2D"
The checksum enable/disable should be control by feature control now.
This reverts commit
2a5a09abd50933d7cc4b1302769a19ffdf9d104b.
Change-Id: I8f33718f7b2112fd6abcfd51fadc336e9bd15a3a
Yahan Zhou [Mon, 20 Jun 2016 19:28:34 +0000 (12:28 -0700)]
Make GL build script compatible with jb (and mr1.1, mr2)
Notice that in jb, the GL encoder is located in sdk/emulator/opengl. In
jb-mr1.1, the encoder is in development/tools/emulator/opengl.
After this patch, it should just work if you copy the opengl directory
from mnc to jb.
Change-Id: I4b6ba6daeb64315ecf72b52b142acbbccdc4dbe0
Yahan Zhou [Tue, 28 Jun 2016 00:00:11 +0000 (00:00 +0000)]
Merge "Revert "Temporarily rename makefile to avoid building duplicate opengl libs.""
Yahan Zhou [Mon, 27 Jun 2016 22:48:39 +0000 (22:48 +0000)]
Revert "Temporarily rename makefile to avoid building duplicate opengl libs."
This reverts commit
8b2652824b14889092d41d263762b9f3bdf6f86c.
Change-Id: I93ceaea56f8ef4ed90a73af5b04f7a1fed0083e0
Yahan Zhou [Mon, 27 Jun 2016 22:16:40 +0000 (22:16 +0000)]
Merge "Fix 3Dmark crash - preserve more host connections"
Lingfeng Yang [Fri, 24 Jun 2016 02:06:28 +0000 (19:06 -0700)]
Fix 3Dmark crash - preserve more host connections
The CL
https://googleplex-android-review.git.corp.google.com/#/c/
1131769/
for killing host connections was too aggressive.
It incorrectly assumed that if eglInitialize was not called in the
current thread, it'd be treated as a gralloc-only connection.
It's perfectly possible to create a new thread,
not call eglInitialize, and call eglCreateContext instead,
which is within proper usage since after there is supposed
to be only one display per process.
This situation resulted in 3DMark crashing, because once the
connection is killed on a thread that is not actually gralloc-only,
all the state goes away and segfault is just a matter of time.
This CL makes it so that eglCreateContext / eglMakeCurrent
mark the connection as not gralloc only, preventing the
connection from being erroneously killed.
The behavior where no extra render threads are created
when opening recents is still preserved.
(Cherry-pick from
ebff5363850076de2623b6f6a0ff035ea3e823d5)
Change-Id: I20a204aefca91e5ac8f6b097d9fcd799f6b02583
Prathmesh Prabhu [Mon, 27 Jun 2016 20:30:13 +0000 (13:30 -0700)]
Temporarily rename makefile to avoid building duplicate opengl libs.
We've yet to drop the opengl code from the old location. Turns out that
simply including this new source location leads the Android build system
to build the lib from both the old and new location.
Renamed the Android.mk file here to avoid building from this location
until the migration is complete.
Change-Id: I66b5f4201f99b8a17c814918e5b42489d686d7c5
Surendra Vispute [Fri, 24 Jun 2016 00:24:14 +0000 (17:24 -0700)]
Merge opengl/ from device/generic/goldfish to /
Yahan Zhou [Wed, 22 Jun 2016 23:13:17 +0000 (23:13 +0000)]
Merge "Fix glTexSubImage2D" into mnc-emu-dev
Yahan Zhou [Wed, 22 Jun 2016 22:36:04 +0000 (15:36 -0700)]
Fix glTexSubImage2D
This is to port
https://googleplex-android-review.git.corp.google.com/#/c/
1145109
into mnc
Change-Id: Ic53c1181ab1c69fb33c5758034c0c4ec131b010e
Yahan Zhou [Wed, 22 Jun 2016 22:26:08 +0000 (15:26 -0700)]
Fix build scripts for klp
The previous build script makes klp fail to boot. This patch fixes it.
Change-Id: I091fdd29ef3f37d10d5f56c81e9ba17618214ebf
Yahan Zhou [Sat, 18 Jun 2016 00:40:14 +0000 (17:40 -0700)]
Make build script compatible with klp and up
It gets rid of c++11 and makes build script compatible with klp and up.
It also includes GL headers here, because headers in framework/native
might be different across API levels.
Change-Id: Ida425416a392cef878256965d69b54afe42b7263
Bill Rassieur [Mon, 20 Jun 2016 22:30:41 +0000 (15:30 -0700)]
Initial empty repository
Yahan Zhou [Mon, 20 Jun 2016 19:58:05 +0000 (19:58 +0000)]
Merge "Fix EGL cleanup code for CTS android.nativeopengl" into mnc-emu-dev
Yahan Zhou [Fri, 10 Jun 2016 00:54:34 +0000 (17:54 -0700)]
Fix EGL cleanup code for CTS android.nativeopengl
In CTS, android.nativeopengl.EGLCleanupTest tries to repeatatively
create and destroy egl context for 1000 times to check for memory leaks.
This patch releases resources when destroying contexts.
It turns android.nativeopengl.EGLCleanupTest from failure to flaky,
because of two other issue:
(1) There is a 1 min timeout in the test:
cts/tools/tradefed-host/src/com/android/cts/tradefed/testtype/
WrappedGTest.java
Our emulator can barely finish it within 1 min.
(2) There is another bug that may trigger UI rendering events after the
test begun, which crashes randomly because this test releases rendering
resources. It needs to be fixed in another patch.
Change-Id: Id285f526149638c63eb78c167c7d2daef7bd2412
Yahan Zhou [Mon, 20 Jun 2016 16:58:21 +0000 (16:58 +0000)]
Merge "Regenerate gl encoder from qemu" into mnc-emu-dev
Yahan Zhou [Fri, 17 Jun 2016 22:06:37 +0000 (15:06 -0700)]
Regenerate gl encoder from qemu
Regenerated from:
https://android-review.googlesource.com/#/c/237292/
Change-Id: I7972c4fddfb9765af39856ccd8aa29ac67558301
Lingfeng Yang [Mon, 13 Jun 2016 15:39:28 +0000 (08:39 -0700)]
Don't leave gralloc-only host connections hanging.
bug:
29318455
Memory leaks are becoming more of a problem, especially
with host machines that don't have much RAM and when
we use the emulator for long periods of time.
This CL fixes the problem detailed in the bug link,
which is that the number of render threads
(and thus thread-specific storage) skyrockets when
repeatedly pressing the Recents button while an app is active.
The thing is that there are lots of threads
that never use the EGL display, just gralloc, in order
to do gralloc things like update the screenshot display
of apps in recents.
These threads are not cleaned up because a thread pool
is often used to manage these sorts of tasks.
If a new or different thread suddenly wants to update
the recents screenshots through gralloc, a new connection
will be established.
This CL uses gralloc_unregister_buffer as a signal
for when a thread might be done with gralloc in general,
exiting the host connection immediately.
Of course, there may be other things that the thread wants
to do, but then it can just go ahead and create a new connection.
We also use the heuristic that we do not exit on gralloc_unregister_buffer
when the thread seems to be a bona fide rendering thread
(eglInitialize has been called).
There are still more leaks going on, this fixes just
one source of them.
After this CL, the render thread count should be held constant
when repeatedly starting apps and going to recents.
Change-Id: I5f57539429f149e3a938467e3b82fa911ab118c3
Bjoern Johansson [Mon, 13 Jun 2016 23:09:20 +0000 (16:09 -0700)]
Use correct format when reading color buffers
When reading back data from color buffers on the host make sure gralloc
uses the correct format and type parameters. Previously it was hardcoded
based on RGBA at 8 bits per component which would cause incorrect reads
for other pixel formats. This could cause QEMU pipe reads to call abort
because the reads went past a page boundary if the calculated size
exceeded the actual buffer size.
Change-Id: Ifa61f0a97d79577744b899b1bbb4120a0b9170eb
Yahan Zhou [Mon, 6 Jun 2016 19:42:17 +0000 (19:42 +0000)]
Merge "Move stream->flush to non-generated code" into mnc-emu-dev
Yahan Zhou [Mon, 6 Jun 2016 19:30:39 +0000 (12:30 -0700)]
Move stream->flush to non-generated code
Move flush command out of auto-generated code.
Change-Id: I3f3c8ca49344ea4c5357d7d6953364ce1015ea99
Yahan Zhou [Mon, 6 Jun 2016 17:51:45 +0000 (17:51 +0000)]
Merge "[cherry-pick] Lose HAVE_ANDROID_OS in goldfish." into mnc-emu-dev
Yahan Zhou [Thu, 2 Jun 2016 00:24:28 +0000 (17:24 -0700)]
Check vertex buffer size before glDraw*
This patch verifies if a vertex buffer is big enough before calling
glDraw*. It fixes crashes when trying to index outside of vertex buffer.
It should make it less crashy in glDrawElements and glDrawArrays:
https://code.google.com/p/android/issues/detail?id=207284
Change-Id: I36f0f568d96b576f0e0975435d2d7fd41cd9e732
Elliott Hughes [Wed, 12 Aug 2015 21:30:38 +0000 (14:30 -0700)]
[cherry-pick] Lose HAVE_ANDROID_OS in goldfish.
cherry pick from:
https://android-review.googlesource.com/#/c/166427
Change-Id: Id626aee8d65e0ded543ac12416c37f938d196676