Commit Graph

278 Commits

Author SHA1 Message Date
Guy Zadickario
13b3da879b opengles emulator: added FPS statistics printout
Make the renderer print FPS statistics every 1 second.
Need to set SHOW_FPS_STATS=1

Change-Id: I69e8c43a779e685ae0b34974d1ef33ad75e7a7e4
2011-08-11 17:36:13 +03:00
Guy Zadickario
7944edcdb2 opengles emulator: fix the uniform location WAR for intel platforms
Fixed the location shift WAR to work for arrays that starts at
location 0. Fixed conformance regressions made by this workaround.
The conversion should be smarter than just shifting 16-bits back
and forth, it should take into account if array element is being
accessed.

Change-Id: Icb746c67e16edfacb8264a1e687fd24ac6e868e7
2011-08-11 17:36:03 +03:00
Guy Zadickario
ea7f72a6c7 opengl emulator: fix windows build
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
2011-08-11 17:35:33 +03:00
Amit Feller
bc9d37e3c9 opengles emulator: fix shader/program info log functions
on some platforms info log length of programs and shaders was
not returned correctly, we now cache the info log for these objects
and calculate info log length intenrally to be both correct and
compliant to the spec and conformance tests.

Change-Id: I017932482ba36f9e2e1858fe372683f7ac3a98ca
2011-08-11 17:26:27 +03:00
Yochai Shefi Simchon
97fa8de7a2 opengles emulator: Support current value for attribute 0
In GLES, a vertex shader attribute can be at location 0 and have
a current value. In OpenGL, the spec is not clear, resulting in
absurdities like the ATI driver binding an attribute to location
0, does not give an erro when you set it, but gives an error when
you try to get it back. And it doesn't actually set the value in
the shader.

So, in this patch we:

  1. Track attribute 0 value internally, setting and getting it
     as necessary.

  2. Upon glDrawArrays and glDrawElements, if attribute 0 is not
     "array enabled" (that is, it should use a current value) we
     create a dummy array, fill it with the intended current value,
     and attach and enable it. After the draw, we disable it.

Change-Id: I35f3e8a924e6fba236f4f4d85423b04ae448dad4
2011-08-10 11:00:10 +02:00
Amit Feller
c9d192691e opengles emulator: GLESv2: adding more params validation.
adding more params validations to some GL functions
which the OpenGL layer below us should check , but using Intel
Graphic driver those checks are ignored

Change-Id: I3ca2a891f1d9f988a7b662d6bc32b81e12cc333d
2011-08-10 11:00:10 +02:00
Amit Feller
af777c27ef opengles emulator: check OES_standard_derivatives support
fixin a bug when we declared that our implementation supports
OES_standard_derivatives without checking that the
openGL layer below supports this extention

Change-Id: Ic74f18eb753f0cfe067e23c3bf83905e40b17665
2011-08-10 11:00:10 +02:00
Liran
2ec2fa1a68 opengles emulator: fix uniform name translation to apps
add special handling of locations smaller or equal to 0
do not translate location -1 (this location means the
uniform is not found)

location 0 does not need translation, it has no effect

Change-Id: Idbde51f08433ed70a5a1a2cf1ede51043f3cca76
2011-08-10 11:00:10 +02:00
Liran
50c0fb0eff opengles emulator: GLES2 translator / codec
fix glGetAttachedShaders
NULL is allowed in count parameter
fix problem with nvidia driver which returned invalid count

Change-Id: Icfaa5688b04325de2890486eb87b163babaddf30
2011-08-10 10:53:06 +02:00
Liran
0fd3ee21c8 opengles emulator: GLES fix memory leaks
fix some memory leaks and potential risks
detected using valgrind

Change-Id: I0f69cf4d4b4ba5eeb9c735f6712c301bcd4d3d36
2011-08-10 10:53:06 +02:00
Guy Zadickario
f6b9241094 opengles emulator: support glEGLImageTargetRenderbufferStorageOES
needed changes to support glEGLImageTargetRenderbufferStorageOES,
added implementation in egl and added tokens to renderControl.

Also fixed function pointers returned by eglGetProcAddress to
return functions that works independant of the current context,
see system/egl/ClientAPIExts.cpp

That makes the egl_image conformance test to pass on the guest.

