Bug 1303879 - FramebufferTexture2D doesn't always accept DEPTH_STENCIL. - r=mtseng
MozReview-Commit-ID: 4f4r3CtmPde
--- 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);