Implement the DEPTH_STENCIL attachment point for FBOs.

Trac #23469

Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index e872131..47d23bf 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -4170,6 +4170,12 @@
                   case GL_DEPTH_ATTACHMENT:
                   case GL_STENCIL_ATTACHMENT:
                     break;
+                  case GL_DEPTH_STENCIL_ATTACHMENT:
+                    if (context->getClientVersion() < 3)
+                    {
+                        return gl::error(GL_INVALID_ENUM);
+                    }
+                    break;
                   default:
                     return gl::error(GL_INVALID_ENUM);
                 }
@@ -4266,8 +4272,9 @@
             {
                 switch (attachment)
                 {
-                  case GL_DEPTH_ATTACHMENT:   framebuffer->setDepthbuffer(textarget, texture);   break;
-                  case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
+                  case GL_DEPTH_ATTACHMENT:         framebuffer->setDepthbuffer(textarget, texture);        break;
+                  case GL_STENCIL_ATTACHMENT:       framebuffer->setStencilbuffer(textarget, texture);      break;
+                  case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture); break;
                 }
             }
         }
@@ -5065,6 +5072,17 @@
                     attachmentType = framebuffer->getStencilbufferType();
                     attachmentHandle = framebuffer->getStencilbufferHandle();
                     break;
+                  case GL_DEPTH_STENCIL_ATTACHMENT:
+                    if (context->getClientVersion() < 3)
+                    {
+                        return gl::error(GL_INVALID_ENUM);
+                    }
+                    if (framebuffer->getDepthbufferHandle() != framebuffer->getStencilbufferHandle())
+                    {
+                        return gl::error(GL_INVALID_OPERATION);
+                    }
+                    attachmentType = framebuffer->getDepthStencilbufferType();
+                    attachmentHandle = framebuffer->getDepthStencilbufferHandle();
                   default: return gl::error(GL_INVALID_ENUM);
                 }
             }