Commit 074c6417 by Alexis Hetu Committed by Alexis Hétu

Framebuffer Layer query

Added implementation for querying GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER in GetFramebufferAttachmentParameteriv. Change-Id: Ib25ba51bf68c9d979f80cc65ba7059366b5f1ae4 Reviewed-on: https://swiftshader-review.googlesource.com/3541Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 910b6b6e
...@@ -220,6 +220,12 @@ GLuint Framebuffer::getStencilbufferName() ...@@ -220,6 +220,12 @@ GLuint Framebuffer::getStencilbufferName()
return mStencilbufferPointer.name(); return mStencilbufferPointer.name();
} }
GLint Framebuffer::getColorbufferLayer(GLuint index)
{
Renderbuffer *colorbuffer = mColorbufferPointer[index];
return (colorbuffer != nullptr) ? colorbuffer->getLayer() : 0;
}
bool Framebuffer::hasStencil() bool Framebuffer::hasStencil()
{ {
if(mStencilbufferType != GL_NONE) if(mStencilbufferType != GL_NONE)
......
...@@ -59,6 +59,8 @@ public: ...@@ -59,6 +59,8 @@ public:
GLuint getDepthbufferName(); GLuint getDepthbufferName();
GLuint getStencilbufferName(); GLuint getStencilbufferName();
GLint getColorbufferLayer(GLuint index);
bool hasStencil(); bool hasStencil();
virtual GLenum completeness(); virtual GLenum completeness();
......
...@@ -332,6 +332,11 @@ GLsizei Renderbuffer::getHeight() const ...@@ -332,6 +332,11 @@ GLsizei Renderbuffer::getHeight() const
return mInstance->getHeight(); return mInstance->getHeight();
} }
GLint Renderbuffer::getLayer() const
{
return mInstance->getLayer();
}
GLenum Renderbuffer::getFormat() const GLenum Renderbuffer::getFormat() const
{ {
return mInstance->getFormat(); return mInstance->getFormat();
......
...@@ -47,6 +47,7 @@ public: ...@@ -47,6 +47,7 @@ public:
virtual GLsizei getWidth() const = 0; virtual GLsizei getWidth() const = 0;
virtual GLsizei getHeight() const = 0; virtual GLsizei getHeight() const = 0;
virtual GLint getLayer() const { return 0; }
virtual GLenum getFormat() const = 0; virtual GLenum getFormat() const = 0;
virtual sw::Format getInternalFormat() const = 0; virtual sw::Format getInternalFormat() const = 0;
virtual GLsizei getSamples() const = 0; virtual GLsizei getSamples() const = 0;
...@@ -100,6 +101,7 @@ public: ...@@ -100,6 +101,7 @@ public:
virtual GLsizei getWidth() const; virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const; virtual GLsizei getHeight() const;
virtual GLint getLayer() const { return mLayer; }
virtual GLenum getFormat() const; virtual GLenum getFormat() const;
virtual sw::Format getInternalFormat() const; virtual sw::Format getInternalFormat() const;
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
...@@ -187,6 +189,7 @@ public: ...@@ -187,6 +189,7 @@ public:
GLsizei getWidth() const; GLsizei getWidth() const;
GLsizei getHeight() const; GLsizei getHeight() const;
GLint getLayer() const;
GLenum getFormat() const; GLenum getFormat() const;
sw::Format getInternalFormat() const; sw::Format getInternalFormat() const;
GLuint getRedSize() const; GLuint getRedSize() const;
......
...@@ -2962,6 +2962,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu ...@@ -2962,6 +2962,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
GLenum attachmentType; GLenum attachmentType;
GLuint attachmentHandle; GLuint attachmentHandle;
GLint attachmentLayer = 0;
Renderbuffer* renderbuffer = nullptr; Renderbuffer* renderbuffer = nullptr;
switch(attachment) switch(attachment)
{ {
...@@ -3001,6 +3002,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu ...@@ -3001,6 +3002,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
} }
attachmentType = framebuffer->getColorbufferType(attachment - GL_COLOR_ATTACHMENT0); attachmentType = framebuffer->getColorbufferType(attachment - GL_COLOR_ATTACHMENT0);
attachmentHandle = framebuffer->getColorbufferName(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); renderbuffer = framebuffer->getColorbuffer(attachment - GL_COLOR_ATTACHMENT0);
break; break;
case GL_DEPTH: case GL_DEPTH:
...@@ -3096,6 +3098,13 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu ...@@ -3096,6 +3098,13 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
break; 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: case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
......
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