| Index: gpu/command_buffer/service/renderbuffer_manager.cc
|
| diff --git a/gpu/command_buffer/service/renderbuffer_manager.cc b/gpu/command_buffer/service/renderbuffer_manager.cc
|
| index e842de14ac4befba972f10d4d6da88bd856c7305..f85f6c00263dc51f324aee9cf6c640447bf7d34d 100644
|
| --- a/gpu/command_buffer/service/renderbuffer_manager.cc
|
| +++ b/gpu/command_buffer/service/renderbuffer_manager.cc
|
| @@ -9,6 +9,7 @@
|
| #include "gpu/command_buffer/common/gles2_cmd_utils.h"
|
| #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
|
| #include "gpu/command_buffer/service/memory_tracking.h"
|
| +#include "ui/gl/gl_implementation.h"
|
|
|
| namespace gpu {
|
| namespace gles2 {
|
| @@ -36,8 +37,10 @@ RenderbufferManager::~RenderbufferManager() {
|
| }
|
|
|
| size_t RenderbufferManager::RenderbufferInfo::EstimatedSize() {
|
| - return width_ * height_ * samples_ *
|
| - GLES2Util::RenderbufferBytesPerPixel(internal_format_);
|
| + uint32 size = 0;
|
| + RenderbufferManager::ComputeEstimatedRenderbufferSize(
|
| + width_, height_, samples_, internal_format_, &size);
|
| + return size;
|
| }
|
|
|
| void RenderbufferManager::RenderbufferInfo::AddToSignature(
|
| @@ -143,6 +146,42 @@ bool RenderbufferManager::GetClientId(
|
| return false;
|
| }
|
|
|
| +bool RenderbufferManager::ComputeEstimatedRenderbufferSize(
|
| + int width, int height, int samples, int internal_format, uint32* size) {
|
| + DCHECK(size);
|
| +
|
| + uint32 temp = 0;
|
| + if (!SafeMultiplyUint32(width, height, &temp)) {
|
| + return false;
|
| + }
|
| + if (!SafeMultiplyUint32(temp, samples, &temp)) {
|
| + return false;
|
| + }
|
| + GLenum impl_format = InternalRenderbufferFormatToImplFormat(internal_format);
|
| + if (!SafeMultiplyUint32(
|
| + temp, GLES2Util::RenderbufferBytesPerPixel(impl_format), &temp)) {
|
| + return false;
|
| + }
|
| + *size = temp;
|
| + return true;
|
| +}
|
| +
|
| +GLenum RenderbufferManager::InternalRenderbufferFormatToImplFormat(
|
| + GLenum impl_format) {
|
| + if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
|
| + switch (impl_format) {
|
| + case GL_DEPTH_COMPONENT16:
|
| + return GL_DEPTH_COMPONENT;
|
| + case GL_RGBA4:
|
| + case GL_RGB5_A1:
|
| + return GL_RGBA;
|
| + case GL_RGB565:
|
| + return GL_RGB;
|
| + }
|
| + }
|
| + return impl_format;
|
| +}
|
| +
|
| } // namespace gles2
|
| } // namespace gpu
|
|
|
|
|