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; }