OSDN Git Service

Create 64-bit translator libraries for the Android Emulator.
authorNicolas Capens <capn@google.com>
Thu, 11 Dec 2014 03:26:26 +0000 (22:26 -0500)
committerNicolas Capens <nicolascapens@google.com>
Thu, 11 Dec 2014 03:31:31 +0000 (03:31 +0000)
This patch also clips 64-bit parameters for glBufferData and glBufferSubData
to 32-bit to work around an Android emulator issue.

Bug 18510357

Change-Id: If6870d75849e372747072ec157580d9f5ec76a9a
Reviewed-on: https://swiftshader-review.googlesource.com/1610
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
src/OpenGL/libEGL/main.cpp
src/OpenGL/libGLES_CM/libGLES_CM.cpp
src/OpenGL/libGLES_CM/main.cpp
src/OpenGL/libGLESv2/libGLESv2.cpp
src/OpenGL/libGLESv2/main.cpp

index 3256595..7e4e09a 100644 (file)
@@ -85,6 +85,8 @@ CONSTRUCTOR static bool eglAttachProcess()
 \r
        #if defined(_WIN32)\r
        const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};\r
+       #elif defined(__LP64__)\r
+       const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};\r
        #else\r
        const char *libGLES_CM_lib[] = {"libGLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};\r
        #endif\r
@@ -95,6 +97,8 @@ CONSTRUCTOR static bool eglAttachProcess()
 \r
        #if defined(_WIN32)\r
        const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"};\r
+       #elif defined(__LP64__)\r
+       const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};\r
        #else\r
        const char *libGLESv2_lib[] = {"libGLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};\r
        #endif\r
index 790e5e2..0e48003 100644 (file)
@@ -377,13 +377,13 @@ void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer)
        {\r
                switch(target)\r
                {\r
-                       case GL_ARRAY_BUFFER:\r
+               case GL_ARRAY_BUFFER:\r
                        context->bindArrayBuffer(buffer);\r
                        return;\r
-                       case GL_ELEMENT_ARRAY_BUFFER:\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
                        context->bindElementArrayBuffer(buffer);\r
                        return;\r
-                       default:\r
+               default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r
        }\r
@@ -535,71 +535,71 @@ void GL_APIENTRY glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum src
 \r
        switch(srcRGB)\r
        {\r
-               case GL_ZERO:\r
-               case GL_ONE:\r
-               case GL_SRC_COLOR:\r
-               case GL_ONE_MINUS_SRC_COLOR:\r
-               case GL_DST_COLOR:\r
-               case GL_ONE_MINUS_DST_COLOR:\r
-               case GL_SRC_ALPHA:\r
-               case GL_ONE_MINUS_SRC_ALPHA:\r
-               case GL_DST_ALPHA:\r
-               case GL_ONE_MINUS_DST_ALPHA:\r
-               case GL_SRC_ALPHA_SATURATE:\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_SRC_ALPHA_SATURATE:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
        switch(dstRGB)\r
        {\r
-               case GL_ZERO:\r
-               case GL_ONE:\r
-               case GL_SRC_COLOR:\r
-               case GL_ONE_MINUS_SRC_COLOR:\r
-               case GL_DST_COLOR:\r
-               case GL_ONE_MINUS_DST_COLOR:\r
-               case GL_SRC_ALPHA:\r
-               case GL_ONE_MINUS_SRC_ALPHA:\r
-               case GL_DST_ALPHA:\r
-               case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
        switch(srcAlpha)\r
        {\r
-               case GL_ZERO:\r
-               case GL_ONE:\r
-               case GL_SRC_COLOR:\r
-               case GL_ONE_MINUS_SRC_COLOR:\r
-               case GL_DST_COLOR:\r
-               case GL_ONE_MINUS_DST_COLOR:\r
-               case GL_SRC_ALPHA:\r
-               case GL_ONE_MINUS_SRC_ALPHA:\r
-               case GL_DST_ALPHA:\r
-               case GL_ONE_MINUS_DST_ALPHA:\r
-               case GL_SRC_ALPHA_SATURATE:\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_SRC_ALPHA_SATURATE:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
        switch(dstAlpha)\r
        {\r
-               case GL_ZERO:\r
-               case GL_ONE:\r
-               case GL_SRC_COLOR:\r
-               case GL_ONE_MINUS_SRC_COLOR:\r
-               case GL_DST_COLOR:\r
-               case GL_ONE_MINUS_DST_COLOR:\r
-               case GL_SRC_ALPHA:\r
-               case GL_ONE_MINUS_SRC_ALPHA:\r
-               case GL_DST_ALPHA:\r
-               case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
@@ -612,7 +612,9 @@ void GL_APIENTRY glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum src
 }\r
 \r
 void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)\r
-{\r
+{
+       size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
+\r
        TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
              target, size, data, usage);\r
 \r
@@ -623,10 +625,10 @@ void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data
 \r
        switch(usage)\r
        {\r
-               case GL_STATIC_DRAW:\r
-               case GL_DYNAMIC_DRAW:\r
+       case GL_STATIC_DRAW:\r
+       case GL_DYNAMIC_DRAW:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
@@ -638,13 +640,13 @@ void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data
 \r
                switch(target)\r
                {\r
-                       case GL_ARRAY_BUFFER:\r
+               case GL_ARRAY_BUFFER:\r
                        buffer = context->getArrayBuffer();\r
                        break;\r
-                       case GL_ELEMENT_ARRAY_BUFFER:\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
                        buffer = context->getElementArrayBuffer();\r
                        break;\r
-                       default:\r
+               default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r
 \r
@@ -658,9 +660,12 @@ void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data
 }\r
 \r
 void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)\r
-{\r
+{
+       size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
+       offset = static_cast<GLint>(offset);
+\r
        TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
-             target, offset, size, data);\r
+             target, offset, size, data);
 \r
        if(size < 0 || offset < 0)\r
        {\r
@@ -680,13 +685,13 @@ void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size
 \r
                switch(target)\r
                {\r
-                       case GL_ARRAY_BUFFER:\r
+               case GL_ARRAY_BUFFER:\r
                        buffer = context->getArrayBuffer();\r
                        break;\r
-                       case GL_ELEMENT_ARRAY_BUFFER:\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
                        buffer = context->getElementArrayBuffer();\r
                        break;\r
-                       default:\r
+               default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r
 \r
@@ -945,7 +950,7 @@ void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum inter
                {\r
                case GL_TEXTURE_2D:\r
                        if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                               height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
+                          height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
                        {\r
                                return error(GL_INVALID_VALUE);\r
                        }\r
@@ -2839,7 +2844,7 @@ void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)
        {\r
                switch(pname)\r
                {\r
-                       case GL_UNPACK_ALIGNMENT:\r
+               case GL_UNPACK_ALIGNMENT:\r
                        if(param != 1 && param != 2 && param != 4 && param != 8)\r
                        {\r
                                return error(GL_INVALID_VALUE);\r
@@ -2847,8 +2852,7 @@ void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)
 \r
                        context->setUnpackAlignment(param);\r
                        break;\r
-\r
-                       case GL_PACK_ALIGNMENT:\r
+               case GL_PACK_ALIGNMENT:\r
                        if(param != 1 && param != 2 && param != 4 && param != 8)\r
                        {\r
                                return error(GL_INVALID_VALUE);\r
@@ -2856,8 +2860,7 @@ void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)
 \r
                        context->setPackAlignment(param);\r
                        break;\r
-\r
-                       default:\r
+               default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r
        }\r
@@ -3105,16 +3108,16 @@ void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)
 \r
        switch(func)\r
        {\r
-               case GL_NEVER:\r
-               case GL_ALWAYS:\r
-               case GL_LESS:\r
-               case GL_LEQUAL:\r
-               case GL_EQUAL:\r
-               case GL_GEQUAL:\r
-               case GL_GREATER:\r
-               case GL_NOTEQUAL:\r
+       case GL_NEVER:\r
+       case GL_ALWAYS:\r
+       case GL_LESS:\r
+       case GL_LEQUAL:\r
+       case GL_EQUAL:\r
+       case GL_GEQUAL:\r
+       case GL_GREATER:\r
+       case GL_NOTEQUAL:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
@@ -3144,46 +3147,46 @@ void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
 \r
        switch(fail)\r
        {\r
-               case GL_ZERO:\r
-               case GL_KEEP:\r
-               case GL_REPLACE:\r
-               case GL_INCR:\r
-               case GL_DECR:\r
-               case GL_INVERT:\r
-               case GL_INCR_WRAP_OES:\r
-               case GL_DECR_WRAP_OES:\r
+       case GL_ZERO:\r
+       case GL_KEEP:\r
+       case GL_REPLACE:\r
+       case GL_INCR:\r
+       case GL_DECR:\r
+       case GL_INVERT:\r
+       case GL_INCR_WRAP_OES:\r
+       case GL_DECR_WRAP_OES:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
        switch(zfail)\r
        {\r
-               case GL_ZERO:\r
-               case GL_KEEP:\r
-               case GL_REPLACE:\r
-               case GL_INCR:\r
-               case GL_DECR:\r
-               case GL_INVERT:\r
-               case GL_INCR_WRAP_OES:\r
-               case GL_DECR_WRAP_OES:\r
+       case GL_ZERO:\r
+       case GL_KEEP:\r
+       case GL_REPLACE:\r
+       case GL_INCR:\r
+       case GL_DECR:\r
+       case GL_INVERT:\r
+       case GL_INCR_WRAP_OES:\r
+       case GL_DECR_WRAP_OES:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
        switch(zpass)\r
        {\r
-               case GL_ZERO:\r
-               case GL_KEEP:\r
-               case GL_REPLACE:\r
-               case GL_INCR:\r
-               case GL_DECR:\r
-               case GL_INVERT:\r
-               case GL_INCR_WRAP_OES:\r
-               case GL_DECR_WRAP_OES:\r
+       case GL_ZERO:\r
+       case GL_KEEP:\r
+       case GL_REPLACE:\r
+       case GL_INCR:\r
+       case GL_DECR:\r
+       case GL_INVERT:\r
+       case GL_INCR_WRAP_OES:\r
+       case GL_DECR_WRAP_OES:\r
                break;\r
-               default:\r
+       default:\r
                return error(GL_INVALID_ENUM);\r
        }\r
 \r
@@ -3445,8 +3448,8 @@ void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)
                        texture = context->getTexture2D();\r
                        break;\r
                case GL_TEXTURE_EXTERNAL_OES:\r
-                               texture = context->getTextureExternal();\r
-                               break;\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
                default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r
index 858992b..bef7451 100644 (file)
@@ -45,6 +45,8 @@ CONSTRUCTOR static bool glAttachProcess()
 \r
        #if defined(_WIN32)\r
        const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};\r
+       #elif defined(__LP64__)\r
+       const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};\r
        #else\r
        const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};\r
        #endif\r
@@ -156,4 +158,4 @@ namespace egl
        egl::Display *(*getCurrentDisplay)() = 0;\r
 }\r
 \r
-void *libEGL = 0;   // Handle to the libEGL module
+void *libEGL = 0;   // Handle to the libEGL module\r
index 96728c4..dae58e4 100644 (file)
@@ -507,7 +507,9 @@ void GL_APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlp
 }\r
 \r
 void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)\r
-{\r
+{
+       size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
+\r
        TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
              target, size, data, usage);\r
 \r
@@ -554,7 +556,10 @@ void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data
 }\r
 \r
 void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)\r
-{\r
+{
+       size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
+       offset = static_cast<GLint>(offset);
+\r
        TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
              target, offset, size, data);\r
 \r
index 18e8fcb..e351580 100644 (file)
@@ -45,6 +45,8 @@ CONSTRUCTOR static bool glAttachProcess()
 \r
        #if defined(_WIN32)\r
        const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};\r
+       #elif defined(__LP64__)\r
+       const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};\r
        #else\r
        const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};\r
        #endif\r
@@ -55,6 +57,8 @@ CONSTRUCTOR static bool glAttachProcess()
 \r
        #if defined(_WIN32)\r
        const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};\r
+       #elif defined(__LP64__)\r
+       const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};\r
        #else\r
        const char *libGLES_CM_lib[] = {"libGLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};\r
        #endif\r