Implement EGL_KHR_gl_renderbuffer_image support.
BUG=14610416
Change-Id: I406d356a70c2c3b2a2b6861b7a8c00a01fe5c8cf
Reviewed-on: https://swiftshader-review.googlesource.com/1061
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/GLES2/libGLESv2/Renderbuffer.cpp b/src/GLES2/libGLESv2/Renderbuffer.cpp
index 31f27a9..6ca0c15 100644
--- a/src/GLES2/libGLESv2/Renderbuffer.cpp
+++ b/src/GLES2/libGLESv2/Renderbuffer.cpp
@@ -90,13 +90,25 @@
mTexture2D->releaseProxy(proxy);
}
-// Increments refcount on surface.
-// caller must release() the returned surface
+// Increments refcount on image.
+// caller must release() the returned image
Image *RenderbufferTexture2D::getRenderTarget()
{
return mTexture2D->getRenderTarget(GL_TEXTURE_2D, 0);
}
+// Increments refcount on image.
+// caller must release() the returned image
+Image *RenderbufferTexture2D::createSharedImage()
+{
+ return mTexture2D->createSharedImage(GL_TEXTURE_2D, 0);
+}
+
+bool RenderbufferTexture2D::isShared() const
+{
+ return mTexture2D->isShared(GL_TEXTURE_2D, 0);
+}
+
GLsizei RenderbufferTexture2D::getWidth() const
{
return mTexture2D->getWidth(GL_TEXTURE_2D, 0);
@@ -146,13 +158,25 @@
mTextureCubeMap->releaseProxy(proxy);
}
-// Increments refcount on surface.
-// caller must release() the returned surface
+// Increments refcount on image.
+// caller must release() the returned image
Image *RenderbufferTextureCubeMap::getRenderTarget()
{
return mTextureCubeMap->getRenderTarget(mTarget, 0);
}
+// Increments refcount on image.
+// caller must release() the returned image
+Image *RenderbufferTextureCubeMap::createSharedImage()
+{
+ return mTextureCubeMap->createSharedImage(mTarget, 0);
+}
+
+bool RenderbufferTextureCubeMap::isShared() const
+{
+ return mTextureCubeMap->isShared(mTarget, 0);
+}
+
GLsizei RenderbufferTextureCubeMap::getWidth() const
{
return mTextureCubeMap->getWidth(mTarget, 0);
@@ -207,13 +231,25 @@
RefCountObject::release();
}
-// Increments refcount on surface.
-// caller must Release() the returned surface
+// Increments refcount on image.
+// caller must Release() the returned image
Image *Renderbuffer::getRenderTarget()
{
return mInstance->getRenderTarget();
}
+// Increments refcount on image.
+// caller must Release() the returned image
+Image *Renderbuffer::createSharedImage()
+{
+ return mInstance->createSharedImage();
+}
+
+bool Renderbuffer::isShared() const
+{
+ return mInstance->isShared();
+}
+
GLsizei Renderbuffer::getWidth() const
{
return mInstance->getWidth();
@@ -290,13 +326,6 @@
{
}
-// Increments refcount on surface.
-// caller must Release() the returned surface
-Image *RenderbufferStorage::getRenderTarget()
-{
- return NULL;
-}
-
GLsizei RenderbufferStorage::getWidth() const
{
return mWidth;
@@ -369,8 +398,8 @@
}
}
-// Increments refcount on surface.
-// caller must release() the returned surface
+// Increments refcount on image.
+// caller must release() the returned image
Image *Colorbuffer::getRenderTarget()
{
if(mRenderTarget)
@@ -381,6 +410,24 @@
return mRenderTarget;
}
+// Increments refcount on image.
+// caller must release() the returned image
+Image *Colorbuffer::createSharedImage()
+{
+ if(mRenderTarget)
+ {
+ mRenderTarget->addRef();
+ mRenderTarget->markShared();
+ }
+
+ return mRenderTarget;
+}
+
+bool Colorbuffer::isShared() const
+{
+ return mRenderTarget->isShared();
+}
+
DepthStencilbuffer::DepthStencilbuffer(Image *depthStencil) : mDepthStencil(depthStencil)
{
if(depthStencil)
@@ -429,8 +476,8 @@
}
}
-// Increments refcount on surface.
-// caller must release() the returned surface
+// Increments refcount on image.
+// caller must release() the returned image
Image *DepthStencilbuffer::getRenderTarget()
{
if(mDepthStencil)
@@ -441,6 +488,24 @@
return mDepthStencil;
}
+// Increments refcount on image.
+// caller must release() the returned image
+Image *DepthStencilbuffer::createSharedImage()
+{
+ if(mDepthStencil)
+ {
+ mDepthStencil->addRef();
+ mDepthStencil->markShared();
+ }
+
+ return mDepthStencil;
+}
+
+bool DepthStencilbuffer::isShared() const
+{
+ return mDepthStencil->isShared();
+}
+
Depthbuffer::Depthbuffer(Image *depthStencil) : DepthStencilbuffer(depthStencil)
{
if(depthStencil)