Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
index 9240884ee8718c62410b7b6dca462d0dcfef5044..ae97369ef92a46a4ddbb3a727b0e85266d7ba6bc 100644 |
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -4862,7 +4862,24 @@ bool WebGLRenderingContextBase::canUseTexImageByGPU( |
return true; |
} |
+SnapshotReason WebGLRenderingContextBase::functionIDToSnapshotReason( |
+ TexImageFunctionID id) { |
+ switch (id) { |
+ case TexImage2D: |
+ return SnapshotReasonWebGLTexImage2D; |
+ case TexSubImage2D: |
+ return SnapshotReasonWebGLTexSubImage2D; |
+ case TexImage3D: |
+ return SnapshotReasonWebGLTexImage3D; |
+ case TexSubImage3D: |
+ return SnapshotReasonWebGLTexSubImage3D; |
+ } |
+ NOTREACHED(); |
+ return SnapshotReasonUnknown; |
+} |
+ |
void WebGLRenderingContextBase::texImageCanvasByGPU( |
+ TexImageFunctionID functionID, |
HTMLCanvasElement* canvas, |
GLuint targetTexture, |
GLenum targetInternalformat, |
@@ -4875,9 +4892,10 @@ void WebGLRenderingContextBase::texImageCanvasByGPU( |
ImageBuffer* buffer = canvas->buffer(); |
if (buffer && |
!buffer->copyToPlatformTexture( |
- contextGL(), targetTexture, targetInternalformat, targetType, |
- targetLevel, m_unpackPremultiplyAlpha, m_unpackFlipY, |
- IntPoint(xoffset, yoffset), sourceSubRectangle)) { |
+ functionIDToSnapshotReason(functionID), contextGL(), targetTexture, |
+ targetInternalformat, targetType, targetLevel, |
+ m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(xoffset, yoffset), |
+ sourceSubRectangle)) { |
NOTREACHED(); |
} |
} else { |
@@ -4894,7 +4912,7 @@ void WebGLRenderingContextBase::texImageCanvasByGPU( |
} |
void WebGLRenderingContextBase::texImageByGPU( |
- TexImageByGPUType functionType, |
+ TexImageFunctionID functionID, |
WebGLTexture* texture, |
GLenum target, |
GLint level, |
@@ -4916,7 +4934,7 @@ void WebGLRenderingContextBase::texImageByGPU( |
GLenum targetInternalformat = internalformat; |
GLint targetLevel = level; |
bool possibleDirectCopy = false; |
- if (functionType == TexImage2DByGPU) { |
+ if (functionID == TexImage2D) { |
possibleDirectCopy = Extensions3DUtil::canUseCopyTextureCHROMIUM( |
target, internalformat, type, level); |
} |
@@ -4947,9 +4965,10 @@ void WebGLRenderingContextBase::texImageByGPU( |
} |
if (image->isCanvasElement()) { |
- texImageCanvasByGPU(static_cast<HTMLCanvasElement*>(image), targetTexture, |
- targetInternalformat, targetType, targetLevel, |
- copyXOffset, copyYOffset, sourceSubRectangle); |
+ texImageCanvasByGPU(functionID, static_cast<HTMLCanvasElement*>(image), |
+ targetTexture, targetInternalformat, targetType, |
+ targetLevel, copyXOffset, copyYOffset, |
+ sourceSubRectangle); |
} else { |
texImageBitmapByGPU(static_cast<ImageBitmap*>(image), targetTexture, |
targetInternalformat, targetType, targetLevel, |
@@ -4963,12 +4982,12 @@ void WebGLRenderingContextBase::texImageByGPU( |
contextGL()->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, |
GL_TEXTURE_2D, targetTexture, 0); |
contextGL()->BindTexture(texture->getTarget(), texture->object()); |
- if (functionType == TexImage2DByGPU) { |
+ if (functionID == TexImage2D) { |
contextGL()->CopyTexSubImage2D(target, level, 0, 0, 0, 0, width, height); |
- } else if (functionType == TexSubImage2DByGPU) { |
+ } else if (functionID == TexSubImage2D) { |
contextGL()->CopyTexSubImage2D(target, level, xoffset, yoffset, 0, 0, |
width, height); |
- } else if (functionType == TexSubImage3DByGPU) { |
+ } else if (functionID == TexSubImage3D) { |
contextGL()->CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, |
0, 0, width, height); |
} |
@@ -5034,7 +5053,10 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement( |
// 2D canvas has only FrontBuffer. |
texImageImpl(functionID, target, level, internalformat, xoffset, yoffset, |
zoffset, format, type, |
- canvas->copiedImage(FrontBuffer, PreferAcceleration).get(), |
+ canvas |
+ ->copiedImage(FrontBuffer, PreferAcceleration, |
+ functionIDToSnapshotReason(functionID)) |
+ .get(), |
WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, |
m_unpackPremultiplyAlpha, sourceSubRectangle, 1, 0); |
return; |
@@ -5050,11 +5072,11 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement( |
if (functionID == TexImage2D) { |
texImage2DBase(target, level, internalformat, sourceSubRectangle.width(), |
sourceSubRectangle.height(), 0, format, type, 0); |
- texImageByGPU(TexImage2DByGPU, texture, target, level, internalformat, |
- type, 0, 0, 0, canvas, adjustedSourceSubRectangle); |
+ texImageByGPU(functionID, texture, target, level, internalformat, type, 0, |
+ 0, 0, canvas, adjustedSourceSubRectangle); |
} else { |
- texImageByGPU(TexSubImage2DByGPU, texture, target, level, GL_RGBA, type, |
- xoffset, yoffset, 0, canvas, adjustedSourceSubRectangle); |
+ texImageByGPU(functionID, texture, target, level, GL_RGBA, type, xoffset, |
+ yoffset, 0, canvas, adjustedSourceSubRectangle); |
} |
} else { |
// 3D functions. |
@@ -5062,12 +5084,14 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement( |
// TODO(zmo): Implement GPU-to-GPU copy path (crbug.com/612542). |
// Note that code will also be needed to copy to layers of 3D |
// textures, and elements of 2D texture arrays. |
- texImageImpl(functionID, target, level, internalformat, xoffset, yoffset, |
- zoffset, format, type, |
- canvas->copiedImage(FrontBuffer, PreferAcceleration).get(), |
- WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, |
- m_unpackPremultiplyAlpha, sourceSubRectangle, depth, |
- unpackImageHeight); |
+ texImageImpl( |
+ functionID, target, level, internalformat, xoffset, yoffset, zoffset, |
+ format, type, canvas |
+ ->copiedImage(FrontBuffer, PreferAcceleration, |
+ functionIDToSnapshotReason(functionID)) |
+ .get(), |
+ WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, |
+ m_unpackPremultiplyAlpha, sourceSubRectangle, depth, unpackImageHeight); |
} |
} |
@@ -5175,7 +5199,8 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement( |
video->videoHeight(), 0, format, type, nullptr); |
if (imageBuffer->copyToPlatformTexture( |
- contextGL(), texture->object(), internalformat, type, level, |
+ functionIDToSnapshotReason(functionID), contextGL(), |
+ texture->object(), internalformat, type, level, |
m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(0, 0), |
IntRect(0, 0, video->videoWidth(), video->videoHeight()))) { |
return; |
@@ -5284,11 +5309,11 @@ void WebGLRenderingContextBase::texImageHelperImageBitmap( |
if (functionID == TexImage2D) { |
texImage2DBase(target, level, internalformat, width, height, 0, format, |
type, 0); |
- texImageByGPU(TexImage2DByGPU, texture, target, level, internalformat, |
- type, 0, 0, 0, bitmap, sourceSubRect); |
+ texImageByGPU(functionID, texture, target, level, internalformat, type, 0, |
+ 0, 0, bitmap, sourceSubRect); |
} else if (functionID == TexSubImage2D) { |
- texImageByGPU(TexSubImage2DByGPU, texture, target, level, GL_RGBA, type, |
- xoffset, yoffset, 0, bitmap, sourceSubRect); |
+ texImageByGPU(functionID, texture, target, level, GL_RGBA, type, xoffset, |
+ yoffset, 0, bitmap, sourceSubRect); |
} |
return; |
} |