Commit d71d02a8 by Nicolas Capens Committed by Nicolas Capens

Implement EGL_KHR_gl_texture_cubemap_image support.

BUG=14610416 Change-Id: I1e236333c8fb7a6870bdd1ef8abaea4c6e9e4d4e Reviewed-on: https://swiftshader-review.googlesource.com/1052Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent b676d2d0
...@@ -188,6 +188,7 @@ const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name) ...@@ -188,6 +188,7 @@ const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name)
return success("OpenGL_ES"); return success("OpenGL_ES");
case EGL_EXTENSIONS: case EGL_EXTENSIONS:
return success("EGL_KHR_gl_texture_2D_image " return success("EGL_KHR_gl_texture_2D_image "
"EGL_KHR_gl_texture_cubemap_image "
"EGL_KHR_image_base"); "EGL_KHR_image_base");
case EGL_VENDOR: case EGL_VENDOR:
return success("TransGaming Inc."); return success("TransGaming Inc.");
...@@ -1078,9 +1079,20 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu ...@@ -1078,9 +1079,20 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu
return error(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); return error(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
} }
GLenum textureTarget = GL_NONE;
switch(target) switch(target)
{ {
case EGL_GL_TEXTURE_2D_KHR: case EGL_GL_TEXTURE_2D_KHR:
textureTarget = GL_TEXTURE_2D;
break;
case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
textureTarget = GL_TEXTURE_CUBE_MAP;
break; break;
default: default:
return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
...@@ -1112,8 +1124,6 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu ...@@ -1112,8 +1124,6 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu
return error(EGL_BAD_MATCH, EGL_NO_IMAGE_KHR); return error(EGL_BAD_MATCH, EGL_NO_IMAGE_KHR);
} }
if(target == EGL_GL_TEXTURE_2D_KHR)
{
GLuint name = (GLuint)buffer; GLuint name = (GLuint)buffer;
if(name == 0) if(name == 0)
...@@ -1123,12 +1133,12 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu ...@@ -1123,12 +1133,12 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu
gl::Texture *texture = context->getTexture(name); gl::Texture *texture = context->getTexture(name);
if(!texture || texture->getTarget() != GL_TEXTURE_2D) if(!texture || texture->getTarget() != textureTarget)
{ {
return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
} }
if(texture->isShared(GL_TEXTURE_2D, textureLevel)) // Bound to an EGLSurface or already an EGLImage sibling if(texture->isShared(textureTarget, textureLevel)) // Bound to an EGLSurface or already an EGLImage sibling
{ {
return error(EGL_BAD_ACCESS, EGL_NO_IMAGE_KHR); return error(EGL_BAD_ACCESS, EGL_NO_IMAGE_KHR);
} }
...@@ -1143,7 +1153,7 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu ...@@ -1143,7 +1153,7 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu
return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR); return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
} }
gl::Image *image = texture->getSharedImage(GL_TEXTURE_2D, textureLevel); gl::Image *image = texture->getSharedImage(textureTarget, textureLevel);
if(!image) if(!image)
{ {
...@@ -1152,8 +1162,6 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu ...@@ -1152,8 +1162,6 @@ EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenu
return success((EGLImageKHR)image); return success((EGLImageKHR)image);
} }
else UNREACHABLE();
}
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
return error(EGL_BAD_ALLOC, EGL_NO_IMAGE_KHR); return error(EGL_BAD_ALLOC, EGL_NO_IMAGE_KHR);
......
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