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

Unified Diff: gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h

Issue 793693003: Tile Compression (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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/async_pixel_transfer_manager_compressed.h
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h b/gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h
new file mode 100644
index 0000000000000000000000000000000000000000..6c28d1ad9d1ff113f7593e3845d87232860befb7
--- /dev/null
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h
@@ -0,0 +1,89 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_
+#define GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_
+
+#include <list>
+
+#include "base/memory/ref_counted.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
+
+namespace gpu {
+
+class AsyncPixelTransferManagerEGL;
+class AsyncPixelTransferManagerIdle;
+
+// This AsyncPixelTransferManager implementation enables the dynamic switching
+// between AsyncPixelTransferManagerEGL and AsyncPixelTransferManagerIdle for
+// non-compressed and compressed texture uploads respectively. This is needed
+// when both compressed and non-compressed asynchronous texture uploads are
+// performed if one wants to use the faster EGL upload path when possible.
+class AsyncPixelTransferManagerCompressed : public AsyncPixelTransferManager {
+ public:
+ AsyncPixelTransferManagerCompressed();
+ virtual ~AsyncPixelTransferManagerCompressed();
+
+ // AsyncPixelTransferManager implementation:
+ void BindCompletedAsyncTransfers() override;
+ void AsyncNotifyCompletion(
+ const AsyncMemoryParams& mem_params,
+ AsyncPixelTransferCompletionObserver* observer) override;
+ uint32 GetTextureUploadCount() override;
+ base::TimeDelta GetTotalTextureUploadTime() override;
+ void ProcessMorePendingTransfers() override;
+ bool NeedsProcessMorePendingTransfers() override;
+ void WaitAllAsyncTexImage2D() override;
+
+ enum Mode {
+ MODE_EGL,
+ MODE_IDLE,
+ };
+
+ void SwitchMode(enum Mode new_mode);
+
+ Mode mode() const { return mode_; }
+
+ struct SharedState {
+ SharedState();
+ ~SharedState();
+ typedef std::list<AsyncPixelTransferDelegate*> DelegateList;
+ DelegateList delegates;
+ };
+
+ SharedState& shared_state() { return shared_state_; }
+
+ private:
+ // AsyncPixelTransferManager implementation:
+ AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
+ gles2::TextureRef* ref,
+ const AsyncTexImage2DParams& define_params) override;
+ AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
+ gles2::TextureRef* ref,
+ const AsyncCompressedTexImage2DParams& define_params) override;
+
+ AsyncPixelTransferManager* current_manager() const {
+ switch (mode_) {
+ case MODE_EGL:
+ return egl_manager_.get();
+ case MODE_IDLE:
+ return idle_manager_.get();
+ }
+ NOTREACHED();
+ return NULL;
+ }
+
+ enum Mode mode_;
+
+ scoped_ptr<AsyncPixelTransferManagerEGL> egl_manager_;
+ scoped_ptr<AsyncPixelTransferManagerIdle> idle_manager_;
+
+ SharedState shared_state_;
+};
+
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_

Powered by Google App Engine
This is Rietveld 408576698