Adding Texture3D support.
Bug 19126833
Added Texture3D argument verifications.
Added the basic API and functions. A few are still unimplemented:
- Image::loadCompressedData() (for depth other than 1)
- Texture3D::copyImage()
- Texture3D::generateMipmaps()
Added colour grading test for 3D texture
Change-Id: I9e52afa7213999f94c5916c2f301fc6fa4b42c0d
Reviewed-on: https://swiftshader-review.googlesource.com/1730
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/Renderbuffer.cpp b/src/OpenGL/libGLESv2/Renderbuffer.cpp
index a88d222..58f5f57 100644
--- a/src/OpenGL/libGLESv2/Renderbuffer.cpp
+++ b/src/OpenGL/libGLESv2/Renderbuffer.cpp
@@ -82,12 +82,12 @@
// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
{
- mTexture2D->addProxyRef(proxy);
+ mTexture2D->addProxyRef(proxy);
}
void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
{
- mTexture2D->releaseProxy(proxy);
+ mTexture2D->releaseProxy(proxy);
}
// Increments refcount on image.
@@ -101,12 +101,12 @@
// caller must release() the returned image
egl::Image *RenderbufferTexture2D::createSharedImage()
{
- return mTexture2D->createSharedImage(GL_TEXTURE_2D, 0);
+ return mTexture2D->createSharedImage(GL_TEXTURE_2D, 0);
}
bool RenderbufferTexture2D::isShared() const
{
- return mTexture2D->isShared(GL_TEXTURE_2D, 0);
+ return mTexture2D->isShared(GL_TEXTURE_2D, 0);
}
GLsizei RenderbufferTexture2D::getWidth() const
@@ -134,6 +134,74 @@
return 0;
}
+///// RenderbufferTexture3D Implementation ////////
+
+RenderbufferTexture3D::RenderbufferTexture3D(Texture3D *texture)
+{
+ mTexture3D.set(texture);
+}
+
+RenderbufferTexture3D::~RenderbufferTexture3D()
+{
+ mTexture3D.set(NULL);
+}
+
+// Textures need to maintain their own reference count for references via
+// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
+void RenderbufferTexture3D::addProxyRef(const Renderbuffer *proxy)
+{
+ mTexture3D->addProxyRef(proxy);
+}
+
+void RenderbufferTexture3D::releaseProxy(const Renderbuffer *proxy)
+{
+ mTexture3D->releaseProxy(proxy);
+}
+
+// Increments refcount on image.
+// caller must release() the returned image
+egl::Image *RenderbufferTexture3D::getRenderTarget()
+{
+ return mTexture3D->getRenderTarget(GL_TEXTURE_3D_OES, 0);
+}
+
+// Increments refcount on image.
+// caller must release() the returned image
+egl::Image *RenderbufferTexture3D::createSharedImage()
+{
+ return mTexture3D->createSharedImage(GL_TEXTURE_3D_OES, 0);
+}
+
+bool RenderbufferTexture3D::isShared() const
+{
+ return mTexture3D->isShared(GL_TEXTURE_3D_OES, 0);
+}
+
+GLsizei RenderbufferTexture3D::getWidth() const
+{
+ return mTexture3D->getWidth(GL_TEXTURE_3D_OES, 0);
+}
+
+GLsizei RenderbufferTexture3D::getHeight() const
+{
+ return mTexture3D->getHeight(GL_TEXTURE_3D_OES, 0);
+}
+
+GLenum RenderbufferTexture3D::getFormat() const
+{
+ return mTexture3D->getFormat(GL_TEXTURE_3D_OES, 0);
+}
+
+sw::Format RenderbufferTexture3D::getInternalFormat() const
+{
+ return mTexture3D->getInternalFormat(GL_TEXTURE_3D_OES, 0);
+}
+
+GLsizei RenderbufferTexture3D::getSamples() const
+{
+ return 0;
+}
+
///// RenderbufferTextureCubeMap Implementation ////////
RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
@@ -361,7 +429,7 @@
mHeight = renderTarget->getHeight();
internalFormat = renderTarget->getInternalFormat();
format = sw2es::ConvertBackBufferFormat(internalFormat);
- mSamples = renderTarget->getMultiSampleDepth() & ~1;
+ mSamples = renderTarget->getDepth() & ~1;
}
}
@@ -438,7 +506,7 @@
mHeight = depthStencil->getHeight();
internalFormat = depthStencil->getInternalFormat();
format = sw2es::ConvertDepthStencilFormat(internalFormat);
- mSamples = depthStencil->getMultiSampleDepth() & ~1;
+ mSamples = depthStencil->getDepth() & ~1;
}
}