Commit 4cadfe33 by Nicolas Capens Committed by Nicolas Capens

Create 64-bit translator libraries for the Android Emulator.

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