| Index: gpu/command_buffer/service/texture_manager.cc
|
| diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
|
| index db8921fac683097b285cb79ddbc29f4cf76e98da..cdbe773e028135614209564afef5ef26a693cb5b 100644
|
| --- a/gpu/command_buffer/service/texture_manager.cc
|
| +++ b/gpu/command_buffer/service/texture_manager.cc
|
| @@ -431,7 +431,8 @@ Texture::CanRenderCondition Texture::GetCanRenderCondition() const {
|
| return CAN_RENDER_NEVER;
|
| }
|
|
|
| - const Texture::LevelInfo& first_face = face_infos_[0].level_infos[0];
|
| + const Texture::LevelInfo& first_face =
|
| + face_infos_[0].level_infos[base_level_];
|
| if (first_face.width == 0 ||
|
| first_face.height == 0 ||
|
| first_face.depth == 0) {
|
| @@ -481,7 +482,7 @@ void Texture::AddToSignature(
|
| std::string* signature) const {
|
| DCHECK(feature_info);
|
| DCHECK(signature);
|
| - DCHECK_GE(level, 0);
|
| + DCHECK_GE(level, base_level_);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| DCHECK_LT(static_cast<size_t>(face_index),
|
| face_infos_.size());
|
| @@ -534,15 +535,16 @@ bool Texture::MarkMipmapsGenerated(
|
| }
|
| for (size_t ii = 0; ii < face_infos_.size(); ++ii) {
|
| const Texture::FaceInfo& face_info = face_infos_[ii];
|
| - const Texture::LevelInfo& level0_info = face_info.level_infos[0];
|
| + const Texture::LevelInfo& level0_info = face_info.level_infos[base_level_];
|
| GLsizei width = level0_info.width;
|
| GLsizei height = level0_info.height;
|
| GLsizei depth = level0_info.depth;
|
| GLenum target = target_ == GL_TEXTURE_2D ? GL_TEXTURE_2D :
|
| GLES2Util::IndexToGLFaceTarget(ii);
|
|
|
| - const GLsizei num_mips = face_info.num_mip_levels;
|
| - for (GLsizei level = 1; level < num_mips; ++level) {
|
| + for (GLsizei level = base_level_ + 1;
|
| + level < base_level_ + face_info.num_mip_levels;
|
| + ++level) {
|
| width = std::max(1, width >> 1);
|
| height = std::max(1, height >> 1);
|
| depth = std::max(1, depth >> 1);
|
| @@ -670,7 +672,7 @@ bool Texture::TextureMipComplete(const Texture::LevelInfo& level0_face,
|
| void Texture::SetLevelClearedRect(GLenum target,
|
| GLint level,
|
| const gfx::Rect& cleared_rect) {
|
| - DCHECK_GE(level, 0);
|
| + DCHECK_GE(level, base_level_);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| DCHECK_LT(static_cast<size_t>(face_index),
|
| face_infos_.size());
|
| @@ -683,7 +685,7 @@ void Texture::SetLevelClearedRect(GLenum target,
|
| }
|
|
|
| void Texture::SetLevelCleared(GLenum target, GLint level, bool cleared) {
|
| - DCHECK_GE(level, 0);
|
| + DCHECK_GE(level, base_level_);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| DCHECK_LT(static_cast<size_t>(face_index), face_infos_.size());
|
| DCHECK_LT(static_cast<size_t>(level),
|
| @@ -785,7 +787,7 @@ void Texture::SetLevelInfo(const FeatureInfo* feature_info,
|
| GLenum format,
|
| GLenum type,
|
| const gfx::Rect& cleared_rect) {
|
| - DCHECK_GE(level, 0);
|
| + DCHECK_GE(level, base_level_);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| DCHECK_LT(static_cast<size_t>(face_index),
|
| face_infos_.size());
|
| @@ -807,7 +809,7 @@ void Texture::SetLevelInfo(const FeatureInfo* feature_info,
|
| info.depth != depth ||
|
| info.format != format ||
|
| info.type != type) {
|
| - if (level == 0) {
|
| + if (level == base_level_) {
|
| // Calculate the mip level count.
|
| face_infos_[face_index].num_mip_levels =
|
| TextureManager::ComputeMipMapCount(target_, width, height, depth);
|
| @@ -864,7 +866,7 @@ bool Texture::ValidForTexture(
|
| GLsizei height,
|
| GLsizei depth) const {
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| - if (level >= 0 && face_index < face_infos_.size() &&
|
| + if (level >= base_level_ && face_index < face_infos_.size() &&
|
| static_cast<size_t>(level) < face_infos_[face_index].level_infos.size()) {
|
| const LevelInfo& info = face_infos_[face_index].level_infos[level];
|
| int32 max_x;
|
| @@ -889,7 +891,7 @@ bool Texture::GetLevelSize(
|
| DCHECK(width);
|
| DCHECK(height);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| - if (level >= 0 && face_index < face_infos_.size() &&
|
| + if (level >= base_level_ && face_index < face_infos_.size() &&
|
| static_cast<size_t>(level) < face_infos_[face_index].level_infos.size()) {
|
| const LevelInfo& info = face_infos_[face_index].level_infos[level];
|
| if (info.target != 0) {
|
| @@ -908,7 +910,7 @@ bool Texture::GetLevelType(
|
| DCHECK(type);
|
| DCHECK(internal_format);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| - if (level >= 0 && face_index < face_infos_.size() &&
|
| + if (level >= base_level_ && face_index < face_infos_.size() &&
|
| static_cast<size_t>(level) < face_infos_[face_index].level_infos.size()) {
|
| const LevelInfo& info = face_infos_[face_index].level_infos[level];
|
| if (info.target != 0) {
|
| @@ -1073,7 +1075,7 @@ void Texture::Update(const FeatureInfo* feature_info) {
|
|
|
| // Update texture_complete and cube_complete status.
|
| const Texture::FaceInfo& first_face = face_infos_[0];
|
| - const Texture::LevelInfo& first_level = first_face.level_infos[0];
|
| + const Texture::LevelInfo& first_level = first_face.level_infos[base_level_];
|
| const GLsizei levels_needed = first_face.num_mip_levels;
|
|
|
| texture_complete_ =
|
| @@ -1098,7 +1100,8 @@ void Texture::Update(const FeatureInfo* feature_info) {
|
| if (cube_complete_ && texture_level0_dirty_) {
|
| texture_level0_complete_ = true;
|
| for (size_t ii = 0; ii < face_infos_.size(); ++ii) {
|
| - const Texture::LevelInfo& level0 = face_infos_[ii].level_infos[0];
|
| + const Texture::LevelInfo& level0 =
|
| + face_infos_[ii].level_infos[base_level_];
|
| if (!TextureFaceComplete(first_level,
|
| ii,
|
| level0.target,
|
| @@ -1122,12 +1125,14 @@ void Texture::Update(const FeatureInfo* feature_info) {
|
| ii < face_infos_.size() && texture_mips_complete_;
|
| ++ii) {
|
| const Texture::FaceInfo& face_info = face_infos_[ii];
|
| - const Texture::LevelInfo& level0 = face_info.level_infos[0];
|
| - for (GLsizei jj = 1; jj < levels_needed; ++jj) {
|
| + const Texture::LevelInfo& level0 = face_info.level_infos[base_level_];
|
| + for (GLsizei jj = base_level_ + 1;
|
| + jj < base_level_ + levels_needed;
|
| + ++jj) {
|
| const Texture::LevelInfo& level_info = face_infos_[ii].level_infos[jj];
|
| if (!TextureMipComplete(level0,
|
| level_info.target,
|
| - jj,
|
| + jj - base_level_,
|
| level_info.internal_format,
|
| level_info.width,
|
| level_info.height,
|
| @@ -1152,7 +1157,9 @@ bool Texture::ClearRenderableLevels(GLES2Decoder* decoder) {
|
|
|
| for (size_t ii = 0; ii < face_infos_.size(); ++ii) {
|
| const Texture::FaceInfo& face_info = face_infos_[ii];
|
| - for (GLint jj = 0; jj < face_info.num_mip_levels; ++jj) {
|
| + for (GLint jj = base_level_;
|
| + jj < base_level_ + face_info.num_mip_levels;
|
| + ++jj) {
|
| const Texture::LevelInfo& info = face_info.level_infos[jj];
|
| if (info.target != 0) {
|
| if (!ClearLevel(decoder, info.target, jj)) {
|
| @@ -1253,7 +1260,7 @@ void Texture::SetLevelImage(
|
| GLenum target,
|
| GLint level,
|
| gfx::GLImage* image) {
|
| - DCHECK_GE(level, 0);
|
| + DCHECK_GE(level, base_level_);
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| DCHECK_LT(static_cast<size_t>(face_index),
|
| face_infos_.size());
|
| @@ -1279,7 +1286,7 @@ gfx::GLImage* Texture::GetLevelImage(GLint target, GLint level) const {
|
| }
|
|
|
| size_t face_index = GLES2Util::GLTargetToFaceIndex(target);
|
| - if (level >= 0 && face_index < face_infos_.size() &&
|
| + if (level >= base_level_ && face_index < face_infos_.size() &&
|
| static_cast<size_t>(level) < face_infos_[face_index].level_infos.size()) {
|
| const LevelInfo& info = face_infos_[face_index].level_infos[level];
|
| if (info.target != 0) {
|
|
|