Bug 1303879 - FramebufferTexture2D doesn't always accept DEPTH_STENCIL. - r=mtseng draft
authorJeff Gilbert <jgilbert@mozilla.com>
Thu, 01 Sep 2016 13:52:27 -0700
changeset 415741 9d087a768ec052f35b593befe802fadf229d2a88
parent 415740 58ab10cfe0dfb0140a7792034eb88385990c9c88
child 415742 402774b640b48e6bb59abf9f16fac5268028f6e1
push id29953
push userbmo:jgilbert@mozilla.com
push dateTue, 20 Sep 2016 23:29:17 +0000
reviewersmtseng
bugs1303879
milestone51.0a1
Bug 1303879 - FramebufferTexture2D doesn't always accept DEPTH_STENCIL. - r=mtseng MozReview-Commit-ID: 4f4r3CtmPde
dom/canvas/WebGLFramebuffer.cpp
--- a/dom/canvas/WebGLFramebuffer.cpp
+++ b/dom/canvas/WebGLFramebuffer.cpp
@@ -365,26 +365,39 @@ WebGLFBAttachPoint::Resolve(gl::GLContex
         return;
     }
     MOZ_ASSERT(Texture());
 
     MOZ_ASSERT(gl == Texture()->mContext->GL());
 
     const auto& texName = Texture()->mGLName;
 
+    ////
+
+    const auto fnAttach2D = [&](GLenum attachmentPoint) {
+        gl->fFramebufferTexture2D(target.get(), attachmentPoint, mTexImageTarget.get(),
+                                  texName, mTexImageLevel);
+    };
+
+    ////
+
     switch (mTexImageTarget.get()) {
     case LOCAL_GL_TEXTURE_2D:
     case LOCAL_GL_TEXTURE_CUBE_MAP_POSITIVE_X:
     case LOCAL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
     case LOCAL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
     case LOCAL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
     case LOCAL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
     case LOCAL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
-        gl->fFramebufferTexture2D(target.get(), mAttachmentPoint, mTexImageTarget.get(),
-                                  texName, mTexImageLevel);
+        if (mAttachmentPoint == LOCAL_GL_DEPTH_STENCIL_ATTACHMENT) {
+            fnAttach2D(LOCAL_GL_DEPTH_ATTACHMENT);
+            fnAttach2D(LOCAL_GL_STENCIL_ATTACHMENT);
+        } else {
+            fnAttach2D(mAttachmentPoint);
+        }
         break;
 
     case LOCAL_GL_TEXTURE_2D_ARRAY:
     case LOCAL_GL_TEXTURE_3D:
         // If we have fFramebufferTextureLayer, we can rely on having
         // DEPTH_STENCIL_ATTACHMENT.
         gl->fFramebufferTextureLayer(target.get(), mAttachmentPoint,
                                      texName, mTexImageLevel, mTexImageLayer);