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 9bdcb96aa03558104244d803701dcd75191c34fa..134977f060dd72f830937a56ef287589357d541e 100644 |
--- a/gpu/command_buffer/service/texture_manager.cc |
+++ b/gpu/command_buffer/service/texture_manager.cc |
@@ -22,6 +22,7 @@ |
#include "gpu/command_buffer/service/error_state.h" |
#include "gpu/command_buffer/service/feature_info.h" |
#include "gpu/command_buffer/service/framebuffer_manager.h" |
+#include "gpu/command_buffer/service/gl_stream_texture_image.h" |
#include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
#include "gpu/command_buffer/service/mailbox_manager.h" |
#include "gpu/command_buffer/service/memory_tracking.h" |
@@ -1327,10 +1328,11 @@ bool Texture::ClearLevel( |
return true; |
} |
-void Texture::SetLevelImage(GLenum target, |
- GLint level, |
- gl::GLImage* image, |
- ImageState state) { |
+void Texture::SetLevelImageInternal(GLenum target, |
+ GLint level, |
+ gl::GLImage* image, |
+ GLStreamTextureImage* stream_texture_image, |
+ ImageState state) { |
DCHECK_GE(level, 0); |
size_t face_index = GLES2Util::GLTargetToFaceIndex(target); |
DCHECK_LT(static_cast<size_t>(face_index), |
@@ -1342,15 +1344,29 @@ void Texture::SetLevelImage(GLenum target, |
DCHECK_EQ(info.target, target); |
DCHECK_EQ(info.level, level); |
info.image = image; |
+ info.stream_texture_image = stream_texture_image; |
info.image_state = state; |
UpdateCanRenderCondition(); |
UpdateHasImages(); |
} |
-gl::GLImage* Texture::GetLevelImage(GLint target, |
- GLint level, |
- ImageState* state) const { |
+void Texture::SetLevelImage(GLenum target, |
+ GLint level, |
+ gl::GLImage* image, |
+ ImageState state) { |
+ SetLevelImageInternal(target, level, image, nullptr, state); |
+} |
+ |
+void Texture::SetLevelStreamTextureImage(GLenum target, |
+ GLint level, |
+ GLStreamTextureImage* image, |
+ ImageState state) { |
+ SetLevelImageInternal(target, level, image, image, state); |
+} |
+ |
+const Texture::LevelInfo* Texture::GetLevelInfo(GLint target, |
+ GLint level) const { |
if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES && |
target != GL_TEXTURE_RECTANGLE_ARB) { |
return NULL; |
@@ -1360,19 +1376,37 @@ gl::GLImage* Texture::GetLevelImage(GLint target, |
if (level >= 0 && 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) { |
- if (state) |
- *state = info.image_state; |
- return info.image.get(); |
- } |
+ if (info.target != 0) |
+ return &info; |
} |
return NULL; |
} |
+gl::GLImage* Texture::GetLevelImage(GLint target, |
+ GLint level, |
+ ImageState* state) const { |
+ const LevelInfo* info = GetLevelInfo(target, level); |
+ if (!info) |
+ return nullptr; |
+ |
+ if (state) |
+ *state = info->image_state; |
+ return info->image.get(); |
+} |
+ |
gl::GLImage* Texture::GetLevelImage(GLint target, GLint level) const { |
return GetLevelImage(target, level, nullptr); |
} |
+GLStreamTextureImage* Texture::GetLevelStreamTextureImage(GLint target, |
+ GLint level) const { |
+ const LevelInfo* info = GetLevelInfo(target, level); |
+ if (!info) |
+ return nullptr; |
+ |
+ return info->stream_texture_image.get(); |
+} |
+ |
void Texture::DumpLevelMemory(base::trace_event::ProcessMemoryDump* pmd, |
uint64_t client_tracing_id, |
const std::string& dump_name) const { |
@@ -1868,6 +1902,15 @@ void TextureManager::SetLevelImage(TextureRef* ref, |
ref->texture()->SetLevelImage(target, level, image, state); |
} |
+void TextureManager::SetLevelStreamTextureImage(TextureRef* ref, |
+ GLenum target, |
+ GLint level, |
+ GLStreamTextureImage* image, |
+ Texture::ImageState state) { |
+ DCHECK(ref); |
+ ref->texture()->SetLevelStreamTextureImage(target, level, image, state); |
+} |
+ |
size_t TextureManager::GetSignatureSize() const { |
return sizeof(TextureTag) + sizeof(TextureSignature); |
} |