Add libGLES_CM to the Code::Blocks project.

Change-Id: Id69512842d9a863b110f8c8bf5244c117d96fae7
Reviewed-on: https://swiftshader-review.googlesource.com/1464
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Common/SharedLibrary.hpp b/src/Common/SharedLibrary.hpp
index 790bd29a..b9d5a51 100644
--- a/src/Common/SharedLibrary.hpp
+++ b/src/Common/SharedLibrary.hpp
@@ -94,6 +94,6 @@
 

 	inline void *getProcAddress(void *library, const char *name)

 	{

-		return dlsym(library, name);

+		return library ? dlsym(library, name) : 0;

 	}

 #endif

diff --git a/src/Common/Version.h b/src/Common/Version.h
index f358056..e180faa 100644
--- a/src/Common/Version.h
+++ b/src/Common/Version.h
@@ -1,7 +1,7 @@
 #define MAJOR_VERSION 3
 #define MINOR_VERSION 2
 #define BUILD_VERSION 7
-#define BUILD_REVISION 47655
+#define BUILD_REVISION 47656
 
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/OpenGL/libEGL/exports.map b/src/OpenGL/libEGL/exports.map
new file mode 100644
index 0000000..6a455e7
--- /dev/null
+++ b/src/OpenGL/libEGL/exports.map
@@ -0,0 +1,52 @@
+{

+global:

+	eglBindAPI;

+	eglBindTexImage;

+	eglChooseConfig;

+	eglCopyBuffers;

+	eglCreateContext;

+	eglCreatePbufferFromClientBuffer;

+	eglCreatePbufferSurface;

+	eglCreatePixmapSurface;

+	eglCreateWindowSurface;

+	eglDestroyContext;

+	eglDestroySurface;

+	eglGetConfigAttrib;

+	eglGetConfigs;

+	eglGetCurrentContext;

+	eglGetCurrentDisplay;

+	eglGetCurrentSurface;

+	eglGetDisplay;

+	eglGetError;

+	eglGetProcAddress;

+	eglInitialize;

+	eglMakeCurrent;

+	eglQueryAPI;

+	eglQueryContext;

+	eglQueryString;

+	eglQuerySurface;

+	eglReleaseTexImage;

+	eglReleaseThread;

+	eglSurfaceAttrib;

+	eglSwapBuffers;

+	eglSwapInterval;

+	eglTerminate;

+	eglWaitClient;

+	eglWaitGL;

+	eglWaitNative;

+

+	# Extensions

+	eglCreateImageKHR;

+	eglDestroyImageKHR;

+	eglGetPlatformDisplayEXT;

+    eglCreatePlatformWindowSurfaceEXT;

+    eglCreatePlatformPixmapSurfaceEXT;

+

+	# Functions that don't change the error code, for use by client APIs

+	clientGetCurrentContext;

+	clientGetCurrentDisplay;

+

+local:

+    *;

+};

+

diff --git a/src/OpenGL/libEGL/libEGL.cbp b/src/OpenGL/libEGL/libEGL.cbp
index 73f44aa..88e33f3 100644
--- a/src/OpenGL/libEGL/libEGL.cbp
+++ b/src/OpenGL/libEGL/libEGL.cbp
@@ -97,6 +97,7 @@
 			<Add directory="./../../" />
 		</Compiler>
 		<Linker>
+			<Add option="-Wl,--version-script=./exports.map" />
 			<Add library="pthread" />
 		</Linker>
 		<Unit filename="../../Common/SharedLibrary.hpp" />
diff --git a/src/OpenGL/libGLES_CM/Context.cpp b/src/OpenGL/libGLES_CM/Context.cpp
index db9797c..952a4ef 100644
--- a/src/OpenGL/libGLES_CM/Context.cpp
+++ b/src/OpenGL/libGLES_CM/Context.cpp
@@ -20,7 +20,6 @@
 #include "ResourceManager.h"

 #include "Buffer.h"

 #include "Framebuffer.h"

-#include "Query.h"

 #include "Renderbuffer.h"

 #include "Texture.h"

 #include "VertexDataManager.h"

@@ -172,7 +171,7 @@
 	{

 		setVertexAttrib(sw::TexCoord0 + i, 0.0f, 0.0f, 0.0f, 1.0f);

 	}

-	

+

 	setVertexAttrib(sw::Normal, 0.0f, 0.0f, 1.0f, 1.0f);

 

     mHasBeenCurrent = false;

@@ -186,7 +185,7 @@
     {

         deleteFramebuffer(mFramebufferMap.begin()->first);

     }

-	

+

     for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)

     {

         for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++)

@@ -199,7 +198,7 @@
     {

         mState.vertexAttribute[i].mBoundBuffer.set(NULL);

     }

-	

+

     mState.arrayBuffer.set(NULL);

     mState.elementArrayBuffer.set(NULL);

     mState.renderbuffer.set(NULL);

@@ -249,7 +248,7 @@
     {

         depthStencil->release();

     }

-    

+

     markAllStateDirty();

 }

 

@@ -729,7 +728,7 @@
     {

         detachBuffer(buffer);

     }

-    

+

     mResourceManager->deleteBuffer(buffer);

 }

 

@@ -749,7 +748,7 @@
     {

         detachRenderbuffer(renderbuffer);

     }

-    

+

     mResourceManager->deleteRenderbuffer(renderbuffer);

 }

 

@@ -979,7 +978,7 @@
     // Please note: DEPTH_CLEAR_VALUE is not included in our internal getIntegerv implementation

     // because it is stored as a float, despite the fact that the GL ES 2.0 spec names

     // GetIntegerv as its native query function. As it would require conversion in any

-    // case, this should make no difference to the calling application. You may find it in 

