Commit Graph

97 Commits

Author SHA1 Message Date
Yochai Shefi Simchon
5ec953deef Make sure RGB_565 config is available to emulator
There are Android applications (notably BootAnimation) which require
exactly an RGB_565 configuration, and are not satisfied by an e.g.
RGBA_8888 configuration. This doens't make too much sense, and I think
such apps should be fixed.
However, until that happens, there is an issue when the host does not
have an RGB_565 FBConfig, which is typical to many OpenGL implementations.
In such cases, BootAnimation doesn't run.
The workaround is to add an RGB_565 config to the list maintained by the
translator, which is basically an 888 config in disguise.
2011-07-03 15:21:48 +03:00
Stas Gurtovoy
170eb97393 opengles renderer: added CHECK_GL_ERROR defie for gl debugging
This commit add CHECK_GL_ERROR define to decoders/renderer which enables various
glGetError() calls. Also changed emugen to add glGetError() after every dispatch call (based on
defintion of CHECK_GL_ERROR). Also cleaned some annoying printf's.
2011-07-03 15:21:48 +03:00
Stas Gurtovoy
3034c35701 opengles Translator: sort conformant configs first
When sorting configs, we want the conformant ones first.
This also makes Wave Blazer Lite work - specifically by placing a non
conformant config (rgba=0) at the end of the list.
2011-07-03 15:21:48 +03:00
Amit Feller
1d3f5f58ce opengl renderer: create rendering subwindow
The application provides the window handle to which the
OpenglRenderer should render to however only a sub-region of
this window needs to be rendered. This change adds this functionality
by creating a native child subwindow into which rendering will happen.
2011-07-03 15:14:59 +03:00
Amit Feller
950192dbe3 opengl translator: EGL Windows bug fix
Fixed bug caused the creation of context
without setting it's pixel format.
Also removing unnecessary printfs.
2011-07-03 15:14:59 +03:00
Amit Feller
6adfa495ba opengl translator: fixing 2 Windows EGL issues:
- runtime segfaults
- pbuffer creation
2011-07-03 15:14:58 +03:00
Yochai Shefi Simchon
03d0055dc9 1.1 Translator: fix conversion of compressed textures
There were several bugs in the code converting palleted textures into
RGB/RGBA - fixed.
2011-07-03 15:08:42 +03:00
Yochai Shefi Simchon
747b20cf9d 1.1 Translator: fix drawing of GL_POINT_SIZE_ARRAY
When translating point size arrays from GLES to GL, an optimization
was implemented where all points of the same size in an array or elements
array where drawn together. This is wrong, since it means points
are not drawn in the order the app has requested, creating the wrong
result when points in the array are overlapping in screen space.
So removed this mechanism, and now just drawing the points in the right
order.
Some optimization is still there, where if there are several
consecutive points of the same size they are drawn together.

The change in GLEScmImp.cpp is only to make the condition more readable -
the functionality is identical.
2011-07-03 15:03:25 +03:00
Yochai Shefi Simchon
0b5684abbd 1.1 Translator: fix bug in glDeleteTexture
When glDeleteTexture is called for the currently bound texture,
binding should be reset to 0.
Also, calling glDeleteTexture on 0 should do nothing.
2011-07-03 15:03:25 +03:00
Yochai Shefi Simchon
fbae5aacb0 1.1 Translaotr: handle glGet(POINT_SIZE_ARRAY)
Should be handled internaly, like all other ARRAY queries.
2011-07-03 15:03:25 +03:00
Yochai Shefi Simchon
2da542b598 1.1 Translator conformance: fix texture issues
This fixes three issues:

1. glGet(GL_2d_TEXTURE_BINDING) should be handled by the translator rather
than by OpenGL.

2. glIsTexture shoud return GL_TRUE only if the texture was bound at some
point - add a wasBound member to the TextureData and maintain it.

