Commit Graph

216 Commits

Author SHA1 Message Date
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
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
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
David 'Digit' Turner
3a064ab539 emulator: opengl: Make render_api.h C-compatible
This change modifies the function declarations under
developement/tools/emulator/opengl/host/include/render_api.h
to make them callable from C.

This is preparation work for integrating the rendering library
into the emulator. The plan is to dlopen() the library dynamically
and using non-mangled function names makes using dlsym() both
easier and more portable.

Change-Id: I34656ea4618dbb989fb6ff78df43e9bfb38a7799
2011-08-05 16:28:01 +02:00
Amit Feller
25b3794419 2.0 translator: link only if both shaders compile
A program should be linked only if both vertex and fragment shaders
compiled succesfully.
Change-Id: I9793da85847fd606883e1e3bef05485ce6037c21
2011-08-04 16:10:12 +02:00
Guy Zadickario
e8c7a055f7 opengl translator: Added GLSL ES builtin constants.
Adds GLSL built in constants defined in GLSL ES but not in GLSL.
Makes biConstant conformance test to pass on Mac (where ES2_compatability is not
present).

Also fixed the GLSL parser to insert our additions to the shader
only after the "#version" token if exist in the original shader.
Also renamed env var GOOGLE_GLES_FORCE_GLSL_VERSION to
GOOGLE_GLES_DEFAULT_GLSL_VERSION to better match its functionality since
we use it only if no specific version exist in the shader code.

Change-Id: If9485da16da2808245943a7295f8fb22a6f631aa
2011-08-04 12:01:49 +02:00
Yochai Shefi Simchon
7e04a2421c 1.1 translator: WAR for GL_ALPHA_TEST_REF bug
Both the ATI and nVidia OpenGL drivers return the wrong answer on
glGetIntegerv(GL_ALPHA_TEST_REF). So Implement this functionality
in our code.

Change-Id: I022b1475f7edb9f1d0f48ebcaf9f6e9f5c4f344e
2011-08-04 12:01:49 +02:00
Yochai Shefi Simchon
926db88dd1 1.1 translator: glGet(GL_MAX_CLIP_PLANES) returns max 6
This is a WAR for an ATI OpenGL driver bug.

Change-Id: I0b54317873ed8c60fe835a993c2c8f32321ff8e2
2011-08-04 12:01:49 +02:00
Liran
ceb7fc9140 remove NV_WAR defines
enable workarounds by default
added environemnt variable GOOGLE_GLSL_FORCE_GLES_VERSION
to the shader parser

Change-Id: If1dbc10722436659295c40a40bd630a72e575799
2011-08-04 12:01:49 +02:00
Liran
772468f2b6 GLES2 translator: workaround for nvidia bug with GL_VALIDATE_STAUS
nvidia may return GL_VALIDATE_STATUS = GL_TRUE even when the program does not link
this change checks for GL_LINK_STATUS when GL_VALIDATE_STATUS is queried

Change-Id: Ia9f5da9c71b8666ce929d8cc2a44639bc947eecb
2011-07-27 15:19:11 +03:00
Liran
715c4898df 2.0 translator: workaround for nVidia "bug"
This is not really a bug, but the nVidia shader compiler is much more
liberal than the GLSL spec, and allows compilation of shaders which
do not comply with the spec. This is an issue for passing the
conformance tests, but more importantly it will allow bad shader written
by the app developer to pass on the emulator and then to fail on the device.

Adding "#version 100" definition to the head of a shader source disables
this liberal behavior. For now this is activated in run time by the "NV_WAR"
environment variable.

Change-Id: I1c322d4221d313d3ee70592bc15ea0e340853990
2011-07-27 15:19:11 +03:00
Liran
dd954c869c GLES2 translator: host does not support RGB565
When calling RenderbufferStorage with internalformat=GL_RGB565
we will create one with internal format GL_RGB
the same for glTexImage2D

Change-Id: I1e464dd36142f586beef6bf895456c7aab1b8237
2011-07-27 15:19:11 +03:00
Liran
31b99df283 GLES translator - enable binding to multiple texture targets
support different binding to GL_TEXTURE_2D and GL_TEXTURE_CUBE_MAP
targets

create 2 default texture object, to be bound when BindTexture( ... ,0)
is called.
in order to do this, we must ensure their names are internal only, so the user can't
use these names by accident.
the object name manager local name is now 64 bit to allow generation of internal names

