Commit d6e03bb6 by Nicolas Capens Committed by Nicolas Capens

Implement the EGL_KHR_image_base interface.

BUG=14610416 Change-Id: I9df43e50ac3160dbfb5deda90a7c1b618c9e91b4 Reviewed-on: https://swiftshader-review.googlesource.com/1021Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent d8afb0f2
...@@ -165,8 +165,6 @@ bool Display::initialize() ...@@ -165,8 +165,6 @@ bool Display::initialize()
return false; return false;
} }
initExtensionString();
return true; return true;
} }
...@@ -503,22 +501,6 @@ gl::Device *Display::getDevice() ...@@ -503,22 +501,6 @@ gl::Device *Display::getDevice()
return mDevice; return mDevice;
} }
void Display::initExtensionString()
{
mExtensionString += "EGL_ANGLE_query_surface_pointer ";
std::string::size_type end = mExtensionString.find_last_not_of(' ');
if(end != std::string::npos)
{
mExtensionString.resize(end + 1);
}
}
const char *Display::getExtensionString() const
{
return mExtensionString.c_str();
}
EGLNativeDisplayType Display::getNativeDisplay() const EGLNativeDisplayType Display::getNativeDisplay() const
{ {
return displayId; return displayId;
......
...@@ -80,9 +80,6 @@ namespace egl ...@@ -80,9 +80,6 @@ namespace egl
ContextSet mContextSet; ContextSet mContextSet;
bool createDevice(); bool createDevice();
void initExtensionString();
std::string mExtensionString;
}; };
} }
......
...@@ -182,12 +182,12 @@ const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name) ...@@ -182,12 +182,12 @@ const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name)
return NULL; return NULL;
} }
switch (name) switch(name)
{ {
case EGL_CLIENT_APIS: case EGL_CLIENT_APIS:
return success("OpenGL_ES"); return success("OpenGL_ES");
case EGL_EXTENSIONS: case EGL_EXTENSIONS:
return display->getExtensionString(); return success("EGL_KHR_image_base");
case EGL_VENDOR: case EGL_VENDOR:
return success("TransGaming Inc."); return success("TransGaming Inc.");
case EGL_VERSION: case EGL_VERSION:
...@@ -1060,6 +1060,82 @@ EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNat ...@@ -1060,6 +1060,82 @@ EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNat
return EGL_FALSE; return EGL_FALSE;
} }
EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
{
try
{
egl::Display *display = static_cast<egl::Display*>(dpy);
gl::Context *context = static_cast<gl::Context*>(ctx);
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_NO_IMAGE_KHR);
}
if(context != EGL_NO_CONTEXT && !display->isValidContext(context))
{
return error(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
}
switch(target)
{
default:
return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
}
EGLenum imagePreserved = EGL_FALSE;
if(attrib_list)
{
for(const EGLint *attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)
{
if(attribute[0] == EGL_IMAGE_PRESERVED_KHR)
{
imagePreserved = attribute[1];
}
else
{
return error(EGL_BAD_ATTRIBUTE, EGL_NO_IMAGE_KHR);
}
}
}
UNIMPLEMENTED(); // FIXME
return success((EGLImageKHR)0);
}
catch(std::bad_alloc&)
{
return error(EGL_BAD_ALLOC, EGL_NO_IMAGE_KHR);
}
return EGL_NO_IMAGE_KHR;
}
EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
{
try
{
egl::Display *display = static_cast<egl::Display*>(dpy);
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_FALSE);
}
// FIXME
UNIMPLEMENTED();
return error(EGL_BAD_PARAMETER, EGL_FALSE);
return success(EGL_TRUE);
}
catch(std::bad_alloc&)
{
return error(EGL_BAD_ALLOC, EGL_FALSE);
}
return EGL_FALSE;
}
__eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname) __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname)
{ {
TRACE("(const char *procname = \"%s\")", procname); TRACE("(const char *procname = \"%s\")", procname);
...@@ -1074,7 +1150,8 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const cha ...@@ -1074,7 +1150,8 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const cha
static const Extension eglExtensions[] = static const Extension eglExtensions[] =
{ {
{"", NULL}, {"eglCreateImageKHR", (__eglMustCastToProperFunctionPointerType)eglCreateImageKHR},
{"eglDestroyImageKHR", (__eglMustCastToProperFunctionPointerType)eglDestroyImageKHR},
}; };
for(int ext = 0; ext < sizeof(eglExtensions) / sizeof(Extension); ext++) for(int ext = 0; ext < sizeof(eglExtensions) / sizeof(Extension); ext++)
......
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