3. glTexParameter(GL_GENERATE_MIPMAP) did not work. The first problem was
that it was not allowed by our validator - fixed. The next issue is that
this enum is not necessarily supported by the OpenGL implementation - it
is in OpenGL 2.x, but was replaced by an extension in 3.x. So in case the
extension does not exist, and GL_GENERATE_MIPMAP is required, save this info
in a new requiresAutoMipmap member of TextureData and call glGenerateMipmapExt
whenever glTex(Sub)Image2D is called.
There is a theoretical case where neither GL_GENERATE_MIPMAP nor glGenerateMipmap
is supported by the OpenGL implementation - this is not likely to happen, but
if we find such an implementation it might require implementing a mipmap
generation software algorithm (which is bad).
2011-07-03 14:56:13 +03:00
Stas Gurtovoy
635e929c44 opengl translator: fixed glGetString(GL_EXTENSIONS) for GLESv2
fixed query of GL_EXTENSIONS in glesv2.
Also fixed EGL surface desruction when there is
no current context.
2011-07-03 14:56:13 +03:00
Yochai Shefi Simchon
d18e93ba4c Translator 1.1 conformance: fix ARRAY related gets
There is a set of glGets which query the client state of the
binded arrays. The data exists in the translator context and is not
passed to GL, so the glGets should be handled internaly.
This is done by implementing four glGet*v methods in GLEScontext, which
return a boolean value indicating whether we have set the return value
or not, and are called by the glGet*v functions in GLEScmImp.
Two of the glGets are handled by GLEScontext, and the other 15 by
GLEScmContext since they are specific to GLES 1.1. The same should be
done for 2.0 specific glGets in a later patch.
Also. bufferName is now saved in GLESPointer in to allow the
GL_*_ARRAY_BUFFER_BINDING get.
2011-07-03 14:56:13 +03:00
Yochai Shefi Simchon
b241f904f0 Translator: fix eglGetProcAddress() on Linux
Our implementation of eglGetProcAddress() resolves the function addresses
in run time. Typically this is not an issue, but when a gl function is
also implemented by the calling app the address was resolved to the calling
app's version of the function rather than ours. This is the case with the
glDrawTex{isfx}OES functions in the 1.1 conformance test.
The solution is to add the -Bsymbolic switch when linking our libraries,
so all symbol resolution is done internaly.
The same fix should probably be done for Mac.
2011-07-03 14:56:12 +03:00
Yochai Shefi Simchon
83132ab0a2 Translator 1.1 - fix glGetPointer
getPointer is implemented both in GLEScmContext and its parent GLEScontext,
but was not declared virtual amd hence didn't work.
2011-07-03 14:52:28 +03:00
Yochai Shefi Simchon
6a40d94db4 Fix segfault when destroying context
m_texCoords was not initialized in the GLEScontext constructor, so when
destructing it resulted in an illegal free.
2011-07-03 14:47:12 +03:00
Yochai Shefi Simchon
03da50800f glDrawTex- GL_INVALID_VALUE if width/height <= 0 2011-07-03 14:47:12 +03:00
Amit Feller
772de2edde opengl translator: extending ConversionArrays class
inserting some of the logic which was scattered over some parts
of the GLESContext class to be encpsulated inside the ConversionArrays
so that the code will be more clea and organized.
2011-07-03 14:47:12 +03:00
Liran
166f3cb3c6 opengl translator: add vertex attrib index validation.
Fixed conformance test issue.
2011-07-03 14:32:43 +03:00
Liran
3c15de2f2e opengl translator: conformance fixes
fix shader and program names in glDeleteShader/Program
fix object name manager to accept objects with name 0
fix unbinding of buffers,framebuffers and renderbuffers
separate getPointer to have specific implementation for gles 1 and 2
fix number of supported texture images to match GL
fix incorrect optimization that skips draw on false conditions
2011-07-03 14:32:43 +03:00
Amit Feller
61d845731a validateing client's arrays type 2011-07-03 14:32:43 +03:00
Amit Feller
2ca84fb34a opengl translator: supporting GL_BYTE type
support GL_BYTE in glvertexpointer & glTexCoordPointer,
Desktop OpenGL does not support GL_BYTE in those calls
so we convert the data into GL_SHORT.
2011-07-03 14:32:43 +03:00
Amit Feller
87363ca283 opengl translator: Fix windows runtime problems
fixed functions calling conventions in dispatch tables,
added link flag to translator libraries to produce an alias
function for all exported functions with stdcall name mangling.