Change-Id: I29d000a67042051706e13dc3ef3aa34a1a24f8ca
2011-07-27 15:19:10 +03:00
Liran
3c457bda2f GLES2 translaotr: fix glLinkProgram and object names
Do not allow glLinkProgram to succeed if only one shader type has been
attached to the program, GL allows this, but GLES2 does not.
added state tracking for program objects to check which shaders are
attached to the program object.

add a way to define object data type being held for each object in objectNameManager
ProgramData and ShaderParser are both valid objectData for objects in SHADER namespace
we need a way to determine object type to generate correct errors

Change-Id: Ic232549df0bb6daf6ec528cb039482cd68e896bb
2011-07-27 15:19:04 +03:00
Stas Gurtovoy
99ef052675 use Translator's glTexImage2D in doCompressedTexImage2D
Instead of calling the dispatcher directly. This will make sure all Translator's
internals (such as TextureData data) are updated properly.
This also fixes the bug in "Replica Island" - when the green robot was invisible,
because it's TextureData wasn't updated by doCompressedTexImage2D

The pointer to glTexImage2D is passed as a parameter to doCompressedTexImage2D,
otherwise Windows resolve the glTexImage2D symbol in the external libGL rather
than the translator's code. Longer term, we will remove the translator's link
to libGL, at which point this parameter will be removed.
2011-07-14 13:42:13 +03:00
Yochai Shefi Simchon
31bf4fac95 2.0 Translator:GL_INVALID_VALUE on bad program/shader
The getGlobalName function returns 0 on error. There are many places
were no error checking is done after calling it to get a shader or
program name. Typically this shouldn't be an issue, since the follwing
OpenGL call using a value of 0 will generated the required GL_INVALID_VALUE,
but this does not always happen.

Change-Id: I8edf2b152978ffd8626f8b4d778cc624f2a3bec3
2011-07-14 03:05:38 +02:00
Stas Gurtovoy
76007c3b0e Fix parameter parsing in renderer
Change-Id: I14533cea4a29eff2b3dec3a68e80fc1ae7f44da3
2011-07-14 03:05:38 +02:00
Stas Gurtovoy
0dad64d939 opengles Translator: DrawTex impl - don't draw if no textures enabled.
This fixes a crash caused by covgl (on Nvidia linux driver) when our implementation
of glDrawTexOES calls glDrawArrays with GL_TEXTURE_COORD_ARRAY enabled - but none of texture
units are enabled and no data passed by glTexCoordPointer

Change-Id: Id28b0c35a5a17b139ab196db0e434d2f0a490132
2011-07-14 03:05:38 +02:00
Yochai Shefi Simchon
79b1bad09a 2.0 translator: support ARB_ES2_compatibility stuff
The ARB_ES2_compatibility extension supports several GLES 2.0 enums
and functions on OpenGL 2.0. Seems it exists on nVidia drivers, but
not on ATI's. So implement its functionality in case it doesn't
exist on the host.

Change-Id: Id96f0c8036a7a7d36fca0c85ab5f57bf4b1583aa
2011-07-14 03:05:38 +02:00
Amit Feller
1d8465c245 translator EGL:fixing bug in eglGetDisplay caused in Windows Platform
in Windows platform we previously defined EGLNativeDisplaytype to be WinDisplay*
( this was defined in include/EGL/eglplatform.h) this was OK as long as we used the
the EGL_DEFAULT_DISPLAY as parameter for eglGetDisplay meaning we were generating
a native display by oureselv and wrapping it, but there was aproblem when we got the
EGLNativeDisplayType from the user (as HDC in Windows) but interpret it as WinDisplay*
this caused a big memory corupption.
so to overcome this problem we now define two types EGLNativeDisplayType to be
HDC and EGLNativeInternalDisplayTypeto be WinDisplay*, and when we get in eglGetDisplay
a parameter different from EGL_DEFAULT_DISPLAY we wrap it with the struct of WinDisplay
and return it to the user.

this change caused a change in all the declerations of EglOsApi.h changing
EGLNativeDisplayType -> EGLNativeInternalDisplayType

Change-Id: I3522c3d507b084c5c211e10ddb6f512d1b90c65e
2011-07-14 03:05:38 +02:00
Stas Gurtovoy
1d9dc99abb opengles Translator: get Compressed texture handling out from GLEScontext
This commit does few things:
1. Gets doCompressedTexImage2D out of the context and TextureUtils
2. Gets palette textures out of TextureUtils and into PaletteTexture
3. Makes TextureUtils generic for all compressed textures
4. Moves the glGet's dealing with compressed textures from GLEScontext to the impl.

