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

Unified Diff: gpu/command_buffer/service/texture_manager.cc

Issue 24152009: Allow rendering from non-stream GL_TEXTURE_EXTERNAL_OES (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@git-svn
Patch Set: eead63fe Rebase. Created 7 years, 3 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: 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 deb8c8e66458cb11b6fe7d8b835327702012c62a..9684493b5c6111bfe7f7699f45b010e2ae68ced3 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -198,11 +198,7 @@ Texture::CanRenderCondition Texture::GetCanRenderCondition() const {
if (target_ == 0)
return CAN_RENDER_ALWAYS;
- if (target_ == GL_TEXTURE_EXTERNAL_OES) {
- if (!IsStreamTexture()) {
- return CAN_RENDER_NEVER;
- }
- } else {
+ if (target_ != GL_TEXTURE_EXTERNAL_OES) {
if (level_infos_.empty()) {
return CAN_RENDER_NEVER;
}
@@ -294,7 +290,8 @@ bool Texture::MarkMipmapsGenerated(
GLsizei depth = info1.depth;
GLenum target = target_ == GL_TEXTURE_2D ? GL_TEXTURE_2D :
FaceIndexToGLTarget(ii);
- int num_mips = TextureManager::ComputeMipMapCount(width, height, depth);
+ int num_mips =
+ TextureManager::ComputeMipMapCount(target_, width, height, depth);
for (int level = 1; level < num_mips; ++level) {
width = std::max(1, width >> 1);
height = std::max(1, height >> 1);
@@ -390,7 +387,7 @@ void Texture::UpdateCleared() {
const Texture::LevelInfo& first_face = level_infos_[0][0];
int levels_needed = TextureManager::ComputeMipMapCount(
- first_face.width, first_face.height, first_face.depth);
+ target_, first_face.width, first_face.height, first_face.depth);
bool cleared = true;
for (size_t ii = 0; ii < level_infos_.size(); ++ii) {
for (GLint jj = 0; jj < levels_needed; ++jj) {
@@ -643,7 +640,7 @@ void Texture::Update(const FeatureInfo* feature_info) {
// Update texture_complete and cube_complete status.
const Texture::LevelInfo& first_face = level_infos_[0][0];
int levels_needed = TextureManager::ComputeMipMapCount(
- first_face.width, first_face.height, first_face.depth);
+ target_, first_face.width, first_face.height, first_face.depth);
texture_complete_ =
max_level_set_ >= (levels_needed - 1) && max_level_set_ >= 0;
cube_complete_ = (level_infos_.size() == 6) &&
@@ -708,7 +705,7 @@ bool Texture::ClearRenderableLevels(GLES2Decoder* decoder) {
const Texture::LevelInfo& first_face = level_infos_[0][0];
int levels_needed = TextureManager::ComputeMipMapCount(
- first_face.width, first_face.height, first_face.depth);
+ target_, first_face.width, first_face.height, first_face.depth);
for (size_t ii = 0; ii < level_infos_.size(); ++ii) {
for (GLint jj = 0; jj < levels_needed; ++jj) {
@@ -824,13 +821,12 @@ TextureRef::~TextureRef() {
manager_ = NULL;
}
-TextureManager::TextureManager(
- MemoryTracker* memory_tracker,
- FeatureInfo* feature_info,
- GLint max_texture_size,
- GLint max_cube_map_texture_size)
- : memory_tracker_managed_(
- new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)),
+TextureManager::TextureManager(MemoryTracker* memory_tracker,
+ FeatureInfo* feature_info,
+ GLint max_texture_size,
+ GLint max_cube_map_texture_size)
+ : memory_tracker_managed_(new MemoryTypeTracker(memory_tracker,
+ MemoryTracker::kManaged)),
memory_tracker_unmanaged_(
new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)),
feature_info_(feature_info),
@@ -838,10 +834,12 @@ TextureManager::TextureManager(
stream_texture_manager_(NULL),
max_texture_size_(max_texture_size),
max_cube_map_texture_size_(max_cube_map_texture_size),
- max_levels_(ComputeMipMapCount(max_texture_size,
+ max_levels_(ComputeMipMapCount(GL_TEXTURE_2D,
+ max_texture_size,
max_texture_size,
max_texture_size)),
- max_cube_map_levels_(ComputeMipMapCount(max_cube_map_texture_size,
+ max_cube_map_levels_(ComputeMipMapCount(GL_TEXTURE_CUBE_MAP,
+ max_cube_map_texture_size,
max_cube_map_texture_size,
max_cube_map_texture_size)),
num_unrenderable_textures_(0),
@@ -1184,9 +1182,17 @@ Texture* TextureManager::GetTextureForServiceId(GLuint service_id) const {
return NULL;
}
-GLsizei TextureManager::ComputeMipMapCount(
- GLsizei width, GLsizei height, GLsizei depth) {
- return 1 + base::bits::Log2Floor(std::max(std::max(width, height), depth));
+GLsizei TextureManager::ComputeMipMapCount(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth) {
+ switch (target) {
+ case GL_TEXTURE_EXTERNAL_OES:
+ return 1;
+ default:
+ return 1 +
+ base::bits::Log2Floor(std::max(std::max(width, height), depth));
+ }
}
void TextureManager::SetLevelImage(

Powered by Google App Engine
This is Rietveld 408576698