Change-Id: I4360f26da1f897764ba6d4dd02c365ed00420b51
2011-06-30 09:14:16 +03:00
Amit Feller
a20ba0e4de Setting Renderer default libs to use translator libs
Change-Id: I853a30ce1aa7325d01a30b30c18f4e0bd5a5702f
2011-06-30 09:14:16 +03:00
Amit Feller
efcbbc3f28 emulator opengl: fix windows build
Change-Id: I145c7bf3a664fdb2c9e113cd977b4b2431d0668d
2011-06-30 09:14:16 +03:00
Stas Gurtovoy
62d074d9f8 emulator opengl: add GLESv2 support to driver + renderer
Added GLESv2 library to system.
Made fixes to the host libOpenGLRender to
compile and support GLESv2 (defined WITH_GLES2).
Other fixes required to make GLESv2 to work.

Change-Id: I9eb198e6092e7fa3550342c50929dd1714282cb3
2011-06-30 09:14:12 +03:00
David Turner
5b060ef926 Merge changes I1c2d8bc4,I64a63c2e,Ia209f88a,I9e797024,Ic09a5d0e
* changes:
  emulator opengl: guest/host rendering syncronization.
  emulator opengl: initialize new colorbuffers
  emulator opengles: Fixed bug in gralloc unregister_buffer
  emulator opengles: Fixed a bug in eglChooseConfig implementation.
  opengles emulator: Fixed upside-down gl image
2011-06-28 04:44:48 -07:00
Yochai Shefi Simchon
e02b38778a Fix an iligal "free".
m_map[GL_TEXTURE_COORD_ARRAY] is not an allocated pointer, therefore it shouldn't be freed.

Change-Id: I84e2937c16ddcbb8922cdf270de86732ee966d60
2011-06-25 17:02:33 +03:00
Yochai Shefi Simchon
33cd758244 tex 0 is legal.
Change-Id: I99f59aa0aff1986e86e0954bb61924895b9b044f
2011-06-25 17:02:33 +03:00
Yochai Shefi Simchon
72233c6be3 Support GL_(NUM_)COMPRESSED_TEXTURE_FORMATS get.
Change-Id: I6adb541649ec83f50f520e27a26814a47359b827
2011-06-25 17:02:33 +03:00
Guy Zadikario
0536060b40 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
2011-06-25 16:56:08 +03:00
Guy Zadikario
4ef1f3474e emulator opengl: initialize new colorbuffers
Initialize new allocated color buffers with zeros.

Change-Id: I64a63c2eda83fdec1926c387e171324fb07ebe83
2011-06-25 16:56:08 +03:00
Stas Gurtovoy
fdcba322fe opengles emulator: Fixed upside-down gl image
This fix performs a flip software copy to match our coords with those expected by the flinger.
We may think of a better implementation in the future.

Change-Id: Ic09a5d0e22f7e209b33c07c993a3d56e328dd3ed
2011-06-25 16:28:58 +03:00
David 'Digit' Turner
8422a11a21 emulator: opengl: Update/simplify build scripts
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
2011-06-23 00:35:54 +02:00
David Turner
bd414ea2ff Merge "opengl translator: fix eglGetConfigAttrib" 2011-06-21 23:23:26 -07:00
David Turner
8e706026d1 Merge "opengl translator: conformance fixes" 2011-06-21 23:23:07 -07:00
Stas Gurtovoy
5960b2717c emulator opengl: Added support for config_size 0 to FBConfig::chooseConfig
Fixed a bug in FBConfig::chooseConfig implementation

Change-Id: I4b8e98f43825c012f13d0a0684fe8f918e511400
2011-06-21 20:47:43 +02:00
Guy Zadikario
1ef706f96f emulator opengl: implement glGetString
Added rcGetGLString token to renderControl to query
a GL string constant from the current context from the host.
Implement glGetString functinality in EGL so that the string
value can be cached in the context structure and also
implementation can be shared between GLESv1 and GLESv2.

Also, fixed clientAPI context initialization check in
eglMakeCurrent. The check was for the previously bounded
context instead for the newly bounded context.

