Store EGL images in a namespace. This allows validating the EGL image handles. It also ensures that on 64-bit platforms the handles fit in 32-bit so they can be exchanged through 32-bit applications (e.g. on a 32-bit virtual machine). Change-Id: Ie02b00edd2cf7fa02b38316ee7d21c22eae720b5 Reviewed-on: https://swiftshader-review.googlesource.com/5500 Tested-by: Nicolas Capens <capn@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp index ec21154..3e040b4 100644 --- a/src/OpenGL/libGLESv2/libGLESv2.cpp +++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -35,7 +35,7 @@ #include <limits> -#ifdef ANDROID +#ifdef __ANDROID__ #include <cutils/log.h> #endif @@ -6682,16 +6682,11 @@ return error(GL_INVALID_ENUM); } - if(!image) - { - return error(GL_INVALID_OPERATION); - } - es2::Context *context = es2::getContext(); if(context) { - es2::Texture2D *texture = 0; + es2::Texture2D *texture = nullptr; switch(target) { @@ -6705,9 +6700,14 @@ return error(GL_INVALID_OPERATION); } - egl::Image *glImage = static_cast<egl::Image*>(image); + egl::Image *eglImage = context->getSharedImage(image); - texture->setImage(glImage); + if(!eglImage) + { + return error(GL_INVALID_OPERATION); + } + + texture->setSharedImage(eglImage); } }