Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1157)

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp

Issue 1684973002: Remove blink side texture status caching. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp b/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
index 3d4f5cc6be3c5e9879173aa8a671a3f01d2db2d3..d5ed65e8c94d2410baf1004c2ba7131ea7cc37f4 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
@@ -44,12 +44,6 @@ private:
explicit WebGLRenderbufferAttachment(WebGLRenderbuffer*);
WebGLRenderbufferAttachment() { }
- GLsizei width() const override;
- GLsizei height() const override;
- GLsizei depth() const override;
- GLenum format() const override;
- GLenum type() const override;
- bool isCubeComplete() const override;
WebGLSharedObject* object() const override;
bool isSharedObject(WebGLSharedObject*) const override;
bool valid() const override;
@@ -76,26 +70,6 @@ WebGLRenderbufferAttachment::WebGLRenderbufferAttachment(WebGLRenderbuffer* rend
{
}
-GLsizei WebGLRenderbufferAttachment::width() const
-{
- return m_renderbuffer->width();
-}
-
-GLsizei WebGLRenderbufferAttachment::height() const
-{
- return m_renderbuffer->height();
-}
-
-GLsizei WebGLRenderbufferAttachment::depth() const
-{
- return 1;
-}
-
-GLenum WebGLRenderbufferAttachment::format() const
-{
- return m_renderbuffer->internalFormat();
-}
-
WebGLSharedObject* WebGLRenderbufferAttachment::object() const
{
return m_renderbuffer->object() ? m_renderbuffer.get() : 0;
@@ -127,17 +101,6 @@ void WebGLRenderbufferAttachment::unattach(WebGraphicsContext3D* context, GLenum
context->framebufferRenderbuffer(target, attachment, GL_RENDERBUFFER, 0);
}
-GLenum WebGLRenderbufferAttachment::type() const
-{
- return WebGLTexture::getValidTypeForInternalFormat(m_renderbuffer->internalFormat());
-}
-
-bool WebGLRenderbufferAttachment::isCubeComplete() const
-{
- ASSERT_NOT_REACHED();
- return false;
-}
-
class WebGLTextureAttachment final : public WebGLFramebuffer::WebGLAttachment {
public:
static WebGLFramebuffer::WebGLAttachment* create(WebGLTexture*, GLenum target, GLint level, GLint layer);
@@ -148,12 +111,6 @@ private:
WebGLTextureAttachment(WebGLTexture*, GLenum target, GLint level, GLint layer);
WebGLTextureAttachment() { }
- GLsizei width() const override;
- GLsizei height() const override;
- GLsizei depth() const override;
- GLenum format() const override;
- GLenum type() const override;
- bool isCubeComplete() const override;
WebGLSharedObject* object() const override;
bool isSharedObject(WebGLSharedObject*) const override;
bool valid() const override;
@@ -186,26 +143,6 @@ WebGLTextureAttachment::WebGLTextureAttachment(WebGLTexture* texture, GLenum tar
{
}
-GLsizei WebGLTextureAttachment::width() const
-{
- return m_texture->getWidth(m_target, m_level);
-}
-
-GLsizei WebGLTextureAttachment::height() const
-{
- return m_texture->getHeight(m_target, m_level);
-}
-
-GLsizei WebGLTextureAttachment::depth() const
-{
- return m_texture->getDepth(m_target, m_level);
-}
-
-GLenum WebGLTextureAttachment::format() const
-{
- return m_texture->getInternalFormat(m_target, m_level);
-}
-
WebGLSharedObject* WebGLTextureAttachment::object() const
{
return m_texture->object() ? m_texture.get() : 0;
@@ -246,95 +183,6 @@ void WebGLTextureAttachment::unattach(WebGraphicsContext3D* context, GLenum targ
}
}
-GLenum WebGLTextureAttachment::type() const
-{
- return m_texture->getType(m_target, m_level);
-}
-
-bool WebGLTextureAttachment::isCubeComplete() const
-{
- return m_texture->isCubeComplete();
-}
-
-bool isColorRenderable(GLenum internalformat, bool includesFloat)
-{
- switch (internalformat) {
- case GL_RGB:
- case GL_RGBA:
- case GL_SRGB_ALPHA_EXT:
- case GL_R8:
- case GL_R8UI:
- case GL_R8I:
- case GL_R16UI:
- case GL_R16I:
- case GL_R32UI:
- case GL_R32I:
- case GL_RG8:
- case GL_RG8UI:
- case GL_RG8I:
- case GL_RG16UI:
- case GL_RG16I:
- case GL_RG32UI:
- case GL_RG32I:
- case GL_RGB8:
- case GL_RGB565:
- case GL_RGBA8:
- case GL_SRGB8_ALPHA8:
- case GL_RGB5_A1:
- case GL_RGBA4:
- case GL_RGB10_A2:
- case GL_RGBA8UI:
- case GL_RGBA8I:
- case GL_RGB10_A2UI:
- case GL_RGBA16UI:
- case GL_RGBA16I:
- case GL_RGBA32UI:
- case GL_RGBA32I:
- return true;
- case GL_R16F:
- case GL_RG16F:
- case GL_RGBA16F:
- case GL_R32F:
- case GL_RG32F:
- case GL_RGBA32F:
- case GL_R11F_G11F_B10F:
- return includesFloat;
- default:
- return false;
- }
-}
-
-bool isDepthRenderable(GLenum internalformat, bool includesDepthStencil)
-{
- switch (internalformat) {
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_COMPONENT16:
- case GL_DEPTH_COMPONENT24:
- case GL_DEPTH_COMPONENT32F:
- return true;
- case GL_DEPTH_STENCIL:
- case GL_DEPTH24_STENCIL8:
- case GL_DEPTH32F_STENCIL8:
- return includesDepthStencil;
- default:
- return false;
- }
-}
-
-bool isStencilRenderable(GLenum internalformat, bool includesDepthStencil)
-{
- switch (internalformat) {
- case GL_STENCIL_INDEX8:
- return true;
- case GL_DEPTH_STENCIL:
- case GL_DEPTH24_STENCIL8:
- case GL_DEPTH32F_STENCIL8:
- return includesDepthStencil;
- default:
- return false;
- }
-}
-
} // anonymous namespace
WebGLFramebuffer::WebGLAttachment::WebGLAttachment()
@@ -412,55 +260,6 @@ WebGLSharedObject* WebGLFramebuffer::getAttachmentObject(GLenum attachment) cons
return attachmentObject ? attachmentObject->object() : nullptr;
}
-bool WebGLFramebuffer::isAttachmentComplete(WebGLAttachment* attachedObject, GLenum attachment, const char** reason) const
-{
- ASSERT(attachedObject && attachedObject->valid());
- ASSERT(reason);
-
- GLenum internalformat = attachedObject->format();
-
- switch (attachment) {
- case GL_DEPTH_ATTACHMENT:
- if (!isDepthRenderable(internalformat, context()->isWebGL2OrHigher())) {
- *reason = "the internalformat of the attached image is not depth-renderable";
- return false;
- }
- break;
- case GL_STENCIL_ATTACHMENT:
- if (!isStencilRenderable(internalformat, context()->isWebGL2OrHigher())) {
- *reason = "the internalformat of the attached image is not stencil-renderable";
- return false;
- }
- break;
- case GL_DEPTH_STENCIL_ATTACHMENT:
- ASSERT(!context()->isWebGL2OrHigher());
- if (internalformat != GL_DEPTH_STENCIL_OES) {
- *reason = "the internalformat of the attached image is not DEPTH_STENCIL";
- return false;
- }
- break;
- default:
- ASSERT(attachment == GL_COLOR_ATTACHMENT0 || (attachment > GL_COLOR_ATTACHMENT0 && attachment < static_cast<GLenum>(GL_COLOR_ATTACHMENT0 + context()->maxColorAttachments())));
- if (!isColorRenderable(internalformat, context()->extensionEnabled(EXTColorBufferFloatName))) {
- *reason = "the internalformat of the attached image is not color-renderable";
- return false;
- }
- break;
- }
-
- if (!attachedObject->width() || !attachedObject->height()) {
- *reason = "attachment has a 0 dimension";
- return false;
- }
-
- if (attachedObject->object()->isTexture() && !attachedObject->isCubeComplete()) {
- *reason = "attachment is not cube complete";
- return false;
- }
-
- return true;
-}
-
WebGLFramebuffer::WebGLAttachment* WebGLFramebuffer::getAttachment(GLenum attachment) const
{
const AttachmentMap::const_iterator it = m_attachments.find(attachment);
@@ -515,82 +314,6 @@ void WebGLFramebuffer::removeAttachmentFromBoundFramebuffer(GLenum target, WebGL
}
}
-GLenum WebGLFramebuffer::colorBufferFormat() const
-{
- if (!m_object)
- return 0;
- WebGLAttachment* attachment = getAttachment(GL_COLOR_ATTACHMENT0);
- if (!attachment)
- return 0;
- return attachment->format();
-}
-
-GLenum WebGLFramebuffer::checkStatus(const char** reason) const
-{
- unsigned count = 0;
- GLsizei width = 0, height = 0, depth = 0;
- WebGLAttachment* depthAttachment = nullptr;
- WebGLAttachment* stencilAttachment = nullptr;
- WebGLAttachment* depthStencilAttachment = nullptr;
- bool isWebGL2OrHigher = context()->isWebGL2OrHigher();
- for (const auto& it : m_attachments) {
- WebGLAttachment* attachment = it.value.get();
- if (!isAttachmentComplete(attachment, it.key, reason))
- return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
- if (!attachment->valid()) {
- *reason = "attachment is not valid";
- return GL_FRAMEBUFFER_UNSUPPORTED;
- }
- if (!attachment->format()) {
- *reason = "attachment is an unsupported format";
- return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
- }
- switch (it.key) {
- case GL_DEPTH_ATTACHMENT:
- depthAttachment = attachment;
- break;
- case GL_STENCIL_ATTACHMENT:
- stencilAttachment = attachment;
- break;
- case GL_DEPTH_STENCIL_ATTACHMENT:
- depthStencilAttachment = attachment;
- break;
- }
- // Note: In GLES 3, images for a framebuffer need not to have the same dimensions to be framebuffer complete.
- // However, in Direct3D 11, on top of which OpenGL ES 3 behavior is emulated in Windows, all render targets
- // must have the same size in all dimensions. In order to have consistent WebGL 2 behaviors across platforms,
- // we generate FRAMEBUFFER_INCOMPLETE_DIMENSIONS in this situation.
- if (!count) {
- width = attachment->width();
- height = attachment->height();
- depth = attachment->depth();
- } else {
- if (width != attachment->width() || height != attachment->height() || depth != attachment->depth()) {
- *reason = "attachments do not have the same dimensions";
- return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
- }
- }
- ++count;
- }
- if (!count) {
- *reason = "no attachments";
- return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
- }
- // WebGL 1 specific: no conflicting DEPTH/STENCIL/DEPTH_STENCIL attachments.
- if (!isWebGL2OrHigher
- && ((depthStencilAttachment && (depthAttachment || stencilAttachment))
- || (depthAttachment && stencilAttachment))) {
- *reason = "conflicting DEPTH/STENCIL/DEPTH_STENCIL attachments";
- return GL_FRAMEBUFFER_UNSUPPORTED;
- }
- if (isWebGL2OrHigher
- && (depthAttachment && stencilAttachment && depthAttachment->object() != stencilAttachment->object())) {
- *reason = "both DEPTH/STENCIL attachments are present and not the same image";
- return GL_FRAMEBUFFER_UNSUPPORTED;
- }
- return GL_FRAMEBUFFER_COMPLETE;
-}
-
GLenum WebGLFramebuffer::checkDepthStencilStatus(const char** reason) const
{
if (context()->isWebGL2OrHigher())
@@ -698,20 +421,6 @@ GLenum WebGLFramebuffer::getDrawBuffer(GLenum drawBuffer)
return GL_NONE;
}
-bool WebGLFramebuffer::getReadBufferFormatAndType(GLenum* format, GLenum* type) const
-{
- if (m_readBuffer == GL_NONE)
- return false;
- WebGLAttachment* image = getAttachment(m_readBuffer);
- if (!image)
- return false;
- if (format)
- *format = image->format();
- if (type)
- *type = image->type();
- return true;
-}
-
DEFINE_TRACE(WebGLFramebuffer)
{
visitor->trace(m_attachments);

Powered by Google App Engine
This is Rietveld 408576698