Change-Id: I41c0b4ad462c9ad5bd5c66719b41509bb1b7a947
2011-06-21 20:47:43 +02:00
Guy Zadikario
a2ec7339da emulator opengl: use eglGetProcAddress in EGL dispatch.
Initialize EGL extensions functions in the EGLDispatch
table using eglGetProcAddress instead of dlsym.
(try dlsym if eglGetProcAddress failed).

Change-Id: I256c4c5f9f3728a5b0e4d5bbcc75b83aa8a85f29
2011-06-21 14:48:44 +03:00
Guy Zadikario
4ec4346f07 emulator egl translator: Fix eglGetProcAddress.
Fixed eglGetProcAddress when called for egl
extension functions.
Also fixed a typo in the EGL extension string.

Change-Id: Ia081257fa641182246eec723d08ae2e9148ca0cc
2011-06-21 14:48:44 +03:00
Guy Zadikario
f0dce80492 opengl renderer: Fixed colorBuffer texture creation.
The created texture format which represents the color buffer must
be of type GL_RGB or GL_RGBA also for the 565/5551 surface formats.

Change-Id: I7799a4824a0a5b8d57e3bfc507cac5664340725e
2011-06-21 14:48:44 +03:00
Guy Zadikario
b57ad81dae emulator opengl: Fix bug when re-binding the same context
When re-binding the same context the resoult was that the
surfaces got unbinded from the context.
Fixed that situation and added an optimization to do nothing
in case of re-binding the same context to the same binded surfaces.

Change-Id: Ic7058723399b0807d902c29b4170c7465c02bb99
2011-06-21 14:48:44 +03:00
Stas Gurtovoy
613025efb3 emulator opengl: pool of fixups to the host side.
Those are the host side fixups required for the system to load
without failure to the point of bootanimation is run.

Change-Id: I42eebb123b05aaf6a0671e91e77a4ba6b330b852
2011-06-21 14:48:44 +03:00
Stas Gurtovoy
2220d27302 emulator opengl: added Bind texture to EGLImage/surface
added functionality to bind an EGLImage to a texture both
in the system and host sides.

Change-Id: I2dc26090b45da080ac4d0e8f5799c95f7cc54634
2011-06-21 01:41:50 +03:00
Liran
163235e504 opengl translator: fix eglGetConfigAttrib
fix renderable type parameter for eglconfig

Change-Id: Iac1d782cc37b0c7055bb90109a17583b84e6e6e3
2011-06-17 18:16:46 +03:00
Liran
ac7987ee84 opengl translator: conformance fixes
- fix destructor of eglcontext to delete its share group if needed
- fix available eglconfigs not to choose configs with BUFFER_SIZE=0
  or configs which do not support RGBA
- fix conformant bit on eglconfig
- fix typo in glBindBuffer
- fix glVertexAttribPointer to send correct offset to GL with vbo

Change-Id: I69d980407a40cb371ec62c5c883e4190bdcfce72
2011-06-17 18:16:46 +03:00
Stas Gurtovoy
a6882bf79d emulator opengl: Added glFinishRoundTrip implementation.
This is to allow glFinish to wait for the host render to finish.

Change-Id: I43e23aee19700b79bc70c89e791df180c6c1fb91
2011-06-17 17:27:19 +03:00
Stas Gurtovoy
a7b7e95b03 emulator opengl: implement eglChooseConfig functionality.
Added new RenderControl command to request the host to execute
the ChooseConfig functionality.

Change-Id: Ib92be313a6df740de69d671c6994ec6cae17ea13
2011-06-11 00:16:21 +03:00
Guy Zadikario
cd1489a89c opengl translator: make GLcommon static library
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
2011-06-07 11:29:15 +02:00
Amit Feller
0db9dae215 opengl translator: moved some types out of eglplatform.h
Some native types like NativeFBConfig and NativeContext are
internal to the translator implementation and should not
exist in the interface headers.
Moved those types from eglplatform.h into eglinternalplatfom.h

Change-Id: I6462a007de8c185deecbb9beebc343ca3626fd0c
2011-06-06 19:01:45 +03:00