| Index: gpu/command_buffer/service/texture_manager.h
|
| diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
|
| index dc1cd7f3bff7866958977aade630604219f0b04d..f0f5b6ad8ffebf70fc0ff79220aca4f7fb8f82fd 100644
|
| --- a/gpu/command_buffer/service/texture_manager.h
|
| +++ b/gpu/command_buffer/service/texture_manager.h
|
| @@ -5,6 +5,7 @@
|
| #ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
|
| #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
|
|
|
| +#include <list>
|
| #include <string>
|
| #include <vector>
|
| #include "base/basictypes.h"
|
| @@ -15,6 +16,7 @@
|
| #include "gpu/command_buffer/service/gl_utils.h"
|
| #include "gpu/command_buffer/service/memory_tracking.h"
|
| #include "gpu/gpu_export.h"
|
| +#include "ui/gl/async_pixel_transfer_delegate.h"
|
| #include "ui/gl/gl_image.h"
|
|
|
| namespace gpu {
|
| @@ -178,6 +180,17 @@ class GPU_EXPORT TextureManager {
|
| return stream_texture_;
|
| }
|
|
|
| + gfx::AsyncPixelTransferState* GetAsyncTransferState() const {
|
| + return async_transfer_state_.get();
|
| + }
|
| + void SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState> state) {
|
| + async_transfer_state_ = state.Pass();
|
| + }
|
| + bool AsyncTransferIsInProgress() {
|
| + return async_transfer_state_ &&
|
| + async_transfer_state_->TransferIsInProgress();
|
| + }
|
| +
|
| void SetImmutable(bool immutable) {
|
| immutable_ = immutable;
|
| }
|
| @@ -189,6 +202,11 @@ class GPU_EXPORT TextureManager {
|
| // Whether a particular level/face is cleared.
|
| bool IsLevelCleared(GLenum target, GLint level);
|
|
|
| + // Whether the texture has been defined
|
| + bool IsDefined() {
|
| + return estimated_size() > 0;
|
| + }
|
| +
|
| private:
|
| friend class TextureManager;
|
| friend class base::RefCounted<TextureInfo>;
|
| @@ -341,6 +359,9 @@ class GPU_EXPORT TextureManager {
|
| // Whether this is a special streaming texture.
|
| bool stream_texture_;
|
|
|
| + // State to facilitate async transfers on this texture.
|
| + scoped_ptr<gfx::AsyncPixelTransferState> async_transfer_state_;
|
| +
|
| // Whether the texture is immutable and no further changes to the format
|
| // or dimensions of the texture object can be made.
|
| bool immutable_;
|
| @@ -530,6 +551,13 @@ class GPU_EXPORT TextureManager {
|
| GLint level,
|
| std::string* signature) const;
|
|
|
| + // Transfers added will get their TextureInfo updated at the same time
|
| + // the async transfer is bound to the real texture.
|
| + void AddPendingAsyncPixelTransfer(
|
| + base::WeakPtr<gfx::AsyncPixelTransferState> state, TextureInfo* info);
|
| + void BindFinishedAsyncPixelTransfers(bool* texture_dirty,
|
| + bool* framebuffer_dirty);
|
| +
|
| private:
|
| // Helper for Initialize().
|
| TextureInfo::Ref CreateDefaultAndBlackTextures(
|
| @@ -572,6 +600,14 @@ class GPU_EXPORT TextureManager {
|
| // The default textures for each target (texture name = 0)
|
| TextureInfo::Ref default_textures_[kNumDefaultTextures];
|
|
|
| + // Async texture allocations which haven't been bound to their textures
|
| + // yet. This facilitates updating the TextureInfo at the same time the
|
| + // real texture data is bound.
|
| + typedef std::pair<base::WeakPtr<gfx::AsyncPixelTransferState>,
|
| + TextureInfo*> PendingAsyncTransfer;
|
| + typedef std::list<PendingAsyncTransfer> PendingAsyncTransferList;
|
| + PendingAsyncTransferList pending_async_transfers_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(TextureManager);
|
| };
|
|
|
|
|