Change-Id: I580cda82ba0fb44f12b75aa0bbacf5cd9f15f744
2011-08-10 10:53:06 +02:00
Guy Zadickario
f1d98dd318 opengles emulator: filter-out non-RGB configs
some applications and conformance tests expects to have
non-zero bit counts for all red,green and blue channels.
The translator expose all EGL compliant configs, including
monochrome and RG configs.
We now filter those out and expose to the guest only the RGB
configs.

Change-Id: I9a293675359135a548ce1c089f31a48ea2b7f46e
2011-08-10 10:53:06 +02:00
Guy Zadickario
52829d82ab opengles emulator: Workaround Cordy (Unity) bug with intel driver.
Uniform locations are 32-bit values which the application queries
from the driver after a shader program is linked. It seems that Cordy
game (possibly all Unity based apps) store the returned location as
16-bit value. Intel driver returns location values in the upper 16-bit
range :(
This is a workaround for this issue, when a program is linked we check
the locations of all uniforms, if all locations are within the upper
16-bit range (as with Intel driver) we shift the location value before
returning to the application. Also override all functions which take
a location parameter and do the reverse shift before sending a location
value to the host.

Change-Id: I234aaafe3313774b5da79eb1dac713b89b10ad60
2011-08-10 10:53:06 +02:00
Yochai Shefi Simchon
29994cba1a opengles emulator: make glFramebufferTexture2D work
The GLES and OpenGL specs for glFramebufferTexture2D are different, which
caused valid GLES calls to fail when moved over to OpenGL. Specifically,
a framebuffer in OpenGL must have a color attachment in order to be valid
for draw, while in GLES it doesn't. So add a validate function, and call
it from each drawing API call.
This patch also contains a workaround for a bug in the ATI driver, where
changing the framebuffer attachments requires a rebind of the framebuffer.

Change-Id: I011fbe0e2b1c66564322268868a24a9d5958a434
2011-08-10 10:43:25 +02:00
Yochai Shefi Simchon
aac306dfbb opengles emulator: Separate FramebufferData to header and source files
Change-Id: I5baefa87fb086d6250c29fa55e58ad129bc8f02a
2011-08-10 10:43:25 +02:00
Yochai Shefi Simchon
14d40b879d opengles emulator: GLESv2: glGetShaderPrecision
to overcome a bug in intel driver which returnes incorrect precision
and range for integers. query the driver for precision format only
for floats. for integers, we return values defined in gles spec.

Change-Id: Idfec2826d811220873c18f301cf4268fc54dabee
2011-08-10 10:41:20 +02:00
Yochai Shefi Simchon
142ed5bf31 opengles emulator: fix initialization of vertex attribute
fix the default values of vertex attrib array to match gles spec
size should be initialized to 4, and type should be initialized to GL_FLOAT

Change-Id: If23b3aec574ca660181be2ef1c91de1de2b07a70
2011-08-10 10:41:20 +02:00
Yochai Shefi Simchon
aaac179eb5 opengles emulator: object name manager name generation
genName in the globalNameSpace now calls the glGen* function of opengl
to generate a global name instead of inventing one.
this is to overcome a bug in intel driver which raises glError when
binding a framebuffer/renderbuffer with a name that was not generated
by opengl.

Change-Id: Ia0c2fefbf3538c185c380ba62d74eb94f2b28254
2011-08-10 10:41:20 +02:00
Guy Zadickario
62c6532937 opengles emulator: handle window surface resize
resize the internal pbuffer we use for a WindowSurface
when a color buffer of different size is attached to the "window".
That fixes "Glyder 2 by glu" application view while loading.

Change-Id: I8f235f428e93077d57bd200f10b45b9a92f1a9d3
2011-08-10 10:13:38 +02:00
Stas Gurtovoy
af8fb702d5 opengles emulator: fix bug in glTranslatex
We need to convert the fixed values to floats before we call glTranslatef

Change-Id: If164a8f67b32177e7229f4c5c2f6eff99680d685
2011-08-10 10:13:38 +02:00
Stas Gurtovoy
42b6b44939 opengles emulator: fix printf's
On guest we use LOGD and on host fprintf to stderr.

Change-Id: I1f419ef3e5af5358f0dc8368d246254393acb674
2011-08-10 10:13:38 +02:00
Stas Gurtovoy
0957f4acda opengles emulator: fix a bug in RangeList
When an intersection is found, we want to add it to the output list, if splitting is needed and if not.

Change-Id: I9c9827b1c0ecd434925ff5698dd42bc1025dbedf
2011-08-10 10:11:13 +02:00
Guy Zadickario
ded8587d2d opengles emulator: Fixed Windows renderer termination
Make the event pump loop in the renderer process we do on Windows
exit when the Framebuffer's subwindow is destroyed.
Fixed TcpStream to close the socket using 'closesocket' on windows,
otherwise the other end of the socket does not sense that the socket
is closed.

+ Use WS_DISABLED to ensure that our GL subwindow doesn't receive
  any input events.

Change-Id: Icb477b3e1d7993a8880acb5e01bc5da29309ae50
2011-08-10 10:11:13 +02:00
Liran
5018365268 opengles emulator: GLES memory leaks
fix some memory leaks detected in valgrind

Change-Id: I48d91223c520c9c10b797a89a679eed7a950a3e6
2011-08-10 10:08:05 +02:00
Liran
8ee217f9cc opengles emulator: fix glGetUnifrom
added state tracking for uniforms in program objects
for each active uniform in index i we will save its starting location
,size and type, so when calling glGetUniform on its location,
we can tell how many bytes we should read from the stream according to
the uniform's type

add some type and size definitions to functions
that calculate size from enum

some other fixes to the codec

Change-Id: I4ecdf41e752454a908d131e76bab113a616f2bc8
2011-08-10 10:08:05 +02:00
Guy Zadickario
d2fae7055e opengles emulator: libEGL fixes for ATI driver on windows.
Removed calling into opengl/wgl from the initialiation code
of libEGL (was made during creation for the EglGlobalInfo object
during global variable initialization) !
That causes issues on ATI driver on windows since we might call into
the driver before it gets initialized. Instead we initialie the EglGlobalInfo
during the first call into libEGL.

Also ATI's version of wglChoosePixelFormatARB does not accept
NULL in the attribute list arguments.

Change-Id: I508263dc0440561ee1cd1311ed5ce37cee4d407e
2011-08-10 10:08:05 +02:00
Yochai Shefi Simchon
a22010c0f4 opengles emulator: limit X11 configs some more
On Linux/Intel, some configurations are returned which make no sense.
Also, no use for single buffer config, and we don't support pixmap
visuals.

Change-Id: I11f37c8ba612ee10dd654141e6f167add1675dce
2011-08-10 10:08:05 +02:00
Amit Feller
cd359e5718 opengles emulator: fixing pointer size bug.
Fix for a bug in pointer size of shaders param in
glGetAttachedShaders function

Change-Id: I647032b2bfcc9d341214accd72700adce07e6e4c
2011-08-10 10:08:05 +02:00
Guy Zadickario
e2dfd84f1f opengles emulator: remove compilation warning.
There was very few compilation warning on Windows and Linux.
This change just fixes those warnings.

Change-Id: I0428aa3dd33b2add40aa6cd12da76910950533b8
2011-08-10 10:03:07 +02:00
Guy Zadickario
467e5fb162 opengles emulator: fixed renderer termination flow
Handling clean exit of the renderer when stopOpenGLRenderer
is called. This is done by openning a connection to the renderer
and flag that it should exit. Added 'clientFlags' field which must
be send after every connection is made to the renderer for this purpose.
The server will wait for running rendering threads to exit and then will
close all EGL/GL resources and will exit. The stopOpenGLRenderer will
return only when the renderer has exited.

Change-Id: I8272b8ea59d5fc78453bb7bd2d25908068869fa7
2011-08-10 10:03:07 +02:00
Amit Feller
e993528d8e opengles emulator: fixing GL_HALF_FLOAT_OES bug
when calculating the data size to pack, the type GL_HALF_FLOAT_OES,
wasn't recognized at all and therefore was by default 0, while it
should be 2 bytes.

Change-Id: Ib1f0dcdb837dd1b9cfebd1090cabfb59de472c53
2011-08-09 17:38:48 +02:00
Guy Zadickario
ee2388cb94 opengles emulator: forced GLSL version to be 120.
GLSL ES 1.0.17 spec states that its written against
OpenGL GLSL version 1.2, that means that #version 100
in GLSL ES should be mapped to #version 120 in OpenGL
GLSL.
We now force "$version 120" in all shaders except if
higher version has been requested in the shader source
or when GOOGLE_GLES_FORCE_GLSL_VERSION is defines.
(Note that GOOGLE_GLES_DEFAULT_GLSL_VERSION is renamed
 to GOOGLE_GLES_FORCE_GLSL_VERSION).

That fixes "Aqua Slash GL Demo" application !!

Change-Id: I0f61ba3aa1c5591df3dacd3afd7f216dba13b56e
2011-08-09 17:38:48 +02:00
Liran
e1a6d10a54 opengles emulator: GLES2 codec - glFinishRoundTrip
fix glFinishRoundTrip
the function was not implemented on the host side,
calling glFinish caused segfault

Change-Id: Ic3a726d22a499f6560d905d177dcb7f997397628
2011-08-09 17:38:48 +02:00
Guy Zadickario
0d5ea9bb69 opengles emulator: test: added shader flags to triangleV2 test
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
2011-08-09 17:38:48 +02:00
Guy Zadickario
6d0f92b88d opengles emulator: support glEGLImageTargetRenderbufferStorageOES
That adds support to create a renderbuffer storage from an EGL
image (previously only texture was supported).
For that we have added Renderbuffer and Framebuffer attachment points
state tracking and when a renderbuffer which attached to an EGLImage
get attached to a framebuffer we attach the underlying EGLImage's
texture instead.

Also fixed some egl_image related bugs.
That makes the egl_image conformance test to pass on host.

Change-Id: I4e8c4935e45b27214038ecf1c1187ed96c5cea5b
2011-08-09 17:38:48 +02:00
Stas Gurtovoy
0710435277 emulator opengl: fixed encoding of glGenRendebuffer
Fixed pointer direction to be out (receives info from host).

Change-Id: I881b68393232cd262dd06eb1c124cf305ba28f31
2011-08-09 17:36:35 +02:00
Stas Gurtovoy
9254c7adc1 opengles emulator: fix bugs in CUBE_MAP implementation in GLES_CM
We save the texData->target in original format, but use our internal format
(using GLTextureTargetToLocal) to make sure we're not mixing 2D and CUBE_MAP textures on
glBindTexture.
Also added the GL_S/R/T/Q constants where needed.
This fixes the Cube Map test in Api Demos.

Change-Id: Id5de45581f2227fe0978d7982a147cb6b4b595c4
2011-08-09 17:36:35 +02:00
Yochai Shefi Simchon
65f8c50cbb opengles emulator: add GL_OES_depth_texture extension
Change-Id: I4f254be743b61ba00ebf58d136aa91f4eaf8b643
2011-08-09 17:33:04 +02:00
Yochai Shefi Simchon
c8dfd865fc opengles emulator: fix GL_EXT_packed_depth_stencil string
It used to be a GL_NV_packed_depth_stencil string extension, but
now it's GL_EXT_packed_depth_stencil and implemented by everyone. on
nVidia drivers both are exported.

Change-Id: I1b4af8a776f9957838d466b24fe73fa873ea85e4
2011-08-09 17:33:04 +02:00
Yochai Shefi Simchon
70d6f3e2b9 opengles emulator: 2.0: handle texture=0 on glFramebufferTexture2D
texture=0 has a special meaning - detach texture. Therefore we should pass
it on as 0 rather than look for the global name in the name space.

Change-Id: If7d0174a7fd07fc13a75430312b605497653f01b
2011-08-09 17:33:04 +02:00
Yochai Shefi Simchon
a182a1a7e4 opengles emulator: limit GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
A bug in the ATI OpenGL driver causes glGet(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS)
to return 32, although the driver supports only 16. The minimum required
by the spec is 2, so limit the number to 16.

Change-Id: Ife99dc5544f80ad872362414e9a5d9d2722d8a42
2011-08-09 17:33:03 +02:00
Liran
833ce70718 opengles emulator: Call XInitThreads on Linux.
All the X calls we do on linux are made from the FrameBuffer
object which is locked however OpenGL implementations may call
to Xlib during gl function calls. In order to be thread safe
we initialize Xlib to support multi-threading.

Change-Id: I3bc6a6378d7558fec44052bd67388beaf270c107
2011-08-09 17:29:17 +02:00
Liran
ca5e9825a4 opengles emulator: fix glGetShaderSource
added NullAllowed flag to length parameter of glGetShaderSource
calling glGetShaderSource with NULL length caused length data
from the host get left on the stream and get the stream out of sync

Change-Id: I45e8e523a67698c9b0cd003e2af7e15c76ed22b7
2011-08-09 17:29:17 +02:00
Liran
0a190be2bc opengles emulator: fix GLESv2 shader source packing
fix segfault when calling glShaderSouce with
empty shader string, length=NULL and count>0

Change-Id: I4c9738d7726fbce22d1e84420faa2bfd772943c5
2011-08-09 17:29:17 +02:00
Guy Zadickario
fb1868addc opengles emulator: fix eglGetProcAddress
eglGetProcAddress should return a function pointer that does not
depends on the current bounded context (if any), when the user
calls one of the function pointers returned from eglGetProcAddress
for one of the GLES extension functions, the GLESv1 or GLESv2
version of the extension function shold be called depending on
the current bounded context.

For this we have added a ClientAPI (GLES) extension dispatch
table in the EGL level which points to static functions in libEGL
where each function checks in runtime the current bound context and
calls down to the GLES_CM -or- GLESv2 library function.
See ClientAPIExts.cpp, when new GLES extension functions are added
to GLESv1 or GLESv2 its definition should be added to
ClientAPIExts.in as well.

This fixes the segfault in egl_image conformance test.

Change-Id: I8464d87c2fcbe57d67bd8b891b695a690dec89f3
2011-08-09 17:14:20 +02:00
Guy Zadickario
d8b376d76d opengles emulator: fixed EGLContext and EGLSurface ref-counting.
Handle EGL context and surfaces destrouction using ref counting
pointer (SmartPtr) rather then maintaining a "markForDeletion" flag.
This has required to re-arrange the ThreadInfo structure to be local
to EGL rather then in the GLcommon area so that we will be able to
place a ref-counted pointer to the current context in the TLS.

That fixes the crash during exit of covgl conformance test.

Change-Id: I6f0a2e49c6f21eb75b654cab4346c764715c449b
2011-08-09 17:14:20 +02:00
Stas Gurtovoy
0111043202 opengles emulator: fix the mixing between pack/unpack alignments
The was a bug in the calculation of the pixels data size, caused by wrong usage
of pack/unpack alignment.
Pack should be used for glReadPixels, while unpack should be used for glTexImage and such.
Also fixes crash in "Angry Birds" & "Angry Birds Rio"

Change-Id: I099308a57a1ea907d38c59bad056429bc107de98
2011-08-09 17:14:20 +02:00
Stas Gurtovoy
e99305dd9f opengles emulator: cache all buffer on the guest
This is needed to support the rare, but still legal scenario,
when glDrawElemets is used with some index array data is stored in VBO's
while the actual attributes (vertices) data is in immediate mode.
When in immediate mode, we need to process the incodes, in order to know
which vertex data to send, which was impossible without the caching.
This commit introduces a new class GLSharedGroup, which will hold all data
that can be shared by shared contexts (buffers are such data).
This also makes the "Jet Cars Stunts" app work properly.

Change-Id: Ic937080dae461bc8cdf4d10cf37066a6e847f464
2011-08-09 17:14:20 +02:00
Stas Gurtovoy
6208854726 opengles emulator: dynamicaly grow ReadBuffer
In case we're receiving packets larger then the initial size
of the read buffer, we dynamicaly grow (X2 steps) the size of
the buffer. An example for this large buffer is a 4MB texture
in JetCarStunts.

Change-Id: I167caddb731583811c009321d4f8fb2f7eea032c
2011-08-09 17:14:12 +02:00
Stas Gurtovoy
8f887e6f08 opengles emulator: fix eglGetError
eglGetError should set it's internal state to EGL_SUCCESS after every call

Change-Id: I55d1e5b2a03bae8b332c78e8179edd79c9e8e79e
2011-08-09 16:46:25 +02:00