+    // case, this should make no difference to the calling application. You may find it in

     // Context::getFloatv.

     switch (pname)

     {

@@ -1008,7 +1007,7 @@
     case GL_STENCIL_CLEAR_VALUE:              *params = mState.stencilClearValue;             break;

     case GL_SUBPIXEL_BITS:                    *params = 4;                                    break;

 	case GL_MAX_TEXTURE_SIZE:                 *params = IMPLEMENTATION_MAX_TEXTURE_SIZE;      break;

-    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:   

+    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:

         {

             if(S3TC_SUPPORT)

             {

@@ -1022,7 +1021,7 @@
             }

         }

         break;

-	case GL_SAMPLE_BUFFERS:                   

+	case GL_SAMPLE_BUFFERS:

     case GL_SAMPLES:

         {

             Framebuffer *framebuffer = getFramebuffer();

@@ -1189,7 +1188,7 @@
     // Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation

     // is FLOAT rather than INT, as would be suggested by the GL ES 2.0 spec. This is due

     // to the fact that it is stored internally as a float, and so would require conversion

-    // if returned from Context::getIntegerv. Since this conversion is already implemented 

+    // if returned from Context::getIntegerv. Since this conversion is already implemented

     // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we

     // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling

     // application.

@@ -1290,7 +1289,7 @@
     // Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation

     // is FLOAT rather than INT, as would be suggested by the GL ES 2.0 spec. This is due

     // to the fact that it is stored internally as a float, and so would require conversion

-    // if returned from Context::getIntegerv. Since this conversion is already implemented 

+    // if returned from Context::getIntegerv. Since this conversion is already implemented

     // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we

     // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling

     // application.

@@ -1360,7 +1359,7 @@
     // Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation

     // is FLOAT rather than INT, as would be suggested by the GL ES 2.0 spec. This is due

     // to the fact that it is stored internally as a float, and so would require conversion

-    // if returned from Context::getIntegerv. Since this conversion is already implemented 

+    // if returned from Context::getIntegerv. Since this conversion is already implemented

     // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we

     // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling

     // application.

@@ -1444,7 +1443,7 @@
     {

 		sw::Rect scissor = {mState.scissorX, mState.scissorY, mState.scissorX + mState.scissorWidth, mState.scissorY + mState.scissorHeight};

 		scissor.clip(0, 0, width, height);

-        

+

 		device->setScissorRect(scissor);

         device->setScissorEnable(true);

     }

@@ -1514,7 +1513,7 @@
         {

 			device->setStencilEnable(true);

 			device->setTwoSidedStencil(true);

-			

+

             // get the maximum size of the stencil ref

             Renderbuffer *stencilbuffer = framebuffer->getStencilbuffer();

             GLuint maxStencil = (1 << stencilbuffer->getStencilSize()) - 1;

@@ -1609,7 +1608,7 @@
                     }

                 }

             }

-            

+

             if(mState.sampleCoverageInvert)

             {

                 mask = ~mask;

@@ -1680,14 +1679,14 @@
     {

         return err;

     }

-	

+

 	device->resetInputStreams(false);

 

     for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)

 	{

 		sw::Resource *resource = attributes[i].vertexBuffer;

 		const void *buffer = (char*)resource->getBuffer() + attributes[i].offset;

-			

+

 		int stride = attributes[i].stride;

 

 		buffer = (char*)buffer + stride * base;

@@ -1742,7 +1741,7 @@
 			device->setTextureFilter(sw::SAMPLER_PIXEL, samplerIndex, minFilter);

 		//	device->setTextureFilter(sw::SAMPLER_PIXEL, samplerIndex, es2sw::ConvertMagFilter(magFilter));

 			device->setMipmapFilter(sw::SAMPLER_PIXEL, samplerIndex, mipFilter);

-			device->setMaxAnisotropy(sw::SAMPLER_PIXEL, samplerIndex, maxAnisotropy);                

+			device->setMaxAnisotropy(sw::SAMPLER_PIXEL, samplerIndex, maxAnisotropy);

 

 			applyTexture(samplerIndex, texture);

 

@@ -1779,7 +1778,7 @@
 	}

 

 	device->setTextureResource(index, resource);

-			

+

 	if(baseTexture)

 	{

 		int levelCount = baseTexture->getLevelCount();

@@ -1830,7 +1829,7 @@
     }

 

 	GLsizei outputPitch = ComputePitch(width, format, type, mState.packAlignment);

-    

