Commit dcab33be by Geoff Lang

Add stubs for EGL image entry points and validation.

BUG=angleproject:970 Change-Id: Ic3b9f9f60146920571e0e5f00fac2273c35fff2f Reviewed-on: https://chromium-review.googlesource.com/287162Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent cc7bbafa
...@@ -136,6 +136,9 @@ Extensions::Extensions() ...@@ -136,6 +136,9 @@ Extensions::Extensions()
fboRenderMipmap(false), fboRenderMipmap(false),
discardFramebuffer(false), discardFramebuffer(false),
debugMarker(false), debugMarker(false),
eglImage(false),
eglImageExternal(false),
eglImageExternalEssl3(false),
colorBufferFloat(false) colorBufferFloat(false)
{ {
} }
...@@ -144,6 +147,7 @@ std::vector<std::string> Extensions::getStrings() const ...@@ -144,6 +147,7 @@ std::vector<std::string> Extensions::getStrings() const
{ {
std::vector<std::string> extensionStrings; std::vector<std::string> extensionStrings;
// clang-format off
// | Extension name | Supported flag | Output vector | // | Extension name | Supported flag | Output vector |
InsertExtensionString("GL_OES_element_index_uint", elementIndexUint, &extensionStrings); InsertExtensionString("GL_OES_element_index_uint", elementIndexUint, &extensionStrings);
InsertExtensionString("GL_OES_packed_depth_stencil", packedDepthStencil, &extensionStrings); InsertExtensionString("GL_OES_packed_depth_stencil", packedDepthStencil, &extensionStrings);
...@@ -188,7 +192,11 @@ std::vector<std::string> Extensions::getStrings() const ...@@ -188,7 +192,11 @@ std::vector<std::string> Extensions::getStrings() const
InsertExtensionString("GL_OES_fbo_render_mipmap", fboRenderMipmap, &extensionStrings); InsertExtensionString("GL_OES_fbo_render_mipmap", fboRenderMipmap, &extensionStrings);
InsertExtensionString("GL_EXT_discard_framebuffer", discardFramebuffer, &extensionStrings); InsertExtensionString("GL_EXT_discard_framebuffer", discardFramebuffer, &extensionStrings);
InsertExtensionString("GL_EXT_debug_marker", debugMarker, &extensionStrings); InsertExtensionString("GL_EXT_debug_marker", debugMarker, &extensionStrings);
InsertExtensionString("GL_OES_EGL_image", eglImage, &extensionStrings);
InsertExtensionString("GL_OES_EGL_image_external", eglImageExternal, &extensionStrings);
InsertExtensionString("GL_OES_EGL_image_external_essl3", eglImageExternalEssl3, &extensionStrings);
InsertExtensionString("GL_EXT_color_buffer_float", colorBufferFloat, &extensionStrings); InsertExtensionString("GL_EXT_color_buffer_float", colorBufferFloat, &extensionStrings);
// clang-format on
return extensionStrings; return extensionStrings;
} }
...@@ -506,7 +514,14 @@ DisplayExtensions::DisplayExtensions() ...@@ -506,7 +514,14 @@ DisplayExtensions::DisplayExtensions()
windowFixedSize(false), windowFixedSize(false),
postSubBuffer(false), postSubBuffer(false),
createContext(false), createContext(false),
deviceQuery(false) deviceQuery(false),
image(false),
imageBase(false),
imagePixmap(false),
glTexture2DImage(false),
glTextureCubemapImage(false),
glTexture3DImage(false),
glRenderbufferImage(false)
{ {
} }
...@@ -514,6 +529,7 @@ std::vector<std::string> DisplayExtensions::getStrings() const ...@@ -514,6 +529,7 @@ std::vector<std::string> DisplayExtensions::getStrings() const
{ {
std::vector<std::string> extensionStrings; std::vector<std::string> extensionStrings;
// clang-format off
// | Extension name | Supported flag | Output vector | // | Extension name | Supported flag | Output vector |
InsertExtensionString("EGL_EXT_create_context_robustness", createContextRobustness, &extensionStrings); InsertExtensionString("EGL_EXT_create_context_robustness", createContextRobustness, &extensionStrings);
InsertExtensionString("EGL_ANGLE_d3d_share_handle_client_buffer", d3dShareHandleClientBuffer, &extensionStrings); InsertExtensionString("EGL_ANGLE_d3d_share_handle_client_buffer", d3dShareHandleClientBuffer, &extensionStrings);
...@@ -523,6 +539,14 @@ std::vector<std::string> DisplayExtensions::getStrings() const ...@@ -523,6 +539,14 @@ std::vector<std::string> DisplayExtensions::getStrings() const
InsertExtensionString("EGL_NV_post_sub_buffer", postSubBuffer, &extensionStrings); InsertExtensionString("EGL_NV_post_sub_buffer", postSubBuffer, &extensionStrings);
InsertExtensionString("EGL_KHR_create_context", createContext, &extensionStrings); InsertExtensionString("EGL_KHR_create_context", createContext, &extensionStrings);
InsertExtensionString("EGL_EXT_device_query", deviceQuery, &extensionStrings); InsertExtensionString("EGL_EXT_device_query", deviceQuery, &extensionStrings);
InsertExtensionString("EGL_KHR_image", image, &extensionStrings);
InsertExtensionString("EGL_KHR_image_base", imageBase, &extensionStrings);
InsertExtensionString("EGL_KHR_image_pixmap", imagePixmap, &extensionStrings);
InsertExtensionString("EGL_KHR_gl_texture_2D_image", glTexture2DImage, &extensionStrings);
InsertExtensionString("EGL_KHR_gl_texture_cubemap_image", glTextureCubemapImage, &extensionStrings);
InsertExtensionString("EGL_KHR_gl_texture_3D_image", glTexture3DImage, &extensionStrings);
InsertExtensionString("EGL_KHR_gl_renderbuffer_image", glRenderbufferImage, &extensionStrings);
// clang-format on
return extensionStrings; return extensionStrings;
} }
...@@ -555,12 +579,14 @@ std::vector<std::string> ClientExtensions::getStrings() const ...@@ -555,12 +579,14 @@ std::vector<std::string> ClientExtensions::getStrings() const
{ {
std::vector<std::string> extensionStrings; std::vector<std::string> extensionStrings;
// clang-format off
// | Extension name | Supported flag | Output vector | // | Extension name | Supported flag | Output vector |
InsertExtensionString("EGL_EXT_client_extensions", clientExtensions, &extensionStrings); InsertExtensionString("EGL_EXT_client_extensions", clientExtensions, &extensionStrings);
InsertExtensionString("EGL_EXT_platform_base", platformBase, &extensionStrings); InsertExtensionString("EGL_EXT_platform_base", platformBase, &extensionStrings);
InsertExtensionString("EGL_ANGLE_platform_angle", platformANGLE, &extensionStrings); InsertExtensionString("EGL_ANGLE_platform_angle", platformANGLE, &extensionStrings);
InsertExtensionString("EGL_ANGLE_platform_angle_d3d", platformANGLED3D, &extensionStrings); InsertExtensionString("EGL_ANGLE_platform_angle_d3d", platformANGLED3D, &extensionStrings);
InsertExtensionString("EGL_ANGLE_platform_angle_opengl", platformANGLEOpenGL, &extensionStrings); InsertExtensionString("EGL_ANGLE_platform_angle_opengl", platformANGLEOpenGL, &extensionStrings);
// clang-format on
return extensionStrings; return extensionStrings;
} }
......
...@@ -219,6 +219,15 @@ struct Extensions ...@@ -219,6 +219,15 @@ struct Extensions
// EXT_debug_marker // EXT_debug_marker
bool debugMarker; bool debugMarker;
// GL_OES_EGL_image
bool eglImage;
// GL_OES_EGL_image_external
bool eglImageExternal;
// GL_OES_EGL_image_external_essl3
bool eglImageExternalEssl3;
// ES3 Extension support // ES3 Extension support
// GL_EXT_color_buffer_float // GL_EXT_color_buffer_float
...@@ -376,6 +385,27 @@ struct DisplayExtensions ...@@ -376,6 +385,27 @@ struct DisplayExtensions
// EGL_EXT_device_query // EGL_EXT_device_query
bool deviceQuery; bool deviceQuery;
// EGL_KHR_image
bool image;
// EGL_KHR_image_base
bool imageBase;
// EGL_KHR_image_pixmap
bool imagePixmap;
// EGL_KHR_gl_texture_2D_image
bool glTexture2DImage;
// EGL_KHR_gl_texture_cubemap_image
bool glTextureCubemapImage;
// EGL_KHR_gl_texture_3D_image
bool glTexture3DImage;
// EGL_KHR_gl_renderbuffer_image
bool glRenderbufferImage;
}; };
struct DeviceExtensions struct DeviceExtensions
......
...@@ -485,6 +485,27 @@ Error Display::createPixmapSurface(const Config *configuration, NativePixmapType ...@@ -485,6 +485,27 @@ Error Display::createPixmapSurface(const Config *configuration, NativePixmapType
return Error(EGL_SUCCESS); return Error(EGL_SUCCESS);
} }
Error Display::createImage(gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const AttributeMap &attribs,
Image **outImage)
{
ASSERT(isInitialized());
if (mImplementation->testDeviceLost())
{
Error error = restoreLostDevice();
if (error.isError())
{
return error;
}
}
UNIMPLEMENTED();
return Error(EGL_SUCCESS);
}
Error Display::createContext(const Config *configuration, gl::Context *shareContext, const AttributeMap &attribs, Error Display::createContext(const Config *configuration, gl::Context *shareContext, const AttributeMap &attribs,
gl::Context **outContext) gl::Context **outContext)
{ {
...@@ -570,6 +591,11 @@ void Display::destroySurface(Surface *surface) ...@@ -570,6 +591,11 @@ void Display::destroySurface(Surface *surface)
mImplementation->destroySurface(surface); mImplementation->destroySurface(surface);
} }
void Display::destroyImage(egl::Image *image)
{
UNIMPLEMENTED();
}
void Display::destroyContext(gl::Context *context) void Display::destroyContext(gl::Context *context)
{ {
mContextSet.erase(context); mContextSet.erase(context);
......
...@@ -32,8 +32,9 @@ class DisplayImpl; ...@@ -32,8 +32,9 @@ class DisplayImpl;
namespace egl namespace egl
{ {
class Surface;
class Device; class Device;
class Image;
class Surface;
class Display final : angle::NonCopyable class Display final : angle::NonCopyable
{ {
...@@ -59,12 +60,19 @@ class Display final : angle::NonCopyable ...@@ -59,12 +60,19 @@ class Display final : angle::NonCopyable
Error createPixmapSurface(const Config *configuration, NativePixmapType nativePixmap, const AttributeMap &attribs, Error createPixmapSurface(const Config *configuration, NativePixmapType nativePixmap, const AttributeMap &attribs,
Surface **outSurface); Surface **outSurface);
Error createImage(gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const AttributeMap &attribs,
Image **outImage);
Error createContext(const Config *configuration, gl::Context *shareContext, const AttributeMap &attribs, Error createContext(const Config *configuration, gl::Context *shareContext, const AttributeMap &attribs,
gl::Context **outContext); gl::Context **outContext);
Error makeCurrent(egl::Surface *drawSurface, egl::Surface *readSurface, gl::Context *context); Error makeCurrent(egl::Surface *drawSurface, egl::Surface *readSurface, gl::Context *context);
void destroySurface(egl::Surface *surface); void destroySurface(egl::Surface *surface);
void destroyImage(egl::Image *image);
void destroyContext(gl::Context *context); void destroyContext(gl::Context *context);
bool isInitialized() const; bool isInitialized() const;
......
...@@ -24,6 +24,7 @@ class AttributeMap; ...@@ -24,6 +24,7 @@ class AttributeMap;
class Display; class Display;
struct Config; struct Config;
class Surface; class Surface;
class ImageSibling;
} }
namespace gl namespace gl
...@@ -34,6 +35,7 @@ class Context; ...@@ -34,6 +35,7 @@ class Context;
namespace rx namespace rx
{ {
class SurfaceImpl; class SurfaceImpl;
class ImageImpl;
struct ConfigDesc; struct ConfigDesc;
class DeviceImpl; class DeviceImpl;
...@@ -57,6 +59,11 @@ class DisplayImpl : angle::NonCopyable ...@@ -57,6 +59,11 @@ class DisplayImpl : angle::NonCopyable
virtual SurfaceImpl *createPixmapSurface(const egl::Config *configuration, virtual SurfaceImpl *createPixmapSurface(const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) = 0; const egl::AttributeMap &attribs) = 0;
virtual ImageImpl *createImage(EGLenum target,
egl::ImageSibling *buffer,
const egl::AttributeMap &attribs) = 0;
virtual egl::Error createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs, virtual egl::Error createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs,
gl::Context **outContext) = 0; gl::Context **outContext) = 0;
......
...@@ -199,6 +199,14 @@ SurfaceImpl *DisplayD3D::createPixmapSurface(const egl::Config *configuration, ...@@ -199,6 +199,14 @@ SurfaceImpl *DisplayD3D::createPixmapSurface(const egl::Config *configuration,
return nullptr; return nullptr;
} }
ImageImpl *DisplayD3D::createImage(EGLenum target,
egl::ImageSibling *buffer,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
return nullptr;
}
egl::Error DisplayD3D::getDevice(DeviceImpl **device) egl::Error DisplayD3D::getDevice(DeviceImpl **device)
{ {
*device = reinterpret_cast<DeviceImpl*>(mDevice); *device = reinterpret_cast<DeviceImpl*>(mDevice);
......
...@@ -37,6 +37,10 @@ class DisplayD3D : public DisplayImpl ...@@ -37,6 +37,10 @@ class DisplayD3D : public DisplayImpl
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
ImageImpl *createImage(EGLenum target,
egl::ImageSibling *buffer,
const egl::AttributeMap &attribs) override;
egl::Error createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs, egl::Error createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs,
gl::Context **outContext) override; gl::Context **outContext) override;
......
...@@ -47,6 +47,14 @@ void DisplayGL::terminate() ...@@ -47,6 +47,14 @@ void DisplayGL::terminate()
SafeDelete(mRenderer); SafeDelete(mRenderer);
} }
ImageImpl *DisplayGL::createImage(EGLenum target,
egl::ImageSibling *buffer,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
return nullptr;
}
egl::Error DisplayGL::createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs, gl::Context **outContext) egl::Error DisplayGL::createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs, gl::Context **outContext)
{ {
ASSERT(mRenderer != nullptr); ASSERT(mRenderer != nullptr);
......
...@@ -26,6 +26,10 @@ class DisplayGL : public DisplayImpl ...@@ -26,6 +26,10 @@ class DisplayGL : public DisplayImpl
egl::Error initialize(egl::Display *display) override; egl::Error initialize(egl::Display *display) override;
void terminate() override; void terminate() override;
ImageImpl *createImage(EGLenum target,
egl::ImageSibling *buffer,
const egl::AttributeMap &attribs) override;
egl::Error createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs, egl::Error createContext(const egl::Config *config, const gl::Context *shareContext, const egl::AttributeMap &attribs,
gl::Context **outContext) override; gl::Context **outContext) override;
......
...@@ -531,4 +531,19 @@ Error ValidateCompatibleConfigs(const Config *config1, const Config *config2, EG ...@@ -531,4 +531,19 @@ Error ValidateCompatibleConfigs(const Config *config1, const Config *config2, EG
return Error(EGL_SUCCESS); return Error(EGL_SUCCESS);
} }
Error ValidateCreateImageKHR(const Display *display,
gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const AttributeMap &attributes)
{
UNIMPLEMENTED();
return Error(EGL_SUCCESS);
}
Error ValidateDestroyImageKHR(const Display *display, const Image *image)
{
UNIMPLEMENTED();
return Error(EGL_SUCCESS);
}
} }
...@@ -24,6 +24,7 @@ namespace egl ...@@ -24,6 +24,7 @@ namespace egl
class AttributeMap; class AttributeMap;
struct Config; struct Config;
class Display; class Display;
class Image;
class Surface; class Surface;
// Object validation // Object validation
...@@ -43,6 +44,13 @@ Error ValidateCreatePbufferSurface(Display *display, Config *config, const Attri ...@@ -43,6 +44,13 @@ Error ValidateCreatePbufferSurface(Display *display, Config *config, const Attri
Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, EGLClientBuffer buffer, Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, EGLClientBuffer buffer,
Config *config, const AttributeMap& attributes); Config *config, const AttributeMap& attributes);
Error ValidateCreateImageKHR(const Display *display,
gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const AttributeMap &attributes);
Error ValidateDestroyImageKHR(const Display *display, const Image *image);
// Other validation // Other validation
Error ValidateCompatibleConfigs(const Config *config1, const Config *config2, EGLint surfaceType); Error ValidateCompatibleConfigs(const Config *config1, const Config *config2, EGLint surfaceType);
......
...@@ -2001,4 +2001,21 @@ bool ValidatePushGroupMarkerEXT(Context *context, GLsizei length, const char *ma ...@@ -2001,4 +2001,21 @@ bool ValidatePushGroupMarkerEXT(Context *context, GLsizei length, const char *ma
return true; return true;
} }
bool ValidateEGLImageTargetTexture2DOES(Context *context,
egl::Display *display,
GLenum target,
egl::Image *image)
{
UNIMPLEMENTED();
return true;
}
bool ValidateEGLImageTargetRenderbufferStorageOES(Context *context,
egl::Display *display,
GLenum target,
egl::Image *image)
{
UNIMPLEMENTED();
return true;
}
} }
...@@ -14,6 +14,12 @@ ...@@ -14,6 +14,12 @@
#include <GLES2/gl2.h> #include <GLES2/gl2.h>
#include <GLES3/gl3.h> #include <GLES3/gl3.h>
namespace egl
{
class Display;
class Image;
}
namespace gl namespace gl
{ {
...@@ -94,6 +100,15 @@ bool ValidateDiscardFramebufferBase(Context *context, GLenum target, GLsizei num ...@@ -94,6 +100,15 @@ bool ValidateDiscardFramebufferBase(Context *context, GLenum target, GLsizei num
bool ValidateInsertEventMarkerEXT(Context *context, GLsizei length, const char *marker); bool ValidateInsertEventMarkerEXT(Context *context, GLsizei length, const char *marker);
bool ValidatePushGroupMarkerEXT(Context *context, GLsizei length, const char *marker); bool ValidatePushGroupMarkerEXT(Context *context, GLsizei length, const char *marker);
bool ValidateEGLImageTargetTexture2DOES(Context *context,
egl::Display *display,
GLenum target,
egl::Image *image);
bool ValidateEGLImageTargetRenderbufferStorageOES(Context *context,
egl::Display *display,
GLenum target,
egl::Image *image);
} }
#endif // LIBANGLE_VALIDATION_ES_H_ #endif // LIBANGLE_VALIDATION_ES_H_
...@@ -257,6 +257,20 @@ const char * EGLAPIENTRY eglQueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam ...@@ -257,6 +257,20 @@ const char * EGLAPIENTRY eglQueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam
return egl::QueryDeviceStringEXT(device, name); return egl::QueryDeviceStringEXT(device, name);
} }
EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy,
EGLContext ctx,
EGLenum target,
EGLClientBuffer buffer,
const EGLint *attrib_list)
{
return egl::CreateImageKHR(dpy, ctx, target, buffer, attrib_list);
}
EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
{
return egl::DestroyImageKHR(dpy, image);
}
__eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname) __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname)
{ {
return egl::GetProcAddress(procname); return egl::GetProcAddress(procname);
......
...@@ -42,6 +42,8 @@ EXPORTS ...@@ -42,6 +42,8 @@ EXPORTS
eglQueryDisplayAttribEXT @48 eglQueryDisplayAttribEXT @48
eglQueryDeviceAttribEXT @49 eglQueryDeviceAttribEXT @49
eglQueryDeviceStringEXT @50 eglQueryDeviceStringEXT @50
eglCreateImageKHR @51
eglDestroyImageKHR @52
; 1.5 entry points ; 1.5 entry points
eglCreateSync @38 eglCreateSync @38
......
...@@ -1126,6 +1126,7 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char * ...@@ -1126,6 +1126,7 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
__eglMustCastToProperFunctionPointerType address; __eglMustCastToProperFunctionPointerType address;
}; };
// clang-format off
static const Extension extensions[] = static const Extension extensions[] =
{ {
{ "eglQueryDeviceAttribEXT", (__eglMustCastToProperFunctionPointerType)QueryDeviceAttribEXT }, { "eglQueryDeviceAttribEXT", (__eglMustCastToProperFunctionPointerType)QueryDeviceAttribEXT },
...@@ -1134,6 +1135,8 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char * ...@@ -1134,6 +1135,8 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
{ "eglQuerySurfacePointerANGLE", (__eglMustCastToProperFunctionPointerType)QuerySurfacePointerANGLE }, { "eglQuerySurfacePointerANGLE", (__eglMustCastToProperFunctionPointerType)QuerySurfacePointerANGLE },
{ "eglPostSubBufferNV", (__eglMustCastToProperFunctionPointerType)PostSubBufferNV }, { "eglPostSubBufferNV", (__eglMustCastToProperFunctionPointerType)PostSubBufferNV },
{ "eglGetPlatformDisplayEXT", (__eglMustCastToProperFunctionPointerType)GetPlatformDisplayEXT }, { "eglGetPlatformDisplayEXT", (__eglMustCastToProperFunctionPointerType)GetPlatformDisplayEXT },
{ "eglCreateImageKHR", (__eglMustCastToProperFunctionPointerType)CreateImageKHR },
{ "eglDestroyImageKHR", (__eglMustCastToProperFunctionPointerType)DestroyImageKHR },
{ "glBlitFramebufferANGLE", (__eglMustCastToProperFunctionPointerType)gl::BlitFramebufferANGLE }, { "glBlitFramebufferANGLE", (__eglMustCastToProperFunctionPointerType)gl::BlitFramebufferANGLE },
{ "glRenderbufferStorageMultisampleANGLE", (__eglMustCastToProperFunctionPointerType)gl::RenderbufferStorageMultisampleANGLE }, { "glRenderbufferStorageMultisampleANGLE", (__eglMustCastToProperFunctionPointerType)gl::RenderbufferStorageMultisampleANGLE },
{ "glDeleteFencesNV", (__eglMustCastToProperFunctionPointerType)gl::DeleteFencesNV }, { "glDeleteFencesNV", (__eglMustCastToProperFunctionPointerType)gl::DeleteFencesNV },
...@@ -1171,8 +1174,11 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char * ...@@ -1171,8 +1174,11 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
{ "glInsertEventMarkerEXT", (__eglMustCastToProperFunctionPointerType)gl::InsertEventMarkerEXT }, { "glInsertEventMarkerEXT", (__eglMustCastToProperFunctionPointerType)gl::InsertEventMarkerEXT },
{ "glPushGroupMarkerEXT", (__eglMustCastToProperFunctionPointerType)gl::PushGroupMarkerEXT }, { "glPushGroupMarkerEXT", (__eglMustCastToProperFunctionPointerType)gl::PushGroupMarkerEXT },
{ "glPopGroupMarkerEXT", (__eglMustCastToProperFunctionPointerType)gl::PopGroupMarkerEXT }, { "glPopGroupMarkerEXT", (__eglMustCastToProperFunctionPointerType)gl::PopGroupMarkerEXT },
{ "glEGLImageTargetTexture2DOES", (__eglMustCastToProperFunctionPointerType)gl::EGLImageTargetTexture2DOES },
{ "glEGLImageTargetRenderbufferStorageOES", (__eglMustCastToProperFunctionPointerType)gl::EGLImageTargetRenderbufferStorageOES },
{ "", NULL }, { "", NULL },
}; };
// clang-format on
for (const Extension *extension = &extensions[0]; extension->address != nullptr; extension++) for (const Extension *extension = &extensions[0]; extension->address != nullptr; extension++)
{ {
......
...@@ -386,4 +386,55 @@ EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, E ...@@ -386,4 +386,55 @@ EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, E
return (error.isError() ? EGL_FALSE : EGL_TRUE); return (error.isError() ? EGL_FALSE : EGL_TRUE);
} }
ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
EGLContext ctx,
EGLenum target,
EGLClientBuffer buffer,
const EGLint *attrib_list)
{
EVENT(
"(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, "
"EGLClientBuffer buffer = 0x%0.8p, const EGLAttrib *attrib_list = 0x%0.8p)",
dpy, ctx, target, buffer, attrib_list);
Display *display = static_cast<Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx);
AttributeMap attributes(attrib_list);
Error error = ValidateCreateImageKHR(display, context, target, buffer, attributes);
if (error.isError())
{
SetGlobalError(error);
return EGL_NO_IMAGE;
}
Image *image = nullptr;
error = display->createImage(context, target, buffer, attributes, &image);
if (error.isError())
{
SetGlobalError(error);
return EGL_NO_IMAGE;
}
return static_cast<EGLImage>(image);
}
ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLImage image = 0x%0.8p)", dpy, image);
Display *display = static_cast<Display *>(dpy);
Image *img = static_cast<Image *>(image);
Error error = ValidateDestroyImageKHR(display, img);
if (error.isError())
{
SetGlobalError(error);
return EGL_FALSE;
}
display->destroyImage(img);
return EGL_TRUE;
}
} }
...@@ -30,6 +30,13 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint ...@@ -30,6 +30,13 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint
ANGLE_EXPORT EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); ANGLE_EXPORT EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
ANGLE_EXPORT const char * EGLAPIENTRY QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name); ANGLE_EXPORT const char * EGLAPIENTRY QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name);
// EGL_KHR_image_base/EGL_KHR_image
ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
EGLContext ctx,
EGLenum target,
EGLClientBuffer buffer,
const EGLint *attrib_list);
ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image);
} }
#endif // LIBGLESV2_ENTRYPOINTSEGLEXT_H_ #endif // LIBGLESV2_ENTRYPOINTSEGLEXT_H_
...@@ -1182,4 +1182,40 @@ void GL_APIENTRY PopGroupMarkerEXT() ...@@ -1182,4 +1182,40 @@ void GL_APIENTRY PopGroupMarkerEXT()
} }
} }
ANGLE_EXPORT void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
{
EVENT("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
Context *context = GetValidGlobalContext();
if (context)
{
egl::Display *display = egl::GetGlobalDisplay();
egl::Image *imageObject = reinterpret_cast<egl::Image *>(image);
if (!ValidateEGLImageTargetTexture2DOES(context, display, target, imageObject))
{
return;
}
UNIMPLEMENTED();
}
}
ANGLE_EXPORT void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target,
GLeglImageOES image)
{
EVENT("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
Context *context = GetValidGlobalContext();
if (context)
{
egl::Display *display = egl::GetGlobalDisplay();
egl::Image *imageObject = reinterpret_cast<egl::Image *>(image);
if (!ValidateEGLImageTargetRenderbufferStorageOES(context, display, target, imageObject))
{
return;
}
UNIMPLEMENTED();
}
}
} }
...@@ -81,6 +81,10 @@ ANGLE_EXPORT void GL_APIENTRY InsertEventMarkerEXT(GLsizei length, const char *m ...@@ -81,6 +81,10 @@ ANGLE_EXPORT void GL_APIENTRY InsertEventMarkerEXT(GLsizei length, const char *m
ANGLE_EXPORT void GL_APIENTRY PushGroupMarkerEXT(GLsizei length, const char *marker); ANGLE_EXPORT void GL_APIENTRY PushGroupMarkerEXT(GLsizei length, const char *marker);
ANGLE_EXPORT void GL_APIENTRY PopGroupMarkerEXT(); ANGLE_EXPORT void GL_APIENTRY PopGroupMarkerEXT();
// GL_OES_EGL_image
ANGLE_EXPORT void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
ANGLE_EXPORT void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target,
GLeglImageOES image);
} }
#endif // LIBGLESV2_ENTRYPOINTGLES20EXT_H_ #endif // LIBGLESV2_ENTRYPOINTGLES20EXT_H_
...@@ -1431,4 +1431,13 @@ void GL_APIENTRY glPopGroupMarkerEXT() ...@@ -1431,4 +1431,13 @@ void GL_APIENTRY glPopGroupMarkerEXT()
return gl::PopGroupMarkerEXT(); return gl::PopGroupMarkerEXT();
} }
void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
{
return gl::EGLImageTargetTexture2DOES(target, image);
}
void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
{
return gl::EGLImageTargetRenderbufferStorageOES(target, image);
}
} }
...@@ -181,6 +181,8 @@ EXPORTS ...@@ -181,6 +181,8 @@ EXPORTS
glInsertEventMarkerEXT @294 glInsertEventMarkerEXT @294
glPushGroupMarkerEXT @295 glPushGroupMarkerEXT @295
glPopGroupMarkerEXT @296 glPopGroupMarkerEXT @296
glEGLImageTargetTexture2DOES @297
glEGLImageTargetRenderbufferStorageOES @298
; GLES 3.0 Functions ; GLES 3.0 Functions
glReadBuffer @180 glReadBuffer @180
......
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