Change-Id: Ibbde6968810a66a4f3488f3887ee3f015fc32c11
2011-07-14 03:05:38 +02:00
Stas Gurtovoy
201584b1d4 egl emulator: fixes for covegl conformance test
Support for eglChooseConfig with configs==NULL.
Also added small change to query EGL_LARGEST_PBUFFER attrib of surfaces.
Fixed error print in QemuPipeStream::readFully.

Those changes make sure that covegl completes & passes on the emulator with Translator
on linux in the backend.

Change-Id: I892917ec102ae85d56a16a7cb321e8c12e7083f1
2011-07-12 00:46:06 +02:00
Liran
5dd421c56b GLESv2 Translator: fix glGet*
Override glGet* for parameters that request information that have local namespace
convert global names to local names before returning the value

Change-Id: Ie334419b6a5ffe4904d8efe0827a30beaf8b2f6c
2011-07-12 00:46:06 +02:00
David Turner
c559f7612f Merge "GLES2 translator: fix glUseProgram error" 2011-07-11 15:43:40 -07:00
David Turner
ad31d5ca44 Merge "GLES2 Translator: GetVertexAttrib* fix" 2011-07-11 15:43:18 -07:00
David Turner
fbd9283c22 Merge "GLES2 translator: fix point rendering" 2011-07-11 15:42:49 -07:00
David Turner
e7db3af6de Merge "GLES2 translator: DeleteShader/Program fix" 2011-07-11 15:42:13 -07:00
Liran
5f080f3914 GLES2 translator: fix glUseProgram error
glUseProgram with invalid program handle should return INVALID_VALUE error

Change-Id: I757d5d7011641d6c0aa053416c3e2bc48cf2df62
2011-07-11 16:32:54 +03:00
Liran
5593338ca3 GLES2 Translator: GetVertexAttrib* fix
fix error generated when glGetVertexAttrib* functions get
index larger or equal to MAX_VERTEX_ATTRIB
INVALID_VALUE should be generated instead of INVALID_ENUM

Change-Id: I0fbacc8fa5b5f14cd302cbe818536cffe5ed3a3c
2011-07-11 16:32:54 +03:00
Liran
addc68e9f5 GLES2 translator: fix point rendering
if points are rendered the built in shader variable gl_PointSize should be active.
added a call to enable VERTEX_PROGRAM_POINT_SIZE to signal opengl to activate this variable
GL_POINT_SPRITE should also be enabled when rendering points

Change-Id: Iba7f62844ee2208ae22700b985aef0229d75fc46
2011-07-11 16:32:54 +03:00
Liran
a24932259f GLES2 translator: DeleteShader/Program fix
fix behavior of glDeleteShader and glDeleteProgram
when deleting an object which does not exist,
INVALID_VALUE error should be generated

Change-Id: I52de29f7f980d63f0d35c9dfbfd3da17f89436e6
2011-07-11 16:32:54 +03:00
Stas Gurtovoy
cea52a871d opengles Translator: fix uncompress palleted A1 textures
There was a bug in uncompress of GL_PALETTE4_RGB5_A1_OES and
GL_PALETTE8_RGB5_A1_OES texture formats.
They were considered RGB (not RGBA) for some reason.
This also fixed the pink sky in Wave Blazer Lite

Change-Id: I8c047d624d9bf09e2a0de7f7340d676cfe5e76c9
2011-07-11 00:01:35 +03:00
David Turner
3e51ea6b5b Merge "opengl emulator: Added gl error tracking on the guest (encoder)" 2011-07-08 09:54:21 -07:00
David Turner
b6d01e328d Merge "emulator opengl: fixing clean windows build" 2011-07-08 09:52:48 -07:00
David Turner
b798156bcb Merge "opengl renderer: added option to dump GL stream to file." 2011-07-08 09:50:57 -07:00
Yochai Shefi Simchon
14f351baf7 opengl translator: fixed EGL regression
prevent rederence NULL surface objects in
EglOS layer.

