Framebuffer Layer query
Added implementation for querying
GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER in
GetFramebufferAttachmentParameteriv.
Change-Id: Ib25ba51bf68c9d979f80cc65ba7059366b5f1ae4
Reviewed-on: https://swiftshader-review.googlesource.com/3541
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/Framebuffer.cpp b/src/OpenGL/libGLESv2/Framebuffer.cpp
index 2fe1320..9ae0381 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.cpp
+++ b/src/OpenGL/libGLESv2/Framebuffer.cpp
@@ -220,6 +220,12 @@
return mStencilbufferPointer.name();
}
+GLint Framebuffer::getColorbufferLayer(GLuint index)
+{
+ Renderbuffer *colorbuffer = mColorbufferPointer[index];
+ return (colorbuffer != nullptr) ? colorbuffer->getLayer() : 0;
+}
+
bool Framebuffer::hasStencil()
{
if(mStencilbufferType != GL_NONE)
diff --git a/src/OpenGL/libGLESv2/Framebuffer.h b/src/OpenGL/libGLESv2/Framebuffer.h
index 8db2ad7..03f7c4f 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.h
+++ b/src/OpenGL/libGLESv2/Framebuffer.h
@@ -59,6 +59,8 @@
GLuint getDepthbufferName();
GLuint getStencilbufferName();
+ GLint getColorbufferLayer(GLuint index);
+
bool hasStencil();
virtual GLenum completeness();
diff --git a/src/OpenGL/libGLESv2/Renderbuffer.cpp b/src/OpenGL/libGLESv2/Renderbuffer.cpp
index 3d8cc3e..9894e57 100644
--- a/src/OpenGL/libGLESv2/Renderbuffer.cpp
+++ b/src/OpenGL/libGLESv2/Renderbuffer.cpp
@@ -332,6 +332,11 @@
return mInstance->getHeight();
}
+GLint Renderbuffer::getLayer() const
+{
+ return mInstance->getLayer();
+}
+
GLenum Renderbuffer::getFormat() const
{
return mInstance->getFormat();
diff --git a/src/OpenGL/libGLESv2/Renderbuffer.h b/src/OpenGL/libGLESv2/Renderbuffer.h
index 0bea04f..8f0f019 100644
--- a/src/OpenGL/libGLESv2/Renderbuffer.h
+++ b/src/OpenGL/libGLESv2/Renderbuffer.h
@@ -47,6 +47,7 @@
virtual GLsizei getWidth() const = 0;
virtual GLsizei getHeight() const = 0;
+ virtual GLint getLayer() const { return 0; }
virtual GLenum getFormat() const = 0;
virtual sw::Format getInternalFormat() const = 0;
virtual GLsizei getSamples() const = 0;
@@ -100,6 +101,7 @@
virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const;
+ virtual GLint getLayer() const { return mLayer; }
virtual GLenum getFormat() const;
virtual sw::Format getInternalFormat() const;
virtual GLsizei getSamples() const;
@@ -187,6 +189,7 @@
GLsizei getWidth() const;
GLsizei getHeight() const;
+ GLint getLayer() const;
GLenum getFormat() const;
sw::Format getInternalFormat() const;
GLuint getRedSize() const;
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 22f2b65..7e5a369 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -2962,6 +2962,7 @@
GLenum attachmentType;
GLuint attachmentHandle;
+ GLint attachmentLayer = 0;
Renderbuffer* renderbuffer = nullptr;
switch(attachment)
{
@@ -3001,6 +3002,7 @@
}
attachmentType = framebuffer->getColorbufferType(attachment - GL_COLOR_ATTACHMENT0);
attachmentHandle = framebuffer->getColorbufferName(attachment - GL_COLOR_ATTACHMENT0);
+ attachmentLayer = framebuffer->getColorbufferLayer(attachment - GL_COLOR_ATTACHMENT0);
renderbuffer = framebuffer->getColorbuffer(attachment - GL_COLOR_ATTACHMENT0);
break;
case GL_DEPTH:
@@ -3096,6 +3098,13 @@
return error(GL_INVALID_ENUM);
}
break;
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
+ if(clientVersion >= 3)
+ {
+ *params = attachmentLayer;
+ }
+ else return error(GL_INVALID_ENUM);
+ break;
case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
if(clientVersion >= 3)
{