+

 	// Sized query sanity check

     if(bufSize)

     {

@@ -2005,7 +2004,7 @@
 					switch(type)

 					{

 					case GL_UNSIGNED_SHORT_5_6_5:   // IMPLEMENTATION_COLOR_READ_TYPE

-						dest16[i + j * outputPitch / sizeof(unsigned short)] = 

+						dest16[i + j * outputPitch / sizeof(unsigned short)] =

 							((unsigned short)(31 * b + 0.5f) << 0) |

 							((unsigned short)(63 * g + 0.5f) << 5) |

 							((unsigned short)(31 * r + 0.5f) << 11);

@@ -2039,7 +2038,7 @@
 

 	unsigned int color = (unorm<8>(mState.colorClearValue.alpha) << 24) |

                          (unorm<8>(mState.colorClearValue.red) << 16) |

-                         (unorm<8>(mState.colorClearValue.green) << 8) | 

+                         (unorm<8>(mState.colorClearValue.green) << 8) |

                          (unorm<8>(mState.colorClearValue.blue) << 0);

     float depth = clamp01(mState.depthClearValue);

     int stencil = mState.stencilClearValue & 0x000000FF;

@@ -2047,7 +2046,7 @@
 	if(mask & GL_COLOR_BUFFER_BIT)

 	{

 		unsigned int rgbaMask = (mState.colorMaskRed ? 0x1 : 0) |

-		                        (mState.colorMaskGreen ? 0x2 : 0) | 

+		                        (mState.colorMaskGreen ? 0x2 : 0) |

 		                        (mState.colorMaskBlue ? 0x4 : 0) |

 		                        (mState.colorMaskAlpha ? 0x8 : 0);

 

@@ -2238,12 +2237,12 @@
     {

         return 1;

     }

-	

+

 	if(requested == 2)

 	{

 		return 2;

 	}

-	

+

 	return 4;

 }

 

@@ -2483,7 +2482,7 @@
 {

 	switch(matrixMode)

 	{

-	case GL_MODELVIEW: 

+	case GL_MODELVIEW:

 		return modelViewStack;

 	case GL_PROJECTION:

 		return projectionStack;

@@ -2493,7 +2492,7 @@
 		case 0: return textureStack0;

 		case 1: return textureStack1;

 		}

-		break;    

+		break;

 	}

 

 	UNREACHABLE();

@@ -2533,7 +2532,7 @@
 

 void Context::translate(GLfloat x, GLfloat y, GLfloat z)

 {

-    currentMatrixStack().translate(x, y, z);  

+    currentMatrixStack().translate(x, y, z);

 }

 

 void Context::scale(GLfloat x, GLfloat y, GLfloat z)

diff --git a/src/OpenGL/libGLES_CM/exports.map b/src/OpenGL/libGLES_CM/exports.map
index 7d08ed0..565d1bc 100644
--- a/src/OpenGL/libGLES_CM/exports.map
+++ b/src/OpenGL/libGLES_CM/exports.map
@@ -1,184 +1,219 @@
 {
 global:
+	eglBindTexImage;
+    eglChooseConfig;
+    eglCopyBuffers;
+    eglCreateContext;
+    eglCreatePbufferSurface;
+    eglCreatePixmapSurface;
+    eglCreateWindowSurface;
+    eglDestroyContext;
+    eglDestroySurface;
+    eglGetConfigAttrib;
+    eglGetConfigs;
+    eglGetCurrentContext;
+    eglGetCurrentDisplay;
+    eglGetCurrentSurface;
+    eglGetDisplay;
+    eglGetError;
+    eglGetProcAddress;
+    eglInitialize;
+    eglMakeCurrent;
+    eglQueryContext;
+    eglQueryString;
+    eglQuerySurface;
+    eglReleaseTexImage;
+    eglSurfaceAttrib;
+    eglSwapBuffers;
+    eglSwapInterval;
+    eglTerminate;
+    eglWaitGL;
+    eglWaitNative;
     glActiveTexture;
-    glAttachShader;
-    glBindAttribLocation;
+    glAlphaFunc;
+    glAlphaFuncx;
     glBindBuffer;
-    glBindFramebuffer;
-    glBindRenderbuffer;
     glBindTexture;
-    glBlendColor;
-    glBlendEquation;
-    glBlendEquationSeparate;
     glBlendFunc;
-    glBlendFuncSeparate;
     glBufferData;
     glBufferSubData;
-    glCheckFramebufferStatus;
     glClear;
     glClearColor;
+    glClearColorx;
     glClearDepthf;
+    glClearDepthx;
     glClearStencil;
+    glClientActiveTexture;
+    glClipPlanef;
+    glClipPlanex;
+    glColor4f;
+    glColor4ub;
+    glColor4x;
     glColorMask;
-    glCompileShader;
+    glColorPointer;
     glCompressedTexImage2D;
     glCompressedTexSubImage2D;
     glCopyTexImage2D;
     glCopyTexSubImage2D;
-    glCreateProgram;
-    glCreateShader;
     glCullFace;
     glDeleteBuffers;
-    glDeleteFramebuffers;
-    glDeleteProgram;
-    glDeleteRenderbuffers;
-    glDeleteShader;
     glDeleteTextures;
     glDepthFunc;
     glDepthMask;
     glDepthRangef;
-    glDetachShader;
+    glDepthRangex;
     glDisable;
-    glDisableVertexAttribArray;
+    glDisableClientState;
     glDrawArrays;
     glDrawElements;
     glEnable;
-    glEnableVertexAttribArray;
+    glEnableClientState;
     glFinish;
     glFlush;
-    glFramebufferRenderbuffer;
-    glFramebufferTexture2D;
+    glFogf;
+    glFogfv;
+    glFogx;
+    glFogxv;
     glFrontFace;
+    glFrustumf;
+    glFrustumx;
     glGenBuffers;
-    glGenFramebuffers;
-    glGenRenderbuffers;
     glGenTextures;
-    glGenerateMipmap;
-    glGetActiveAttrib;
-    glGetActiveUniform;
-    glGetAttachedShaders;
-    glGetAttribLocation;
     glGetBooleanv;
     glGetBufferParameteriv;
+    glGetClipPlanef;
+    glGetClipPlanex;
     glGetError;
+    glGetFixedv;
     glGetFloatv;
-    glGetFramebufferAttachmentParameteriv;
     glGetIntegerv;
-    glGetProgramInfoLog;
-    glGetProgramiv;
-    glGetRenderbufferParameteriv;
-    glGetShaderInfoLog;
-    glGetShaderPrecisionFormat;
-    glGetShaderSource;
-    glGetShaderiv;
+    glGetLightfv;
+    glGetLightxv;
+    glGetMaterialfv;
+    glGetMaterialxv;
+    glGetPointerv;
     glGetString;
+    glGetTexEnvfv;
+    glGetTexEnviv;
+    glGetTexEnvxv;
     glGetTexParameterfv;
     glGetTexParameteriv;
-    glGetUniformLocation;
-    glGetUniformfv;
-    glGetUniformiv;
-    glGetVertexAttribPointerv;
-    glGetVertexAttribfv;
-    glGetVertexAttribiv;
+    glGetTexParameterxv;
     glHint;
     glIsBuffer;
     glIsEnabled;
-    glIsFramebuffer;
-    glIsProgram;
-    glIsRenderbuffer;
-    glIsShader;
     glIsTexture;
+    glLightModelf;
+    glLightModelfv;
+    glLightModelx;
+    glLightModelxv;
+    glLightf;
+    glLightfv;
+    glLightx;
+    glLightxv;
     glLineWidth;
-    glLinkProgram;
+    glLineWidthx;
+    glLoadIdentity;
+    glLoadMatrixf;
+    glLoadMatrixx;
+    glLogicOp;
+    glMaterialf;
+    glMaterialfv;
+    glMaterialx;
+    glMaterialxv;
+    glMatrixMode;
+    glMultMatrixf;
+    glMultMatrixx;
+    glMultiTexCoord4f;
+    glMultiTexCoord4x;
+    glNormal3f;
+    glNormal3x;
+    glNormalPointer;
+    glOrthof;
+    glOrthox;
     glPixelStorei;
+    glPointParameterf;
+    glPointParameterfv;
+    glPointParameterx;
+    glPointParameterxv;
+    glPointSize;
+    glPointSizex;
     glPolygonOffset;
+    glPolygonOffsetx;
+    glPopMatrix;
+    glPushMatrix;
     glReadPixels;
-    glReleaseShaderCompiler;
-    glRenderbufferStorage;
+    glRotatef;
+    glRotatex;
     glSampleCoverage;
+    glSampleCoveragex;
+    glScalef;
+    glScalex;
     glScissor;
-    glShaderBinary;
-    glShaderSource;
+    glShadeModel;
     glStencilFunc;
-    glStencilFuncSeparate;
     glStencilMask;
-    glStencilMaskSeparate;
     glStencilOp;
-    glStencilOpSeparate;
+    glTexCoordPointer;
+    glTexEnvf;
+    glTexEnvfv;
+    glTexEnvi;
+    glTexEnviv;
+    glTexEnvx;
+    glTexEnvxv;
     glTexImage2D;
     glTexParameterf;
     glTexParameterfv;
     glTexParameteri;
     glTexParameteriv;
+    glTexParameterx;
+    glTexParameterxv;
     glTexSubImage2D;
-    glUniform1f;
-    glUniform1fv;
-    glUniform1i;
-    glUniform1iv;
-    glUniform2f;
-    glUniform2fv;
-    glUniform2i;
-    glUniform2iv;
-    glUniform3f;
-    glUniform3fv;
-    glUniform3i;
-    glUniform3iv;
-    glUniform4f;
-    glUniform4fv;
-    glUniform4i;
-    glUniform4iv;
-    glUniformMatrix2fv;
-    glUniformMatrix3fv;
-    glUniformMatrix4fv;
-    glUseProgram;
-    glValidateProgram;
-    glVertexAttrib1f;
-    glVertexAttrib1fv;
-    glVertexAttrib2f;
-    glVertexAttrib2fv;
-    glVertexAttrib3f;
-    glVertexAttrib3fv;
-    glVertexAttrib4f;
-    glVertexAttrib4fv;
-    glVertexAttribPointer;
+    glTranslatef;
+    glTranslatex;
+    glVertexPointer;
     glViewport;
 
-    # Extensions
-    glTexImage3DOES;
-    glBlitFramebufferANGLE;
-    glRenderbufferStorageMultisampleANGLE;
-    glDeleteFencesNV;
-    glFinishFenceNV;
-    glGenFencesNV;
-    glGetFenceivNV;
-    glIsFenceNV;
-    glSetFenceNV;
-    glTestFenceNV;
-    glGetGraphicsResetStatusEXT;
-    glReadnPixelsEXT;
-    glGetnUniformfvEXT;
-    glGetnUniformivEXT;
-    glGenQueriesEXT;
-    glDeleteQueriesEXT;
-    glIsQueryEXT;
-    glBeginQueryEXT;
-    glEndQueryEXT;
-    glGetQueryivEXT;
-    glGetQueryObjectuivEXT;
+	# Extensions
+	glPointSizePointerOES;
+    glEGLImageTargetTexture2DOES;
+    glEGLImageTargetRenderbufferStorageOES;
+    glIsRenderbufferOES;
+    glBindRenderbufferOES;
+    glDeleteRenderbuffersOES;
+    glGenRenderbuffersOES;
+    glRenderbufferStorageOES;
+    glGetRenderbufferParameterivOES;
+    glIsFramebufferOES;
+    glBindFramebufferOES;
+    glDeleteFramebuffersOES;
+    glGenFramebuffersOES;
+    glCheckFramebufferStatusOES;
+    glFramebufferRenderbufferOES;
+    glFramebufferTexture2DOES;
+    glGetFramebufferAttachmentParameterivOES;
+    glGenerateMipmapOES;
+    glBlendEquationOES;
+    glBlendEquationSeparateOES;
+    glBlendFuncSeparateOES;
+    glDrawTexsOES;
+    glDrawTexiOES;
+    glDrawTexxOES;
+    glDrawTexsvOES;
+    glDrawTexivOES;
+    glDrawTexxvOES;
+    glDrawTexfOES;
+    glDrawTexfvOES;
 
     # EGL dependencies
     glCreateContext;
-    glDestroyContext;
-    glMakeCurrent;
-    glGetCurrentContext;
     glGetProcAddress;
-    glBindTexImage;
 
-    createFrameBuffer;
-    createBackBuffer;
-    createDevice;
+	createFrameBuffer;
+	createBackBuffer;
+	createDepthStencil;
 
-    Register;
+	Register;
 
 local:
     *;
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cbp b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
new file mode 100644
index 0000000..e48dd25
--- /dev/null
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

+<CodeBlocks_project_file>

+	<FileVersion major="1" minor="6" />

+	<Project>

+		<Option title="libGLES_CM" />

+		<Option pch_mode="2" />

+		<Option compiler="clang" />

+		<Build>

+			<Target title="Debug x86">

+				<Option output="./../../../lib/Debug_x86/libGLES_CM.so.1" prefix_auto="0" extension_auto="0" />

+				<Option object_output="obj/x86/Debug/" />

+				<Option type="3" />

+				<Option compiler="clang" />

+				<Option createDefFile="1" />

+				<Option createStaticLib="1" />

+				<Compiler>

+					<Add option="-g" />

+					<Add option="-m32" />

+				</Compiler>

+				<Linker>

+					<Add option="-m32" />

+					<Add library="./../../LLVM/bin/x86/Debug/libLLVM.a" />

+				</Linker>

+				<ExtraCommands>

+					<Add after="ln -s -f ./libGLES_CM.so.1 ./../../../lib/Debug_x86/libGLES_CM.so" />

+				</ExtraCommands>

+			</Target>

+			<Target title="Release x86">

+				<Option output="./../../../lib/Release_x86/libGLES_CM.so.1" prefix_auto="0" extension_auto="0" />

+				<Option object_output="obj/x86/Release/" />

+				<Option type="3" />

+				<Option compiler="clang" />

+				<Option createDefFile="1" />

+				<Option createStaticLib="1" />

+				<Compiler>

+					<Add option="-fomit-frame-pointer" />

+					<Add option="-O2" />

+					<Add option="-march=i686" />

+					<Add option="-m32" />

+					<Add option="-ffunction-sections" />

+					<Add option="-fdata-sections" />

+					<Add option="-DNDEBUG" />

+					<Add option="-DANGLE_DISABLE_TRACE" />

+				</Compiler>

+				<Linker>

+					<Add option="-s" />

+					<Add option="-m32" />

+					<Add option="-Wl,--gc-sections" />

+					<Add library="./../../LLVM/bin/x86/Release/libLLVM.a" />

+				</Linker>

+				<ExtraCommands>

+					<Add after="ln -s -f ./libGLES_CM.so.1 ./../../../lib/Release_x86/libGLES_CM.so" />

+				</ExtraCommands>

+			</Target>

+			<Target title="Debug x64">

+				<Option output="./../../../lib/Debug_x64/libGLES_CM.so.1" prefix_auto="0" extension_auto="0" />

+				<Option object_output="obj/x64/Debug/" />

+				<Option type="3" />

+				<Option compiler="clang" />

+				<Option createDefFile="1" />

+				<Option createStaticLib="1" />

+				<Compiler>

+					<Add option="-g" />

+					<Add option="-m64" />

+					<Add option="-fPIC" />

+				</Compiler>

+				<Linker>

+					<Add option="-m64" />

+					<Add library="./../../LLVM/bin/x64/Debug/libLLVM.a" />

+				</Linker>

+				<ExtraCommands>

+					<Add after="ln -s -f ./libGLES_CM.so.1 ./../../../lib/Debug_x64/libGLES_CM.so" />

+				</ExtraCommands>

+			</Target>

+			<Target title="Release x64">

+				<Option output="./../../../lib/Release_x64/libGLES_CM.so.1" prefix_auto="0" extension_auto="0" />

+				<Option object_output="obj/x64/Release/" />

+				<Option type="3" />

+				<Option compiler="clang" />

+				<Option createDefFile="1" />

+				<Option createStaticLib="1" />

+				<Compiler>

+					<Add option="-fomit-frame-pointer" />

+					<Add option="-O2" />

+					<Add option="-march=core2" />

+					<Add option="-m64" />

+					<Add option="-fPIC" />

+					<Add option="-ffunction-sections" />

+					<Add option="-fdata-sections" />

+					<Add option="-DNDEBUG" />

+					<Add option="-DANGLE_DISABLE_TRACE" />

+				</Compiler>

+				<Linker>

+					<Add option="-s" />

+					<Add option="-m64" />

+					<Add option="-Wl,--gc-sections" />

+					<Add library="./../../LLVM/bin/x64/Release/libLLVM.a" />

+				</Linker>

+				<ExtraCommands>

+					<Add after="ln -s -f ./libGLES_CM.so.1 ./../../../lib/Release_x64/libGLES_CM.so" />

+				</ExtraCommands>

+			</Target>

+		</Build>

+		<Compiler>

+			<Add option="-Wall" />

+			<Add option="-std=c++11" />

+			<Add option="-fexceptions" />

+			<Add option="-fno-operator-names" />

+			<Add option="-msse2" />

+			<Add option="-D__STDC_LIMIT_MACROS" />

+			<Add option="-D__STDC_CONSTANT_MACROS" />

+			<Add directory="./../" />

+			<Add directory="./../include/" />

+			<Add directory="./../../" />

+			<Add directory="./../../LLVM/include-linux/" />

+			<Add directory="./../../LLVM/include/" />

+			<Add directory="./../../LLVM/lib/Target/X86" />

+			<Add directory="./../../Renderer/" />

+			<Add directory="./../../Common/" />

+			<Add directory="./../../Shader/" />

+			<Add directory="./../../Main/" />

+		</Compiler>

+		<Linker>

+			<Add option="-Wl,--version-script=./exports.map" />

+			<Add library="pthread" />

+			<Add library="X11" />

+			<Add library="Xext" />

+		</Linker>

+		<Unit filename="../../Common/CPUID.cpp" />

+		<Unit filename="../../Common/CPUID.hpp" />

+		<Unit filename="../../Common/Configurator.cpp" />

+		<Unit filename="../../Common/Configurator.hpp" />

+		<Unit filename="../../Common/Debug.cpp" />

+		<Unit filename="../../Common/Debug.hpp" />

+		<Unit filename="../../Common/ExceptionHandling.hpp" />

+		<Unit filename="../../Common/Half.cpp" />

+		<Unit filename="../../Common/Half.hpp" />

+		<Unit filename="../../Common/Math.cpp" />

+		<Unit filename="../../Common/Math.hpp" />

+		<Unit filename="../../Common/Memory.cpp" />

+		<Unit filename="../../Common/Memory.hpp" />

+		<Unit filename="../../Common/MetaMacro.hpp" />

+		<Unit filename="../../Common/MutexLock.hpp" />

+		<Unit filename="../../Common/Resource.cpp" />

+		<Unit filename="../../Common/Resource.hpp" />

+		<Unit filename="../../Common/Socket.cpp" />

+		<Unit filename="../../Common/Socket.hpp" />

+		<Unit filename="../../Common/Thread.cpp" />

+		<Unit filename="../../Common/Thread.hpp" />

+		<Unit filename="../../Common/Timer.cpp" />

+		<Unit filename="../../Common/Timer.hpp" />

+		<Unit filename="../../Common/Types.hpp" />

+		<Unit filename="../../Common/Version.h" />

+		<Unit filename="../../Main/Config.cpp" />

+		<Unit filename="../../Main/Config.hpp" />

+		<Unit filename="../../Main/FrameBuffer.cpp" />

+		<Unit filename="../../Main/FrameBuffer.hpp" />

+		<Unit filename="../../Main/FrameBufferX11.cpp" />

+		<Unit filename="../../Main/FrameBufferX11.hpp" />

+		<Unit filename="../../Main/Logo.cpp" />

+		<Unit filename="../../Main/Register.cpp" />

+		<Unit filename="../../Main/Register.hpp" />

+		<Unit filename="../../Main/SwiftConfig.cpp" />

+		<Unit filename="../../Main/SwiftConfig.hpp" />

+		<Unit filename="../../Main/crc.cpp" />

+		<Unit filename="../../Main/crc.h" />

+		<Unit filename="../../Main/serialcommon.h" />

+		<Unit filename="../../Main/serialvalid.cpp" />

+		<Unit filename="../../Main/serialvalid.h" />

+		<Unit filename="../../Reactor/Nucleus.cpp" />

+		<Unit filename="../../Reactor/Nucleus.hpp" />

+		<Unit filename="../../Reactor/Reactor.hpp" />

+		<Unit filename="../../Reactor/Routine.cpp" />

+		<Unit filename="../../Reactor/Routine.hpp" />

+		<Unit filename="../../Reactor/RoutineManager.cpp" />

+		<Unit filename="../../Reactor/RoutineManager.hpp" />

+		<Unit filename="../../Reactor/x86.hpp" />

+		<Unit filename="../../Renderer/Blitter.cpp" />

+		<Unit filename="../../Renderer/Blitter.hpp" />

+		<Unit filename="../../Renderer/Clipper.cpp" />

+		<Unit filename="../../Renderer/Clipper.hpp" />

+		<Unit filename="../../Renderer/Color.cpp" />

+		<Unit filename="../../Renderer/Color.hpp" />

+		<Unit filename="../../Renderer/Context.cpp" />

+		<Unit filename="../../Renderer/Context.hpp" />

+		<Unit filename="../../Renderer/LRUCache.hpp" />

+		<Unit filename="../../Renderer/Matrix.cpp" />

+		<Unit filename="../../Renderer/Matrix.hpp" />

+		<Unit filename="../../Renderer/PixelProcessor.cpp" />

+		<Unit filename="../../Renderer/PixelProcessor.hpp" />

+		<Unit filename="../../Renderer/Plane.cpp" />

+		<Unit filename="../../Renderer/Plane.hpp" />

+		<Unit filename="../../Renderer/Point.cpp" />

+		<Unit filename="../../Renderer/Point.hpp" />

+		<Unit filename="../../Renderer/Polygon.hpp" />

+		<Unit filename="../../Renderer/Primitive.hpp" />

+		<Unit filename="../../Renderer/QuadRasterizer.cpp" />

+		<Unit filename="../../Renderer/QuadRasterizer.hpp" />

+		<Unit filename="../../Renderer/Rasterizer.cpp" />

+		<Unit filename="../../Renderer/Rasterizer.hpp" />

+		<Unit filename="../../Renderer/Renderer.cpp" />

+		<Unit filename="../../Renderer/Renderer.hpp" />

+		<Unit filename="../../Renderer/Sampler.cpp" />

+		<Unit filename="../../Renderer/Sampler.hpp" />

+		<Unit filename="../../Renderer/SetupProcessor.cpp" />

+		<Unit filename="../../Renderer/SetupProcessor.hpp" />

+		<Unit filename="../../Renderer/Stream.hpp" />

+		<Unit filename="../../Renderer/Surface.cpp" />

+		<Unit filename="../../Renderer/Surface.hpp" />

+		<Unit filename="../../Renderer/TextureStage.cpp" />

+		<Unit filename="../../Renderer/TextureStage.hpp" />

+		<Unit filename="../../Renderer/Triangle.hpp" />

+		<Unit filename="../../Renderer/Vector.cpp" />

+		<Unit filename="../../Renderer/Vector.hpp" />

+		<Unit filename="../../Renderer/Vertex.hpp" />

+		<Unit filename="../../Renderer/VertexProcessor.cpp" />

+		<Unit filename="../../Renderer/VertexProcessor.hpp" />

+		<Unit filename="../../Shader/Constants.cpp" />

+		<Unit filename="../../Shader/Constants.hpp" />

+		<Unit filename="../../Shader/PixelRoutine.cpp" />

+		<Unit filename="../../Shader/PixelRoutine.hpp" />

+		<Unit filename="../../Shader/PixelShader.cpp" />

+		<Unit filename="../../Shader/PixelShader.hpp" />

+		<Unit filename="../../Shader/SamplerCore.cpp" />

+		<Unit filename="../../Shader/SamplerCore.hpp" />

+		<Unit filename="../../Shader/SetupRoutine.cpp" />

+		<Unit filename="../../Shader/SetupRoutine.hpp" />

+		<Unit filename="../../Shader/Shader.cpp" />

+		<Unit filename="../../Shader/Shader.hpp" />

+		<Unit filename="../../Shader/ShaderCore.cpp" />

+		<Unit filename="../../Shader/ShaderCore.hpp" />

+		<Unit filename="../../Shader/VertexPipeline.cpp" />

+		<Unit filename="../../Shader/VertexPipeline.hpp" />

+		<Unit filename="../../Shader/VertexProgram.cpp" />

+		<Unit filename="../../Shader/VertexProgram.hpp" />

+		<Unit filename="../../Shader/VertexRoutine.cpp" />

+		<Unit filename="../../Shader/VertexRoutine.hpp" />

+		<Unit filename="../../Shader/VertexShader.cpp" />

+		<Unit filename="../../Shader/VertexShader.hpp" />

+		<Unit filename="../common/debug.cpp" />

+		<Unit filename="../common/debug.h" />

+		<Unit filename="../include/EGL/egl.h" />

+		<Unit filename="../include/EGL/eglext.h" />

+		<Unit filename="../include/EGL/eglplatform.h" />

+		<Unit filename="../include/GLES2/gl2.h" />

+		<Unit filename="../include/GLES2/gl2ext.h" />

+		<Unit filename="../include/GLES2/gl2platform.h" />

+		<Unit filename="../include/GLSLANG/ShaderLang.h" />

+		<Unit filename="../include/KHR/khrplatform.h" />

+		<Unit filename="Buffer.cpp" />

+		<Unit filename="Buffer.h" />

+		<Unit filename="Context.cpp" />

+		<Unit filename="Context.h" />

+		<Unit filename="Device.cpp" />

+		<Unit filename="Device.hpp" />

+		<Unit filename="Framebuffer.cpp" />

+		<Unit filename="Framebuffer.h" />

+		<Unit filename="HandleAllocator.cpp" />

+		<Unit filename="HandleAllocator.h" />

+		<Unit filename="Image.cpp" />

+		<Unit filename="Image.hpp" />

+		<Unit filename="IndexDataManager.cpp" />

+		<Unit filename="IndexDataManager.h" />

+		<Unit filename="RefCountObject.cpp" />

+		<Unit filename="RefCountObject.h" />

+		<Unit filename="Renderbuffer.cpp" />

+		<Unit filename="Renderbuffer.h" />

+		<Unit filename="ResourceManager.cpp" />

+		<Unit filename="ResourceManager.h" />

+		<Unit filename="Texture.cpp" />

+		<Unit filename="Texture.h" />

+		<Unit filename="Unknown.hpp" />

+		<Unit filename="VertexDataManager.cpp" />

+		<Unit filename="VertexDataManager.h" />

+		<Unit filename="libGLES_CM.cpp" />

+		<Unit filename="main.cpp" />

+		<Unit filename="main.h" />

+		<Unit filename="mathutil.h" />

+		<Unit filename="resource.h" />

+		<Unit filename="utilities.cpp" />

+		<Unit filename="utilities.h" />

+		<Unit filename="vertexconversion.h" />

+		<Extensions>

+			<code_completion />

+			<debugger />

+		</Extensions>

+	</Project>

+</CodeBlocks_project_file>

diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cpp b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
index 9280c8b..62359b9 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.cpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
@@ -18,7 +18,6 @@
 #include "Framebuffer.h"

 #include "Renderbuffer.h"

 #include "Texture.h"

-#include "Query.h"

 #include "common/debug.h"

 #include "Common/SharedLibrary.hpp"

 #include "Common/Version.h"

@@ -65,7 +64,7 @@
 

     if(compressed)

     {

-        if((width % 4 != 0 && width != texture->getWidth(target, 0)) || 

+        if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||

            (height % 4 != 0 && height != texture->getHeight(target, 0)))

         {

             return error(GL_INVALID_OPERATION, false);

@@ -899,7 +898,7 @@
 void GL_APIENTRY glClientActiveTexture(GLenum texture)

 {

 	TRACE("(GLenum texture = 0x%X)", texture);

-	

+

 	try

     {

 		switch(texture)

@@ -1023,10 +1022,10 @@
 	UNIMPLEMENTED();

 }

 

-void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, 

+void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,

                                         GLint border, GLsizei imageSize, const GLvoid* data)

 {

-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, " 

+    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "

           "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",

           target, level, internalformat, width, height, border, imageSize, data);

 

@@ -1756,7 +1755,7 @@
               default:

                 return error(GL_INVALID_ENUM);

             }

-        

+

             context->drawElements(mode, count, type, indices);

         }

     }

@@ -1825,7 +1824,7 @@
 void GL_APIENTRY glEnableClientState(GLenum array)

 {

 	TRACE("(GLenum array = 0x%X)", array);

-    

+

     try

     {

         es1::Context *context = es1::getContext();

@@ -1906,7 +1905,7 @@
         {

             es1::Framebuffer *framebuffer = context->getFramebuffer();

             GLuint framebufferHandle = context->getFramebufferHandle();

-            

+

             if(!framebuffer || (framebufferHandle == 0 && renderbuffer != 0))

             {

                 return error(GL_INVALID_OPERATION);

@@ -2277,7 +2276,7 @@
             if(!(context->getBooleanv(pname, params)))

             {

                 unsigned int numParams = context->getQueryParameterNum(pname);

-				

+

 				if(numParams < 0)

 				{

 					return error(GL_INVALID_ENUM);

@@ -2420,7 +2419,7 @@
             if(!(context->getFloatv(pname, params)))

             {

                 unsigned int numParams = context->getQueryParameterNum(pname);

-				

+

 				if(numParams < 0)

 				{

 					return error(GL_INVALID_ENUM);

@@ -2486,21 +2485,21 @@
             {

                 return error(GL_INVALID_ENUM);

             }

-            

+

             if(context->getFramebufferHandle() == 0)

             {

                 return error(GL_INVALID_OPERATION);

             }

 

             es1::Framebuffer *framebuffer = context->getFramebuffer();

-            

+

             GLenum attachmentType;

             GLuint attachmentHandle;

             switch(attachment)

             {

-            case GL_COLOR_ATTACHMENT0_OES:    

+            case GL_COLOR_ATTACHMENT0_OES:

                 attachmentType = framebuffer->getColorbufferType();

-                attachmentHandle = framebuffer->getColorbufferHandle(); 

+                attachmentHandle = framebuffer->getColorbufferHandle();

                 break;

             case GL_DEPTH_ATTACHMENT_OES:

                 attachmentType = framebuffer->getDepthbufferType();

@@ -2574,7 +2573,7 @@
             if(!(context->getIntegerv(pname, params)))

             {

                 unsigned int numParams = context->getQueryParameterNum(pname);

-				

+

 				if(numParams < 0)

 				{

 					return error(GL_INVALID_ENUM);

@@ -2670,7 +2669,7 @@
         case GL_RENDERER:

             return (GLubyte*)"SwiftShader";

         case GL_VERSION:

-            return (GLubyte*)"OpenGL ES 1.1 SwiftShader "VERSION_STRING;

+            return (GLubyte*)"OpenGL ES 1.1 SwiftShader " VERSION_STRING;

         case GL_EXTENSIONS:

             // Keep list sorted in following order:

 	        // OES extensions

@@ -2859,7 +2858,7 @@
           case GL_DONT_CARE:

             break;

           default:

-            return error(GL_INVALID_ENUM); 

+            return error(GL_INVALID_ENUM);

         }

 

         es1::Context *context = es1::getContext();

@@ -3044,7 +3043,7 @@
 void GL_APIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params)

 {

 	TRACE("(GLenum light = 0x%X, GLenum pname = 0x%X, const GLint *params)", light, pname);

-    

+

 	try

     {

         es1::Context *context = es1::getContext();

@@ -3385,7 +3384,7 @@
 void GL_APIENTRY glPopMatrix(void)

 {

 	TRACE("()");

-    

+

     try

     {

         es1::Context *context = es1::getContext();

@@ -3404,7 +3403,7 @@
 void GL_APIENTRY glPushMatrix(void)

 {

 	TRACE("()");

-    

+

     try

     {

         es1::Context *context = es1::getContext();

@@ -3480,7 +3479,7 @@
 

         if(context)

         {

-            if(width > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE || 

+            if(width > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||

                height > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE)

             {

                 return error(GL_INVALID_VALUE);

@@ -3524,7 +3523,7 @@
 void GL_APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)

 {

 	TRACE("(GLfloat angle = %f, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", angle, x, y, z);

-    

+

     try

     {

         es1::Context *context = es1::getContext();

@@ -3572,7 +3571,7 @@
 void GL_APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z)

 {

 	TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);

-    

+

     try

     {

         es1::Context *context = es1::getContext();

@@ -3905,7 +3904,7 @@
                     return error(GL_INVALID_ENUM);

                 }

             }

-			

+

             if(target == GL_TEXTURE_2D)

             {

                 es1::Texture2D *texture = context->getTexture2D();

@@ -4148,7 +4147,7 @@
 void GL_APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z)

 {

 	TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);

-    

+

     try

     {

         es1::Context *context = es1::getContext();

@@ -4225,7 +4224,7 @@
         if(context)

         {

             es1::Texture2D *texture = 0;

-			

+

 			switch(target)

 			{

 			case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;

diff --git a/src/OpenGL/libGLESv2/exports.map b/src/OpenGL/libGLESv2/exports.map
index 7d08ed0..cab96a0 100644
--- a/src/OpenGL/libGLESv2/exports.map
+++ b/src/OpenGL/libGLESv2/exports.map
@@ -158,27 +158,25 @@
     glReadnPixelsEXT;
     glGetnUniformfvEXT;
     glGetnUniformivEXT;
-    glGenQueriesEXT;
+	glGenQueriesEXT;
     glDeleteQueriesEXT;
     glIsQueryEXT;
     glBeginQueryEXT;
     glEndQueryEXT;
     glGetQueryivEXT;
     glGetQueryObjectuivEXT;
+	glEGLImageTargetTexture2DOES;
+	glEGLImageTargetRenderbufferStorageOES;
 
     # EGL dependencies
     glCreateContext;
-    glDestroyContext;
-    glMakeCurrent;
-    glGetCurrentContext;
     glGetProcAddress;
-    glBindTexImage;
 
-    createFrameBuffer;
-    createBackBuffer;
-    createDevice;
+	createFrameBuffer;
+	createBackBuffer;
+	createDepthStencil;
 
-    Register;
+	Register;
 
 local:
     *;
diff --git a/src/Reactor/RoutineManager.cpp b/src/Reactor/RoutineManager.cpp
index 27239d9..8428f29 100644
--- a/src/Reactor/RoutineManager.cpp
+++ b/src/Reactor/RoutineManager.cpp
@@ -82,11 +82,11 @@
 		return 0;
 	}
 
-	void RoutineManager::endExceptionTable(const llvm::Function *F, uint8_t *TableStart, uint8_t *TableEnd, uint8_t* FrameRegister) 
+	void RoutineManager::endExceptionTable(const llvm::Function *F, uint8_t *TableStart, uint8_t *TableEnd, uint8_t* FrameRegister)
 	{
 		UNIMPLEMENTED();
 	}
-    
+
 	uint8_t *RoutineManager::getGOTBase() const
 	{
 		ASSERT(!HasGOT);
@@ -113,7 +113,10 @@
 
 	void RoutineManager::deallocateExceptionTable(void *ET)
 	{
-		UNIMPLEMENTED();
+        if(ET)
+        {
+            UNIMPLEMENTED();
+        }
 	}
 
 	void RoutineManager::setMemoryWritable()
diff --git a/src/SwiftShader.workspace b/src/SwiftShader.workspace
index d80e076..bceebc3 100644
--- a/src/SwiftShader.workspace
+++ b/src/SwiftShader.workspace
@@ -5,6 +5,9 @@
 		<Project filename="OpenGL/libGLESv2/libGLESv2.cbp">
 			<Depends filename="LLVM/LLVM.cbp" />
 		</Project>
+		<Project filename="OpenGL/libGLES_CM/libGLES_CM.cbp">
+			<Depends filename="LLVM/LLVM.cbp" />
+		</Project>
 		<Project filename="LLVM/LLVM.cbp" />
 		<Project filename="../tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OGLES2HelloAPI.cbp">
 			<Depends filename="OpenGL/libEGL/libEGL.cbp" />