Change-Id: If5e8dc1a0cdf25fe9b268cce6456cc7da88b9f7f
2011-07-08 18:47:13 +02:00
Stas Gurtovoy
8bebd3b48b opengl translator: Added support to ETC1 compressed textures.
Copied the etc1 implementation from frameworks/base/opengl/libs/ETC1
to the translator common library, this is for keeping the translator
be independant.
Added support for ETC1 compressed textures in both GLESv1 and GLESv2
which is needed for some applications. (Cordy).

Change-Id: Ie615ed82896cb36c42fa640b83d9e93b723b3b80
2011-07-07 16:36:04 +03:00
Amit Feller
44fd37338e Opengl translator: fix EGL Windows specific issues
Fixed management of DC's, use one DC for each egl config as before
but use the correct one every time and not the last one used during
createContext call.

Filter out GENERIC pixel formats which might not be supported by
accelerated hardware.

Prevent calling to ChoosePixelFormat at every create{window/pbuffer}
call, instead use the exact config specified by the caller. We
need to call at least once to wglChoosePixelFormat in order to let
the driver initialize, we do it during eglInitialize time just before
querying the native pixel formats.

Change-Id: Id00addaed9cb0369c41311d2bcd3ce8c7ea6408c
2011-07-07 16:36:04 +03:00
Amit Feller
a62aa2c009 opengl translator: add native config id to EglConfig
The EGL_CONFIG_ID attribute should be uniqueue for each
config, at some cases we duplicate a configuration in
order to simulate different pixel format (RGB_565) at that
case we want to keep the native config_id of the backend
OpenGL the same on both configs.
This change adds extra attribute 'native_config_id' for that
purpose.

Change-Id: I7e560a4badd01d146b9753cee603ff4707ccfd7f
2011-07-07 16:36:04 +03:00
Stas Gurtovoy
d6f18cdf80 opengl emulator: Added gl error tracking on the guest (encoder)
Sometimes we need to check parameter values before encoding
to prevent crashes, for example:
glDeleteBufferes(-1, ptr); - would crash
For that we need to check some gl errors on the guest.

The change adds error state to the encoder and also
adds new feature to emugen which allows to insert
parameter check code into the attribute file.
Added such parameter check code in the appropiate
gl functions in gl.attrib and gl2.attrib

Change-Id: I7f317df52ac8fbd96979100a1031cf023a0b49d3
2011-07-07 16:35:16 +03:00
Amit Feller
dd3849c9ed emulator opengl: fixing clean windows build
Fixes windows build found after clean build.
the emugen tool does not built on windows. For
windows build we need to use the build host executable.
(that works for mingw builds since it uses the linux exeutable).

Change-Id: I6a0cc6936d4b9f11f074695066b800e12156fd83
2011-07-07 16:32:11 +03:00
Guy Zadickario
64f8ae0369 opengl renderer: added option to dump GL stream to file.
This is a debugging tool which enables to dump the guest
command stream to a file which can be later be examined
and "played" using a seperate tool.

Change-Id: I3fec19c1a651f0ed4394c33a0c0cd9ba54384355
2011-07-07 16:32:04 +03:00
Guy Zadickario
3db2bcf7e5 opengl translator: fixed normalized vertex attribs
That fixes the alpha and GUI components artifacts in Cordy.
The translator has ignored the 'normalized' argument of
glVertexAttribPointer function in GLESv2.
We now use the supplied value when applying the vertex attributes
to the backend OpenGL so that non-float color vertex attributes
are now normalized.

Change-Id: Idffda33225748276144ed70d2dcf4da17219d1d2
2011-07-04 22:30:58 +03:00
Amit Feller
223a949d1d opengl Translator: adding type EGLNativeSurfaceType
for supporting & storing spesific OS data of the surfaces
for example on Windows platform it is needed to save for each windowSurface
the HWNDL & HDC of the native window, this change caused changes in the EglOsApi
interface
2011-07-03 15:40:52 +03:00
Amit Feller
cdc5179b90 EGL translator: fixes shared context on windows
On windows it is not possible to create a context which
shares with another context if the other context is already
current to some thread.
This change makes the "global context" be a dummy context
on windows which we create during the first createContext
call, this dummy context will never bind to any thread so
it is safe to share with it at any time.
2011-07-03 15:40:52 +03:00
Amit Feller
15680c5e69 OpenGL renderer: handling subwindow messages
On windows we need to have a thread on the renderer process
which handles windows messages sent to the subwindow
we are creating during framebuffer initialization.
We run this message pump in the main renderer thread
and the server listener on a seperate thread.
2011-07-03 15:40:52 +03:00