Default drawBuffer/readBuffer for non default Framebuffer
drawBuffer and readBuffer default to GL_BACK in the default
Framebuffer, but for all other Framebuffer objects, the
default value should have been GL_COLOR_ATTACHMENT0.
Fixes all failures in dEQP-GLES3.functional.state_query.integers*
Change-Id: I060db67c50561d2678d57de1d7067bd7f8d2a53a
Reviewed-on: https://swiftshader-review.googlesource.com/14948
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index b2bc507..d8ff862 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -1213,7 +1213,14 @@
{
if(!getFramebuffer(framebuffer))
{
- mFramebufferNameSpace.insert(framebuffer, new Framebuffer());
+ if(framebuffer == 0)
+ {
+ mFramebufferNameSpace.insert(framebuffer, new DefaultFramebuffer());
+ }
+ else
+ {
+ mFramebufferNameSpace.insert(framebuffer, new Framebuffer());
+ }
}
mState.readFramebuffer = framebuffer;
@@ -1223,7 +1230,14 @@
{
if(!getFramebuffer(framebuffer))
{
- mFramebufferNameSpace.insert(framebuffer, new Framebuffer());
+ if(framebuffer == 0)
+ {
+ mFramebufferNameSpace.insert(framebuffer, new DefaultFramebuffer());
+ }
+ else
+ {
+ mFramebufferNameSpace.insert(framebuffer, new Framebuffer());
+ }
}
mState.drawFramebuffer = framebuffer;
diff --git a/src/OpenGL/libGLESv2/Framebuffer.cpp b/src/OpenGL/libGLESv2/Framebuffer.cpp
index 174c952..e5a621e 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.cpp
+++ b/src/OpenGL/libGLESv2/Framebuffer.cpp
@@ -39,8 +39,8 @@
mDepthbufferType = GL_NONE;
mStencilbufferType = GL_NONE;
- readBuffer = GL_BACK;
- drawBuffer[0] = GL_BACK;
+ readBuffer = GL_COLOR_ATTACHMENT0;
+ drawBuffer[0] = GL_COLOR_ATTACHMENT0;
for(int i = 1; i < MAX_COLOR_ATTACHMENTS; ++i)
{
drawBuffer[i] = GL_NONE;
@@ -678,12 +678,20 @@
}
}
+DefaultFramebuffer::DefaultFramebuffer()
+{
+ readBuffer = GL_BACK;
+ drawBuffer[0] = GL_BACK;
+}
+
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
{
GLenum defaultRenderbufferType = egl::getClientVersion() < 3 ? GL_RENDERBUFFER : GL_FRAMEBUFFER_DEFAULT;
mColorbufferPointer[0] = new Renderbuffer(0, colorbuffer);
mColorbufferType[0] = defaultRenderbufferType;
+ readBuffer = GL_BACK;
+ drawBuffer[0] = GL_BACK;
for(int i = 1; i < MAX_COLOR_ATTACHMENTS; i++)
{
mColorbufferPointer[i] = nullptr;
diff --git a/src/OpenGL/libGLESv2/Framebuffer.h b/src/OpenGL/libGLESv2/Framebuffer.h
index 8f1251d..cbae1e3 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.h
+++ b/src/OpenGL/libGLESv2/Framebuffer.h
@@ -110,6 +110,7 @@
class DefaultFramebuffer : public Framebuffer
{
public:
+ DefaultFramebuffer();
DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
bool isDefaultFramebuffer() const override { return true; }